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); } }
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); } }