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

Side by Side Diff: vm/intermediate_language.h

Issue 10632009: Make the parser agnostic to the TokenStream implementation. This is the first step towards compacti… (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/runtime/
Patch Set: Created 8 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 | Annotate | Revision Log
« no previous file with comments | « vm/flow_graph_compiler_x64.cc ('k') | vm/intermediate_language.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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 4
5 #ifndef VM_INTERMEDIATE_LANGUAGE_H_ 5 #ifndef VM_INTERMEDIATE_LANGUAGE_H_
6 #define VM_INTERMEDIATE_LANGUAGE_H_ 6 #define VM_INTERMEDIATE_LANGUAGE_H_
7 7
8 #include "vm/allocation.h" 8 #include "vm/allocation.h"
9 #include "vm/ast.h" 9 #include "vm/ast.h"
10 #include "vm/growable_array.h" 10 #include "vm/growable_array.h"
(...skipping 344 matching lines...) Expand 10 before | Expand all | Expand 10 after
355 const Object& value_; 355 const Object& value_;
356 356
357 DISALLOW_COPY_AND_ASSIGN(ConstantVal); 357 DISALLOW_COPY_AND_ASSIGN(ConstantVal);
358 }; 358 };
359 359
360 #undef DECLARE_VALUE 360 #undef DECLARE_VALUE
361 361
362 362
363 class AssertAssignableComp : public TemplateComputation<3> { 363 class AssertAssignableComp : public TemplateComputation<3> {
364 public: 364 public:
365 AssertAssignableComp(intptr_t token_index, 365 AssertAssignableComp(intptr_t token_pos,
366 intptr_t try_index, 366 intptr_t try_index,
367 Value* value, 367 Value* value,
368 Value* instantiator, 368 Value* instantiator,
369 Value* instantiator_type_arguments, 369 Value* instantiator_type_arguments,
370 const AbstractType& dst_type, 370 const AbstractType& dst_type,
371 const String& dst_name) 371 const String& dst_name)
372 : token_index_(token_index), 372 : token_pos_(token_pos),
373 try_index_(try_index), 373 try_index_(try_index),
374 dst_type_(dst_type), 374 dst_type_(dst_type),
375 dst_name_(dst_name) { 375 dst_name_(dst_name) {
376 ASSERT(value != NULL); 376 ASSERT(value != NULL);
377 ASSERT(instantiator != NULL); 377 ASSERT(instantiator != NULL);
378 ASSERT(instantiator_type_arguments != NULL); 378 ASSERT(instantiator_type_arguments != NULL);
379 ASSERT(!dst_type.IsNull()); 379 ASSERT(!dst_type.IsNull());
380 ASSERT(!dst_name.IsNull()); 380 ASSERT(!dst_name.IsNull());
381 inputs_[0] = value; 381 inputs_[0] = value;
382 inputs_[1] = instantiator; 382 inputs_[1] = instantiator;
383 inputs_[2] = instantiator_type_arguments; 383 inputs_[2] = instantiator_type_arguments;
384 } 384 }
385 385
386 DECLARE_COMPUTATION(AssertAssignable) 386 DECLARE_COMPUTATION(AssertAssignable)
387 387
388 Value* value() const { return inputs_[0]; } 388 Value* value() const { return inputs_[0]; }
389 Value* instantiator() const { return inputs_[1]; } 389 Value* instantiator() const { return inputs_[1]; }
390 Value* instantiator_type_arguments() const { return inputs_[2]; } 390 Value* instantiator_type_arguments() const { return inputs_[2]; }
391 391
392 intptr_t token_index() const { return token_index_; } 392 intptr_t token_pos() const { return token_pos_; }
393 intptr_t try_index() const { return try_index_; } 393 intptr_t try_index() const { return try_index_; }
394 const AbstractType& dst_type() const { return dst_type_; } 394 const AbstractType& dst_type() const { return dst_type_; }
395 const String& dst_name() const { return dst_name_; } 395 const String& dst_name() const { return dst_name_; }
396 396
397 virtual void PrintOperandsTo(BufferFormatter* f) const; 397 virtual void PrintOperandsTo(BufferFormatter* f) const;
398 398
399 private: 399 private:
400 const intptr_t token_index_; 400 const intptr_t token_pos_;
401 const intptr_t try_index_; 401 const intptr_t try_index_;
402 const AbstractType& dst_type_; 402 const AbstractType& dst_type_;
403 const String& dst_name_; 403 const String& dst_name_;
404 404
405 DISALLOW_COPY_AND_ASSIGN(AssertAssignableComp); 405 DISALLOW_COPY_AND_ASSIGN(AssertAssignableComp);
406 }; 406 };
407 407
408 408
409 class AssertBooleanComp : public TemplateComputation<1> { 409 class AssertBooleanComp : public TemplateComputation<1> {
410 public: 410 public:
411 AssertBooleanComp(intptr_t token_index, 411 AssertBooleanComp(intptr_t token_pos,
412 intptr_t try_index, 412 intptr_t try_index,
413 Value* value) 413 Value* value)
414 : token_index_(token_index), 414 : token_pos_(token_pos),
415 try_index_(try_index) { 415 try_index_(try_index) {
416 ASSERT(value != NULL); 416 ASSERT(value != NULL);
417 inputs_[0] = value; 417 inputs_[0] = value;
418 } 418 }
419 419
420 DECLARE_COMPUTATION(AssertBoolean) 420 DECLARE_COMPUTATION(AssertBoolean)
421 421
422 intptr_t token_index() const { return token_index_; } 422 intptr_t token_pos() const { return token_pos_; }
423 intptr_t try_index() const { return try_index_; } 423 intptr_t try_index() const { return try_index_; }
424 Value* value() const { return inputs_[0]; } 424 Value* value() const { return inputs_[0]; }
425 425
426 private: 426 private:
427 const intptr_t token_index_; 427 const intptr_t token_pos_;
428 const intptr_t try_index_; 428 const intptr_t try_index_;
429 429
430 DISALLOW_COPY_AND_ASSIGN(AssertBooleanComp); 430 DISALLOW_COPY_AND_ASSIGN(AssertBooleanComp);
431 }; 431 };
432 432
433 433
434 // Denotes the current context, normally held in a register. This is 434 // Denotes the current context, normally held in a register. This is
435 // a computation, not a value, because it's mutable. 435 // a computation, not a value, because it's mutable.
436 class CurrentContextComp : public TemplateComputation<0> { 436 class CurrentContextComp : public TemplateComputation<0> {
437 public: 437 public:
(...skipping 27 matching lines...) Expand all
465 ClosureCallComp(ClosureCallNode* node, 465 ClosureCallComp(ClosureCallNode* node,
466 intptr_t try_index, 466 intptr_t try_index,
467 ZoneGrowableArray<Value*>* arguments) 467 ZoneGrowableArray<Value*>* arguments)
468 : ast_node_(*node), 468 : ast_node_(*node),
469 try_index_(try_index), 469 try_index_(try_index),
470 arguments_(arguments) { } 470 arguments_(arguments) { }
471 471
472 DECLARE_COMPUTATION(ClosureCall) 472 DECLARE_COMPUTATION(ClosureCall)
473 473
474 const Array& argument_names() const { return ast_node_.arguments()->names(); } 474 const Array& argument_names() const { return ast_node_.arguments()->names(); }
475 intptr_t token_index() const { return ast_node_.token_index(); } 475 intptr_t token_pos() const { return ast_node_.token_pos(); }
476 intptr_t try_index() const { return try_index_; } 476 intptr_t try_index() const { return try_index_; }
477 477
478 intptr_t ArgumentCount() const { return arguments_->length(); } 478 intptr_t ArgumentCount() const { return arguments_->length(); }
479 Value* ArgumentAt(intptr_t index) const { return (*arguments_)[index]; } 479 Value* ArgumentAt(intptr_t index) const { return (*arguments_)[index]; }
480 480
481 virtual intptr_t InputCount() const; 481 virtual intptr_t InputCount() const;
482 virtual Value* InputAt(intptr_t i) const { return ArgumentAt(i); } 482 virtual Value* InputAt(intptr_t i) const { return ArgumentAt(i); }
483 virtual void SetInputAt(intptr_t i, Value* value) { 483 virtual void SetInputAt(intptr_t i, Value* value) {
484 (*arguments_)[i] = value; 484 (*arguments_)[i] = value;
485 } 485 }
486 486
487 virtual void PrintOperandsTo(BufferFormatter* f) const; 487 virtual void PrintOperandsTo(BufferFormatter* f) const;
488 488
489 private: 489 private:
490 const ClosureCallNode& ast_node_; 490 const ClosureCallNode& ast_node_;
491 const intptr_t try_index_; 491 const intptr_t try_index_;
492 ZoneGrowableArray<Value*>* arguments_; 492 ZoneGrowableArray<Value*>* arguments_;
493 493
494 DISALLOW_COPY_AND_ASSIGN(ClosureCallComp); 494 DISALLOW_COPY_AND_ASSIGN(ClosureCallComp);
495 }; 495 };
496 496
497 497
498 class InstanceCallComp : public Computation { 498 class InstanceCallComp : public Computation {
499 public: 499 public:
500 InstanceCallComp(intptr_t token_index, 500 InstanceCallComp(intptr_t token_pos,
501 intptr_t try_index, 501 intptr_t try_index,
502 const String& function_name, 502 const String& function_name,
503 Token::Kind token_kind, 503 Token::Kind token_kind,
504 ZoneGrowableArray<Value*>* arguments, 504 ZoneGrowableArray<Value*>* arguments,
505 const Array& argument_names, 505 const Array& argument_names,
506 intptr_t checked_argument_count) 506 intptr_t checked_argument_count)
507 : token_index_(token_index), 507 : token_pos_(token_pos),
508 try_index_(try_index), 508 try_index_(try_index),
509 function_name_(function_name), 509 function_name_(function_name),
510 token_kind_(token_kind), 510 token_kind_(token_kind),
511 arguments_(arguments), 511 arguments_(arguments),
512 argument_names_(argument_names), 512 argument_names_(argument_names),
513 checked_argument_count_(checked_argument_count) { 513 checked_argument_count_(checked_argument_count) {
514 ASSERT(function_name.IsZoneHandle()); 514 ASSERT(function_name.IsZoneHandle());
515 ASSERT(!arguments->is_empty()); 515 ASSERT(!arguments->is_empty());
516 ASSERT(argument_names.IsZoneHandle()); 516 ASSERT(argument_names.IsZoneHandle());
517 ASSERT(Token::IsBinaryToken(token_kind) || 517 ASSERT(Token::IsBinaryToken(token_kind) ||
518 Token::IsUnaryToken(token_kind) || 518 Token::IsUnaryToken(token_kind) ||
519 token_kind == Token::kGET || 519 token_kind == Token::kGET ||
520 token_kind == Token::kILLEGAL); 520 token_kind == Token::kILLEGAL);
521 } 521 }
522 522
523 DECLARE_COMPUTATION(InstanceCall) 523 DECLARE_COMPUTATION(InstanceCall)
524 524
525 intptr_t token_index() const { return token_index_; } 525 intptr_t token_pos() const { return token_pos_; }
526 intptr_t try_index() const { return try_index_; } 526 intptr_t try_index() const { return try_index_; }
527 const String& function_name() const { return function_name_; } 527 const String& function_name() const { return function_name_; }
528 Token::Kind token_kind() const { return token_kind_; } 528 Token::Kind token_kind() const { return token_kind_; }
529 intptr_t ArgumentCount() const { return arguments_->length(); } 529 intptr_t ArgumentCount() const { return arguments_->length(); }
530 Value* ArgumentAt(intptr_t index) const { return (*arguments_)[index]; } 530 Value* ArgumentAt(intptr_t index) const { return (*arguments_)[index]; }
531 const Array& argument_names() const { return argument_names_; } 531 const Array& argument_names() const { return argument_names_; }
532 intptr_t checked_argument_count() const { return checked_argument_count_; } 532 intptr_t checked_argument_count() const { return checked_argument_count_; }
533 533
534 virtual intptr_t InputCount() const; 534 virtual intptr_t InputCount() const;
535 virtual Value* InputAt(intptr_t i) const { return ArgumentAt(i); } 535 virtual Value* InputAt(intptr_t i) const { return ArgumentAt(i); }
536 virtual void SetInputAt(intptr_t i, Value* value) { 536 virtual void SetInputAt(intptr_t i, Value* value) {
537 (*arguments_)[i] = value; 537 (*arguments_)[i] = value;
538 } 538 }
539 539
540 virtual void PrintOperandsTo(BufferFormatter* f) const; 540 virtual void PrintOperandsTo(BufferFormatter* f) const;
541 541
542 bool VerifyComputation(); 542 bool VerifyComputation();
543 543
544 private: 544 private:
545 const intptr_t token_index_; 545 const intptr_t token_pos_;
546 const intptr_t try_index_; 546 const intptr_t try_index_;
547 const String& function_name_; 547 const String& function_name_;
548 const Token::Kind token_kind_; // Binary op, unary op, kGET or kILLEGAL. 548 const Token::Kind token_kind_; // Binary op, unary op, kGET or kILLEGAL.
549 ZoneGrowableArray<Value*>* const arguments_; 549 ZoneGrowableArray<Value*>* const arguments_;
550 const Array& argument_names_; 550 const Array& argument_names_;
551 const intptr_t checked_argument_count_; 551 const intptr_t checked_argument_count_;
552 552
553 DISALLOW_COPY_AND_ASSIGN(InstanceCallComp); 553 DISALLOW_COPY_AND_ASSIGN(InstanceCallComp);
554 }; 554 };
555 555
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
630 630
631 private: 631 private:
632 const Token::Kind kind_; 632 const Token::Kind kind_;
633 633
634 DISALLOW_COPY_AND_ASSIGN(StrictCompareComp); 634 DISALLOW_COPY_AND_ASSIGN(StrictCompareComp);
635 }; 635 };
636 636
637 637
638 class EqualityCompareComp : public ComparisonComp { 638 class EqualityCompareComp : public ComparisonComp {
639 public: 639 public:
640 EqualityCompareComp(intptr_t token_index, 640 EqualityCompareComp(intptr_t token_pos,
641 intptr_t try_index, 641 intptr_t try_index,
642 Value* left, 642 Value* left,
643 Value* right) 643 Value* right)
644 : ComparisonComp(left, right), 644 : ComparisonComp(left, right),
645 token_index_(token_index), 645 token_pos_(token_pos),
646 try_index_(try_index) { 646 try_index_(try_index) {
647 } 647 }
648 648
649 DECLARE_COMPUTATION(EqualityCompare) 649 DECLARE_COMPUTATION(EqualityCompare)
650 650
651 intptr_t token_index() const { return token_index_; } 651 intptr_t token_pos() const { return token_pos_; }
652 intptr_t try_index() const { return try_index_; } 652 intptr_t try_index() const { return try_index_; }
653 virtual void PrintOperandsTo(BufferFormatter* f) const; 653 virtual void PrintOperandsTo(BufferFormatter* f) const;
654 654
655 private: 655 private:
656 const intptr_t token_index_; 656 const intptr_t token_pos_;
657 const intptr_t try_index_; 657 const intptr_t try_index_;
658 658
659 DISALLOW_COPY_AND_ASSIGN(EqualityCompareComp); 659 DISALLOW_COPY_AND_ASSIGN(EqualityCompareComp);
660 }; 660 };
661 661
662 662
663 class RelationalOpComp : public ComparisonComp { 663 class RelationalOpComp : public ComparisonComp {
664 public: 664 public:
665 RelationalOpComp(intptr_t token_index, 665 RelationalOpComp(intptr_t token_pos,
666 intptr_t try_index, 666 intptr_t try_index,
667 Token::Kind kind, 667 Token::Kind kind,
668 Value* left, 668 Value* left,
669 Value* right) 669 Value* right)
670 : ComparisonComp(left, right), 670 : ComparisonComp(left, right),
671 token_index_(token_index), 671 token_pos_(token_pos),
672 try_index_(try_index), 672 try_index_(try_index),
673 kind_(kind), 673 kind_(kind),
674 operands_class_id_(kObject) { 674 operands_class_id_(kObject) {
675 ASSERT(Token::IsRelationalOperator(kind)); 675 ASSERT(Token::IsRelationalOperator(kind));
676 } 676 }
677 677
678 DECLARE_COMPUTATION(RelationalOp) 678 DECLARE_COMPUTATION(RelationalOp)
679 679
680 intptr_t token_index() const { return token_index_; } 680 intptr_t token_pos() const { return token_pos_; }
681 intptr_t try_index() const { return try_index_; } 681 intptr_t try_index() const { return try_index_; }
682 Token::Kind kind() const { return kind_; } 682 Token::Kind kind() const { return kind_; }
683 683
684 // TODO(srdjan): instead of class-id pass an enum that can differentiate 684 // TODO(srdjan): instead of class-id pass an enum that can differentiate
685 // between boxed and unboxed doubles and integers. 685 // between boxed and unboxed doubles and integers.
686 void set_operands_class_id(intptr_t value) { 686 void set_operands_class_id(intptr_t value) {
687 operands_class_id_ = value; 687 operands_class_id_ = value;
688 } 688 }
689 689
690 intptr_t operands_class_id() const { return operands_class_id_; } 690 intptr_t operands_class_id() const { return operands_class_id_; }
691 691
692 virtual void PrintOperandsTo(BufferFormatter* f) const; 692 virtual void PrintOperandsTo(BufferFormatter* f) const;
693 693
694 private: 694 private:
695 const intptr_t token_index_; 695 const intptr_t token_pos_;
696 const intptr_t try_index_; 696 const intptr_t try_index_;
697 const Token::Kind kind_; 697 const Token::Kind kind_;
698 intptr_t operands_class_id_; // class id of both operands. 698 intptr_t operands_class_id_; // class id of both operands.
699 699
700 DISALLOW_COPY_AND_ASSIGN(RelationalOpComp); 700 DISALLOW_COPY_AND_ASSIGN(RelationalOpComp);
701 }; 701 };
702 702
703 703
704 class StaticCallComp : public Computation { 704 class StaticCallComp : public Computation {
705 public: 705 public:
706 StaticCallComp(intptr_t token_index, 706 StaticCallComp(intptr_t token_pos,
707 intptr_t try_index, 707 intptr_t try_index,
708 const Function& function, 708 const Function& function,
709 const Array& argument_names, 709 const Array& argument_names,
710 ZoneGrowableArray<Value*>* arguments) 710 ZoneGrowableArray<Value*>* arguments)
711 : token_index_(token_index), 711 : token_pos_(token_pos),
712 try_index_(try_index), 712 try_index_(try_index),
713 function_(function), 713 function_(function),
714 argument_names_(argument_names), 714 argument_names_(argument_names),
715 arguments_(arguments), 715 arguments_(arguments),
716 recognized_(MethodRecognizer::kUnknown) { 716 recognized_(MethodRecognizer::kUnknown) {
717 ASSERT(function.IsZoneHandle()); 717 ASSERT(function.IsZoneHandle());
718 ASSERT(argument_names.IsZoneHandle()); 718 ASSERT(argument_names.IsZoneHandle());
719 } 719 }
720 720
721 DECLARE_COMPUTATION(StaticCall) 721 DECLARE_COMPUTATION(StaticCall)
722 722
723 // Accessors forwarded to the AST node. 723 // Accessors forwarded to the AST node.
724 const Function& function() const { return function_; } 724 const Function& function() const { return function_; }
725 const Array& argument_names() const { return argument_names_; } 725 const Array& argument_names() const { return argument_names_; }
726 intptr_t token_index() const { return token_index_; } 726 intptr_t token_pos() const { return token_pos_; }
727 intptr_t try_index() const { return try_index_; } 727 intptr_t try_index() const { return try_index_; }
728 728
729 intptr_t ArgumentCount() const { return arguments_->length(); } 729 intptr_t ArgumentCount() const { return arguments_->length(); }
730 Value* ArgumentAt(intptr_t index) const { return (*arguments_)[index]; } 730 Value* ArgumentAt(intptr_t index) const { return (*arguments_)[index]; }
731 731
732 MethodRecognizer::Kind recognized() const { return recognized_; } 732 MethodRecognizer::Kind recognized() const { return recognized_; }
733 void set_recognized(MethodRecognizer::Kind kind) { recognized_ = kind; } 733 void set_recognized(MethodRecognizer::Kind kind) { recognized_ = kind; }
734 734
735 virtual intptr_t InputCount() const; 735 virtual intptr_t InputCount() const;
736 virtual Value* InputAt(intptr_t i) const { return ArgumentAt(i); } 736 virtual Value* InputAt(intptr_t i) const { return ArgumentAt(i); }
737 virtual void SetInputAt(intptr_t i, Value* value) { 737 virtual void SetInputAt(intptr_t i, Value* value) {
738 (*arguments_)[i] = value; 738 (*arguments_)[i] = value;
739 } 739 }
740 740
741 virtual void PrintOperandsTo(BufferFormatter* f) const; 741 virtual void PrintOperandsTo(BufferFormatter* f) const;
742 742
743 private: 743 private:
744 const intptr_t token_index_; 744 const intptr_t token_pos_;
745 const intptr_t try_index_; 745 const intptr_t try_index_;
746 const Function& function_; 746 const Function& function_;
747 const Array& argument_names_; 747 const Array& argument_names_;
748 ZoneGrowableArray<Value*>* arguments_; 748 ZoneGrowableArray<Value*>* arguments_;
749 MethodRecognizer::Kind recognized_; 749 MethodRecognizer::Kind recognized_;
750 750
751 DISALLOW_COPY_AND_ASSIGN(StaticCallComp); 751 DISALLOW_COPY_AND_ASSIGN(StaticCallComp);
752 }; 752 };
753 753
754 754
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
801 }; 801 };
802 802
803 803
804 class NativeCallComp : public TemplateComputation<0> { 804 class NativeCallComp : public TemplateComputation<0> {
805 public: 805 public:
806 NativeCallComp(NativeBodyNode* node, intptr_t try_index) 806 NativeCallComp(NativeBodyNode* node, intptr_t try_index)
807 : ast_node_(*node), try_index_(try_index) {} 807 : ast_node_(*node), try_index_(try_index) {}
808 808
809 DECLARE_COMPUTATION(NativeCall) 809 DECLARE_COMPUTATION(NativeCall)
810 810
811 intptr_t token_index() const { return ast_node_.token_index(); } 811 intptr_t token_pos() const { return ast_node_.token_pos(); }
812 intptr_t try_index() const { return try_index_; } 812 intptr_t try_index() const { return try_index_; }
813 813
814 const String& native_name() const { 814 const String& native_name() const {
815 return ast_node_.native_c_function_name(); 815 return ast_node_.native_c_function_name();
816 } 816 }
817 817
818 NativeFunction native_c_function() const { 818 NativeFunction native_c_function() const {
819 return ast_node_.native_c_function(); 819 return ast_node_.native_c_function();
820 } 820 }
821 821
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
932 932
933 private: 933 private:
934 const Field& field_; 934 const Field& field_;
935 935
936 DISALLOW_COPY_AND_ASSIGN(StoreStaticFieldComp); 936 DISALLOW_COPY_AND_ASSIGN(StoreStaticFieldComp);
937 }; 937 };
938 938
939 939
940 class LoadIndexedComp : public TemplateComputation<2> { 940 class LoadIndexedComp : public TemplateComputation<2> {
941 public: 941 public:
942 LoadIndexedComp(intptr_t token_index, 942 LoadIndexedComp(intptr_t token_pos,
943 intptr_t try_index, 943 intptr_t try_index,
944 Value* array, 944 Value* array,
945 Value* index) 945 Value* index)
946 : token_index_(token_index), 946 : token_pos_(token_pos),
947 try_index_(try_index), 947 try_index_(try_index),
948 receiver_type_(kIllegalObjectKind) { 948 receiver_type_(kIllegalObjectKind) {
949 ASSERT(array != NULL); 949 ASSERT(array != NULL);
950 ASSERT(index != NULL); 950 ASSERT(index != NULL);
951 inputs_[0] = array; 951 inputs_[0] = array;
952 inputs_[1] = index; 952 inputs_[1] = index;
953 } 953 }
954 954
955 DECLARE_COMPUTATION(LoadIndexed) 955 DECLARE_COMPUTATION(LoadIndexed)
956 956
957 intptr_t token_index() const { return token_index_; } 957 intptr_t token_pos() const { return token_pos_; }
958 intptr_t try_index() const { return try_index_; } 958 intptr_t try_index() const { return try_index_; }
959 Value* array() const { return inputs_[0]; } 959 Value* array() const { return inputs_[0]; }
960 Value* index() const { return inputs_[1]; } 960 Value* index() const { return inputs_[1]; }
961 961
962 void set_receiver_type(ObjectKind receiver_type) { 962 void set_receiver_type(ObjectKind receiver_type) {
963 receiver_type_ = receiver_type; 963 receiver_type_ = receiver_type;
964 } 964 }
965 965
966 ObjectKind receiver_type() const { 966 ObjectKind receiver_type() const {
967 return receiver_type_; 967 return receiver_type_;
968 } 968 }
969 969
970 private: 970 private:
971 const intptr_t token_index_; 971 const intptr_t token_pos_;
972 const intptr_t try_index_; 972 const intptr_t try_index_;
973 ObjectKind receiver_type_; 973 ObjectKind receiver_type_;
974 974
975 DISALLOW_COPY_AND_ASSIGN(LoadIndexedComp); 975 DISALLOW_COPY_AND_ASSIGN(LoadIndexedComp);
976 }; 976 };
977 977
978 978
979 // Not simply an InstanceCall because it has somewhat more complicated 979 // Not simply an InstanceCall because it has somewhat more complicated
980 // semantics: the value operand is preserved before the call. 980 // semantics: the value operand is preserved before the call.
981 class StoreIndexedComp : public TemplateComputation<3> { 981 class StoreIndexedComp : public TemplateComputation<3> {
982 public: 982 public:
983 StoreIndexedComp(intptr_t token_index, 983 StoreIndexedComp(intptr_t token_pos,
984 intptr_t try_index, 984 intptr_t try_index,
985 Value* array, 985 Value* array,
986 Value* index, 986 Value* index,
987 Value* value) 987 Value* value)
988 : token_index_(token_index), 988 : token_pos_(token_pos),
989 try_index_(try_index), 989 try_index_(try_index),
990 receiver_type_(kIllegalObjectKind) { 990 receiver_type_(kIllegalObjectKind) {
991 inputs_[0] = array; 991 inputs_[0] = array;
992 inputs_[1] = index; 992 inputs_[1] = index;
993 inputs_[2] = value; 993 inputs_[2] = value;
994 } 994 }
995 995
996 DECLARE_COMPUTATION(StoreIndexed) 996 DECLARE_COMPUTATION(StoreIndexed)
997 997
998 intptr_t token_index() const { return token_index_; } 998 intptr_t token_pos() const { return token_pos_; }
999 intptr_t try_index() const { return try_index_; } 999 intptr_t try_index() const { return try_index_; }
1000 Value* array() const { return inputs_[0]; } 1000 Value* array() const { return inputs_[0]; }
1001 Value* index() const { return inputs_[1]; } 1001 Value* index() const { return inputs_[1]; }
1002 Value* value() const { return inputs_[2]; } 1002 Value* value() const { return inputs_[2]; }
1003 1003
1004 void set_receiver_type(ObjectKind receiver_type) { 1004 void set_receiver_type(ObjectKind receiver_type) {
1005 receiver_type_ = receiver_type; 1005 receiver_type_ = receiver_type;
1006 } 1006 }
1007 1007
1008 ObjectKind receiver_type() const { 1008 ObjectKind receiver_type() const {
1009 return receiver_type_; 1009 return receiver_type_;
1010 } 1010 }
1011 1011
1012 private: 1012 private:
1013 const intptr_t token_index_; 1013 const intptr_t token_pos_;
1014 const intptr_t try_index_; 1014 const intptr_t try_index_;
1015 ObjectKind receiver_type_; 1015 ObjectKind receiver_type_;
1016 1016
1017 DISALLOW_COPY_AND_ASSIGN(StoreIndexedComp); 1017 DISALLOW_COPY_AND_ASSIGN(StoreIndexedComp);
1018 }; 1018 };
1019 1019
1020 1020
1021 // Not simply an InstanceCall because it has somewhat more complicated 1021 // Not simply an InstanceCall because it has somewhat more complicated
1022 // semantics: the value operand is preserved before the call. 1022 // semantics: the value operand is preserved before the call.
1023 class InstanceSetterComp : public TemplateComputation<2> { 1023 class InstanceSetterComp : public TemplateComputation<2> {
1024 public: 1024 public:
1025 InstanceSetterComp(intptr_t token_index, 1025 InstanceSetterComp(intptr_t token_pos,
1026 intptr_t try_index, 1026 intptr_t try_index,
1027 const String& field_name, 1027 const String& field_name,
1028 Value* receiver, 1028 Value* receiver,
1029 Value* value) 1029 Value* value)
1030 : token_index_(token_index), 1030 : token_pos_(token_pos),
1031 try_index_(try_index), 1031 try_index_(try_index),
1032 field_name_(field_name) { 1032 field_name_(field_name) {
1033 inputs_[0] = receiver; 1033 inputs_[0] = receiver;
1034 inputs_[1] = value; 1034 inputs_[1] = value;
1035 } 1035 }
1036 1036
1037 DECLARE_COMPUTATION(InstanceSetter) 1037 DECLARE_COMPUTATION(InstanceSetter)
1038 1038
1039 intptr_t token_index() const { return token_index_; } 1039 intptr_t token_pos() const { return token_pos_; }
1040 intptr_t try_index() const { return try_index_; } 1040 intptr_t try_index() const { return try_index_; }
1041 const String& field_name() const { return field_name_; } 1041 const String& field_name() const { return field_name_; }
1042 Value* receiver() const { return inputs_[0]; } 1042 Value* receiver() const { return inputs_[0]; }
1043 Value* value() const { return inputs_[1]; } 1043 Value* value() const { return inputs_[1]; }
1044 1044
1045 private: 1045 private:
1046 const intptr_t token_index_; 1046 const intptr_t token_pos_;
1047 const intptr_t try_index_; 1047 const intptr_t try_index_;
1048 const String& field_name_; 1048 const String& field_name_;
1049 1049
1050 DISALLOW_COPY_AND_ASSIGN(InstanceSetterComp); 1050 DISALLOW_COPY_AND_ASSIGN(InstanceSetterComp);
1051 }; 1051 };
1052 1052
1053 1053
1054 // Not simply a StaticCall because it has somewhat more complicated 1054 // Not simply a StaticCall because it has somewhat more complicated
1055 // semantics: the value operand is preserved before the call. 1055 // semantics: the value operand is preserved before the call.
1056 class StaticSetterComp : public TemplateComputation<1> { 1056 class StaticSetterComp : public TemplateComputation<1> {
1057 public: 1057 public:
1058 StaticSetterComp(intptr_t token_index, 1058 StaticSetterComp(intptr_t token_pos,
1059 intptr_t try_index, 1059 intptr_t try_index,
1060 const Function& setter_function, 1060 const Function& setter_function,
1061 Value* value) 1061 Value* value)
1062 : token_index_(token_index), 1062 : token_pos_(token_pos),
1063 try_index_(try_index), 1063 try_index_(try_index),
1064 setter_function_(setter_function) { 1064 setter_function_(setter_function) {
1065 inputs_[0] = value; 1065 inputs_[0] = value;
1066 } 1066 }
1067 1067
1068 DECLARE_COMPUTATION(StaticSetter) 1068 DECLARE_COMPUTATION(StaticSetter)
1069 1069
1070 intptr_t token_index() const { return token_index_; } 1070 intptr_t token_pos() const { return token_pos_; }
1071 intptr_t try_index() const { return try_index_; } 1071 intptr_t try_index() const { return try_index_; }
1072 const Function& setter_function() const { return setter_function_; } 1072 const Function& setter_function() const { return setter_function_; }
1073 Value* value() const { return inputs_[0]; } 1073 Value* value() const { return inputs_[0]; }
1074 1074
1075 private: 1075 private:
1076 const intptr_t token_index_; 1076 const intptr_t token_pos_;
1077 const intptr_t try_index_; 1077 const intptr_t try_index_;
1078 const Function& setter_function_; 1078 const Function& setter_function_;
1079 1079
1080 DISALLOW_COPY_AND_ASSIGN(StaticSetterComp); 1080 DISALLOW_COPY_AND_ASSIGN(StaticSetterComp);
1081 }; 1081 };
1082 1082
1083 1083
1084 // Note overrideable, built-in: value? false : true. 1084 // Note overrideable, built-in: value? false : true.
1085 class BooleanNegateComp : public TemplateComputation<1> { 1085 class BooleanNegateComp : public TemplateComputation<1> {
1086 public: 1086 public:
1087 explicit BooleanNegateComp(Value* value) { 1087 explicit BooleanNegateComp(Value* value) {
1088 inputs_[0] = value; 1088 inputs_[0] = value;
1089 } 1089 }
1090 1090
1091 DECLARE_COMPUTATION(BooleanNegate) 1091 DECLARE_COMPUTATION(BooleanNegate)
1092 1092
1093 Value* value() const { return inputs_[0]; } 1093 Value* value() const { return inputs_[0]; }
1094 1094
1095 private: 1095 private:
1096 DISALLOW_COPY_AND_ASSIGN(BooleanNegateComp); 1096 DISALLOW_COPY_AND_ASSIGN(BooleanNegateComp);
1097 }; 1097 };
1098 1098
1099 1099
1100 class InstanceOfComp : public TemplateComputation<3> { 1100 class InstanceOfComp : public TemplateComputation<3> {
1101 public: 1101 public:
1102 InstanceOfComp(intptr_t token_index, 1102 InstanceOfComp(intptr_t token_pos,
1103 intptr_t try_index, 1103 intptr_t try_index,
1104 Value* value, 1104 Value* value,
1105 Value* instantiator, 1105 Value* instantiator,
1106 Value* instantiator_type_arguments, 1106 Value* instantiator_type_arguments,
1107 const AbstractType& type, 1107 const AbstractType& type,
1108 bool negate_result) 1108 bool negate_result)
1109 : token_index_(token_index), 1109 : token_pos_(token_pos),
1110 try_index_(try_index), 1110 try_index_(try_index),
1111 type_(type), 1111 type_(type),
1112 negate_result_(negate_result) { 1112 negate_result_(negate_result) {
1113 ASSERT(value != NULL); 1113 ASSERT(value != NULL);
1114 ASSERT(instantiator != NULL); 1114 ASSERT(instantiator != NULL);
1115 ASSERT(instantiator_type_arguments != NULL); 1115 ASSERT(instantiator_type_arguments != NULL);
1116 ASSERT(!type.IsNull()); 1116 ASSERT(!type.IsNull());
1117 inputs_[0] = value; 1117 inputs_[0] = value;
1118 inputs_[1] = instantiator; 1118 inputs_[1] = instantiator;
1119 inputs_[2] = instantiator_type_arguments; 1119 inputs_[2] = instantiator_type_arguments;
1120 } 1120 }
1121 1121
1122 DECLARE_COMPUTATION(InstanceOf) 1122 DECLARE_COMPUTATION(InstanceOf)
1123 1123
1124 Value* value() const { return inputs_[0]; } 1124 Value* value() const { return inputs_[0]; }
1125 Value* instantiator() const { return inputs_[1]; } 1125 Value* instantiator() const { return inputs_[1]; }
1126 Value* instantiator_type_arguments() const { return inputs_[2]; } 1126 Value* instantiator_type_arguments() const { return inputs_[2]; }
1127 1127
1128 bool negate_result() const { return negate_result_; } 1128 bool negate_result() const { return negate_result_; }
1129 const AbstractType& type() const { return type_; } 1129 const AbstractType& type() const { return type_; }
1130 intptr_t token_index() const { return token_index_; } 1130 intptr_t token_pos() const { return token_pos_; }
1131 intptr_t try_index() const { return try_index_; } 1131 intptr_t try_index() const { return try_index_; }
1132 1132
1133 virtual void PrintOperandsTo(BufferFormatter* f) const; 1133 virtual void PrintOperandsTo(BufferFormatter* f) const;
1134 1134
1135 private: 1135 private:
1136 const intptr_t token_index_; 1136 const intptr_t token_pos_;
1137 const intptr_t try_index_; 1137 const intptr_t try_index_;
1138 Value* value_; 1138 Value* value_;
1139 Value* instantiator_; 1139 Value* instantiator_;
1140 Value* type_arguments_; 1140 Value* type_arguments_;
1141 const AbstractType& type_; 1141 const AbstractType& type_;
1142 const bool negate_result_; 1142 const bool negate_result_;
1143 1143
1144 DISALLOW_COPY_AND_ASSIGN(InstanceOfComp); 1144 DISALLOW_COPY_AND_ASSIGN(InstanceOfComp);
1145 }; 1145 };
1146 1146
1147 1147
1148 class AllocateObjectComp : public Computation { 1148 class AllocateObjectComp : public Computation {
1149 public: 1149 public:
1150 AllocateObjectComp(ConstructorCallNode* node, 1150 AllocateObjectComp(ConstructorCallNode* node,
1151 intptr_t try_index, 1151 intptr_t try_index,
1152 ZoneGrowableArray<Value*>* arguments) 1152 ZoneGrowableArray<Value*>* arguments)
1153 : ast_node_(*node), try_index_(try_index), arguments_(arguments) { 1153 : ast_node_(*node), try_index_(try_index), arguments_(arguments) {
1154 // Either no arguments or one type-argument and one instantiator. 1154 // Either no arguments or one type-argument and one instantiator.
1155 ASSERT(arguments->is_empty() || (arguments->length() == 2)); 1155 ASSERT(arguments->is_empty() || (arguments->length() == 2));
1156 } 1156 }
1157 1157
1158 DECLARE_COMPUTATION(AllocateObject) 1158 DECLARE_COMPUTATION(AllocateObject)
1159 1159
1160 const Function& constructor() const { return ast_node_.constructor(); } 1160 const Function& constructor() const { return ast_node_.constructor(); }
1161 intptr_t token_index() const { return ast_node_.token_index(); } 1161 intptr_t token_pos() const { return ast_node_.token_pos(); }
1162 intptr_t try_index() const { return try_index_; } 1162 intptr_t try_index() const { return try_index_; }
1163 const ZoneGrowableArray<Value*>& arguments() const { return *arguments_; } 1163 const ZoneGrowableArray<Value*>& arguments() const { return *arguments_; }
1164 1164
1165 virtual intptr_t InputCount() const; 1165 virtual intptr_t InputCount() const;
1166 virtual Value* InputAt(intptr_t i) const { return arguments()[i]; } 1166 virtual Value* InputAt(intptr_t i) const { return arguments()[i]; }
1167 virtual void SetInputAt(intptr_t i, Value* value) { 1167 virtual void SetInputAt(intptr_t i, Value* value) {
1168 (*arguments_)[i] = value; 1168 (*arguments_)[i] = value;
1169 } 1169 }
1170 1170
1171 virtual void PrintOperandsTo(BufferFormatter* f) const; 1171 virtual void PrintOperandsTo(BufferFormatter* f) const;
(...skipping 12 matching lines...) Expand all
1184 intptr_t try_index, 1184 intptr_t try_index,
1185 ZoneGrowableArray<Value*>* arguments) 1185 ZoneGrowableArray<Value*>* arguments)
1186 : ast_node_(*node), try_index_(try_index), arguments_(arguments) { 1186 : ast_node_(*node), try_index_(try_index), arguments_(arguments) {
1187 // One type-argument and one instantiator. 1187 // One type-argument and one instantiator.
1188 ASSERT(arguments->length() == 2); 1188 ASSERT(arguments->length() == 2);
1189 } 1189 }
1190 1190
1191 DECLARE_COMPUTATION(AllocateObjectWithBoundsCheck) 1191 DECLARE_COMPUTATION(AllocateObjectWithBoundsCheck)
1192 1192
1193 const Function& constructor() const { return ast_node_.constructor(); } 1193 const Function& constructor() const { return ast_node_.constructor(); }
1194 intptr_t token_index() const { return ast_node_.token_index(); } 1194 intptr_t token_pos() const { return ast_node_.token_pos(); }
1195 intptr_t try_index() const { return try_index_; } 1195 intptr_t try_index() const { return try_index_; }
1196 const ZoneGrowableArray<Value*>& arguments() const { return *arguments_; } 1196 const ZoneGrowableArray<Value*>& arguments() const { return *arguments_; }
1197 1197
1198 virtual intptr_t InputCount() const; 1198 virtual intptr_t InputCount() const;
1199 virtual Value* InputAt(intptr_t i) const { return arguments()[i]; } 1199 virtual Value* InputAt(intptr_t i) const { return arguments()[i]; }
1200 virtual void SetInputAt(intptr_t i, Value* value) { 1200 virtual void SetInputAt(intptr_t i, Value* value) {
1201 (*arguments_)[i] = value; 1201 (*arguments_)[i] = value;
1202 } 1202 }
1203 1203
1204 virtual void PrintOperandsTo(BufferFormatter* f) const; 1204 virtual void PrintOperandsTo(BufferFormatter* f) const;
1205 1205
1206 private: 1206 private:
1207 const ConstructorCallNode& ast_node_; 1207 const ConstructorCallNode& ast_node_;
1208 const intptr_t try_index_; 1208 const intptr_t try_index_;
1209 ZoneGrowableArray<Value*>* const arguments_; 1209 ZoneGrowableArray<Value*>* const arguments_;
1210 DISALLOW_COPY_AND_ASSIGN(AllocateObjectWithBoundsCheckComp); 1210 DISALLOW_COPY_AND_ASSIGN(AllocateObjectWithBoundsCheckComp);
1211 }; 1211 };
1212 1212
1213 1213
1214 class CreateArrayComp : public TemplateComputation<1> { 1214 class CreateArrayComp : public TemplateComputation<1> {
1215 public: 1215 public:
1216 CreateArrayComp(intptr_t token_index, 1216 CreateArrayComp(intptr_t token_pos,
1217 intptr_t try_index, 1217 intptr_t try_index,
1218 ZoneGrowableArray<Value*>* elements, 1218 ZoneGrowableArray<Value*>* elements,
1219 Value* element_type) 1219 Value* element_type)
1220 : token_index_(token_index), 1220 : token_pos_(token_pos),
1221 try_index_(try_index), 1221 try_index_(try_index),
1222 elements_(elements) { 1222 elements_(elements) {
1223 #if defined(DEBUG) 1223 #if defined(DEBUG)
1224 for (int i = 0; i < ElementCount(); ++i) { 1224 for (int i = 0; i < ElementCount(); ++i) {
1225 ASSERT(ElementAt(i) != NULL); 1225 ASSERT(ElementAt(i) != NULL);
1226 } 1226 }
1227 ASSERT(element_type != NULL); 1227 ASSERT(element_type != NULL);
1228 #endif 1228 #endif
1229 inputs_[0] = element_type; 1229 inputs_[0] = element_type;
1230 } 1230 }
1231 1231
1232 DECLARE_COMPUTATION(CreateArray) 1232 DECLARE_COMPUTATION(CreateArray)
1233 1233
1234 intptr_t token_index() const { return token_index_; } 1234 intptr_t token_pos() const { return token_pos_; }
1235 intptr_t try_index() const { return try_index_; } 1235 intptr_t try_index() const { return try_index_; }
1236 intptr_t ElementCount() const { return elements_->length(); } 1236 intptr_t ElementCount() const { return elements_->length(); }
1237 Value* ElementAt(intptr_t i) const { return (*elements_)[i]; } 1237 Value* ElementAt(intptr_t i) const { return (*elements_)[i]; }
1238 Value* element_type() const { return inputs_[0]; } 1238 Value* element_type() const { return inputs_[0]; }
1239 1239
1240 virtual intptr_t InputCount() const; 1240 virtual intptr_t InputCount() const;
1241 virtual Value* InputAt(intptr_t i) const; 1241 virtual Value* InputAt(intptr_t i) const;
1242 virtual void SetInputAt(intptr_t i, Value* value); 1242 virtual void SetInputAt(intptr_t i, Value* value);
1243 1243
1244 virtual void PrintOperandsTo(BufferFormatter* f) const; 1244 virtual void PrintOperandsTo(BufferFormatter* f) const;
1245 1245
1246 private: 1246 private:
1247 const intptr_t token_index_; 1247 const intptr_t token_pos_;
1248 const intptr_t try_index_; 1248 const intptr_t try_index_;
1249 ZoneGrowableArray<Value*>* const elements_; 1249 ZoneGrowableArray<Value*>* const elements_;
1250 1250
1251 DISALLOW_COPY_AND_ASSIGN(CreateArrayComp); 1251 DISALLOW_COPY_AND_ASSIGN(CreateArrayComp);
1252 }; 1252 };
1253 1253
1254 1254
1255 class CreateClosureComp : public TemplateComputation<2> { 1255 class CreateClosureComp : public TemplateComputation<2> {
1256 public: 1256 public:
1257 CreateClosureComp(ClosureNode* node, 1257 CreateClosureComp(ClosureNode* node,
1258 intptr_t try_index, 1258 intptr_t try_index,
1259 Value* type_arguments, 1259 Value* type_arguments,
1260 Value* receiver) 1260 Value* receiver)
1261 : ast_node_(*node), 1261 : ast_node_(*node),
1262 try_index_(try_index) { 1262 try_index_(try_index) {
1263 ASSERT(type_arguments != NULL); 1263 ASSERT(type_arguments != NULL);
1264 ASSERT(receiver != NULL); 1264 ASSERT(receiver != NULL);
1265 inputs_[0] = type_arguments; 1265 inputs_[0] = type_arguments;
1266 inputs_[1] = receiver; 1266 inputs_[1] = receiver;
1267 } 1267 }
1268 1268
1269 DECLARE_COMPUTATION(CreateClosure) 1269 DECLARE_COMPUTATION(CreateClosure)
1270 1270
1271 intptr_t token_index() const { return ast_node_.token_index(); } 1271 intptr_t token_pos() const { return ast_node_.token_pos(); }
1272 intptr_t try_index() const { return try_index_; } 1272 intptr_t try_index() const { return try_index_; }
1273 const Function& function() const { return ast_node_.function(); } 1273 const Function& function() const { return ast_node_.function(); }
1274 Value* type_arguments() const { return inputs_[0]; } 1274 Value* type_arguments() const { return inputs_[0]; }
1275 Value* receiver() const { return inputs_[1]; } 1275 Value* receiver() const { return inputs_[1]; }
1276 1276
1277 virtual void PrintOperandsTo(BufferFormatter* f) const; 1277 virtual void PrintOperandsTo(BufferFormatter* f) const;
1278 1278
1279 private: 1279 private:
1280 const ClosureNode& ast_node_; 1280 const ClosureNode& ast_node_;
1281 const intptr_t try_index_; 1281 const intptr_t try_index_;
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
1342 private: 1342 private:
1343 const intptr_t offset_in_bytes_; 1343 const intptr_t offset_in_bytes_;
1344 const AbstractType& type_; 1344 const AbstractType& type_;
1345 1345
1346 DISALLOW_COPY_AND_ASSIGN(StoreVMFieldComp); 1346 DISALLOW_COPY_AND_ASSIGN(StoreVMFieldComp);
1347 }; 1347 };
1348 1348
1349 1349
1350 class InstantiateTypeArgumentsComp : public TemplateComputation<1> { 1350 class InstantiateTypeArgumentsComp : public TemplateComputation<1> {
1351 public: 1351 public:
1352 InstantiateTypeArgumentsComp(intptr_t token_index, 1352 InstantiateTypeArgumentsComp(intptr_t token_pos,
1353 intptr_t try_index, 1353 intptr_t try_index,
1354 const AbstractTypeArguments& type_arguments, 1354 const AbstractTypeArguments& type_arguments,
1355 Value* instantiator) 1355 Value* instantiator)
1356 : token_index_(token_index), 1356 : token_pos_(token_pos),
1357 try_index_(try_index), 1357 try_index_(try_index),
1358 type_arguments_(type_arguments) { 1358 type_arguments_(type_arguments) {
1359 ASSERT(instantiator != NULL); 1359 ASSERT(instantiator != NULL);
1360 inputs_[0] = instantiator; 1360 inputs_[0] = instantiator;
1361 } 1361 }
1362 1362
1363 DECLARE_COMPUTATION(InstantiateTypeArguments) 1363 DECLARE_COMPUTATION(InstantiateTypeArguments)
1364 1364
1365 Value* instantiator() const { return inputs_[0]; } 1365 Value* instantiator() const { return inputs_[0]; }
1366 const AbstractTypeArguments& type_arguments() const { 1366 const AbstractTypeArguments& type_arguments() const {
1367 return type_arguments_; 1367 return type_arguments_;
1368 } 1368 }
1369 intptr_t token_index() const { return token_index_; } 1369 intptr_t token_pos() const { return token_pos_; }
1370 intptr_t try_index() const { return try_index_; } 1370 intptr_t try_index() const { return try_index_; }
1371 1371
1372 virtual void PrintOperandsTo(BufferFormatter* f) const; 1372 virtual void PrintOperandsTo(BufferFormatter* f) const;
1373 1373
1374 private: 1374 private:
1375 const intptr_t token_index_; 1375 const intptr_t token_pos_;
1376 const intptr_t try_index_; 1376 const intptr_t try_index_;
1377 const AbstractTypeArguments& type_arguments_; 1377 const AbstractTypeArguments& type_arguments_;
1378 1378
1379 DISALLOW_COPY_AND_ASSIGN(InstantiateTypeArgumentsComp); 1379 DISALLOW_COPY_AND_ASSIGN(InstantiateTypeArgumentsComp);
1380 }; 1380 };
1381 1381
1382 1382
1383 class ExtractConstructorTypeArgumentsComp : public TemplateComputation<1> { 1383 class ExtractConstructorTypeArgumentsComp : public TemplateComputation<1> {
1384 public: 1384 public:
1385 ExtractConstructorTypeArgumentsComp( 1385 ExtractConstructorTypeArgumentsComp(
1386 intptr_t token_index, 1386 intptr_t token_pos,
1387 intptr_t try_index, 1387 intptr_t try_index,
1388 const AbstractTypeArguments& type_arguments, 1388 const AbstractTypeArguments& type_arguments,
1389 Value* instantiator) 1389 Value* instantiator)
1390 : token_index_(token_index), 1390 : token_pos_(token_pos),
1391 try_index_(try_index), 1391 try_index_(try_index),
1392 type_arguments_(type_arguments) { 1392 type_arguments_(type_arguments) {
1393 ASSERT(instantiator != NULL); 1393 ASSERT(instantiator != NULL);
1394 inputs_[0] = instantiator; 1394 inputs_[0] = instantiator;
1395 } 1395 }
1396 1396
1397 DECLARE_COMPUTATION(ExtractConstructorTypeArguments) 1397 DECLARE_COMPUTATION(ExtractConstructorTypeArguments)
1398 1398
1399 Value* instantiator() const { return inputs_[0]; } 1399 Value* instantiator() const { return inputs_[0]; }
1400 const AbstractTypeArguments& type_arguments() const { 1400 const AbstractTypeArguments& type_arguments() const {
1401 return type_arguments_; 1401 return type_arguments_;
1402 } 1402 }
1403 intptr_t token_index() const { return token_index_; } 1403 intptr_t token_pos() const { return token_pos_; }
1404 intptr_t try_index() const { return try_index_; } 1404 intptr_t try_index() const { return try_index_; }
1405 1405
1406 virtual void PrintOperandsTo(BufferFormatter* f) const; 1406 virtual void PrintOperandsTo(BufferFormatter* f) const;
1407 1407
1408 private: 1408 private:
1409 const intptr_t token_index_; 1409 const intptr_t token_pos_;
1410 const intptr_t try_index_; 1410 const intptr_t try_index_;
1411 const AbstractTypeArguments& type_arguments_; 1411 const AbstractTypeArguments& type_arguments_;
1412 1412
1413 DISALLOW_COPY_AND_ASSIGN(ExtractConstructorTypeArgumentsComp); 1413 DISALLOW_COPY_AND_ASSIGN(ExtractConstructorTypeArgumentsComp);
1414 }; 1414 };
1415 1415
1416 1416
1417 class ExtractConstructorInstantiatorComp : public TemplateComputation<1> { 1417 class ExtractConstructorInstantiatorComp : public TemplateComputation<1> {
1418 public: 1418 public:
1419 ExtractConstructorInstantiatorComp(ConstructorCallNode* ast_node, 1419 ExtractConstructorInstantiatorComp(ConstructorCallNode* ast_node,
1420 Value* instantiator) 1420 Value* instantiator)
1421 : ast_node_(*ast_node) { 1421 : ast_node_(*ast_node) {
1422 ASSERT(instantiator != NULL); 1422 ASSERT(instantiator != NULL);
1423 inputs_[0] = instantiator; 1423 inputs_[0] = instantiator;
1424 } 1424 }
1425 1425
1426 DECLARE_COMPUTATION(ExtractConstructorInstantiator) 1426 DECLARE_COMPUTATION(ExtractConstructorInstantiator)
1427 1427
1428 Value* instantiator() const { return inputs_[0]; } 1428 Value* instantiator() const { return inputs_[0]; }
1429 const AbstractTypeArguments& type_arguments() const { 1429 const AbstractTypeArguments& type_arguments() const {
1430 return ast_node_.type_arguments(); 1430 return ast_node_.type_arguments();
1431 } 1431 }
1432 const Function& constructor() const { return ast_node_.constructor(); } 1432 const Function& constructor() const { return ast_node_.constructor(); }
1433 intptr_t token_index() const { return ast_node_.token_index(); } 1433 intptr_t token_pos() const { return ast_node_.token_pos(); }
1434 1434
1435 private: 1435 private:
1436 const ConstructorCallNode& ast_node_; 1436 const ConstructorCallNode& ast_node_;
1437 1437
1438 DISALLOW_COPY_AND_ASSIGN(ExtractConstructorInstantiatorComp); 1438 DISALLOW_COPY_AND_ASSIGN(ExtractConstructorInstantiatorComp);
1439 }; 1439 };
1440 1440
1441 1441
1442 class AllocateContextComp : public TemplateComputation<0> { 1442 class AllocateContextComp : public TemplateComputation<0> {
1443 public: 1443 public:
1444 AllocateContextComp(intptr_t token_index, 1444 AllocateContextComp(intptr_t token_pos,
1445 intptr_t try_index, 1445 intptr_t try_index,
1446 intptr_t num_context_variables) 1446 intptr_t num_context_variables)
1447 : token_index_(token_index), 1447 : token_pos_(token_pos),
1448 try_index_(try_index), 1448 try_index_(try_index),
1449 num_context_variables_(num_context_variables) {} 1449 num_context_variables_(num_context_variables) {}
1450 1450
1451 DECLARE_COMPUTATION(AllocateContext); 1451 DECLARE_COMPUTATION(AllocateContext);
1452 1452
1453 intptr_t token_index() const { return token_index_; } 1453 intptr_t token_pos() const { return token_pos_; }
1454 intptr_t try_index() const { return try_index_; } 1454 intptr_t try_index() const { return try_index_; }
1455 intptr_t num_context_variables() const { return num_context_variables_; } 1455 intptr_t num_context_variables() const { return num_context_variables_; }
1456 1456
1457 virtual void PrintOperandsTo(BufferFormatter* f) const; 1457 virtual void PrintOperandsTo(BufferFormatter* f) const;
1458 1458
1459 private: 1459 private:
1460 const intptr_t token_index_; 1460 const intptr_t token_pos_;
1461 const intptr_t try_index_; 1461 const intptr_t try_index_;
1462 const intptr_t num_context_variables_; 1462 const intptr_t num_context_variables_;
1463 1463
1464 DISALLOW_COPY_AND_ASSIGN(AllocateContextComp); 1464 DISALLOW_COPY_AND_ASSIGN(AllocateContextComp);
1465 }; 1465 };
1466 1466
1467 1467
1468 class ChainContextComp : public TemplateComputation<1> { 1468 class ChainContextComp : public TemplateComputation<1> {
1469 public: 1469 public:
1470 explicit ChainContextComp(Value* context_value) { 1470 explicit ChainContextComp(Value* context_value) {
1471 ASSERT(context_value != NULL); 1471 ASSERT(context_value != NULL);
1472 inputs_[0] = context_value; 1472 inputs_[0] = context_value;
1473 } 1473 }
1474 1474
1475 DECLARE_COMPUTATION(ChainContext) 1475 DECLARE_COMPUTATION(ChainContext)
1476 1476
1477 Value* context_value() const { return inputs_[0]; } 1477 Value* context_value() const { return inputs_[0]; }
1478 1478
1479 private: 1479 private:
1480 DISALLOW_COPY_AND_ASSIGN(ChainContextComp); 1480 DISALLOW_COPY_AND_ASSIGN(ChainContextComp);
1481 }; 1481 };
1482 1482
1483 1483
1484 class CloneContextComp : public TemplateComputation<1> { 1484 class CloneContextComp : public TemplateComputation<1> {
1485 public: 1485 public:
1486 CloneContextComp(intptr_t token_index, 1486 CloneContextComp(intptr_t token_pos,
1487 intptr_t try_index, 1487 intptr_t try_index,
1488 Value* context_value) 1488 Value* context_value)
1489 : token_index_(token_index), 1489 : token_pos_(token_pos),
1490 try_index_(try_index) { 1490 try_index_(try_index) {
1491 ASSERT(context_value != NULL); 1491 ASSERT(context_value != NULL);
1492 inputs_[0] = context_value; 1492 inputs_[0] = context_value;
1493 } 1493 }
1494 1494
1495 intptr_t token_index() const { return token_index_; } 1495 intptr_t token_pos() const { return token_pos_; }
1496 intptr_t try_index() const { return try_index_; } 1496 intptr_t try_index() const { return try_index_; }
1497 Value* context_value() const { return inputs_[0]; } 1497 Value* context_value() const { return inputs_[0]; }
1498 1498
1499 DECLARE_COMPUTATION(CloneContext) 1499 DECLARE_COMPUTATION(CloneContext)
1500 1500
1501 private: 1501 private:
1502 const intptr_t token_index_; 1502 const intptr_t token_pos_;
1503 const intptr_t try_index_; 1503 const intptr_t try_index_;
1504 1504
1505 DISALLOW_COPY_AND_ASSIGN(CloneContextComp); 1505 DISALLOW_COPY_AND_ASSIGN(CloneContextComp);
1506 }; 1506 };
1507 1507
1508 1508
1509 class CatchEntryComp : public TemplateComputation<0> { 1509 class CatchEntryComp : public TemplateComputation<0> {
1510 public: 1510 public:
1511 CatchEntryComp(const LocalVariable& exception_var, 1511 CatchEntryComp(const LocalVariable& exception_var,
1512 const LocalVariable& stacktrace_var) 1512 const LocalVariable& stacktrace_var)
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
1616 1616
1617 private: 1617 private:
1618 InstanceCallComp* instance_call_; 1618 InstanceCallComp* instance_call_;
1619 1619
1620 DISALLOW_COPY_AND_ASSIGN(NumberNegateComp); 1620 DISALLOW_COPY_AND_ASSIGN(NumberNegateComp);
1621 }; 1621 };
1622 1622
1623 1623
1624 class CheckStackOverflowComp : public TemplateComputation<0> { 1624 class CheckStackOverflowComp : public TemplateComputation<0> {
1625 public: 1625 public:
1626 CheckStackOverflowComp(intptr_t token_index, intptr_t try_index) 1626 CheckStackOverflowComp(intptr_t token_pos, intptr_t try_index)
1627 : token_index_(token_index), 1627 : token_pos_(token_pos),
1628 try_index_(try_index) {} 1628 try_index_(try_index) {}
1629 1629
1630 intptr_t token_index() const { return token_index_; } 1630 intptr_t token_pos() const { return token_pos_; }
1631 intptr_t try_index() const { return try_index_; } 1631 intptr_t try_index() const { return try_index_; }
1632 1632
1633 DECLARE_COMPUTATION(CheckStackOverflow) 1633 DECLARE_COMPUTATION(CheckStackOverflow)
1634 1634
1635 private: 1635 private:
1636 const intptr_t token_index_; 1636 const intptr_t token_pos_;
1637 const intptr_t try_index_; 1637 const intptr_t try_index_;
1638 1638
1639 DISALLOW_COPY_AND_ASSIGN(CheckStackOverflowComp); 1639 DISALLOW_COPY_AND_ASSIGN(CheckStackOverflowComp);
1640 }; 1640 };
1641 1641
1642 1642
1643 class ToDoubleComp : public TemplateComputation<1> { 1643 class ToDoubleComp : public TemplateComputation<1> {
1644 public: 1644 public:
1645 ToDoubleComp(Value* value, 1645 ToDoubleComp(Value* value,
1646 ObjectKind from, 1646 ObjectKind from,
(...skipping 540 matching lines...) Expand 10 before | Expand all | Expand 10 after
2187 2187
2188 private: 2188 private:
2189 GrowableArray<Value*> inputs_; 2189 GrowableArray<Value*> inputs_;
2190 2190
2191 DISALLOW_COPY_AND_ASSIGN(PhiInstr); 2191 DISALLOW_COPY_AND_ASSIGN(PhiInstr);
2192 }; 2192 };
2193 2193
2194 2194
2195 class ReturnInstr : public InstructionWithInputs { 2195 class ReturnInstr : public InstructionWithInputs {
2196 public: 2196 public:
2197 ReturnInstr(intptr_t token_index, Value* value) 2197 ReturnInstr(intptr_t token_pos, Value* value)
2198 : InstructionWithInputs(), token_index_(token_index), value_(value) { 2198 : InstructionWithInputs(), token_pos_(token_pos), value_(value) {
2199 ASSERT(value_ != NULL); 2199 ASSERT(value_ != NULL);
2200 } 2200 }
2201 2201
2202 DECLARE_INSTRUCTION(Return) 2202 DECLARE_INSTRUCTION(Return)
2203 2203
2204 Value* value() const { return value_; } 2204 Value* value() const { return value_; }
2205 intptr_t token_index() const { return token_index_; } 2205 intptr_t token_pos() const { return token_pos_; }
2206 2206
2207 virtual Instruction* StraightLineSuccessor() const { return NULL; } 2207 virtual Instruction* StraightLineSuccessor() const { return NULL; }
2208 virtual void SetSuccessor(Instruction* instr) { UNREACHABLE(); } 2208 virtual void SetSuccessor(Instruction* instr) { UNREACHABLE(); }
2209 2209
2210 virtual LocationSummary* MakeLocationSummary() const; 2210 virtual LocationSummary* MakeLocationSummary() const;
2211 2211
2212 virtual void EmitNativeCode(FlowGraphCompiler* compiler); 2212 virtual void EmitNativeCode(FlowGraphCompiler* compiler);
2213 2213
2214 private: 2214 private:
2215 const intptr_t token_index_; 2215 const intptr_t token_pos_;
2216 Value* value_; 2216 Value* value_;
2217 2217
2218 DISALLOW_COPY_AND_ASSIGN(ReturnInstr); 2218 DISALLOW_COPY_AND_ASSIGN(ReturnInstr);
2219 }; 2219 };
2220 2220
2221 2221
2222 class ThrowInstr : public InstructionWithInputs { 2222 class ThrowInstr : public InstructionWithInputs {
2223 public: 2223 public:
2224 ThrowInstr(intptr_t token_index, 2224 ThrowInstr(intptr_t token_pos,
2225 intptr_t try_index, 2225 intptr_t try_index,
2226 Value* exception) 2226 Value* exception)
2227 : InstructionWithInputs(), 2227 : InstructionWithInputs(),
2228 token_index_(token_index), 2228 token_pos_(token_pos),
2229 try_index_(try_index), 2229 try_index_(try_index),
2230 exception_(exception), 2230 exception_(exception),
2231 successor_(NULL) { 2231 successor_(NULL) {
2232 ASSERT(exception_ != NULL); 2232 ASSERT(exception_ != NULL);
2233 } 2233 }
2234 2234
2235 DECLARE_INSTRUCTION(Throw) 2235 DECLARE_INSTRUCTION(Throw)
2236 2236
2237 intptr_t token_index() const { return token_index_; } 2237 intptr_t token_pos() const { return token_pos_; }
2238 intptr_t try_index() const { return try_index_; } 2238 intptr_t try_index() const { return try_index_; }
2239 Value* exception() const { return exception_; } 2239 Value* exception() const { return exception_; }
2240 2240
2241 // Parser can generate a throw within an expression tree. We never 2241 // Parser can generate a throw within an expression tree. We never
2242 // add successor instructions to the graph. 2242 // add successor instructions to the graph.
2243 virtual Instruction* StraightLineSuccessor() const { return NULL; } 2243 virtual Instruction* StraightLineSuccessor() const { return NULL; }
2244 virtual void SetSuccessor(Instruction* instr) { 2244 virtual void SetSuccessor(Instruction* instr) {
2245 ASSERT(successor_ == NULL); 2245 ASSERT(successor_ == NULL);
2246 } 2246 }
2247 2247
2248 virtual LocationSummary* MakeLocationSummary() const; 2248 virtual LocationSummary* MakeLocationSummary() const;
2249 2249
2250 virtual void EmitNativeCode(FlowGraphCompiler* compiler); 2250 virtual void EmitNativeCode(FlowGraphCompiler* compiler);
2251 2251
2252 private: 2252 private:
2253 const intptr_t token_index_; 2253 const intptr_t token_pos_;
2254 const intptr_t try_index_; 2254 const intptr_t try_index_;
2255 Value* exception_; 2255 Value* exception_;
2256 Instruction* successor_; 2256 Instruction* successor_;
2257 2257
2258 DISALLOW_COPY_AND_ASSIGN(ThrowInstr); 2258 DISALLOW_COPY_AND_ASSIGN(ThrowInstr);
2259 }; 2259 };
2260 2260
2261 2261
2262 class ReThrowInstr : public InstructionWithInputs { 2262 class ReThrowInstr : public InstructionWithInputs {
2263 public: 2263 public:
2264 ReThrowInstr(intptr_t token_index, 2264 ReThrowInstr(intptr_t token_pos,
2265 intptr_t try_index, 2265 intptr_t try_index,
2266 Value* exception, 2266 Value* exception,
2267 Value* stack_trace) 2267 Value* stack_trace)
2268 : InstructionWithInputs(), 2268 : InstructionWithInputs(),
2269 token_index_(token_index), 2269 token_pos_(token_pos),
2270 try_index_(try_index), 2270 try_index_(try_index),
2271 exception_(exception), 2271 exception_(exception),
2272 stack_trace_(stack_trace), 2272 stack_trace_(stack_trace),
2273 successor_(NULL) { 2273 successor_(NULL) {
2274 ASSERT(exception_ != NULL); 2274 ASSERT(exception_ != NULL);
2275 ASSERT(stack_trace_ != NULL); 2275 ASSERT(stack_trace_ != NULL);
2276 } 2276 }
2277 2277
2278 DECLARE_INSTRUCTION(ReThrow) 2278 DECLARE_INSTRUCTION(ReThrow)
2279 2279
2280 intptr_t token_index() const { return token_index_; } 2280 intptr_t token_pos() const { return token_pos_; }
2281 intptr_t try_index() const { return try_index_; } 2281 intptr_t try_index() const { return try_index_; }
2282 Value* exception() const { return exception_; } 2282 Value* exception() const { return exception_; }
2283 Value* stack_trace() const { return stack_trace_; } 2283 Value* stack_trace() const { return stack_trace_; }
2284 2284
2285 // Parser can generate a rethrow within an expression tree. We 2285 // Parser can generate a rethrow within an expression tree. We
2286 // never add successor instructions to the graph. 2286 // never add successor instructions to the graph.
2287 virtual Instruction* StraightLineSuccessor() const { 2287 virtual Instruction* StraightLineSuccessor() const {
2288 return NULL; 2288 return NULL;
2289 } 2289 }
2290 virtual void SetSuccessor(Instruction* instr) { 2290 virtual void SetSuccessor(Instruction* instr) {
2291 ASSERT(successor_ == NULL); 2291 ASSERT(successor_ == NULL);
2292 } 2292 }
2293 2293
2294 virtual LocationSummary* MakeLocationSummary() const; 2294 virtual LocationSummary* MakeLocationSummary() const;
2295 2295
2296 virtual void EmitNativeCode(FlowGraphCompiler* compiler); 2296 virtual void EmitNativeCode(FlowGraphCompiler* compiler);
2297 2297
2298 private: 2298 private:
2299 const intptr_t token_index_; 2299 const intptr_t token_pos_;
2300 const intptr_t try_index_; 2300 const intptr_t try_index_;
2301 Value* exception_; 2301 Value* exception_;
2302 Value* stack_trace_; 2302 Value* stack_trace_;
2303 Instruction* successor_; 2303 Instruction* successor_;
2304 2304
2305 DISALLOW_COPY_AND_ASSIGN(ReThrowInstr); 2305 DISALLOW_COPY_AND_ASSIGN(ReThrowInstr);
2306 }; 2306 };
2307 2307
2308 2308
2309 class BranchInstr : public InstructionWithInputs { 2309 class BranchInstr : public InstructionWithInputs {
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
2429 const GrowableArray<BlockEntryInstr*>& block_order_; 2429 const GrowableArray<BlockEntryInstr*>& block_order_;
2430 2430
2431 private: 2431 private:
2432 DISALLOW_COPY_AND_ASSIGN(FlowGraphVisitor); 2432 DISALLOW_COPY_AND_ASSIGN(FlowGraphVisitor);
2433 }; 2433 };
2434 2434
2435 2435
2436 } // namespace dart 2436 } // namespace dart
2437 2437
2438 #endif // VM_INTERMEDIATE_LANGUAGE_H_ 2438 #endif // VM_INTERMEDIATE_LANGUAGE_H_
OLDNEW
« no previous file with comments | « vm/flow_graph_compiler_x64.cc ('k') | vm/intermediate_language.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698