Example #1
0
        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));
        }
Example #2
0
        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);
        }
Example #3
0
        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));
        }
Example #4
0
 public override void VisitModulePublic(AstModuleImpl module)
 {
     module.Symbol.Should().NotBeNull();
     base.VisitModulePublic(module);
 }
Example #5
0
 public virtual void VisitModulePublic(AstModuleImpl module)
 {
     module.VisitChildren(this);
 }
Example #6
0
 public override void VisitModulePublic(AstModuleImpl module)
 {
     module.Parent.Should().NotBeNull();
     module.VisitChildren(this);
 }