private void SetupInternalClass(DeclarationClass n, string name) { _typeManager.AddClass(n); if (name.Equals(ENTRY_POINT, StringComparison.OrdinalIgnoreCase)) { var methodInfo = CreateEntryPointMethod(n, name); _gen = methodInfo.Builder.GetILGenerator(); foreach (var item in Enum.GetNames(typeof(InternalTrancheTypes))) { var ident = new Identifier(n.Location, item); var instantiate = new InstantiateClass(item, new ExpressionList()); var assign = new Assign(ident, instantiate) {InternalType = new TypeClass(item)}; VisitAssign(assign); } _assemblyBuilder.SetEntryPoint(methodInfo.Builder); } else { var ctorInfo = CreateInternalClassCtor(n, name); _gen = ctorInfo.Builder.GetILGenerator(); var baseCtor = typeof(object).GetConstructor(Type.EmptyTypes); _gen.Emit(OpCodes.Ldarg_0); //this. if (baseCtor != null) _gen.Emit(OpCodes.Call, baseCtor); } }
public override void VisitInstantiateClass(InstantiateClass n) { n.Actuals.Visit(this); var info = _typeManager.GetBuilderInfo(n.ClassName); _gen.Emit(OpCodes.Newobj, info.ConstructorBuilder.Builder); _lastWalkedType = info.Builder; }