コード例 #1
0
        public override bool VisitIfStatement(QuestScriptParser.IfStatementContext context)
        {
            _output.Append("if(");
            context.condition.Accept(this);
            if (context.ifCode.codeBlockStatement() == null)
            {
                _output.AppendFormat("){0}{1}", Environment.NewLine, Whitespaces);
            }
            else
            {
                _output.AppendFormat("){0}", Whitespaces);
            }
            context.ifCode.Accept(this);

            if (context._elseIfCodes.Count > 0)
            {
                for (var i = 0; i < context._elseIfCodes.Count; i++)
                {
                    var ifElseCondition = context._elseifConditions[i];
                    var ifElseCode      = context._elseIfCodes[i];

                    _output.AppendFormat("{0}elseif(", Whitespaces);
                    ifElseCondition.Accept(this);

                    if (ifElseCode.codeBlockStatement() == null)
                    {
                        _output.AppendFormat("){0}{1}", Environment.NewLine, Whitespaces);
                    }
                    else
                    {
                        _output.AppendFormat("){0}", Whitespaces);
                    }

                    ifElseCode.Accept(this);
                }
            }

            if (context.elseCode != null)
            {
                _output.AppendFormat("{0}else", Whitespaces);
                if (context.elseCode.codeBlockStatement() == null)
                {
                    _output.AppendFormat("{0}{1}", Environment.NewLine, Whitespaces);
                }
                else
                {
                    _output.AppendFormat("{0}", Whitespaces);
                }
                context.elseCode.Accept(this);
            }

            return(true);
        }
コード例 #2
0
        //if condition type check - make sure it resolves to boolean type
        public override bool VisitIfStatement(QuestScriptParser.IfStatementContext context)
        {
            var ifConditionExpressionType = TypeInferenceVisitor.Visit(context.condition);

            if (ifConditionExpressionType != ObjectType.Unknown &&
                ifConditionExpressionType != ObjectType.Boolean)
            {
                Errors.Add(new InvalidConditionException(context, "if", context.condition));
            }

            foreach (var elseifCondition in context._elseifConditions)
            {
                var elseIfConditionExpressionType = TypeInferenceVisitor.Visit(elseifCondition);
                if (elseIfConditionExpressionType != ObjectType.Unknown &&
                    elseIfConditionExpressionType != ObjectType.Boolean)
                {
                    Errors.Add(new InvalidConditionException(context, "elseif", elseifCondition));
                }
            }

            return(base.VisitIfStatement(context));
        }