Exemplo n.º 1
0
        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);
        }