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