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

Side by Side Diff: runtime/vm/intermediate_language.h

Issue 1841073003: VM: Fix receiver type propagation in presence of try-catch. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: share code between jit_ and aot_optimizer Created 4 years, 8 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
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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 1540 matching lines...) Expand 10 before | Expand all | Expand 10 after
1551 1551
1552 private: 1552 private:
1553 const intptr_t indirect_id_; 1553 const intptr_t indirect_id_;
1554 }; 1554 };
1555 1555
1556 1556
1557 class CatchBlockEntryInstr : public BlockEntryInstr { 1557 class CatchBlockEntryInstr : public BlockEntryInstr {
1558 public: 1558 public:
1559 CatchBlockEntryInstr(intptr_t block_id, 1559 CatchBlockEntryInstr(intptr_t block_id,
1560 intptr_t try_index, 1560 intptr_t try_index,
1561 GraphEntryInstr* graph_entry,
1561 const Array& handler_types, 1562 const Array& handler_types,
1562 intptr_t catch_try_index, 1563 intptr_t catch_try_index,
1563 const LocalVariable& exception_var, 1564 const LocalVariable& exception_var,
1564 const LocalVariable& stacktrace_var, 1565 const LocalVariable& stacktrace_var,
1565 bool needs_stacktrace) 1566 bool needs_stacktrace)
1566 : BlockEntryInstr(block_id, try_index), 1567 : BlockEntryInstr(block_id, try_index),
1568 graph_entry_(graph_entry),
1567 predecessor_(NULL), 1569 predecessor_(NULL),
1568 catch_handler_types_(Array::ZoneHandle(handler_types.raw())), 1570 catch_handler_types_(Array::ZoneHandle(handler_types.raw())),
1569 catch_try_index_(catch_try_index), 1571 catch_try_index_(catch_try_index),
1570 exception_var_(exception_var), 1572 exception_var_(exception_var),
1571 stacktrace_var_(stacktrace_var), 1573 stacktrace_var_(stacktrace_var),
1572 needs_stacktrace_(needs_stacktrace) { } 1574 needs_stacktrace_(needs_stacktrace) { }
1573 1575
1574 DECLARE_INSTRUCTION(CatchBlockEntry) 1576 DECLARE_INSTRUCTION(CatchBlockEntry)
1575 1577
1576 virtual intptr_t PredecessorCount() const { 1578 virtual intptr_t PredecessorCount() const {
1577 return (predecessor_ == NULL) ? 0 : 1; 1579 return (predecessor_ == NULL) ? 0 : 1;
1578 } 1580 }
1579 virtual BlockEntryInstr* PredecessorAt(intptr_t index) const { 1581 virtual BlockEntryInstr* PredecessorAt(intptr_t index) const {
1580 ASSERT((index == 0) && (predecessor_ != NULL)); 1582 ASSERT((index == 0) && (predecessor_ != NULL));
1581 return predecessor_; 1583 return predecessor_;
1582 } 1584 }
1583 1585
1586 GraphEntryInstr* graph_entry() const { return graph_entry_; }
1587
1584 const LocalVariable& exception_var() const { return exception_var_; } 1588 const LocalVariable& exception_var() const { return exception_var_; }
1585 const LocalVariable& stacktrace_var() const { return stacktrace_var_; } 1589 const LocalVariable& stacktrace_var() const { return stacktrace_var_; }
1586 1590
1587 bool needs_stacktrace() const { return needs_stacktrace_; } 1591 bool needs_stacktrace() const { return needs_stacktrace_; }
1588 1592
1589 // Returns try index for the try block to which this catch handler 1593 // Returns try index for the try block to which this catch handler
1590 // corresponds. 1594 // corresponds.
1591 intptr_t catch_try_index() const { 1595 intptr_t catch_try_index() const {
1592 return catch_try_index_; 1596 return catch_try_index_;
1593 } 1597 }
1594 GrowableArray<Definition*>* initial_definitions() { 1598 GrowableArray<Definition*>* initial_definitions() {
1595 return &initial_definitions_; 1599 return &initial_definitions_;
1596 } 1600 }
1597 1601
1598 PRINT_TO_SUPPORT 1602 PRINT_TO_SUPPORT
1599 1603
1600 private: 1604 private:
1601 friend class BlockEntryInstr; // Access to predecessor_ when inlining. 1605 friend class BlockEntryInstr; // Access to predecessor_ when inlining.
1602 1606
1603 virtual void ClearPredecessors() { predecessor_ = NULL; } 1607 virtual void ClearPredecessors() { predecessor_ = NULL; }
1604 virtual void AddPredecessor(BlockEntryInstr* predecessor) { 1608 virtual void AddPredecessor(BlockEntryInstr* predecessor) {
1605 ASSERT(predecessor_ == NULL); 1609 ASSERT(predecessor_ == NULL);
1606 predecessor_ = predecessor; 1610 predecessor_ = predecessor;
1607 } 1611 }
1608 1612
1613 GraphEntryInstr* graph_entry_;
1609 BlockEntryInstr* predecessor_; 1614 BlockEntryInstr* predecessor_;
1610 const Array& catch_handler_types_; 1615 const Array& catch_handler_types_;
1611 const intptr_t catch_try_index_; 1616 const intptr_t catch_try_index_;
1612 GrowableArray<Definition*> initial_definitions_; 1617 GrowableArray<Definition*> initial_definitions_;
1613 const LocalVariable& exception_var_; 1618 const LocalVariable& exception_var_;
1614 const LocalVariable& stacktrace_var_; 1619 const LocalVariable& stacktrace_var_;
1615 const bool needs_stacktrace_; 1620 const bool needs_stacktrace_;
1616 1621
1617 DISALLOW_COPY_AND_ASSIGN(CatchBlockEntryInstr); 1622 DISALLOW_COPY_AND_ASSIGN(CatchBlockEntryInstr);
1618 }; 1623 };
(...skipping 6641 matching lines...) Expand 10 before | Expand all | Expand 10 after
8260 LocationSummary* Name::MakeLocationSummary(Zone* zone, bool opt) const { \ 8265 LocationSummary* Name::MakeLocationSummary(Zone* zone, bool opt) const { \
8261 UNIMPLEMENTED(); \ 8266 UNIMPLEMENTED(); \
8262 return NULL; \ 8267 return NULL; \
8263 } \ 8268 } \
8264 void Name::EmitNativeCode(FlowGraphCompiler* compiler) { UNIMPLEMENTED(); } 8269 void Name::EmitNativeCode(FlowGraphCompiler* compiler) { UNIMPLEMENTED(); }
8265 8270
8266 8271
8267 } // namespace dart 8272 } // namespace dart
8268 8273
8269 #endif // VM_INTERMEDIATE_LANGUAGE_H_ 8274 #endif // VM_INTERMEDIATE_LANGUAGE_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698