| Index: pkg/kernel/binary.md
|
| diff --git a/pkg/kernel/binary.md b/pkg/kernel/binary.md
|
| index 60596908fead59a521a0057dafb462780b73ff1e..440b7d6e89e1ccedc234da60ea4461c9036c07c7 100644
|
| --- a/pkg/kernel/binary.md
|
| +++ b/pkg/kernel/binary.md
|
| @@ -91,70 +91,52 @@ type Something<T> extends Option<T> {
|
| T value;
|
| }
|
|
|
| +type CanonicalNameReference {
|
| + UInt biasedIndex; // 0 if null, otherwise N+1 where N is index of parent
|
| +}
|
| +
|
| +type CanonicalName {
|
| + CanonicalNameReference parent;
|
| + StringReference name;
|
| +}
|
| +
|
| type ProgramFile {
|
| MagicWord magic = 0x90ABCDEF;
|
| StringTable strings;
|
| UriSource sourceMap;
|
| + List<CanonicalName> canonicalNames;
|
| List<Library> libraries;
|
| - LibraryProcedureReference mainMethod;
|
| + ProcedureReference mainMethod;
|
| }
|
|
|
| type LibraryReference {
|
| - // Index into the ProgramFile libraries.
|
| - UInt index;
|
| + // Must be populated by a library (possibly later in the file).
|
| + CanonicalNameReference canonicalName;
|
| }
|
|
|
| -abstract type ClassReference {}
|
| -
|
| -type NormalClassReference extends ClassReference {
|
| - Byte tag = 100;
|
| - LibraryReference library;
|
| - UInt classIndex;
|
| +type ClassReference {
|
| + // Must be populated by a class (possibly later in the file).
|
| + CanonicalNameReference canonicalName;
|
| }
|
|
|
| -type MixinClassReference extends ClassReference {
|
| - Byte tag = 101;
|
| - LibraryReference library;
|
| - UInt classIndex;
|
| +type MemberReference {
|
| + // Must be populated by a member (possibly later in the file).
|
| + CanonicalNameReference canonicalName;
|
| }
|
|
|
| -abstract type MemberReference {
|
| +type FieldReference {
|
| + // Must be populated by a field (possibly later in the file).
|
| + CanonicalNameReference canonicalName;
|
| }
|
|
|
| -type LibraryFieldReference extends MemberReference {
|
| - Byte tag = 102;
|
| - LibraryReference library;
|
| - UInt fieldIndex; // Index in list of fields.
|
| +type ConstructorReference {
|
| + // Must be populated by a constructor (possibly later in the file).
|
| + CanonicalNameReference canonicalName;
|
| }
|
|
|
| -type ClassFieldReference extends MemberReference {
|
| - Byte tag = 103;
|
| - ClassReference class;
|
| - UInt fieldIndex;
|
| -}
|
| -
|
| -type ClassConstructorReference extends MemberReference {
|
| - Byte tag = 104;
|
| - ClassReference class;
|
| - UInt constructorIndex; // Index in list of constructors.
|
| -}
|
| -
|
| -type LibraryProcedureReference extends MemberReference {
|
| - Byte tag = 105;
|
| - LibraryReference library;
|
| - UInt procedureIndex; // Index in list of procedures.
|
| -}
|
| -
|
| -type ClassProcedureReference extends MemberReference {
|
| - Byte tag = 106;
|
| - ClassReference class;
|
| - UInt procedureIndex;
|
| -}
|
| -
|
| -// Can be used as MemberReference or ClassReference *only* if indicated that
|
| -// the given reference may be a NullReference.
|
| -type NullReference extends MemberReference, ClassReference {
|
| - Byte tag = 99;
|
| +type ProcedureReference {
|
| + // Must be populated by a procedure (possibly later in the file).
|
| + CanonicalNameReference canonicalName;
|
| }
|
|
|
| type Name {
|
| @@ -166,13 +148,8 @@ type Name {
|
|
|
| type Library {
|
| Byte flags (isExternal);
|
| + CanonicalNameReference canonicalName;
|
| StringReference name;
|
| - // A URI from which the library was created. The URI has the dart, package,
|
| - // file, or app scheme. For file URIs, the path is an absolute path to the
|
| - // .dart file from which the library was created. For app URIs, the path is
|
| - // relative to an application root that was specified when the binary was
|
| - // generated.
|
| - StringReference importUri;
|
| // An absolute path URI to the .dart file from which the library was created.
|
| UriReference fileUri;
|
| List<DeferredImport> deferredImports;
|
| @@ -205,10 +182,9 @@ enum ClassLevel { Type = 0, Hierarchy = 1, Mixin = 2, Body = 3, }
|
| //
|
| // See ClassLevel in ast.dart for the details of each loading level.
|
|
|
| -abstract type Class extends Node {}
|
| -
|
| -type NormalClass extends Class {
|
| +abstract type Class extends Node {
|
| Byte tag = 2;
|
| + CanonicalNameReference canonicalName;
|
| FileOffset fileOffset;
|
| Byte flags (isAbstract, xx); // Where xx is index into ClassLevel
|
| StringReference name;
|
| @@ -217,31 +193,18 @@ type NormalClass extends Class {
|
| List<Expression> annotations;
|
| List<TypeParameter> typeParameters;
|
| Option<InterfaceType> superClass;
|
| + Option<InterfaceType> mixedInType;
|
| List<InterfaceType> implementedClasses;
|
| List<Field> fields;
|
| List<Constructor> constructors;
|
| List<Procedure> procedures;
|
| }
|
|
|
| -type MixinClass extends Class {
|
| - Byte tag = 3;
|
| - FileOffset fileOffset;
|
| - Byte flags (isAbstract, isTypeLevel);
|
| - StringReference name;
|
| - // An absolute path URI to the .dart file from which the class was created.
|
| - UriReference fileUri;
|
| - List<Expression> annotations;
|
| - List<TypeParameter> typeParameters;
|
| - InterfaceType firstSuperClass;
|
| - InterfaceType secondSuperClass;
|
| - List<InterfaceType> implementedClasses;
|
| - List<Constructor> constructors;
|
| -}
|
| -
|
| abstract type Member extends Node {}
|
|
|
| type Field extends Member {
|
| Byte tag = 4;
|
| + CanonicalNameReference canonicalName;
|
| FileOffset fileOffset;
|
| FileOffset fileEndOffset;
|
| Byte flags (isFinal, isConst, isStatic);
|
| @@ -256,6 +219,7 @@ type Field extends Member {
|
|
|
| type Constructor extends Member {
|
| Byte tag = 5;
|
| + CanonicalNameReference canonicalName;
|
| FileOffset fileOffset;
|
| FileOffset fileEndOffset;
|
| Byte flags (isConst, isExternal);
|
| @@ -277,6 +241,7 @@ enum ProcedureKind {
|
|
|
| type Procedure extends Member {
|
| Byte tag = 6;
|
| + CanonicalNameReference canonicalName;
|
| FileOffset fileOffset;
|
| FileOffset fileEndOffset;
|
| Byte kind; // Index into the ProcedureKind enum above.
|
|
|