示例#1
0
        private expression CreateConditionFromCaseVariant(expression param, expression_list list)
        {
            var res = list.expressions.Aggregate(new bool_const(false) as expression, (acc, expr) =>
            {
                bin_expr currentExpr = null;
                diapason_expr diap   = expr as diapason_expr;
                if (diap != null)
                {
                    currentExpr = new bin_expr(new bin_expr(param, diap.left, Operators.GreaterEqual),
                                               new bin_expr(param, diap.right, Operators.LessEqual),
                                               Operators.LogicalAND);
                }
                else
                {
                    currentExpr = new bin_expr(param, expr, Operators.Equal);
                }

                return(new bin_expr(acc, currentExpr, Operators.LogicalOR));
            });

            return(res);
        }
        public override void visit(diapason_expr_new diap)
        {
            if (diap.Parent.Parent is pascal_set_constant)
            {
                // вернуть назад к diapason_expr
                var d = new diapason_expr(diap.left, diap.right, diap.source_context);
                ReplaceUsingParent(diap, d);
                visit(d);
                return;
            }

            var el = new expression_list();

            el.Add(diap.left, diap.left.source_context);
            el.Add(diap.right, diap.right.source_context);

            // Проблема в том, что тут тоже надо перепрошивать Parent!
            var mc = method_call.NewP(dot_node.NewP(new ident("PABCSystem", diap.source_context), new ident("InternalRange", diap.source_context), diap.source_context), el, diap.source_context);

            var sug = sugared_addressed_value.NewP(diap, mc, diap.source_context);

            ReplaceUsingParent(diap, sug);
            visit(mc); // обойти заменённое на предмет наличия такого же синтаксического сахара
        }
示例#3
0
 public override void visit(diapason_expr _diapason_expr)
 {
 }
示例#4
0
 public virtual void visit(diapason_expr _diapason_expr)
 {
     DefaultVisit(_diapason_expr);
 }
示例#5
0
		public virtual void post_do_visit(diapason_expr _diapason_expr)
		{
		}
示例#6
0
		public override void visit(diapason_expr _diapason_expr)
		{
			DefaultVisit(_diapason_expr);
			pre_do_visit(_diapason_expr);
			visit(diapason_expr.left);
			visit(diapason_expr.right);
			post_do_visit(_diapason_expr);
		}
示例#7
0
 public virtual void visit(diapason_expr _diapason_expr)
 {
 }
示例#8
0
 public override void visit(diapason_expr _diapason_expr)
 {
     _diapason_expr.left.visit(this);
     _diapason_expr.right.visit(this);
 }
示例#9
0
		public virtual void visit(diapason_expr _diapason_expr)
		{
		}
		public virtual void visit(diapason_expr _diapason_expr)
		{
			DefaultVisit(_diapason_expr);
		}
示例#11
0
 public override void visit(diapason_expr _diapason_expr)
 {
     prepare_node(_diapason_expr.left, "left");
     prepare_node(_diapason_expr.right, "right");
 }
示例#12
0
		public override void visit(diapason_expr _diapason_expr)
		{
			executer.visit(_diapason_expr);
			if (_diapason_expr.left != null)
				this.visit((dynamic)_diapason_expr.left);
			if (_diapason_expr.right != null)
				this.visit((dynamic)_diapason_expr.right);
			if (_diapason_expr.attributes != null)
				this.visit((dynamic)_diapason_expr.attributes);
		}