public IDisposable AddModule(AstModuleImpl module) { if (Scopes.Count > 0) { throw new InvalidOperationException( "A Module must be added first before other AddFunction calls."); } var classBuilder = ClassBuilder.Create(this, module); var modScope = new ModuleScope(this, classBuilder); Scopes.Push(modScope); // static constructor var method = new CSharp.Method(module.Identifier.SymbolName.CanonicalName.FullName, String.Empty) { AccessModifiers = AccessModifiers.None, MethodModifiers = MethodModifiers.Static, }; classBuilder.ModuleClass.AddMethod(method); var funScope = new FunctionScope(this, method.GetBody(8)); Scopes.Push(funScope); return(new LinkedScopes(funScope, modScope)); }
public override void VisitModulePublic(AstModuleImpl module) { // usings / imports Context.Imports(module.Symbol.SymbolTable.GetRootTable()); Context.Imports(module.Symbol.SymbolTable); using var scope = Context.AddModule(module); module.VisitChildren(this); }
public static ClassBuilder Create(EmitContext context, AstModuleImpl module) { var moduleClass = new CSharp.Class(module.Identifier.SymbolName.CanonicalName.FullName, ClassKeyword.Class) { AccessModifiers = module.HasExports ? AccessModifiers.Public : AccessModifiers.Internal, ClassModifiers = ClassModifiers.Static, }; context.Namespace.AddClass(moduleClass); return(new ClassBuilder(context, moduleClass)); }
public override void VisitModulePublic(AstModuleImpl module) { module.Symbol.Should().NotBeNull(); base.VisitModulePublic(module); }
public virtual void VisitModulePublic(AstModuleImpl module) { module.VisitChildren(this); }
public override void VisitModulePublic(AstModuleImpl module) { module.Parent.Should().NotBeNull(); module.VisitChildren(this); }