Index: pkg/fletchc/lib/incremental/fletch_reuser.dart |
diff --git a/pkg/fletchc/lib/incremental/fletch_reuser.dart b/pkg/fletchc/lib/incremental/fletch_reuser.dart |
deleted file mode 100644 |
index 08ef59d47f49b33d6b3745f0a1912bd043800751..0000000000000000000000000000000000000000 |
--- a/pkg/fletchc/lib/incremental/fletch_reuser.dart |
+++ /dev/null |
@@ -1,381 +0,0 @@ |
-// Copyright (c) 2015, the Dartino project authors. Please see the AUTHORS file |
-// for details. All rights reserved. Use of this source code is governed by a |
-// BSD-style license that can be found in the LICENSE.md file. |
- |
-library fletchc_incremental.fletch_reuser; |
- |
-import 'package:compiler/compiler_new.dart' show |
- CompilerDiagnostics, |
- Diagnostic; |
- |
-import 'package:compiler/compiler.dart' as api; |
- |
-import 'package:compiler/src/compiler.dart' show |
- Compiler; |
- |
-import 'package:compiler/src/enqueue.dart' show |
- EnqueueTask; |
- |
-import 'package:compiler/src/elements/elements.dart' show |
- AstElement, |
- ClassElement, |
- Element, |
- FieldElement, |
- FunctionElement; |
- |
-import 'package:compiler/src/parser/partial_elements.dart' show |
- PartialClassElement, |
- PartialElement, |
- PartialFunctionElement; |
- |
-import 'package:compiler/src/elements/modelx.dart' show |
- ClassElementX, |
- FieldElementX, |
- LibraryElementX; |
- |
-import 'package:compiler/src/constants/values.dart' show |
- ConstantValue; |
- |
-import '../incremental_backend.dart' show |
- IncrementalFletchBackend; |
- |
-import '../src/fletch_class_builder.dart' show |
- FletchClassBuilder; |
- |
-import '../src/fletch_context.dart' show |
- FletchContext; |
- |
-import '../src/fletch_compiler_implementation.dart' show |
- FletchCompilerImplementation; |
- |
-import '../src/fletch_function_builder.dart' show |
- FletchFunctionBuilder; |
- |
-import '../vm_commands.dart' show |
- PrepareForChanges, |
- VmCommand; |
- |
-import '../fletch_system.dart' show |
- FletchDelta, |
- FletchSystem; |
- |
-import 'fletchc_incremental.dart' show |
- IncrementalCompilationFailed, |
- IncrementalCompiler; |
- |
-import 'reuser.dart' show |
- AddedClassUpdate, |
- AddedFieldUpdate, |
- AddedFunctionUpdate, |
- ClassUpdate, |
- Logger, |
- RemovedClassUpdate, |
- RemovedFieldUpdate, |
- RemovedFunctionUpdate, |
- Reuser; |
- |
-export 'reuser.dart' show |
- Logger; |
- |
-abstract class _IncrementalCompilerContext { |
- IncrementalCompiler incrementalCompiler; |
-} |
- |
-class IncrementalCompilerContext extends _IncrementalCompilerContext |
- implements CompilerDiagnostics { |
- final CompilerDiagnostics diagnostics; |
- int errorCount = 0; |
- int warningCount = 0; |
- int hintCount = 0; |
- |
- final Set<Uri> _uriWithUpdates = new Set<Uri>(); |
- |
- IncrementalCompilerContext(this.diagnostics); |
- |
- int get problemCount => errorCount + warningCount + hintCount; |
- |
- void set incrementalCompiler(IncrementalCompiler value) { |
- if (super.incrementalCompiler != null) { |
- throw new StateError("Can't set [incrementalCompiler] more than once"); |
- } |
- super.incrementalCompiler = value; |
- } |
- |
- void registerUriWithUpdates(Iterable<Uri> uris) { |
- _uriWithUpdates.addAll(uris); |
- } |
- |
- bool _uriHasUpdate(Uri uri) => _uriWithUpdates.contains(uri); |
- |
- void report( |
- var code, |
- Uri uri, |
- int begin, |
- int end, |
- String text, |
- Diagnostic kind) { |
- if (kind == Diagnostic.ERROR) { |
- errorCount++; |
- } |
- if (kind == Diagnostic.WARNING) { |
- warningCount++; |
- } |
- if (kind == Diagnostic.HINT) { |
- hintCount++; |
- } |
- diagnostics.report(code, uri, begin, end, text, kind); |
- } |
-} |
- |
-class FletchReuser extends Reuser with FletchFeatures { |
- final IncrementalCompilerContext _context; |
- |
- FletchReuser( |
- FletchCompilerImplementation compiler, |
- api.CompilerInputProvider inputProvider, |
- Logger logTime, |
- Logger logVerbose, |
- this._context) |
- : super(compiler, inputProvider, logTime, logVerbose); |
- |
- FletchDelta computeUpdateFletch(FletchSystem currentSystem) { |
- // TODO(ahe): Remove this when we support adding static fields. |
- Set<Element> existingStaticFields = |
- new Set<Element>.from(fletchContext.staticIndices.keys); |
- |
- backend.newSystemBuilder(currentSystem); |
- |
- List<Element> updatedElements = applyUpdates(); |
- |
- if (compiler.progress != null) { |
- compiler.progress.reset(); |
- } |
- |
- for (Element element in updatedElements) { |
- if (!element.isClass) { |
- if (element.isClassMember) { |
- element.enclosingClass.ensureResolved(compiler.resolution); |
- } |
- enqueuer.resolution.addToWorkList(element); |
- } else { |
- ClassElement cls = element; |
- cls.ensureResolved(compiler.resolution); |
- |
- // We've told the enqueuer to forget this class, now tell it that it's |
- // in use again. TODO(ahe): We only need to do this if [cls] was |
- // already instantiated. |
- enqueuer.codegen.registerInstantiatedType(cls.rawType); |
- } |
- } |
- compiler.processQueue(enqueuer.resolution, null); |
- |
- compiler.phase = Compiler.PHASE_DONE_RESOLVING; |
- |
- // TODO(ahe): Clean this up. Don't call this method in analyze-only mode. |
- if (compiler.analyzeOnly) { |
- return new FletchDelta(currentSystem, currentSystem, <VmCommand>[]); |
- } |
- |
- for (AstElement element in updatedElements) { |
- if (element.node.isErroneous) { |
- throw new IncrementalCompilationFailed( |
- "Unable to incrementally compile $element with syntax error"); |
- } |
- if (element.isField) { |
- backend.newElement(element); |
- } else if (!element.isClass) { |
- enqueuer.codegen.addToWorkList(element); |
- } |
- } |
- compiler.processQueue(enqueuer.codegen, null); |
- |
- // TODO(ahe): Remove this when we support adding static fields. |
- Set<Element> newStaticFields = |
- new Set<Element>.from(fletchContext.staticIndices.keys).difference( |
- existingStaticFields); |
- if (newStaticFields.isNotEmpty) { |
- throw new IncrementalCompilationFailed( |
- "Unable to add static fields:\n ${newStaticFields.join(',\n ')}"); |
- } |
- |
- List<VmCommand> commands = <VmCommand>[const PrepareForChanges()]; |
- FletchSystem system = |
- backend.systemBuilder.computeSystem(fletchContext, commands); |
- return new FletchDelta(system, currentSystem, commands); |
- } |
- |
- void addClassUpdate( |
- Compiler compiler, |
- PartialClassElement before, |
- PartialClassElement after) { |
- updates.add(new FletchClassUpdate(compiler, before, after)); |
- } |
- |
- void addAddedFunctionUpdate( |
- Compiler compiler, |
- PartialFunctionElement element, |
- /* ScopeContainerElement */ container) { |
- updates.add(new FletchAddedFunctionUpdate(compiler, element, container)); |
- } |
- |
- void addRemovedFunctionUpdate( |
- Compiler compiler, |
- PartialFunctionElement element) { |
- updates.add(new FletchRemovedFunctionUpdate(compiler, element)); |
- } |
- |
- void addRemovedFieldUpdate( |
- Compiler compiler, |
- FieldElementX element) { |
- updates.add(new FletchRemovedFieldUpdate(compiler, element)); |
- } |
- |
- void addRemovedClassUpdate( |
- Compiler compiler, |
- PartialClassElement element) { |
- updates.add(new FletchRemovedClassUpdate(compiler, element)); |
- } |
- |
- void addAddedFieldUpdate( |
- Compiler compiler, |
- FieldElementX element, |
- /* ScopeContainerElement */ container) { |
- updates.add(new FletchAddedFieldUpdate(compiler, element, container)); |
- } |
- |
- void addAddedClassUpdate( |
- Compiler compiler, |
- PartialClassElement element, |
- LibraryElementX library) { |
- updates.add(new FletchAddedClassUpdate(compiler, element, library)); |
- } |
- |
- static void forEachField(ClassElement c, void action(FieldElement field)) { |
- List classes = []; |
- while (c != null) { |
- if (!c.isResolved) { |
- throw new IncrementalCompilationFailed("Class not resolved: $c"); |
- } |
- classes.add(c); |
- c = c.superclass; |
- } |
- for (int i = classes.length - 1; i >= 0; i--) { |
- classes[i].implementation.forEachInstanceField((_, FieldElement field) { |
- action(field); |
- }); |
- } |
- } |
- |
- bool uriHasUpdate(Uri uri) => _context._uriHasUpdate(uri); |
- |
- bool allowClassHeaderModified(PartialClassElement after) { |
- if (!_context.incrementalCompiler.isExperimentalModeEnabled) { |
- return cannotReuse( |
- after, |
- "Changing a class header requires requires 'experimental' mode"); |
- } |
- return true; |
- } |
- |
- bool allowSignatureChanged( |
- PartialFunctionElement before, |
- PartialFunctionElement after) { |
- if (!_context.incrementalCompiler.isExperimentalModeEnabled) { |
- return cannotReuse( |
- after, "Signature change requires 'experimental' mode"); |
- } |
- return true; |
- } |
- |
- bool allowNonInstanceMemberModified(PartialFunctionElement after) { |
- if (!_context.incrementalCompiler.isExperimentalModeEnabled) { |
- return cannotReuse( |
- after, "Non-instance member requires 'experimental' mode"); |
- } |
- return true; |
- } |
- |
- bool allowRemovedElement(PartialElement element) { |
- if (!_context.incrementalCompiler.isExperimentalModeEnabled) { |
- return cannotReuse( |
- element, "Removing elements requires 'experimental' mode"); |
- } |
- return true; |
- } |
- |
- bool allowAddedElement(PartialElement element) { |
- if (!_context.incrementalCompiler.isExperimentalModeEnabled) { |
- return cannotReuse( |
- element, "Adding elements requires 'experimental' mode"); |
- } |
- return true; |
- } |
-} |
- |
-class FletchRemovedFunctionUpdate extends RemovedFunctionUpdate |
- with FletchFeatures { |
- FletchRemovedFunctionUpdate(Compiler compiler, PartialFunctionElement element) |
- : super(compiler, element); |
-} |
- |
-class FletchRemovedClassUpdate extends RemovedClassUpdate with FletchFeatures { |
- FletchRemovedClassUpdate(Compiler compiler, PartialClassElement element) |
- : super(compiler, element); |
-} |
- |
-class FletchRemovedFieldUpdate extends RemovedFieldUpdate with FletchFeatures { |
- // TODO(ahe): Remove? |
- FletchClassBuilder beforeFletchClassBuilder; |
- |
- FletchRemovedFieldUpdate(Compiler compiler, FieldElementX element) |
- : super(compiler, element); |
-} |
- |
-class FletchAddedFunctionUpdate extends AddedFunctionUpdate |
- with FletchFeatures { |
- FletchAddedFunctionUpdate( |
- Compiler compiler, |
- PartialFunctionElement element, |
- /* ScopeContainerElement */ container) |
- : super(compiler, element, container); |
-} |
- |
-class FletchAddedClassUpdate extends AddedClassUpdate with FletchFeatures { |
- FletchAddedClassUpdate( |
- Compiler compiler, |
- PartialClassElement element, |
- LibraryElementX library) |
- : super(compiler, element, library); |
-} |
- |
-class FletchAddedFieldUpdate extends AddedFieldUpdate with FletchFeatures { |
- FletchAddedFieldUpdate( |
- Compiler compiler, |
- FieldElementX element, |
- /* ScopeContainerElement */ container) |
- : super(compiler, element, container); |
-} |
- |
-class FletchClassUpdate extends ClassUpdate with FletchFeatures { |
- FletchClassUpdate( |
- Compiler compiler, |
- PartialClassElement before, |
- PartialClassElement after) |
- : super(compiler, before, after); |
-} |
- |
-abstract class FletchFeatures { |
- FletchCompilerImplementation get compiler; |
- |
- IncrementalFletchBackend get backend { |
- return compiler.backend as IncrementalFletchBackend; |
- } |
- |
- EnqueueTask get enqueuer => compiler.enqueuer; |
- |
- FletchContext get fletchContext => compiler.context; |
- |
- FletchFunctionBuilder lookupFletchFunctionBuilder(FunctionElement function) { |
- return backend.systemBuilder.lookupFunctionBuilderByElement(function); |
- } |
-} |