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); }
//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)); }