public TotemContext(ScriptDomainManager manager, IDictionary<string, object> options) : base(manager) { _options = new TotemOptions(options); _builtinModulesDict = CreateBuiltinTable(); TotemDictionary defaultScope = new TotemDictionary(); ModuleContext moduleContext = new ModuleContext(defaultScope, this); _defaultContext = moduleContext.GlobalContext; TotemBinder binder = new TotemBinder(this, _defaultContext); _sharedOverloadResolverFactory = new TotemOverloadResolverFactory(binder, Expression.Constant(_defaultContext)); _binder = binder; if (DefaultContext._default == null) { DefaultContext.InitializeDefaults(_defaultContext); } RecursionLimit = _options.RecursionLimit; InitializeBuiltins(); }
public static Parser CreateParser(CompilerContext context, TotemOptions options) { ContractUtils.RequiresNotNull(context, "context"); ContractUtils.RequiresNotNull(options, "options"); TotemCompilerOptions compilerOptions = context.Options as TotemCompilerOptions; if (options == null) { throw new ValueErrorException(Resources.TotemContextRequired); } SourceCodeReader reader; try { reader = context.SourceUnit.GetReader(); } catch (IOException e) { context.Errors.Add(context.SourceUnit, e.Message, SourceSpan.Invalid, 0, Severity.Error); throw; } Tokenizer tokenizer = new Tokenizer(context.Errors, compilerOptions); tokenizer.Initialize(null, reader, context.SourceUnit, SourceLocation.MinValue); Parser result = new Parser(context, tokenizer, context.Errors, context.ParserSink, compilerOptions.Module); result._sourceReader = reader; return result; }