1 | // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
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. |
4 | |
5 | #ifndef RUNTIME_VM_HEAP_WEAK_CODE_H_ |
6 | #define RUNTIME_VM_HEAP_WEAK_CODE_H_ |
7 | |
8 | #include "vm/allocation.h" |
9 | #include "vm/globals.h" |
10 | |
11 | namespace dart { |
12 | |
13 | class Array; |
14 | class Code; |
15 | |
16 | // Helper class to handle an array of code weak properties. Implements |
17 | // registration and disabling of stored code objects. |
18 | class WeakCodeReferences : public ValueObject { |
19 | public: |
20 | explicit WeakCodeReferences(const Array& value) : array_(value) {} |
21 | virtual ~WeakCodeReferences() {} |
22 | |
23 | void Register(const Code& value); |
24 | |
25 | virtual void UpdateArrayTo(const Array& array) = 0; |
26 | virtual void ReportDeoptimization(const Code& code) = 0; |
27 | virtual void ReportSwitchingCode(const Code& code) = 0; |
28 | |
29 | static bool IsOptimizedCode(const Array& dependent_code, const Code& code); |
30 | |
31 | void DisableCode(); |
32 | |
33 | bool HasCodes() const; |
34 | |
35 | private: |
36 | const Array& array_; // Array of Code objects. |
37 | DISALLOW_COPY_AND_ASSIGN(WeakCodeReferences); |
38 | }; |
39 | |
40 | } // namespace dart |
41 | |
42 | #endif // RUNTIME_VM_HEAP_WEAK_CODE_H_ |
43 | |