| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 145 F(IndexedPropertyGetter, IndexedPropertyGetterCallback) \ | 145 F(IndexedPropertyGetter, IndexedPropertyGetterCallback) \ |
| 146 F(IndexedPropertySetter, IndexedPropertySetterCallback) \ | 146 F(IndexedPropertySetter, IndexedPropertySetterCallback) \ |
| 147 F(IndexedPropertyQuery, IndexedPropertyQueryCallback) \ | 147 F(IndexedPropertyQuery, IndexedPropertyQueryCallback) \ |
| 148 F(IndexedPropertyDeleter, IndexedPropertyDeleterCallback) \ | 148 F(IndexedPropertyDeleter, IndexedPropertyDeleterCallback) \ |
| 149 F(IndexedPropertyEnumerator, IndexedPropertyEnumeratorCallback) \ | 149 F(IndexedPropertyEnumerator, IndexedPropertyEnumeratorCallback) \ |
| 150 | 150 |
| 151 | 151 |
| 152 // TODO(dcarney): Remove this class when old callbacks are gone. | 152 // TODO(dcarney): Remove this class when old callbacks are gone. |
| 153 class CallbackTable { | 153 class CallbackTable { |
| 154 public: | 154 public: |
| 155 // TODO(dcarney): Flip this when it makes sense for performance. | 155 static const bool kStoreVoidFunctions = false; |
| 156 static const bool kStoreVoidFunctions = true; | |
| 157 static inline bool ReturnsVoid(Isolate* isolate, void* function) { | 156 static inline bool ReturnsVoid(Isolate* isolate, void* function) { |
| 158 CallbackTable* table = isolate->callback_table(); | 157 CallbackTable* table = isolate->callback_table(); |
| 159 bool contains = | 158 bool contains = |
| 160 table != NULL && | 159 table != NULL && |
| 161 table->map_.occupancy() != 0 && | 160 table->map_.occupancy() != 0 && |
| 162 table->Contains(function); | 161 table->Contains(function); |
| 163 return contains == kStoreVoidFunctions; | 162 return contains == kStoreVoidFunctions; |
| 164 } | 163 } |
| 165 | 164 |
| 166 STATIC_ASSERT(sizeof(intptr_t) == sizeof(AccessorGetterCallback)); | 165 STATIC_ASSERT(sizeof(intptr_t) == sizeof(AccessorGetterCallback)); |
| 167 | 166 |
| 168 template<typename F> | 167 template<typename F> |
| 169 static inline void* FunctionToVoidPtr(F function) { | 168 static inline void* FunctionToVoidPtr(F function) { |
| 170 return reinterpret_cast<void*>(reinterpret_cast<intptr_t>(function)); | 169 return reinterpret_cast<void*>(reinterpret_cast<intptr_t>(function)); |
| 171 } | 170 } |
| 172 | 171 |
| 173 #define WRITE_REGISTER(OldFunction, NewFunction) \ | 172 #define WRITE_REGISTER(OldFunction, NewFunction) \ |
| 174 static OldFunction Register(Isolate* isolate, NewFunction f) { \ | 173 static NewFunction Register(Isolate* isolate, OldFunction f) { \ |
| 175 InsertCallback(isolate, FunctionToVoidPtr(f), true); \ | 174 InsertCallback(isolate, FunctionToVoidPtr(f), false); \ |
| 176 return reinterpret_cast<OldFunction>(f); \ | 175 return reinterpret_cast<NewFunction>(f); \ |
| 177 } \ | 176 } \ |
| 178 \ | 177 \ |
| 179 static OldFunction Register(Isolate* isolate, OldFunction f) { \ | 178 static NewFunction Register(Isolate* isolate, NewFunction f) { \ |
| 180 InsertCallback(isolate, FunctionToVoidPtr(f), false); \ | 179 InsertCallback(isolate, FunctionToVoidPtr(f), true); \ |
| 181 return f; \ | 180 return f; \ |
| 182 } | 181 } |
| 183 FOR_EACH_CALLBACK_TABLE_MAPPING(WRITE_REGISTER) | 182 FOR_EACH_CALLBACK_TABLE_MAPPING(WRITE_REGISTER) |
| 184 #undef WRITE_REGISTER | 183 #undef WRITE_REGISTER |
| 185 | 184 |
| 186 private: | 185 private: |
| 187 CallbackTable(); | 186 CallbackTable(); |
| 188 bool Contains(void* function); | 187 bool Contains(void* function); |
| 189 static void InsertCallback(Isolate* isolate, | 188 static void InsertCallback(Isolate* isolate, |
| 190 void* function, | 189 void* function, |
| (...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 347 return __RT_impl_##Name(args, isolate); \ | 346 return __RT_impl_##Name(args, isolate); \ |
| 348 } \ | 347 } \ |
| 349 static Type __RT_impl_##Name(Arguments args, Isolate* isolate) | 348 static Type __RT_impl_##Name(Arguments args, Isolate* isolate) |
| 350 | 349 |
| 351 #define RUNTIME_ARGUMENTS(isolate, args) \ | 350 #define RUNTIME_ARGUMENTS(isolate, args) \ |
| 352 args.length(), args.arguments(), isolate | 351 args.length(), args.arguments(), isolate |
| 353 | 352 |
| 354 } } // namespace v8::internal | 353 } } // namespace v8::internal |
| 355 | 354 |
| 356 #endif // V8_ARGUMENTS_H_ | 355 #endif // V8_ARGUMENTS_H_ |
| OLD | NEW |