// AssignStatement
 public override bool Walk(AssignStatement node)
 {
     assignmentAnalyzer.Analyze(node);
     return true;
 }
 public void Analyze(AssignStatement assignment)
 {
     this.assignment = assignment;
     foreach (Expression e in assignment.Left) {
         FieldExpression field = e as FieldExpression;
         if (null != field) {
             analyzer.SaveFieldExpressionession(field, assignment.Right);
         }
         e.Walk(this);
     }
 }
 public void PostWalk(AssignStatement node)
 {
     PostProcess(node);
 }
 // AssignStatement
 public bool Walk(AssignStatement node)
 {
     return Process(node);
 }
 public override void PostWalk(AssignStatement node)
 {
 }
 // AssignStmt
 public override bool Walk(AssignStatement node)
 {
     node.Right.Walk(this);
     foreach (Expression e in node.Left) {
         e.Walk(fdef);
     }
     return false;
 }
            // anything else gets emitted directly
            // into the current initialization function.  If this
            // is something like a conditional block that includes
            // a function definition it will not be visible at .NET
            // scope (but will still work).
            public override bool Walk(AssignStatement node)
            {
                if (stack.Count == 1) {
                    node.Emit(stack.Peek().StaticConstructor);
                    return false;
                }

                CallExpression rhsCall = node.Right as CallExpression;
                if (rhsCall != null) {
                    bool fCantEmit = false;
                    NameExpression ne = rhsCall.Target as NameExpression;
                    string get = null, set = null;
                    if (ne != null) {
                        if (ne.Name.GetString() == "property") {
                            // property definition...
                            fCantEmit = GetPropertyAccessors(rhsCall, ref ne, ref get, ref set);
                        }
                    }

                    if (!fCantEmit) {
                        PropertyBuilder pb = stack.Peek().Type.DefineProperty(((NameExpression)node.Left[0]).Name.GetString(), PropertyAttributes.None, typeof(object));

                        foreach (CodeGen cg in stack.Peek().Methods) {
                            if (get != null && cg.methodInfo.Name == get) {
                                pb.SetGetMethod((MethodBuilder)cg.methodInfo);
                            } else if (set != null && cg.methodInfo.Name == set) {
                                pb.SetSetMethod((MethodBuilder)cg.methodInfo);
                            }
                        }
                        return false;
                    }
                }

                ConstantExpression rhsConstant = node.Right as ConstantExpression;
                NameExpression rhsName;
                if (rhsConstant != null) {
                    if (rhsConstant.Value != null) {
                        stack.Peek().Type.AddStaticField(rhsConstant.Value.GetType(), ((NameExpression)node.Left[0]).Name.GetString());
                    } else {
                        stack.Peek().Type.AddStaticField(typeof(object), ((NameExpression)node.Left[0]).Name.GetString());
                    }
                } else if ((rhsName = node.Right as NameExpression) != null &&
                    (rhsName.Name.GetString() == "True" || rhsName.Name.GetString() == "False")) {
                    stack.Peek().Type.AddStaticField(typeof(bool), ((NameExpression)node.Left[0]).Name.GetString());
                } else {
                    Emit(node);
                }

                return false;
            }
 public AssignmentDefinition(AssignStatement assignment)
 {
     this.assignment = assignment;
 }
            public override bool Walk(AssignStatement node)
            {
                if (!FoundSlots && node.Left.Count == 1) {
                    NameExpression ne = node.Left[0] as NameExpression;
                    if (ne != null && ne.Name.GetString() == "__slots__") {
                        ListExpression le = node.Right as ListExpression;
                        if (le != null) {
                            string[] slotRes = new string[le.Items.Count];
                            for (int i = 0; i < le.Items.Count; i++) {
                                ConstantExpression ce = le.Items[i] as ConstantExpression;
                                if (ce == null) {
                                    slotRes = null;
                                    break;
                                }

                                string slotStr = ce.Value as string;
                                if (slotStr == null) {
                                    slotRes = null;
                                    break;
                                }
                                slotRes[i] = slotStr;
                            }
                            slots = slotRes;
                        }

                        FoundSlots = true;
                    }
                }
                return false;
            }
 public virtual void PostWalk(AssignStatement node)
 {
 }
 // AssignStatement
 public virtual bool Walk(AssignStatement node)
 {
     return true;
 }
示例#12
0
 // AssignStmt
 public override bool Walk(AssignStatement node)
 {
     foreach (Expression e in node.Left) {
         e.Walk(define);
     }
     return true;
 }
示例#13
0
        //expr_stmt: testlist (augassign testlist | ('=' testlist)*)
        //augassign: '+=' | '-=' | '*=' | '/=' | '%=' | '&=' | '|=' | '^=' | '<<=' | '>>=' | '**=' | '//='
        private Statement ParseExprStmt()
        {
            Expression lhs = ParseTestListAsExpr(false);

            if (MaybeEat(TokenKind.Assign)) {
                List<Expression> l = new List<Expression>();
                l.Add(lhs);
                do {
                    Expression e = ParseTestListAsExpr(false);
                    l.Add(e);
                } while (MaybeEat(TokenKind.Assign));

                int last = l.Count - 1;
                Expression rhs = (Expression)l[last];
                l.RemoveAt(last);
                Expression[] lhss = l.ToArray();

                //We check for legal assignment targets during code generation rather than parsing
                Statement ret = new AssignStatement(lhss, rhs);
                ret.SetLoc(GetExternal(), lhs.Start, GetEnd());
                return ret;
            } else {
                BinaryOperator op = GetAssignOp(PeekToken());
                if (op == null) {
                    Statement ret = new ExpressionStatement(lhs);
                    ret.SetLoc(GetExternal(), lhs.Start, GetEnd());
                    return ret;
                } else {
                    NextToken();
                    Expression rhs = ParseTestListAsExpr(false);
                    Statement ret = new AugAssignStatement(op, lhs, rhs);
                    ret.SetLoc(GetExternal(), lhs.Start, GetEnd());
                    return ret;
                }
            }
        }