Merge pull request #450 from sharwell/fix-449

Fix encoding of -1 (EOF) in serialized lexer actions (fixes #449)
This commit is contained in:
Sam Harwell 2014-01-24 14:12:36 -08:00
commit 8d9cae93ec
2 changed files with 20 additions and 6 deletions

View File

@ -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;

View File

@ -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;