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); // обойти заменённое на предмет наличия такого же синтаксического сахара }
public override void visit(diapason_expr _diapason_expr) { }
public virtual void visit(diapason_expr _diapason_expr) { DefaultVisit(_diapason_expr); }
public virtual void post_do_visit(diapason_expr _diapason_expr) { }
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); }
public virtual void visit(diapason_expr _diapason_expr) { }
public override void visit(diapason_expr _diapason_expr) { _diapason_expr.left.visit(this); _diapason_expr.right.visit(this); }
public override void visit(diapason_expr _diapason_expr) { prepare_node(_diapason_expr.left, "left"); prepare_node(_diapason_expr.right, "right"); }
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); }