MCPcopy Create free account
hub / github.com/devosoft/avida / parseExprP6

Method parseExprP6

avida-core/source/script/cParser.cc:592–683  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

590}
591
592cASTNode* cParser::parseExprP6()
593{
594 PARSE_TRACE("parseExprP6");
595 Apto::SmartPtr<cASTNode> expr;
596
597 bool is_matrix = false;
598
599 switch (currentToken()) {
600 case TOKEN(FLOAT):
601 expr.Set(new cASTLiteral(FILEPOS, AS_TYPE_FLOAT, currentText()));
602 break;
603 case TOKEN(INT):
604 expr.Set(new cASTLiteral(FILEPOS, AS_TYPE_INT, currentText()));
605 break;
606 case TOKEN(CHAR):
607 expr.Set(new cASTLiteral(FILEPOS, AS_TYPE_CHAR,
608 currentText().Substring(1, currentText().GetSize() - 2).ParseEscapeSequences()));
609 break;
610 case TOKEN(BOOL):
611 expr.Set(new cASTLiteral(FILEPOS, AS_TYPE_BOOL, currentText()));
612 break;
613 case TOKEN(STRING):
614 expr.Set(new cASTLiteral(FILEPOS, AS_TYPE_STRING,
615 currentText().Substring(1, currentText().GetSize() - 2).ParseEscapeSequences()));
616 break;
617 case TOKEN(ID):
618 if (peekToken() == TOKEN(PREC_OPEN)) {
619 cASTFunctionCall* fc = new cASTFunctionCall(FILEPOS, currentText());
620 expr.Set(fc);
621 nextToken(); // consume id token
622 if (nextToken() != TOKEN(PREC_CLOSE)) fc->SetArguments(parseArgumentList());
623 if (currentToken() != TOKEN(PREC_CLOSE)) PARSE_UNEXPECT();
624 } else {
625 expr = new cASTVariableReference(FILEPOS, currentText());
626 }
627 break;
628 case TOKEN(BUILTIN_CALL):
629 if (peekToken() == TOKEN(PREC_OPEN)) {
630 cASTBuiltInCall* bi = new cASTBuiltInCall(FILEPOS, currentText());
631 expr.Set(bi);
632 nextToken(); // consume builtin methon name token
633 if (nextToken() != TOKEN(PREC_CLOSE)) bi->SetArguments(parseArgumentList());
634 if (currentToken() != TOKEN(PREC_CLOSE)) PARSE_UNEXPECT();
635 } else {
636 PARSE_UNEXPECT();
637 }
638 break;
639 case TOKEN(PREC_OPEN):
640 nextToken(); // consume '('
641 expr.Set(parseExpression());
642 if (expr.IsNull()) PARSE_ERROR(NULL_EXPR);
643 if (currentToken() != TOKEN(PREC_CLOSE)) PARSE_UNEXPECT();
644 break;
645
646 case TOKEN(LITERAL_DICT):
647 expr.Set(parseLiteralDict());
648 if (currentToken() != TOKEN(ARR_CLOSE)) PARSE_UNEXPECT();
649 break;

Callers

nothing calls this directly

Calls 5

SubstringMethod · 0.80
ReleaseMethod · 0.80
SetMethod · 0.45
GetSizeMethod · 0.45
SetArgumentsMethod · 0.45

Tested by

no test coverage detected