Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(166)

Side by Side Diff: pkg/kernel/binary.md

Issue 2886873008: [kernel] Streaming ScopeBuilder (Closed)
Patch Set: Addressed (some) comments; rebased. Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | pkg/kernel/lib/ast.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 This file describes the binary format of Dart Kernel. 1 This file describes the binary format of Dart Kernel.
2 2
3 Notation 3 Notation
4 -------- 4 --------
5 Bitmasks are described with the syntax: 5 Bitmasks are described with the syntax:
6 ```scala 6 ```scala
7 Byte flags (flag1, flag2, ..., flagN) 7 Byte flags (flag1, flag2, ..., flagN)
8 ``` 8 ```
9 where 'flag<N>' is the N-th least significant bit, 9 where 'flag<N>' is the N-th least significant bit,
10 (so flag1 is the least significant bit). 10 (so flag1 is the least significant bit).
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
224 } 224 }
225 225
226 abstract type Member extends Node {} 226 abstract type Member extends Node {}
227 227
228 type Field extends Member { 228 type Field extends Member {
229 Byte tag = 4; 229 Byte tag = 4;
230 CanonicalNameReference canonicalName; 230 CanonicalNameReference canonicalName;
231 FileOffset fileOffset; 231 FileOffset fileOffset;
232 FileOffset fileEndOffset; 232 FileOffset fileEndOffset;
233 Byte flags (isFinal, isConst, isStatic); 233 Byte flags (isFinal, isConst, isStatic);
234 // Byte offset in the binary for the parent class,
235 // or 0 if parent is not a class
236 UInt parentPosition;
234 Name name; 237 Name name;
235 // An absolute path URI to the .dart file from which the field was created. 238 // An absolute path URI to the .dart file from which the field was created.
236 UriReference fileUri; 239 UriReference fileUri;
237 List<Expression> annotations; 240 List<Expression> annotations;
238 DartType type; 241 DartType type;
239 Option<Expression> initializer; 242 Option<Expression> initializer;
240 } 243 }
241 244
242 type Constructor extends Member { 245 type Constructor extends Member {
243 Byte tag = 5; 246 Byte tag = 5;
244 CanonicalNameReference canonicalName; 247 CanonicalNameReference canonicalName;
245 FileOffset fileOffset; 248 FileOffset fileOffset;
246 FileOffset fileEndOffset; 249 FileOffset fileEndOffset;
247 Byte flags (isConst, isExternal); 250 Byte flags (isConst, isExternal);
251 UInt parentPosition; // Byte offset in the binary for the parent class.
248 Name name; 252 Name name;
249 List<Expression> annotations; 253 List<Expression> annotations;
250 FunctionNode function; 254 FunctionNode function;
251 List<Initializer> initializers; 255 List<Initializer> initializers;
252 } 256 }
253 257
254 /* 258 /*
255 enum ProcedureKind { 259 enum ProcedureKind {
256 Method, 260 Method,
257 Getter, 261 Getter,
258 Setter, 262 Setter,
259 Operator, 263 Operator,
260 Factory, 264 Factory,
261 } 265 }
262 */ 266 */
263 267
264 type Procedure extends Member { 268 type Procedure extends Member {
265 Byte tag = 6; 269 Byte tag = 6;
266 CanonicalNameReference canonicalName; 270 CanonicalNameReference canonicalName;
267 FileOffset fileOffset; 271 FileOffset fileOffset;
268 FileOffset fileEndOffset; 272 FileOffset fileEndOffset;
269 Byte kind; // Index into the ProcedureKind enum above. 273 Byte kind; // Index into the ProcedureKind enum above.
270 Byte flags (isStatic, isAbstract, isExternal, isConst); 274 Byte flags (isStatic, isAbstract, isExternal, isConst);
275 // Byte offset in the binary for the parent class,
276 // or 0 if parent is not a class.
277 UInt parentPosition;
271 Name name; 278 Name name;
272 // An absolute path URI to the .dart file from which the class was created. 279 // An absolute path URI to the .dart file from which the class was created.
273 UriReference fileUri; 280 UriReference fileUri;
274 List<Expression> annotations; 281 List<Expression> annotations;
275 // Can only be absent if abstract, but tag is there anyway. 282 // Can only be absent if abstract, but tag is there anyway.
276 Option<FunctionNode> function; 283 Option<FunctionNode> function;
277 } 284 }
278 285
279 abstract type Initializer extends Node {} 286 abstract type Initializer extends Node {}
280 287
(...skipping 28 matching lines...) Expand all
309 enum AsyncMarker { 316 enum AsyncMarker {
310 Sync, 317 Sync,
311 SyncStar, 318 SyncStar,
312 Async, 319 Async,
313 AsyncStar, 320 AsyncStar,
314 SyncYielding 321 SyncYielding
315 } 322 }
316 */ 323 */
317 324
318 type FunctionNode { 325 type FunctionNode {
319 // Note: there is no tag on FunctionNode. 326 Byte tag = 3;
320 FileOffset fileOffset; 327 FileOffset fileOffset;
321 FileOffset fileEndOffset; 328 FileOffset fileEndOffset;
322 Byte asyncMarker; // Index into AsyncMarker above. 329 Byte asyncMarker; // Index into AsyncMarker above.
323 Byte dartAsyncMarker; // Index into AsyncMarker above. 330 Byte dartAsyncMarker; // Index into AsyncMarker above.
324 List<TypeParameter> typeParameters; 331 List<TypeParameter> typeParameters;
325 UInt requiredParameterCount; 332 UInt requiredParameterCount;
326 List<VariableDeclaration> positionalParameters; 333 List<VariableDeclaration> positionalParameters;
327 List<VariableDeclaration> namedParameters; 334 List<VariableDeclaration> namedParameters;
328 DartType returnType; 335 DartType returnType;
329 Option<Statement> body; 336 Option<Statement> body;
(...skipping 24 matching lines...) Expand all
354 361
355 abstract type Expression extends Node {} 362 abstract type Expression extends Node {}
356 363
357 type InvalidExpression extends Expression { 364 type InvalidExpression extends Expression {
358 Byte tag = 19; 365 Byte tag = 19;
359 } 366 }
360 367
361 type VariableGet extends Expression { 368 type VariableGet extends Expression {
362 Byte tag = 20; 369 Byte tag = 20;
363 FileOffset fileOffset; 370 FileOffset fileOffset;
364 UInt variableDeclarationPosition; // Byte offset in the binary for the variabl e declaration. 371 // Byte offset in the binary for the variable declaration (without tag).
372 UInt variableDeclarationPosition;
365 VariableReference variable; 373 VariableReference variable;
366 } 374 }
367 375
368 type SpecializedVariableGet extends Expression { 376 type SpecializedVariableGet extends Expression {
369 Byte tag = 128 + N; // Where 0 <= N < 8. 377 Byte tag = 128 + N; // Where 0 <= N < 8.
370 // Equivalent to a VariableGet with index N. 378 // Equivalent to a VariableGet with index N.
371 FileOffset fileOffset; 379 FileOffset fileOffset;
372 UInt variableDeclarationPosition; // Byte offset in the binary for the variabl e declaration. 380 // Byte offset in the binary for the variable declaration (without tag).
381 UInt variableDeclarationPosition;
373 } 382 }
374 383
375 type VariableSet extends Expression { 384 type VariableSet extends Expression {
376 Byte tag = 21; 385 Byte tag = 21;
377 FileOffset fileOffset; 386 FileOffset fileOffset;
378 UInt variableDeclarationPosition; // Byte offset in the binary for the variabl e declaration. 387 // Byte offset in the binary for the variable declaration (without tag).
388 UInt variableDeclarationPosition;
379 VariableReference variable; 389 VariableReference variable;
380 Expression value; 390 Expression value;
381 } 391 }
382 392
383 type SpecializedVariableSet extends Expression { 393 type SpecializedVariableSet extends Expression {
384 Byte tag = 136 + N; // Where 0 <= N < 8. 394 Byte tag = 136 + N; // Where 0 <= N < 8.
385 FileOffset fileOffset; 395 FileOffset fileOffset;
386 UInt variableDeclarationPosition; // Byte offset in the binary for the variabl e declaration. 396 // Byte offset in the binary for the variable declaration (without tag).
397 UInt variableDeclarationPosition;
387 Expression value; 398 Expression value;
388 // Equivalent to VariableSet with index N. 399 // Equivalent to VariableSet with index N.
389 } 400 }
390 401
391 type PropertyGet extends Expression { 402 type PropertyGet extends Expression {
392 Byte tag = 22; 403 Byte tag = 22;
393 FileOffset fileOffset; 404 FileOffset fileOffset;
394 Expression receiver; 405 Expression receiver;
395 Name name; 406 Name name;
396 MemberReference interfaceTarget; // May be NullReference. 407 MemberReference interfaceTarget; // May be NullReference.
(...skipping 434 matching lines...) Expand 10 before | Expand all | Expand 10 after
831 842
832 type ReturnStatement extends Statement { 843 type ReturnStatement extends Statement {
833 Byte tag = 74; 844 Byte tag = 74;
834 FileOffset fileOffset; 845 FileOffset fileOffset;
835 Option<Expression> expression; 846 Option<Expression> expression;
836 } 847 }
837 848
838 type TryCatch extends Statement { 849 type TryCatch extends Statement {
839 Byte tag = 75; 850 Byte tag = 75;
840 Statement body; 851 Statement body;
841 Byte anyCatchNeedsStackTrace; // 1 if any catch needs a stacktrace (have a sta cktrace variable). 852 // 1 if any catch needs a stacktrace (have a stacktrace variable).
853 Byte anyCatchNeedsStackTrace;
842 List<Catch> catches; 854 List<Catch> catches;
843 } 855 }
844 856
845 type Catch { 857 type Catch {
846 DartType guard; 858 DartType guard;
847 Option<VariableDeclaration> exception; 859 Option<VariableDeclaration> exception;
848 Option<VariableDeclaration> stackTrace; 860 Option<VariableDeclaration> stackTrace;
849 Statement body; 861 Statement body;
850 } 862 }
851 863
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
927 type SimpleInterfaceType extends DartType { 939 type SimpleInterfaceType extends DartType {
928 Byte tag = 96; // Note: tag is out of order. 940 Byte tag = 96; // Note: tag is out of order.
929 ClassReference class; 941 ClassReference class;
930 // Equivalent to InterfaceType with empty list of type arguments. 942 // Equivalent to InterfaceType with empty list of type arguments.
931 } 943 }
932 944
933 type FunctionType extends DartType { 945 type FunctionType extends DartType {
934 Byte tag = 94; 946 Byte tag = 94;
935 List<TypeParameter> typeParameters; 947 List<TypeParameter> typeParameters;
936 UInt requiredParameterCount; 948 UInt requiredParameterCount;
937 UInt totalParameterCount; // positionalParameters.length + namedParameters.len gth 949 // positionalParameters.length + namedParameters.length
950 UInt totalParameterCount;
938 List<DartType> positionalParameters; 951 List<DartType> positionalParameters;
939 List<NamedDartType> namedParameters; 952 List<NamedDartType> namedParameters;
940 DartType returnType; 953 DartType returnType;
941 } 954 }
942 955
943 type SimpleFunctionType extends DartType { 956 type SimpleFunctionType extends DartType {
944 Byte tag = 97; // Note: tag is out of order. 957 Byte tag = 97; // Note: tag is out of order.
945 List<DartType> positionalParameters; 958 List<DartType> positionalParameters;
946 DartType returnType; 959 DartType returnType;
947 // Equivalent to a FunctionType with no type parameters or named parameters, 960 // Equivalent to a FunctionType with no type parameters or named parameters,
(...skipping 21 matching lines...) Expand all
969 // scope there. 982 // scope there.
970 // 983 //
971 // The type parameter can be bound by a Class, FunctionNode, or FunctionType. 984 // The type parameter can be bound by a Class, FunctionNode, or FunctionType.
972 // 985 //
973 // Note that constructors currently do not declare type parameters. Uses of 986 // Note that constructors currently do not declare type parameters. Uses of
974 // the class type parameters in a constructor refer to those declared on the 987 // the class type parameters in a constructor refer to those declared on the
975 // class. 988 // class.
976 UInt index; 989 UInt index;
977 990
978 // Byte offset in the binary for the type declaration. 991 // Byte offset in the binary for the type declaration.
979 // Note: This can also be 0, which is a 'forward reference' and is not to be u sed. 992 // Note: This can also be 0,
993 // which is a 'forward reference' and is not to be used.
980 UInt typeParameterPosition; 994 UInt typeParameterPosition;
981 Option<DartType> bound; 995 Option<DartType> bound;
982 } 996 }
983 997
984 type TypeParameter { 998 type TypeParameter {
985 // Note: there is no tag on TypeParameter 999 // Note: there is no tag on TypeParameter
986 StringReference name; // Cosmetic, may be empty, not unique. 1000 StringReference name; // Cosmetic, may be empty, not unique.
987 DartType bound; // 'dynamic' if no explicit bound was given. 1001 DartType bound; // 'dynamic' if no explicit bound was given.
988 } 1002 }
989 1003
990 ``` 1004 ```
OLDNEW
« no previous file with comments | « no previous file | pkg/kernel/lib/ast.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698