Пример #1
0
        private Stmt LoadStaticField(Instruction inst)
        {
            var fRef = ((FieldReference)inst.Operand).FullResolve(this.ctx);
            var expr = new ExprFieldAccess(this.ctx, null, fRef);

            return(this.SsaLocalAssignment(expr));
        }
Пример #2
0
        private Stmt StoreStaticField(Instruction inst)
        {
            var value = this.stack.Pop();
            var fRef  = ((FieldReference)inst.Operand).FullResolve(this.ctx);
            var expr  = new ExprFieldAccess(this.ctx, null, fRef);

            return(new StmtAssignment(this.ctx, expr, value));
        }
Пример #3
0
 protected override ICode VisitFieldAccess(ExprFieldAccess e)
 {
     if (e.IsStatic)
     {
         this.Add(e.Field.DeclaringType, e.Ctx);
     }
     return(e);
 }
Пример #4
0
 protected override ICode VisitFieldAccess(ExprFieldAccess e)
 {
     if (!e.IsStatic)
     {
         this.Visit(e.Obj);
         this.js.Append(".");
     }
     this.js.Append(this.resolver.FieldNames[e.Field]);
     return(e);
 }
Пример #5
0
        public static Stmt ctor(Ctx ctx)
        {
            Expression <Func <int> > eHashCode = () => hashCode;
            var field = (FieldInfo)((MemberExpression)eHashCode.Body).Member;
            var f     = ctx.Module.Import(field);
            var fExpr = new ExprFieldAccess(ctx, null, f).Named("hashCode");
            var stmt  = new StmtJsExplicit(ctx, "this.$=++hashCode;", ctx.ThisNamed, fExpr);

            return(stmt);
        }
Пример #6
0
        protected virtual ICode VisitFieldAccess(ExprFieldAccess e)
        {
            this.ThrowOnNoOverride();
            var obj = (Expr)this.Visit(e.Obj);

            if (obj != e.Obj)
            {
                return(new ExprFieldAccess(e.Ctx, obj, e.Field));
            }
            else
            {
                return(e);
            }
        }
Пример #7
0
 protected override ICode VisitFieldAccess(ExprFieldAccess e)
 {
     if (e.IsStatic)
     {
         this.code.Append(e.Field.DeclaringType.FullName);
     }
     else
     {
         this.Visit(e.Obj);
     }
     this.code.Append(".");
     this.code.Append(e.Field.Name);
     return(e);
 }
Пример #8
0
        public static Stmt ToArray(Ctx ctx)
        {
            var returnType    = ctx.MRef.ReturnType.FullResolve(ctx);
            var a             = ctx.Local(returnType, "a");
            var arrayFieldRef = ctx.Module.Import(typeof(_List <T>)).EnumResolvedFields().First();
            var array         = new ExprFieldAccess(ctx, ctx.This, arrayFieldRef).Named("array");
            var type          = new ExprJsTypeVarName(ctx, returnType).Named("type");
            var js            = @"
a = array.slice(0);
a._ = type;
return a;
";

            return(new StmtJsExplicit(ctx, js, a, type, array));
        }
Пример #9
0
 protected override ICode VisitFieldAccess(ExprFieldAccess e)
 {
     this.fieldAccesses.Add(e.Field);
     return(base.VisitFieldAccess(e));
 }