示例#1
0
        public override void VisitCollateralItem(CollateralItem n)
        {
            var collatType = _moduleBuilder.GetType("CollateralItem");
            var ctor       = _typeManager.GetBuilderInfo("CollateralItem").ConstructorBuilder.Builder;

            //new up a CollateralItem
            _gen.DeclareLocal(collatType);
            _gen.Emit(OpCodes.Newobj, ctor);
            _gen.Emit(OpCodes.Stloc, _internalListIndex);

            SetCurrentType("CollateralItem");
            if (n.Statements != null)
            {
                n.Statements.Visit(this);
            }
            SetCurrentType("Collateral");

            // add current item to the list member variable
            _gen.Emit(OpCodes.Ldarg_0);
            _gen.Emit(OpCodes.Ldfld, _typeManager.GetBuilderInfo(_currentType).FieldMap["CollateralItems"]);
            _gen.Emit(OpCodes.Ldloc, _internalListIndex);

            //get the generic add method and call it
            var listType = typeof(List <>).MakeGenericType(_moduleBuilder.GetType("CollateralItem"));
            var method   = TypeBuilder.GetMethod(listType, typeof(List <>).GetMethod("Add"));

            _gen.Emit(OpCodes.Callvirt, method);

            _internalListIndex++;

            if (n.Tail != null && !n.Tail.IsEmpty)
            {
                n.Tail.Visit(this);
            }
        }
示例#2
0
        public override void VisitCollateralItem(CollateralItem n)
        {
            _mgr.PushScope(string.Format("CollateralItem{0}", _itemIncrementer++));

            if (n.Statements != null)
            {
                n.Statements.Visit(this);
            }

            _mgr.PopScope();

            if (n.Tail != null && !n.Tail.IsEmpty)
            {
                n.Tail.Visit(this);
            }
        }