Expression* MemberParselet::parse(Parser* parser, Expression* left, Token token) { //this is for const members Expression* member = parser->parseExpression(Precedence::CALL); UniquePtr<NameExpression*> name = dynamic_cast<NameExpression*>(member); if (name == 0) { delete member; delete left; throw CompilerException(parser->filename, token.line, "Cannot access member name that is not a string"); } auto ret = new IndexExpression(left, new StringExpression(name->GetName()), token); return ret; }