예제 #1
0
        internal ImmutableContextBase(
            ContextTree contextTree,
            ImmutableContextBase parent,
            [NotNull] ModuleLiteral module,
            TopLevelValueInfo topLevelValueInfo,
            FileType fileType,
            EvaluatorConfiguration configuration,
            [NotNull] IEvaluationScheduler evaluationScheduler)
        {
            Contract.Requires(contextTree.IsValid);
            Contract.Requires(parent == null || parent.ContextTree == contextTree);
            Contract.Requires(module != null);
            Contract.Requires(evaluationScheduler != null);

            ParentContext          = parent;
            LastActiveUsedModule   = module;
            TopLevelValueInfo      = topLevelValueInfo;
            ContextTree            = contextTree;
            DebugState             = new DebugState();
            m_relativePath         = RelativePath.Invalid;
            EvaluatorConfiguration = configuration;
            EvaluationScheduler    = evaluationScheduler;
            FileType = fileType;
            if (parent != null)
            {
                m_callStack = parent.m_callStack;
            }
        }
예제 #2
0
        public ContextTree(
            [NotNull] FrontEndHost frontEndHost,
            [NotNull] FrontEndContext frontEndContext,
            [NotNull] GlobalConstants constants,
            [NotNull] ModuleRegistry moduleRegistry,
            [NotNull] Logger logger,
            [NotNull] EvaluationStatistics statistics,
            QualifierValueCache qualifierValueCache,
            bool isBeingDebugged,
            IDecorator <EvaluationResult> decorator,
            [NotNull] FileModuleLiteral module,
            [NotNull] EvaluatorConfiguration configuration,
            [NotNull] IEvaluationScheduler evaluationScheduler,
            FileType fileType)
        {
            Contract.Requires(frontEndHost != null);
            Contract.Requires(frontEndContext != null);
            Contract.Requires(constants != null);
            Contract.Requires(moduleRegistry != null);
            Contract.Requires(logger != null);
            Contract.Requires(statistics != null);
            Contract.Requires(module != null);

            EvaluationScheduler = evaluationScheduler;

            FrontEndHost        = frontEndHost;
            FrontEndContext     = frontEndContext;
            Constants           = constants;
            ModuleRegistry      = moduleRegistry;
            Logger              = logger;
            Statistics          = statistics;
            IsBeingDebugged     = isBeingDebugged;
            Decorator           = decorator;
            EvaluationScheduler = evaluationScheduler;
            QualifierValueCache = qualifierValueCache;
            ToolDefinitionCache = new ConcurrentDictionary <ObjectLiteral, CachedToolDefinition>();
            ValueCache          = new ConcurrentDictionary <Fingerprint, EvaluationResult>();
            CommonConstants     = new CommonConstants(frontEndContext.StringTable);

            RootContext =
                new Context(
                    contextTree: this,
                    parent: null,
                    module: module,
                    topLevelValueInfo: null,
                    fileType: fileType,
                    configuration: configuration,
                    evaluationScheduler: evaluationScheduler);

            Interlocked.Increment(ref statistics.ContextTrees);
        }