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