public override bool VisitAssignmentStatement(QuestScriptParser.AssignmentStatementContext context) { var success = base.VisitAssignmentStatement(context); var identifier = context.LVal.GetText(); var variable = _current.GetVariable(identifier); var variableDefined = variable != null; var isMemberAssignment = identifier.Contains("."); if (!isMemberAssignment && !variableDefined) { DeclareLocalVariable(identifier, context.LVal, context.RVal); } else if (variableDefined && !isMemberAssignment) //do a type check, since we are not declaring but assigning { //do type checking, since this is not a declaration but an assignment var rValueType = TypeInferenceVisitor.Visit(context.RVal); var lValueType = TypeInferenceVisitor.Visit(context.LVal); if (lValueType != rValueType && !TypeUtil.CanConvert(rValueType, lValueType)) { Errors.Add(new UnexpectedTypeException(context, lValueType, rValueType, context.RVal, "Also, tried to find suitable implicit casting, but didn't find anything.")); } variable.Value = ValueResolverVisitor.Visit(context.RVal); } return(success); }
public override bool VisitAssignmentStatement(QuestScriptParser.AssignmentStatementContext context) { context.LVal.Accept(this); _output.Append(" = "); context.RVal.Accept(this); return(true); }