internal static expr Convert(Compiler.Ast.Expression expr, expr_context ctx) { expr ast; if (expr is ConstantExpression) ast = Convert((ConstantExpression)expr); else if (expr is NameExpression) ast = new Name((NameExpression)expr, ctx); else if (expr is UnaryExpression) ast = new UnaryOp((UnaryExpression)expr); else if (expr is BinaryExpression) ast = Convert((BinaryExpression)expr); else if (expr is AndExpression) ast = new BoolOp((AndExpression)expr); else if (expr is OrExpression) ast = new BoolOp((OrExpression)expr); else if (expr is CallExpression) ast = new Call((CallExpression)expr); else if (expr is ParenthesisExpression) return Convert(((ParenthesisExpression)expr).Expression); else if (expr is LambdaExpression) ast = new Lambda((LambdaExpression)expr); else if (expr is ListExpression) ast = new List((ListExpression)expr, ctx); else if (expr is TupleExpression) ast = new Tuple((TupleExpression)expr, ctx); else if (expr is DictionaryExpression) ast = new Dict((DictionaryExpression)expr); else if (expr is ListComprehension) ast = new ListComp((ListComprehension)expr); else if (expr is GeneratorExpression) ast = new GeneratorExp((GeneratorExpression)expr); else if (expr is MemberExpression) ast = new Attribute((MemberExpression)expr, ctx); else if (expr is YieldExpression) ast = new Yield((YieldExpression)expr); else if (expr is ConditionalExpression) ast = new IfExp((ConditionalExpression)expr); else if (expr is IndexExpression) ast = new Subscript((IndexExpression)expr, ctx); else if (expr is SliceExpression) ast = new Slice((SliceExpression)expr); else if (expr is BackQuoteExpression) ast = new Repr((BackQuoteExpression)expr); else throw new ArgumentTypeException("Unexpected expression type: " + expr.GetType()); ast.GetSourceLocation(expr); return ast; }
internal Attribute(MemberExpression attr, expr_context ctx) : this() { _value = Convert(attr.Target); _attr = attr.Name; _ctx = ctx; }
internal Subscript(IndexExpression expr, expr_context ctx) : this() { _value = Convert(expr.Target); AST index = Convert(expr.Index); if (index is expr) if (index is Tuple && ((TupleExpression)expr.Index).IsExpandable) _slice = new ExtSlice(((Tuple)index).elts); else _slice = new Index((expr)index); else if (index is slice) // includes Ellipsis _slice = (slice)index; else throw new ArgumentTypeException("Unexpected index expression: " + expr.Index.GetType()); _ctx = ctx; }
internal Tuple(TupleExpression list, expr_context ctx) : this() { _elts = PythonOps.MakeEmptyList(list.Items.Count); foreach (Compiler.Ast.Expression expr in list.Items) _elts.Add(Convert(expr, ctx)); _ctx = ctx; }
internal Name(NameExpression expr, expr_context ctx) : this(expr.Name, ctx) { }
internal Name(string id, expr_context ctx) : this() { _id = id; _ctx = ctx; }
public Tuple(PythonList elts, expr_context ctx, [Optional]int? lineno, [Optional]int? col_offset) : this() { _elts = elts; _ctx = ctx; _lineno = lineno; _col_offset = col_offset; }
public Attribute(expr value, string attr, expr_context ctx, [Optional]int? lineno, [Optional]int? col_offset) : this() { _value = value; _attr = attr; _ctx = ctx; _lineno = lineno; _col_offset = col_offset; }
internal Subscript(IndexExpression expr, expr_context ctx) : this() { _value = Convert(expr.Target); _ctx = ctx; _slice = TrySliceConvert(expr.Index); if (_slice == null) _slice = new Index(Convert(expr.Index)); }
public Subscript( expr value, slice slice, expr_context ctx, [Optional]int? lineno, [Optional]int? col_offset ) : this() { _value = value; _slice = slice; _ctx = ctx; _lineno = lineno; _col_offset = col_offset; }
internal Name(NameExpression expr, expr_context ctx) : this(expr.Name, ctx) { GetSourceLocation(expr); }
public Name(String id, expr_context ctx) : this(id, ctx, null, null) { }
public Name(string id, expr_context ctx, [Optional]int? lineno, [Optional]int? col_offset) : this() { _id = id; _ctx = ctx; _lineno = lineno; _col_offset = col_offset; }