Index: pkg/fletchc/lib/fletch_system.dart |
diff --git a/pkg/fletchc/lib/fletch_system.dart b/pkg/fletchc/lib/fletch_system.dart |
deleted file mode 100644 |
index 233a8668ac431ff225c85bfef2c36d6ae1da1f00..0000000000000000000000000000000000000000 |
--- a/pkg/fletchc/lib/fletch_system.dart |
+++ /dev/null |
@@ -1,328 +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.fletch_system; |
- |
-import 'package:compiler/src/constants/values.dart' show |
- ConstantValue; |
- |
-import 'package:compiler/src/elements/elements.dart' show |
- ClassElement, |
- ConstructorElement, |
- Element, |
- FieldElement, |
- FunctionSignature; |
- |
-import 'package:compiler/src/universe/call_structure.dart' show |
- CallStructure; |
- |
-import 'package:persistent/persistent.dart' show |
- PersistentMap; |
- |
-import 'bytecodes.dart'; |
-import 'vm_commands.dart'; |
- |
-import 'src/fletch_selector.dart' show |
- FletchSelector; |
- |
-import 'src/fletch_system_printer.dart' show |
- FletchSystemPrinter; |
- |
-enum FletchFunctionKind { |
- NORMAL, |
- LAZY_FIELD_INITIALIZER, |
- INITIALIZER_LIST, |
- PARAMETER_STUB, |
- ACCESSOR |
-} |
- |
-// TODO(ajohnsen): Move to separate file. |
-class FletchConstant { |
- final int id; |
- final MapId mapId; |
- const FletchConstant(this.id, this.mapId); |
- |
- String toString() => "FletchConstant($id, $mapId)"; |
-} |
- |
-// TODO(ajohnsen): Move to separate file. |
-class FletchClass { |
- final int classId; |
- final String name; |
- final ClassElement element; |
- final int superclassId; |
- final int superclassFields; |
- final PersistentMap<int, int> methodTable; |
- final List<FieldElement> fields; |
- |
- const FletchClass( |
- this.classId, |
- this.name, |
- this.element, |
- this.superclassId, |
- this.superclassFields, |
- this.methodTable, |
- this.fields); |
- |
- bool get hasSuperclassId => superclassId >= 0; |
- |
- String toString() => "FletchClass($classId, '$name')"; |
-} |
- |
-// TODO(ajohnsen): Move to separate file. |
-abstract class FletchFunctionBase { |
- final int functionId; |
- final FletchFunctionKind kind; |
- // TODO(ajohnsen): Merge with function signature? |
- final int arity; |
- // TODO(ajohnsen): Remove name? |
- final String name; |
- final Element element; |
- |
- /** |
- * The signature of the FletchFunctionBuilder. |
- * |
- * Some compiled functions does not have a signature (for example, generated |
- * accessors). |
- */ |
- final FunctionSignature signature; |
- final int memberOf; |
- |
- const FletchFunctionBase( |
- this.functionId, |
- this.kind, |
- this.arity, |
- this.name, |
- this.element, |
- this.signature, |
- this.memberOf); |
- |
- bool get isInstanceMember => memberOf != null; |
- bool get isInternal => element == null; |
- |
- bool get isLazyFieldInitializer { |
- return kind == FletchFunctionKind.LAZY_FIELD_INITIALIZER; |
- } |
- |
- bool get isInitializerList { |
- return kind == FletchFunctionKind.INITIALIZER_LIST; |
- } |
- |
- bool get isAccessor { |
- return kind == FletchFunctionKind.ACCESSOR; |
- } |
- |
- bool get isParameterStub { |
- return kind == FletchFunctionKind.PARAMETER_STUB; |
- } |
- |
- bool get isConstructor => element != null && element.isConstructor; |
- |
- String verboseToString(); |
-} |
- |
-// TODO(ajohnsen): Move to separate file. |
-class FletchFunction extends FletchFunctionBase { |
- final List<Bytecode> bytecodes; |
- final List<FletchConstant> constants; |
- |
- const FletchFunction( |
- int functionId, |
- FletchFunctionKind kind, |
- int arity, |
- String name, |
- Element element, |
- FunctionSignature signature, |
- this.bytecodes, |
- this.constants, |
- int memberOf) |
- : super(functionId, kind, arity, name, element, signature, memberOf); |
- |
- FletchFunction withReplacedConstants(List<FletchConstant> constants) { |
- return new FletchFunction( |
- functionId, |
- kind, |
- arity, |
- name, |
- element, |
- signature, |
- bytecodes, |
- constants, |
- memberOf); |
- } |
- |
- /// Represents a function we have lost track off, for example, -1 in a |
- /// backtrace from the Fletch VM. |
- const FletchFunction.missing() |
- : this( |
- -1, FletchFunctionKind.NORMAL, 0, "<missing>", null, null, |
- const <Bytecode>[], const <FletchConstant>[], null); |
- |
- String toString() { |
- StringBuffer buffer = new StringBuffer(); |
- buffer.write("FletchFunction($functionId, '$name'"); |
- if (isInstanceMember) { |
- buffer.write(", memberOf=$memberOf"); |
- } |
- buffer.write(")"); |
- return buffer.toString(); |
- } |
- |
- String verboseToString() { |
- StringBuffer sb = new StringBuffer(); |
- |
- sb.writeln("Function $functionId, Arity=$arity"); |
- sb.writeln("Constants:"); |
- for (int i = 0; i < constants.length; i++) { |
- FletchConstant constant = constants[i]; |
- sb.writeln(" #$i: $constant"); |
- } |
- |
- sb.writeln("Bytecodes:"); |
- Bytecode.prettyPrint(sb, bytecodes); |
- |
- return '$sb'; |
- } |
-} |
- |
-class ParameterStubSignature { |
- final int functionId; |
- final CallStructure callStructure; |
- |
- const ParameterStubSignature(this.functionId, this.callStructure); |
- |
- int get hashCode => functionId ^ callStructure.hashCode; |
- |
- bool operator==(other) { |
- return other is ParameterStubSignature && |
- other.functionId == functionId && |
- other.callStructure == callStructure; |
- } |
-} |
- |
-class FletchSystem { |
- // functionsByElement is a subset of functionsById: Some functions do not |
- // have an element reference. |
- final PersistentMap<int, FletchFunction> functionsById; |
- final PersistentMap<Element, FletchFunction> functionsByElement; |
- |
- final PersistentMap<ConstructorElement, FletchFunction> |
- constructorInitializersByElement; |
- |
- final PersistentMap<int, int> tearoffsById; |
- |
- // classesByElement is a subset of classesById: Some classes do not |
- // have an element reference. |
- final PersistentMap<int, FletchClass> classesById; |
- final PersistentMap<ClassElement, FletchClass> classesByElement; |
- |
- final PersistentMap<int, FletchConstant> constantsById; |
- final PersistentMap<ConstantValue, FletchConstant> constantsByValue; |
- |
- final PersistentMap<int, String> symbolByFletchSelectorId; |
- |
- final PersistentMap<int, int> gettersByFieldIndex; |
- |
- final PersistentMap<int, int> settersByFieldIndex; |
- |
- final PersistentMap<ParameterStubSignature, FletchFunction> parameterStubs; |
- |
- const FletchSystem( |
- this.functionsById, |
- this.functionsByElement, |
- this.constructorInitializersByElement, |
- this.tearoffsById, |
- this.classesById, |
- this.classesByElement, |
- this.constantsById, |
- this.constantsByValue, |
- this.symbolByFletchSelectorId, |
- this.gettersByFieldIndex, |
- this.settersByFieldIndex, |
- this.parameterStubs); |
- |
- bool get isEmpty => functionsById.isEmpty; |
- |
- String lookupSymbolBySelector(int fletchSelector) { |
- return symbolByFletchSelectorId[FletchSelector.decodeId(fletchSelector)]; |
- } |
- |
- FletchFunction lookupFunctionById(int functionId) { |
- return functionsById[functionId]; |
- } |
- |
- FletchFunction lookupFunctionByElement(Element element) { |
- return functionsByElement[element]; |
- } |
- |
- Iterable<FletchFunction> functionsWhere(bool f(FletchFunction function)) { |
- return functionsById.values.where(f); |
- } |
- |
- FletchConstant lookupConstantById(int constantId) { |
- return constantsById[constantId]; |
- } |
- |
- FletchConstant lookupConstantByValue(ConstantValue value) { |
- return constantsByValue[value]; |
- } |
- |
- FletchFunction lookupConstructorInitializerByElement( |
- ConstructorElement element) { |
- return constructorInitializersByElement[element]; |
- } |
- |
- /// Map from the ID of a [FletchFunction] to the ID of its corresponding |
- /// tear-off [FletchFunction]. |
- /// |
- /// To obtain the tear-off corresponding to an [Element], look up the |
- /// function in [functionsByElement]. |
- int lookupTearOffById(int functionId) => tearoffsById[functionId]; |
- |
- /// Instance field getters can be reused between classes. This method returns |
- /// a getter that gets the field at [fieldIndex]. Returns `null` if no such |
- /// getter exists. |
- int lookupGetterByFieldIndex(int fieldIndex) { |
- return gettersByFieldIndex[fieldIndex]; |
- } |
- |
- /// Instance field setters can be reused between classes. This method returns |
- /// a setter that sets the field at [fieldIndex]. Returns `null` if no such |
- /// setter exists. |
- int lookupSetterByFieldIndex(int fieldIndex) { |
- return settersByFieldIndex[fieldIndex]; |
- } |
- |
- FletchClass lookupClassById(int classId) { |
- return classesById[classId]; |
- } |
- |
- FletchClass lookupClassByElement(ClassElement element) { |
- return classesByElement[element]; |
- } |
- |
- FletchFunction lookupParameterStub(ParameterStubSignature signature) { |
- return parameterStubs[signature]; |
- } |
- |
- int computeMaxFunctionId() { |
- return functionsById.keys.fold(-1, (x, y) => x > y ? x : y); |
- } |
- |
- int computeMaxClassId() { |
- return classesById.keys.fold(-1, (x, y) => x > y ? x : y); |
- } |
- |
- String toDebugString(Uri base) { |
- return new FletchSystemPrinter(this, base).generateDebugString(); |
- } |
-} |
- |
-class FletchDelta { |
- final FletchSystem system; |
- final FletchSystem predecessorSystem; |
- final List<VmCommand> commands; |
- |
- const FletchDelta(this.system, this.predecessorSystem, this.commands); |
-} |