Example #1
0
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;
}