diff --git a/src/leola/frontend/parsers/ExprParser.java b/src/leola/frontend/parsers/ExprParser.java index 6b9c19c..12ffc78 100644 --- a/src/leola/frontend/parsers/ExprParser.java +++ b/src/leola/frontend/parsers/ExprParser.java @@ -102,12 +102,21 @@ public class ExprParser extends StmtParser { private static final EnumSet CHAINED_OP = EnumSet.of(DOT, LEFT_PAREN, LEFT_BRACKET/*, IDENTIFIER*/); + private boolean isMapDeclaration; - /** + /** * @param parser */ public ExprParser(LeolaParser parser) { + this(parser, false); + } + + /** + * @param parser + */ + public ExprParser(LeolaParser parser, boolean isMapDeclaration) { super(parser); + this.isMapDeclaration = isMapDeclaration; } /** @@ -575,8 +584,17 @@ protected ASTNode parseIdentifier(Token token) break; } case ARROW: { - NamedParameterExprParser parser = new NamedParameterExprParser(this); - result = parser.parse(token); + + /* if this is a map declaration, then this + * is just a variable, otherwise it is a Named Parameter + */ + if(this.isMapDeclaration) { + result = new VarExpr(token.getText()); + } + else { + NamedParameterExprParser parser = new NamedParameterExprParser(this); + result = parser.parse(token); + } break; } case PLUS_EQ: diff --git a/src/leola/frontend/parsers/ParserUtils.java b/src/leola/frontend/parsers/ParserUtils.java index c167a54..fe519c1 100644 --- a/src/leola/frontend/parsers/ParserUtils.java +++ b/src/leola/frontend/parsers/ParserUtils.java @@ -82,7 +82,7 @@ public static List> parseMapParameters(StmtParser parser , EnumSet commaDelimeter , LeolaTokenType endToken) throws Exception { - ExprParser expressionParser = new ExprParser(parser); + ExprParser expressionParser = new ExprParser(parser, true); Token token = parser.nextToken(); // consume opening token