| OLD | NEW |
| 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_CODE_GENERATOR_H_ | 5 #ifndef VM_CODE_GENERATOR_H_ |
| 6 #define VM_CODE_GENERATOR_H_ | 6 #define VM_CODE_GENERATOR_H_ |
| 7 | 7 |
| 8 #include "vm/globals.h" | 8 #include "vm/globals.h" |
| 9 #include "vm/runtime_entry.h" | 9 #include "vm/runtime_entry.h" |
| 10 | 10 |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 77 V(DeoptNoTypeFeedback) \ | 77 V(DeoptNoTypeFeedback) \ |
| 78 V(DeoptSAR) \ | 78 V(DeoptSAR) \ |
| 79 V(DeoptUnaryOp) \ | 79 V(DeoptUnaryOp) \ |
| 80 | 80 |
| 81 enum DeoptReasonId { | 81 enum DeoptReasonId { |
| 82 #define DEFINE_ENUM_LIST(name) k##name, | 82 #define DEFINE_ENUM_LIST(name) k##name, |
| 83 DEOPT_REASONS(DEFINE_ENUM_LIST) | 83 DEOPT_REASONS(DEFINE_ENUM_LIST) |
| 84 #undef DEFINE_ENUM_LIST | 84 #undef DEFINE_ENUM_LIST |
| 85 }; | 85 }; |
| 86 | 86 |
| 87 // This class wraps around the array RawClass::functions_cache_. | |
| 88 // The structure of that array is specified by FunctionsCache::Entries. | |
| 89 // The last entry in the array is always NULL, the lookup code can rely on | |
| 90 // last entry being NULL to terminate its search. | |
| 91 // The compiled functions are added sequentially (except for the last entry | |
| 92 // being empty). Names of functions with variable number of arguments | |
| 93 // can appear several times, once for each valid argument count. | |
| 94 class FunctionsCache : public ValueObject { | |
| 95 public: | |
| 96 // Entries in the RawClass::functions_cache_. The size of initially allocated | |
| 97 // functions_cache_ array is (kInitialSize * kNumEntries). | |
| 98 enum Entries { | |
| 99 kFunctionName = 0, | |
| 100 kArgCount = 1, | |
| 101 kNamedArgCount = 2, | |
| 102 kFunction = 3, | |
| 103 kNumEntries = 4 | |
| 104 }; | |
| 105 | |
| 106 explicit FunctionsCache(const Class& cls) : class_(cls) {} | |
| 107 | |
| 108 void AddCompiledFunction(const Function& function, | |
| 109 int num_arguments, | |
| 110 int num_named_arguments); | |
| 111 | |
| 112 // This is a testing function, the lookup (will) occur inlined in stub code. | |
| 113 RawCode* LookupCode(const String& function_name, | |
| 114 int num_arguments, | |
| 115 int num_named_arguments); | |
| 116 | |
| 117 private: | |
| 118 static void EnterFunctionAt(int i, | |
| 119 const Array& cache, | |
| 120 const Function& function, | |
| 121 int num_arguments, | |
| 122 int num_named_arguments); | |
| 123 | |
| 124 const Class& class_; | |
| 125 }; | |
| 126 | |
| 127 | 87 |
| 128 RawCode* ResolveCompileInstanceCallTarget(Isolate* isolate, | 88 RawCode* ResolveCompileInstanceCallTarget(Isolate* isolate, |
| 129 const Instance& receiver); | 89 const Instance& receiver); |
| 130 | 90 |
| 131 } // namespace dart | 91 } // namespace dart |
| 132 | 92 |
| 133 #endif // VM_CODE_GENERATOR_H_ | 93 #endif // VM_CODE_GENERATOR_H_ |
| OLD | NEW |