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