Exemple #1
0
        private ScriptModuleHandle Compile(ICodeSource source)
        {
            RegisterScopeIfNeeded();

            var parser = new Parser();

            parser.Code = source.Code;

            var compiler = new Compiler.Compiler();

            compiler.DirectiveHandler = ResolveDirective;
            ModuleImage compiledImage;

            try
            {
                compiledImage = compiler.Compile(parser, _currentContext);
            }
            catch (ScriptException e)
            {
                if (e.ModuleName == null)
                {
                    e.ModuleName = source.SourceDescription;
                }

                throw;
            }

            foreach (var item in _predefinedVariables)
            {
                var varDef = _scope.GetVariable(item);
                if (varDef.Type == SymbolType.ContextProperty)
                {
                    compiledImage.ExportedProperties.Add(new ExportedSymbol()
                    {
                        SymbolicName = varDef.Identifier,
                        Index        = varDef.Index
                    });
                }
            }

            var mi = new ModuleInformation();

            mi.CodeIndexer = parser.GetCodeIndexer();
            // пока у модулей нет собственных имен, будет совпадать с источником модуля
            mi.ModuleName            = source.SourceDescription;
            mi.Origin                = source.SourceDescription;
            compiledImage.ModuleInfo = mi;

            return(new ScriptModuleHandle()
            {
                Module = compiledImage
            });
        }