diff --git a/runtime/Java/src/org/antlr/v4/runtime/atn/ATNDeserializer.java b/runtime/Java/src/org/antlr/v4/runtime/atn/ATNDeserializer.java index d39ae128e..f1cb7193c 100644 --- a/runtime/Java/src/org/antlr/v4/runtime/atn/ATNDeserializer.java +++ b/runtime/Java/src/org/antlr/v4/runtime/atn/ATNDeserializer.java @@ -379,7 +379,15 @@ public class ATNDeserializer { for (int i = 0; i < atn.lexerActions.length; i++) { LexerActionType actionType = LexerActionType.values()[toInt(data[p++])]; int data1 = toInt(data[p++]); + if (data1 == 0xFFFF) { + data1 = -1; + } + int data2 = toInt(data[p++]); + if (data2 == 0xFFFF) { + data2 = -1; + } + LexerAction lexerAction = lexerActionFactory(actionType, data1, data2); atn.lexerActions[i] = lexerAction; diff --git a/runtime/Java/src/org/antlr/v4/runtime/atn/ATNSerializer.java b/runtime/Java/src/org/antlr/v4/runtime/atn/ATNSerializer.java index 492bd7a99..fd4a36e7e 100644 --- a/runtime/Java/src/org/antlr/v4/runtime/atn/ATNSerializer.java +++ b/runtime/Java/src/org/antlr/v4/runtime/atn/ATNSerializer.java @@ -312,17 +312,21 @@ public class ATNSerializer { data.add(action.getActionType().ordinal()); switch (action.getActionType()) { case CHANNEL: - data.add(((LexerChannelAction)action).getChannel()); + int channel = ((LexerChannelAction)action).getChannel(); + data.add(channel != -1 ? channel : 0xFFFF); data.add(0); break; case CUSTOM: - data.add(((LexerCustomAction)action).getRuleIndex()); - data.add(((LexerCustomAction)action).getActionIndex()); + int ruleIndex = ((LexerCustomAction)action).getRuleIndex(); + int actionIndex = ((LexerCustomAction)action).getActionIndex(); + data.add(ruleIndex != -1 ? ruleIndex : 0xFFFF); + data.add(actionIndex != -1 ? actionIndex : 0xFFFF); break; case MODE: - data.add(((LexerModeAction)action).getMode()); + int mode = ((LexerModeAction)action).getMode(); + data.add(mode != -1 ? mode : 0xFFFF); data.add(0); break; @@ -337,7 +341,8 @@ public class ATNSerializer { break; case PUSH_MODE: - data.add(((LexerPushModeAction)action).getMode()); + mode = ((LexerPushModeAction)action).getMode(); + data.add(mode != -1 ? mode : 0xFFFF); data.add(0); break; @@ -347,7 +352,8 @@ public class ATNSerializer { break; case TYPE: - data.add(((LexerTypeAction)action).getType()); + int type = ((LexerTypeAction)action).getType(); + data.add(type != -1 ? type : 0xFFFF); data.add(0); break;