clojure.lang.CljCompiler.Ast.ObjExpr.EmitUnboxedLocal C# (CSharp) Method

EmitUnboxedLocal() private method

private EmitUnboxedLocal ( CljILGen ilg, LocalBinding lb ) : void
ilg CljILGen
lb LocalBinding
return void
        internal void EmitUnboxedLocal(CljILGen ilg, LocalBinding lb)
        {
            if (Closes.containsKey(lb))
            {
                ilg.Emit(OpCodes.Ldarg_0); // this
                FieldBuilder fb = ClosedOverFieldsMap[lb];
                ilg.MaybeEmitVolatileOp(IsVolatile(lb));
                ilg.Emit(OpCodes.Ldfld, fb);
            }
            else if (lb.IsArg)
            {
                //int argOffset = IsStatic ? 0 : 1;
                //ilg.Emit(OpCodes.Ldarg, lb.Index + argOffset);
                ilg.EmitLoadArg(lb.Index);
            }
            else if (lb.IsThis)
            {
                ilg.EmitLoadArg(0);
            }
            else
                ilg.Emit(OpCodes.Ldloc, lb.LocalVar);
        }

Usage Example

示例#1
0
        internal void EmitLetFnInits(CljILGen ilg, LocalBuilder localBuilder, ObjExpr objx, IPersistentSet letFnLocals)
        {
            if (_typeBuilder != null)
            {
                // Full compile
                ilg.Emit(OpCodes.Castclass, _typeBuilder);

                for (ISeq s = RT.keys(Closes); s != null; s = s.next())
                {
                    LocalBinding lb = (LocalBinding)s.first();
                    if (letFnLocals.contains(lb))
                    {
                        FieldBuilder fb;
                        _closedOverFieldsMap.TryGetValue(lb, out fb);

                        Type primt = lb.PrimitiveType;
                        ilg.Emit(OpCodes.Dup);  // this
                        if (primt != null)
                        {
                            objx.EmitUnboxedLocal(ilg, lb);
                            ilg.Emit(OpCodes.Stfld, fb);
                        }
                        else
                        {
                            objx.EmitLocal(ilg, lb);
                            ilg.Emit(OpCodes.Stfld, fb);
                        }
                    }
                }
                ilg.Emit(OpCodes.Pop);
            }
        }
All Usage Examples Of clojure.lang.CljCompiler.Ast.ObjExpr::EmitUnboxedLocal