コード例 #1
0
        protected override Boolean handleDo(DoStatementNode doStatement, HashSet <StatementNode> visited)
        {
            if (!handleStatement(doStatement.Statement, visited) || !ReachabilityChecker.isEndPointReachable(doStatement.Statement))
            {
                return(Boolean.FALSE);
            }
            AssignmentState state = expressionChecker.handleExpression(doStatement.Condition, visited, true);

            switch (state)
            {
            case Assigned:
            case AssignedAfterFalse:
                return(Boolean.FALSE);

            case AssignedAfterTrue:
                return(Boolean.TRUE);

            default:
                var cinfo = doStatement.Condition.getUserData(typeof(ExpressionInfo));
                if (cinfo.IsConstant)
                {
                    return((Boolean)cinfo.Value);
                }
                break;
            }
            return(Boolean.TRUE);
        }
コード例 #2
0
 public virtual Value evaluate(Context cx, DoStatementNode node)
 {
     output("<DoStatementNode position=\"" + node.pos() + "\">");
     indent_Renamed_Field++;
     if (node.expr != null)
     {
         node.expr.evaluate(cx, this);
     }
     if (node.statements != null)
     {
         node.statements.evaluate(cx, this);
     }
     indent_Renamed_Field--;
     output("</DoStatementNode>");
     return(null);
 }
コード例 #3
0
        protected override Void handleDo(DoStatementNode doStatement, Void source)
        {
            try {
                context.MemberResolver.enterScope();
                handleStatement(doStatement.Statement, source);
            } finally {
                context.MemberResolver.leaveScope();
            }
            var condition = doStatement.Condition;

            this.ExpressionValidator.handleExpression(condition, null, true);
            ValidationHelper.setBoxing(context, context.TypeSystem.BooleanType, condition);
            var info = condition.getUserData(typeof(ExpressionInfo));

            if (info == null || ValidationHelper.getType(context, condition) != context.TypeSystem.BooleanType)
            {
                throw context.error(CompileErrorId.NoImplicitConversion, condition,
                                    BytecodeHelper.getDisplayName(info == null ? null : info.Type),
                                    BytecodeHelper.getDisplayName(context.TypeSystem.BooleanType));
            }
            return(null);
        }
コード例 #4
0
		public virtual Value evaluate(Context cx, DoStatementNode node)
		{
			output("<DoStatementNode position=\"" + node.pos() + "\">");
			indent_Renamed_Field++;
			if (node.expr != null)
			{
				node.expr.evaluate(cx, this);
			}
			if (node.statements != null)
			{
				node.statements.evaluate(cx, this);
			}
			indent_Renamed_Field--;
			output("</DoStatementNode>");
			return null;
		}
コード例 #5
0
 protected override Void handleDo(DoStatementNode doStatement, Set <TypeInfo> dependencies)
 {
     expressionHandler.handleExpression(doStatement.Condition, dependencies, true);
     handleStatement(doStatement.Statement, dependencies);
     return(null);
 }