public override Lazy <object> VisitNotExpression(QuestScriptParser.NotExpressionContext context)
        {
            var type = _scriptEnvironmentBuilder.TypeInferenceVisitor.Visit(context.expr);

            if (type != ObjectType.Boolean)
            {
                _scriptEnvironmentBuilder.Errors.Add(new UnexpectedTypeException(context, ObjectType.Boolean, type,
                                                                                 context.expr, "In general, 'not' operators are applicable only on boolean expressions."));
                return(new Lazy <object>(() => null));
            }

            return(new Lazy <object>(() =>
            {
                var val = context.expr.Accept(this).Value.GetValueOrLazyValue();
                return Cast(!(dynamic)val, ObjectType.Boolean);
            }));
        }
예제 #2
0
 public override ObjectType VisitNotExpression(QuestScriptParser.NotExpressionContext context)
 {
     return(context.expr.Accept(this) != ObjectType.Boolean ? ObjectType.Unknown : ObjectType.Boolean);
 }
 public override bool VisitNotExpression(QuestScriptParser.NotExpressionContext context)
 {
     _output.AppendFormat("not ");
     context.expr.Accept(this);
     return(true);
 }