| OLD | NEW |
| 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 library kernel.ast_to_binary; | 4 library kernel.ast_to_binary; |
| 5 | 5 |
| 6 import '../ast.dart'; | 6 import '../ast.dart'; |
| 7 import '../import_table.dart'; | 7 import '../import_table.dart'; |
| 8 import 'tag.dart'; | 8 import 'tag.dart'; |
| 9 import 'dart:convert'; | 9 import 'dart:convert'; |
| 10 import 'dart:typed_data'; | 10 import 'dart:typed_data'; |
| (...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 196 if (allowNull) { | 196 if (allowNull) { |
| 197 writeByte(Tag.NullReference); | 197 writeByte(Tag.NullReference); |
| 198 } else { | 198 } else { |
| 199 throw 'Expected a member reference to be valid but was `null`.'; | 199 throw 'Expected a member reference to be valid but was `null`.'; |
| 200 } | 200 } |
| 201 } else { | 201 } else { |
| 202 node.acceptReference(this); | 202 node.acceptReference(this); |
| 203 } | 203 } |
| 204 } | 204 } |
| 205 | 205 |
| 206 writeOffset(TreeNode node) { | 206 writeOffset(TreeNode node, int offset) { |
| 207 // TODO(jensj): Delta-encoding. | 207 // TODO(jensj): Delta-encoding. |
| 208 // File offset ranges from -1 and up, | 208 // File offset ranges from -1 and up, |
| 209 // but is here saved as unsigned (thus the +1) | 209 // but is here saved as unsigned (thus the +1) |
| 210 writeUInt30(node.fileOffset + 1); | 210 writeUInt30(offset + 1); |
| 211 } | 211 } |
| 212 | 212 |
| 213 void visitClassReference(Class node) { | 213 void visitClassReference(Class node) { |
| 214 var library = node.enclosingLibrary; | 214 var library = node.enclosingLibrary; |
| 215 writeByte(node.isMixinApplication | 215 writeByte(node.isMixinApplication |
| 216 ? Tag.MixinClassReference | 216 ? Tag.MixinClassReference |
| 217 : Tag.NormalClassReference); | 217 : Tag.NormalClassReference); |
| 218 writeLibraryReference(library); | 218 writeLibraryReference(library); |
| 219 writeClassIndex(node); | 219 writeClassIndex(node); |
| 220 } | 220 } |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 283 writeList(annotations, writeAnnotation); | 283 writeList(annotations, writeAnnotation); |
| 284 } | 284 } |
| 285 | 285 |
| 286 visitClass(Class node) { | 286 visitClass(Class node) { |
| 287 int flags = node.isAbstract ? 1 : 0; | 287 int flags = node.isAbstract ? 1 : 0; |
| 288 if (node.level == ClassLevel.Type) { | 288 if (node.level == ClassLevel.Type) { |
| 289 flags |= 0x2; | 289 flags |= 0x2; |
| 290 } | 290 } |
| 291 if (node.isMixinApplication) { | 291 if (node.isMixinApplication) { |
| 292 writeByte(Tag.MixinClass); | 292 writeByte(Tag.MixinClass); |
| 293 writeOffset(node, node.fileOffset); |
| 293 writeByte(flags); | 294 writeByte(flags); |
| 294 writeStringReference(node.name ?? ''); | 295 writeStringReference(node.name ?? ''); |
| 295 writeUriReference(node.fileUri ?? ''); | 296 writeUriReference(node.fileUri ?? ''); |
| 296 writeAnnotationList(node.annotations); | 297 writeAnnotationList(node.annotations); |
| 297 _typeParameterIndexer.enter(node.typeParameters); | 298 _typeParameterIndexer.enter(node.typeParameters); |
| 298 writeNodeList(node.typeParameters); | 299 writeNodeList(node.typeParameters); |
| 299 writeNode(node.supertype); | 300 writeNode(node.supertype); |
| 300 writeNode(node.mixedInType); | 301 writeNode(node.mixedInType); |
| 301 writeNodeList(node.implementedTypes); | 302 writeNodeList(node.implementedTypes); |
| 302 writeNodeList(node.constructors); | 303 writeNodeList(node.constructors); |
| 303 _typeParameterIndexer.exit(node.typeParameters); | 304 _typeParameterIndexer.exit(node.typeParameters); |
| 304 } else { | 305 } else { |
| 305 writeByte(Tag.NormalClass); | 306 writeByte(Tag.NormalClass); |
| 307 writeOffset(node, node.fileOffset); |
| 306 writeByte(flags); | 308 writeByte(flags); |
| 307 writeStringReference(node.name ?? ''); | 309 writeStringReference(node.name ?? ''); |
| 308 writeUriReference(node.fileUri ?? ''); | 310 writeUriReference(node.fileUri ?? ''); |
| 309 writeAnnotationList(node.annotations); | 311 writeAnnotationList(node.annotations); |
| 310 _typeParameterIndexer.enter(node.typeParameters); | 312 _typeParameterIndexer.enter(node.typeParameters); |
| 311 writeNodeList(node.typeParameters); | 313 writeNodeList(node.typeParameters); |
| 312 writeOptionalNode(node.supertype); | 314 writeOptionalNode(node.supertype); |
| 313 writeNodeList(node.implementedTypes); | 315 writeNodeList(node.implementedTypes); |
| 314 writeNodeList(node.fields); | 316 writeNodeList(node.fields); |
| 315 writeNodeList(node.constructors); | 317 writeNodeList(node.constructors); |
| 316 writeNodeList(node.procedures); | 318 writeNodeList(node.procedures); |
| 317 _typeParameterIndexer.exit(node.typeParameters); | 319 _typeParameterIndexer.exit(node.typeParameters); |
| 318 } | 320 } |
| 319 } | 321 } |
| 320 | 322 |
| 321 static final Name _emptyName = new Name(''); | 323 static final Name _emptyName = new Name(''); |
| 322 | 324 |
| 323 visitConstructor(Constructor node) { | 325 visitConstructor(Constructor node) { |
| 324 _variableIndexer = new VariableIndexer(); | 326 _variableIndexer = new VariableIndexer(); |
| 325 writeByte(Tag.Constructor); | 327 writeByte(Tag.Constructor); |
| 328 writeOffset(node, node.fileOffset); |
| 329 writeOffset(node, node.fileEndOffset); |
| 326 writeByte(node.flags); | 330 writeByte(node.flags); |
| 327 writeName(node.name ?? _emptyName); | 331 writeName(node.name ?? _emptyName); |
| 328 writeAnnotationList(node.annotations); | 332 writeAnnotationList(node.annotations); |
| 329 assert(node.function.typeParameters.isEmpty); | 333 assert(node.function.typeParameters.isEmpty); |
| 330 writeNode(node.function); | 334 writeNode(node.function); |
| 331 // Parameters are in scope in the initializers. | 335 // Parameters are in scope in the initializers. |
| 332 _variableIndexer.restoreScope(node.function.positionalParameters.length + | 336 _variableIndexer.restoreScope(node.function.positionalParameters.length + |
| 333 node.function.namedParameters.length); | 337 node.function.namedParameters.length); |
| 334 writeNodeList(node.initializers); | 338 writeNodeList(node.initializers); |
| 335 _variableIndexer = null; | 339 _variableIndexer = null; |
| 336 } | 340 } |
| 337 | 341 |
| 338 visitProcedure(Procedure node) { | 342 visitProcedure(Procedure node) { |
| 339 _variableIndexer = new VariableIndexer(); | 343 _variableIndexer = new VariableIndexer(); |
| 340 writeByte(Tag.Procedure); | 344 writeByte(Tag.Procedure); |
| 345 writeOffset(node, node.fileOffset); |
| 346 writeOffset(node, node.fileEndOffset); |
| 341 writeByte(node.kind.index); | 347 writeByte(node.kind.index); |
| 342 writeByte(node.flags); | 348 writeByte(node.flags); |
| 343 writeName(node.name ?? ''); | 349 writeName(node.name ?? ''); |
| 344 writeUriReference(node.fileUri ?? ''); | 350 writeUriReference(node.fileUri ?? ''); |
| 345 writeAnnotationList(node.annotations); | 351 writeAnnotationList(node.annotations); |
| 346 writeOptionalNode(node.function); | 352 writeOptionalNode(node.function); |
| 347 _variableIndexer = null; | 353 _variableIndexer = null; |
| 348 } | 354 } |
| 349 | 355 |
| 350 visitField(Field node) { | 356 visitField(Field node) { |
| 351 _variableIndexer = new VariableIndexer(); | 357 _variableIndexer = new VariableIndexer(); |
| 352 writeByte(Tag.Field); | 358 writeByte(Tag.Field); |
| 353 writeOffset(node); | 359 writeOffset(node, node.fileOffset); |
| 360 writeOffset(node, node.fileEndOffset); |
| 354 writeByte(node.flags); | 361 writeByte(node.flags); |
| 355 writeName(node.name ?? ''); | 362 writeName(node.name ?? ''); |
| 356 writeUriReference(node.fileUri ?? ''); | 363 writeUriReference(node.fileUri ?? ''); |
| 357 writeAnnotationList(node.annotations); | 364 writeAnnotationList(node.annotations); |
| 358 writeNode(node.type); | 365 writeNode(node.type); |
| 359 writeOptionalInferredValue(node.inferredValue); | 366 writeOptionalInferredValue(node.inferredValue); |
| 360 writeOptionalNode(node.initializer); | 367 writeOptionalNode(node.initializer); |
| 361 _variableIndexer = null; | 368 _variableIndexer = null; |
| 362 } | 369 } |
| 363 | 370 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 390 | 397 |
| 391 visitFunctionNode(FunctionNode node) { | 398 visitFunctionNode(FunctionNode node) { |
| 392 assert(_variableIndexer != null); | 399 assert(_variableIndexer != null); |
| 393 _variableIndexer.pushScope(); | 400 _variableIndexer.pushScope(); |
| 394 var oldLabels = _labelIndexer; | 401 var oldLabels = _labelIndexer; |
| 395 _labelIndexer = new LabelIndexer(); | 402 _labelIndexer = new LabelIndexer(); |
| 396 var oldCases = _switchCaseIndexer; | 403 var oldCases = _switchCaseIndexer; |
| 397 _switchCaseIndexer = new SwitchCaseIndexer(); | 404 _switchCaseIndexer = new SwitchCaseIndexer(); |
| 398 // Note: FunctionNode has no tag. | 405 // Note: FunctionNode has no tag. |
| 399 _typeParameterIndexer.enter(node.typeParameters); | 406 _typeParameterIndexer.enter(node.typeParameters); |
| 407 writeOffset(node, node.fileOffset); |
| 408 writeOffset(node, node.fileEndOffset); |
| 400 writeByte(node.asyncMarker.index); | 409 writeByte(node.asyncMarker.index); |
| 410 writeByte(node.debuggable ? 1 : 0); |
| 401 writeNodeList(node.typeParameters); | 411 writeNodeList(node.typeParameters); |
| 402 writeUInt30(node.requiredParameterCount); | 412 writeUInt30(node.requiredParameterCount); |
| 403 writeVariableDeclarationList(node.positionalParameters); | 413 writeVariableDeclarationList(node.positionalParameters); |
| 404 writeVariableDeclarationList(node.namedParameters); | 414 writeVariableDeclarationList(node.namedParameters); |
| 405 writeNode(node.returnType); | 415 writeNode(node.returnType); |
| 406 writeOptionalInferredValue(node.inferredReturnValue); | 416 writeOptionalInferredValue(node.inferredReturnValue); |
| 407 writeOptionalNode(node.body); | 417 writeOptionalNode(node.body); |
| 408 _labelIndexer = oldLabels; | 418 _labelIndexer = oldLabels; |
| 409 _switchCaseIndexer = oldCases; | 419 _switchCaseIndexer = oldCases; |
| 410 _typeParameterIndexer.exit(node.typeParameters); | 420 _typeParameterIndexer.exit(node.typeParameters); |
| 411 _variableIndexer.popScope(); | 421 _variableIndexer.popScope(); |
| 412 } | 422 } |
| 413 | 423 |
| 414 visitInvalidExpression(InvalidExpression node) { | 424 visitInvalidExpression(InvalidExpression node) { |
| 415 writeByte(Tag.InvalidExpression); | 425 writeByte(Tag.InvalidExpression); |
| 416 } | 426 } |
| 417 | 427 |
| 418 visitVariableGet(VariableGet node) { | 428 visitVariableGet(VariableGet node) { |
| 419 assert(_variableIndexer != null); | 429 assert(_variableIndexer != null); |
| 420 int index = _variableIndexer[node.variable]; | 430 int index = _variableIndexer[node.variable]; |
| 421 assert(index != null); | 431 assert(index != null); |
| 422 if (index & Tag.SpecializedPayloadMask == index && | 432 if (index & Tag.SpecializedPayloadMask == index && |
| 423 node.promotedType == null) { | 433 node.promotedType == null) { |
| 424 writeByte(Tag.SpecializedVariableGet + index); | 434 writeByte(Tag.SpecializedVariableGet + index); |
| 435 writeOffset(node, node.fileOffset); |
| 425 } else { | 436 } else { |
| 426 writeByte(Tag.VariableGet); | 437 writeByte(Tag.VariableGet); |
| 438 writeOffset(node, node.fileOffset); |
| 427 writeUInt30(_variableIndexer[node.variable]); | 439 writeUInt30(_variableIndexer[node.variable]); |
| 428 writeOptionalNode(node.promotedType); | 440 writeOptionalNode(node.promotedType); |
| 429 } | 441 } |
| 430 } | 442 } |
| 431 | 443 |
| 432 visitVariableSet(VariableSet node) { | 444 visitVariableSet(VariableSet node) { |
| 433 assert(_variableIndexer != null); | 445 assert(_variableIndexer != null); |
| 434 int index = _variableIndexer[node.variable]; | 446 int index = _variableIndexer[node.variable]; |
| 435 if (index & Tag.SpecializedPayloadMask == index) { | 447 if (index & Tag.SpecializedPayloadMask == index) { |
| 436 writeByte(Tag.SpecializedVariableSet + index); | 448 writeByte(Tag.SpecializedVariableSet + index); |
| 449 writeOffset(node, node.fileOffset); |
| 437 writeNode(node.value); | 450 writeNode(node.value); |
| 438 } else { | 451 } else { |
| 439 writeByte(Tag.VariableSet); | 452 writeByte(Tag.VariableSet); |
| 453 writeOffset(node, node.fileOffset); |
| 440 writeUInt30(_variableIndexer[node.variable]); | 454 writeUInt30(_variableIndexer[node.variable]); |
| 441 writeNode(node.value); | 455 writeNode(node.value); |
| 442 } | 456 } |
| 443 } | 457 } |
| 444 | 458 |
| 445 visitPropertyGet(PropertyGet node) { | 459 visitPropertyGet(PropertyGet node) { |
| 446 writeByte(Tag.PropertyGet); | 460 writeByte(Tag.PropertyGet); |
| 447 writeOffset(node); | 461 writeOffset(node, node.fileOffset); |
| 448 writeNode(node.receiver); | 462 writeNode(node.receiver); |
| 449 writeName(node.name); | 463 writeName(node.name); |
| 450 writeMemberReference(node.interfaceTarget, allowNull: true); | 464 writeMemberReference(node.interfaceTarget, allowNull: true); |
| 451 } | 465 } |
| 452 | 466 |
| 453 visitPropertySet(PropertySet node) { | 467 visitPropertySet(PropertySet node) { |
| 454 writeByte(Tag.PropertySet); | 468 writeByte(Tag.PropertySet); |
| 455 writeOffset(node); | 469 writeOffset(node, node.fileOffset); |
| 456 writeNode(node.receiver); | 470 writeNode(node.receiver); |
| 457 writeName(node.name); | 471 writeName(node.name); |
| 458 writeNode(node.value); | 472 writeNode(node.value); |
| 459 writeMemberReference(node.interfaceTarget, allowNull: true); | 473 writeMemberReference(node.interfaceTarget, allowNull: true); |
| 460 } | 474 } |
| 461 | 475 |
| 462 visitSuperPropertyGet(SuperPropertyGet node) { | 476 visitSuperPropertyGet(SuperPropertyGet node) { |
| 463 writeByte(Tag.SuperPropertyGet); | 477 writeByte(Tag.SuperPropertyGet); |
| 464 writeName(node.name); | 478 writeName(node.name); |
| 465 writeMemberReference(node.interfaceTarget, allowNull: true); | 479 writeMemberReference(node.interfaceTarget, allowNull: true); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 480 | 494 |
| 481 visitDirectPropertySet(DirectPropertySet node) { | 495 visitDirectPropertySet(DirectPropertySet node) { |
| 482 writeByte(Tag.DirectPropertySet); | 496 writeByte(Tag.DirectPropertySet); |
| 483 writeNode(node.receiver); | 497 writeNode(node.receiver); |
| 484 writeMemberReference(node.target); | 498 writeMemberReference(node.target); |
| 485 writeNode(node.value); | 499 writeNode(node.value); |
| 486 } | 500 } |
| 487 | 501 |
| 488 visitStaticGet(StaticGet node) { | 502 visitStaticGet(StaticGet node) { |
| 489 writeByte(Tag.StaticGet); | 503 writeByte(Tag.StaticGet); |
| 490 writeOffset(node); | 504 writeOffset(node, node.fileOffset); |
| 491 writeMemberReference(node.target); | 505 writeMemberReference(node.target); |
| 492 } | 506 } |
| 493 | 507 |
| 494 visitStaticSet(StaticSet node) { | 508 visitStaticSet(StaticSet node) { |
| 495 writeByte(Tag.StaticSet); | 509 writeByte(Tag.StaticSet); |
| 496 writeMemberReference(node.target); | 510 writeMemberReference(node.target); |
| 497 writeNode(node.value); | 511 writeNode(node.value); |
| 498 } | 512 } |
| 499 | 513 |
| 500 visitMethodInvocation(MethodInvocation node) { | 514 visitMethodInvocation(MethodInvocation node) { |
| 501 writeByte(Tag.MethodInvocation); | 515 writeByte(Tag.MethodInvocation); |
| 502 writeOffset(node); | 516 writeOffset(node, node.fileOffset); |
| 503 writeNode(node.receiver); | 517 writeNode(node.receiver); |
| 504 writeName(node.name); | 518 writeName(node.name); |
| 505 writeNode(node.arguments); | 519 writeNode(node.arguments); |
| 506 writeMemberReference(node.interfaceTarget, allowNull: true); | 520 writeMemberReference(node.interfaceTarget, allowNull: true); |
| 507 } | 521 } |
| 508 | 522 |
| 509 visitSuperMethodInvocation(SuperMethodInvocation node) { | 523 visitSuperMethodInvocation(SuperMethodInvocation node) { |
| 510 writeByte(Tag.SuperMethodInvocation); | 524 writeByte(Tag.SuperMethodInvocation); |
| 511 writeOffset(node); | 525 writeOffset(node, node.fileOffset); |
| 512 writeName(node.name); | 526 writeName(node.name); |
| 513 writeNode(node.arguments); | 527 writeNode(node.arguments); |
| 514 writeMemberReference(node.interfaceTarget, allowNull: true); | 528 writeMemberReference(node.interfaceTarget, allowNull: true); |
| 515 } | 529 } |
| 516 | 530 |
| 517 visitDirectMethodInvocation(DirectMethodInvocation node) { | 531 visitDirectMethodInvocation(DirectMethodInvocation node) { |
| 518 writeByte(Tag.DirectMethodInvocation); | 532 writeByte(Tag.DirectMethodInvocation); |
| 519 writeNode(node.receiver); | 533 writeNode(node.receiver); |
| 520 writeMemberReference(node.target); | 534 writeMemberReference(node.target); |
| 521 writeNode(node.arguments); | 535 writeNode(node.arguments); |
| 522 } | 536 } |
| 523 | 537 |
| 524 visitStaticInvocation(StaticInvocation node) { | 538 visitStaticInvocation(StaticInvocation node) { |
| 525 writeByte(node.isConst ? Tag.ConstStaticInvocation : Tag.StaticInvocation); | 539 writeByte(node.isConst ? Tag.ConstStaticInvocation : Tag.StaticInvocation); |
| 526 writeOffset(node); | 540 writeOffset(node, node.fileOffset); |
| 527 writeMemberReference(node.target); | 541 writeMemberReference(node.target); |
| 528 writeNode(node.arguments); | 542 writeNode(node.arguments); |
| 529 } | 543 } |
| 530 | 544 |
| 531 visitConstructorInvocation(ConstructorInvocation node) { | 545 visitConstructorInvocation(ConstructorInvocation node) { |
| 532 writeByte(node.isConst | 546 writeByte(node.isConst |
| 533 ? Tag.ConstConstructorInvocation | 547 ? Tag.ConstConstructorInvocation |
| 534 : Tag.ConstructorInvocation); | 548 : Tag.ConstructorInvocation); |
| 535 writeOffset(node); | 549 writeOffset(node, node.fileOffset); |
| 536 writeMemberReference(node.target); | 550 writeMemberReference(node.target); |
| 537 writeNode(node.arguments); | 551 writeNode(node.arguments); |
| 538 } | 552 } |
| 539 | 553 |
| 540 visitArguments(Arguments node) { | 554 visitArguments(Arguments node) { |
| 541 writeNodeList(node.types); | 555 writeNodeList(node.types); |
| 542 writeNodeList(node.positional); | 556 writeNodeList(node.positional); |
| 543 writeNodeList(node.named); | 557 writeNodeList(node.named); |
| 544 } | 558 } |
| 545 | 559 |
| (...skipping 27 matching lines...) Expand all Loading... |
| 573 visitConditionalExpression(ConditionalExpression node) { | 587 visitConditionalExpression(ConditionalExpression node) { |
| 574 writeByte(Tag.ConditionalExpression); | 588 writeByte(Tag.ConditionalExpression); |
| 575 writeNode(node.condition); | 589 writeNode(node.condition); |
| 576 writeNode(node.then); | 590 writeNode(node.then); |
| 577 writeNode(node.otherwise); | 591 writeNode(node.otherwise); |
| 578 writeOptionalNode(node.staticType); | 592 writeOptionalNode(node.staticType); |
| 579 } | 593 } |
| 580 | 594 |
| 581 visitStringConcatenation(StringConcatenation node) { | 595 visitStringConcatenation(StringConcatenation node) { |
| 582 writeByte(Tag.StringConcatenation); | 596 writeByte(Tag.StringConcatenation); |
| 597 writeOffset(node, node.fileOffset); |
| 583 writeNodeList(node.expressions); | 598 writeNodeList(node.expressions); |
| 584 } | 599 } |
| 585 | 600 |
| 586 visitIsExpression(IsExpression node) { | 601 visitIsExpression(IsExpression node) { |
| 587 writeByte(Tag.IsExpression); | 602 writeByte(Tag.IsExpression); |
| 603 writeOffset(node, node.fileOffset); |
| 588 writeNode(node.operand); | 604 writeNode(node.operand); |
| 589 writeNode(node.type); | 605 writeNode(node.type); |
| 590 } | 606 } |
| 591 | 607 |
| 592 visitAsExpression(AsExpression node) { | 608 visitAsExpression(AsExpression node) { |
| 593 writeByte(Tag.AsExpression); | 609 writeByte(Tag.AsExpression); |
| 594 writeNode(node.operand); | 610 writeNode(node.operand); |
| 595 writeNode(node.type); | 611 writeNode(node.type); |
| 596 } | 612 } |
| 597 | 613 |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 648 visitThisExpression(ThisExpression node) { | 664 visitThisExpression(ThisExpression node) { |
| 649 writeByte(Tag.ThisExpression); | 665 writeByte(Tag.ThisExpression); |
| 650 } | 666 } |
| 651 | 667 |
| 652 visitRethrow(Rethrow node) { | 668 visitRethrow(Rethrow node) { |
| 653 writeByte(Tag.Rethrow); | 669 writeByte(Tag.Rethrow); |
| 654 } | 670 } |
| 655 | 671 |
| 656 visitThrow(Throw node) { | 672 visitThrow(Throw node) { |
| 657 writeByte(Tag.Throw); | 673 writeByte(Tag.Throw); |
| 658 writeOffset(node); | 674 writeOffset(node, node.fileOffset); |
| 659 writeNode(node.expression); | 675 writeNode(node.expression); |
| 660 } | 676 } |
| 661 | 677 |
| 662 visitListLiteral(ListLiteral node) { | 678 visitListLiteral(ListLiteral node) { |
| 663 writeByte(node.isConst ? Tag.ConstListLiteral : Tag.ListLiteral); | 679 writeByte(node.isConst ? Tag.ConstListLiteral : Tag.ListLiteral); |
| 664 writeNode(node.typeArgument); | 680 writeNode(node.typeArgument); |
| 665 writeNodeList(node.expressions); | 681 writeNodeList(node.expressions); |
| 666 } | 682 } |
| 667 | 683 |
| 668 visitMapLiteral(MapLiteral node) { | 684 visitMapLiteral(MapLiteral node) { |
| 669 writeByte(node.isConst ? Tag.ConstMapLiteral : Tag.MapLiteral); | 685 writeByte(node.isConst ? Tag.ConstMapLiteral : Tag.MapLiteral); |
| 686 writeOffset(node, node.fileOffset); |
| 670 writeNode(node.keyType); | 687 writeNode(node.keyType); |
| 671 writeNode(node.valueType); | 688 writeNode(node.valueType); |
| 672 writeNodeList(node.entries); | 689 writeNodeList(node.entries); |
| 673 } | 690 } |
| 674 | 691 |
| 675 visitMapEntry(MapEntry node) { | 692 visitMapEntry(MapEntry node) { |
| 676 // Note: there is no tag on MapEntry | 693 // Note: there is no tag on MapEntry |
| 677 writeNode(node.key); | 694 writeNode(node.key); |
| 678 writeNode(node.value); | 695 writeNode(node.value); |
| 679 } | 696 } |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 794 | 811 |
| 795 visitIfStatement(IfStatement node) { | 812 visitIfStatement(IfStatement node) { |
| 796 writeByte(Tag.IfStatement); | 813 writeByte(Tag.IfStatement); |
| 797 writeNode(node.condition); | 814 writeNode(node.condition); |
| 798 writeNode(node.then); | 815 writeNode(node.then); |
| 799 writeStatementOrEmpty(node.otherwise); | 816 writeStatementOrEmpty(node.otherwise); |
| 800 } | 817 } |
| 801 | 818 |
| 802 visitReturnStatement(ReturnStatement node) { | 819 visitReturnStatement(ReturnStatement node) { |
| 803 writeByte(Tag.ReturnStatement); | 820 writeByte(Tag.ReturnStatement); |
| 821 writeOffset(node, node.fileOffset); |
| 804 writeOptionalNode(node.expression); | 822 writeOptionalNode(node.expression); |
| 805 } | 823 } |
| 806 | 824 |
| 807 visitTryCatch(TryCatch node) { | 825 visitTryCatch(TryCatch node) { |
| 808 writeByte(Tag.TryCatch); | 826 writeByte(Tag.TryCatch); |
| 809 writeNode(node.body); | 827 writeNode(node.body); |
| 810 writeNodeList(node.catches); | 828 writeNodeList(node.catches); |
| 811 } | 829 } |
| 812 | 830 |
| 813 visitCatch(Catch node) { | 831 visitCatch(Catch node) { |
| 814 // Note: there is no tag on Catch. | 832 // Note: there is no tag on Catch. |
| 815 _variableIndexer.pushScope(); | 833 _variableIndexer.pushScope(); |
| 816 writeNode(node.guard); | 834 writeNode(node.guard); |
| 817 writeOptionalVariableDeclaration(node.exception); | 835 writeOptionalVariableDeclaration(node.exception); |
| 818 writeOptionalVariableDeclaration(node.stackTrace); | 836 writeOptionalVariableDeclaration(node.stackTrace); |
| 819 writeNode(node.body); | 837 writeNode(node.body); |
| 820 _variableIndexer.popScope(); | 838 _variableIndexer.popScope(); |
| 821 } | 839 } |
| 822 | 840 |
| 823 visitTryFinally(TryFinally node) { | 841 visitTryFinally(TryFinally node) { |
| 824 writeByte(Tag.TryFinally); | 842 writeByte(Tag.TryFinally); |
| 825 writeNode(node.body); | 843 writeNode(node.body); |
| 826 writeNode(node.finalizer); | 844 writeNode(node.finalizer); |
| 827 } | 845 } |
| 828 | 846 |
| 829 visitYieldStatement(YieldStatement node) { | 847 visitYieldStatement(YieldStatement node) { |
| 830 writeByte(Tag.YieldStatement); | 848 writeByte(Tag.YieldStatement); |
| 849 writeOffset(node, node.fileOffset); |
| 831 writeByte(node.flags); | 850 writeByte(node.flags); |
| 832 writeNode(node.expression); | 851 writeNode(node.expression); |
| 833 } | 852 } |
| 834 | 853 |
| 835 visitVariableDeclaration(VariableDeclaration node) { | 854 visitVariableDeclaration(VariableDeclaration node) { |
| 836 writeByte(Tag.VariableDeclaration); | 855 writeByte(Tag.VariableDeclaration); |
| 837 writeVariableDeclaration(node); | 856 writeVariableDeclaration(node); |
| 838 } | 857 } |
| 839 | 858 |
| 840 void writeVariableDeclaration(VariableDeclaration node) { | 859 void writeVariableDeclaration(VariableDeclaration node) { |
| 860 writeOffset(node, node.fileOffset); |
| 841 writeByte(node.flags); | 861 writeByte(node.flags); |
| 842 writeStringReference(node.name ?? ''); | 862 writeStringReference(node.name ?? ''); |
| 843 writeNode(node.type); | 863 writeNode(node.type); |
| 844 writeOptionalInferredValue(node.inferredValue); | 864 writeOptionalInferredValue(node.inferredValue); |
| 845 writeOptionalNode(node.initializer); | 865 writeOptionalNode(node.initializer); |
| 846 // Declare the variable after its initializer. It is not in scope in its | 866 // Declare the variable after its initializer. It is not in scope in its |
| 847 // own initializer. | 867 // own initializer. |
| 848 _variableIndexer.declare(node); | 868 _variableIndexer.declare(node); |
| 849 } | 869 } |
| 850 | 870 |
| 851 void writeVariableDeclarationList(List<VariableDeclaration> nodes) { | 871 void writeVariableDeclarationList(List<VariableDeclaration> nodes) { |
| 852 writeList(nodes, writeVariableDeclaration); | 872 writeList(nodes, writeVariableDeclaration); |
| 853 } | 873 } |
| 854 | 874 |
| 855 void writeOptionalVariableDeclaration(VariableDeclaration node) { | 875 void writeOptionalVariableDeclaration(VariableDeclaration node) { |
| 856 if (node == null) { | 876 if (node == null) { |
| 857 writeByte(Tag.Nothing); | 877 writeByte(Tag.Nothing); |
| 858 } else { | 878 } else { |
| 859 writeByte(Tag.Something); | 879 writeByte(Tag.Something); |
| 860 writeVariableDeclaration(node); | 880 writeVariableDeclaration(node); |
| 861 } | 881 } |
| 862 } | 882 } |
| 863 | 883 |
| 864 visitFunctionDeclaration(FunctionDeclaration node) { | 884 visitFunctionDeclaration(FunctionDeclaration node) { |
| 865 writeByte(Tag.FunctionDeclaration); | 885 writeByte(Tag.FunctionDeclaration); |
| 886 writeOffset(node, node.fileOffset); |
| 866 writeVariableDeclaration(node.variable); | 887 writeVariableDeclaration(node.variable); |
| 867 writeNode(node.function); | 888 writeNode(node.function); |
| 868 } | 889 } |
| 869 | 890 |
| 870 visitBottomType(BottomType node) { | 891 visitBottomType(BottomType node) { |
| 871 writeByte(Tag.BottomType); | 892 writeByte(Tag.BottomType); |
| 872 } | 893 } |
| 873 | 894 |
| 874 visitInvalidType(InvalidType node) { | 895 visitInvalidType(InvalidType node) { |
| 875 writeByte(Tag.InvalidType); | 896 writeByte(Tag.InvalidType); |
| (...skipping 344 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1220 void flush() { | 1241 void flush() { |
| 1221 _sink.add(_buffer.sublist(0, length)); | 1242 _sink.add(_buffer.sublist(0, length)); |
| 1222 _buffer = new Uint8List(SIZE); | 1243 _buffer = new Uint8List(SIZE); |
| 1223 length = 0; | 1244 length = 0; |
| 1224 } | 1245 } |
| 1225 | 1246 |
| 1226 void flushAndDestroy() { | 1247 void flushAndDestroy() { |
| 1227 _sink.add(_buffer.sublist(0, length)); | 1248 _sink.add(_buffer.sublist(0, length)); |
| 1228 } | 1249 } |
| 1229 } | 1250 } |
| OLD | NEW |