| OLD | NEW |
| 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, 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 RUNTIME_VM_DART_API_IMPL_H_ | 5 #ifndef RUNTIME_VM_DART_API_IMPL_H_ |
| 6 #define RUNTIME_VM_DART_API_IMPL_H_ | 6 #define RUNTIME_VM_DART_API_IMPL_H_ |
| 7 | 7 |
| 8 #include "vm/allocation.h" | 8 #include "vm/allocation.h" |
| 9 #include "vm/native_arguments.h" | 9 #include "vm/native_arguments.h" |
| 10 #include "vm/object.h" | 10 #include "vm/object.h" |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 60 CURRENT_FUNC); \ | 60 CURRENT_FUNC); \ |
| 61 } \ | 61 } \ |
| 62 } while (0); | 62 } while (0); |
| 63 | 63 |
| 64 #define DARTSCOPE(thread) \ | 64 #define DARTSCOPE(thread) \ |
| 65 Thread* T = (thread); \ | 65 Thread* T = (thread); \ |
| 66 CHECK_API_SCOPE(T); \ | 66 CHECK_API_SCOPE(T); \ |
| 67 TransitionNativeToVM transition(T); \ | 67 TransitionNativeToVM transition(T); \ |
| 68 HANDLESCOPE(T); | 68 HANDLESCOPE(T); |
| 69 | 69 |
| 70 | |
| 71 #define RETURN_TYPE_ERROR(zone, dart_handle, type) \ | 70 #define RETURN_TYPE_ERROR(zone, dart_handle, type) \ |
| 72 do { \ | 71 do { \ |
| 73 const Object& tmp = \ | 72 const Object& tmp = \ |
| 74 Object::Handle(zone, Api::UnwrapHandle((dart_handle))); \ | 73 Object::Handle(zone, Api::UnwrapHandle((dart_handle))); \ |
| 75 if (tmp.IsNull()) { \ | 74 if (tmp.IsNull()) { \ |
| 76 return Api::NewError("%s expects argument '%s' to be non-null.", \ | 75 return Api::NewError("%s expects argument '%s' to be non-null.", \ |
| 77 CURRENT_FUNC, #dart_handle); \ | 76 CURRENT_FUNC, #dart_handle); \ |
| 78 } else if (tmp.IsError()) { \ | 77 } else if (tmp.IsError()) { \ |
| 79 return dart_handle; \ | 78 return dart_handle; \ |
| 80 } \ | 79 } \ |
| 81 return Api::NewError("%s expects argument '%s' to be of type %s.", \ | 80 return Api::NewError("%s expects argument '%s' to be of type %s.", \ |
| 82 CURRENT_FUNC, #dart_handle, #type); \ | 81 CURRENT_FUNC, #dart_handle, #type); \ |
| 83 } while (0) | 82 } while (0) |
| 84 | 83 |
| 85 | |
| 86 #define RETURN_NULL_ERROR(parameter) \ | 84 #define RETURN_NULL_ERROR(parameter) \ |
| 87 return Api::NewError("%s expects argument '%s' to be non-null.", \ | 85 return Api::NewError("%s expects argument '%s' to be non-null.", \ |
| 88 CURRENT_FUNC, #parameter) | 86 CURRENT_FUNC, #parameter) |
| 89 | 87 |
| 90 #define CHECK_NULL(parameter) \ | 88 #define CHECK_NULL(parameter) \ |
| 91 if (parameter == NULL) { \ | 89 if (parameter == NULL) { \ |
| 92 RETURN_NULL_ERROR(parameter); \ | 90 RETURN_NULL_ERROR(parameter); \ |
| 93 } | 91 } |
| 94 | 92 |
| 95 #define CHECK_LENGTH(length, max_elements) \ | 93 #define CHECK_LENGTH(length, max_elements) \ |
| 96 do { \ | 94 do { \ |
| 97 intptr_t len = (length); \ | 95 intptr_t len = (length); \ |
| 98 intptr_t max = (max_elements); \ | 96 intptr_t max = (max_elements); \ |
| 99 if (len < 0 || len > max) { \ | 97 if (len < 0 || len > max) { \ |
| 100 return Api::NewError( \ | 98 return Api::NewError( \ |
| 101 "%s expects argument '%s' to be in the range [0..%" Pd "].", \ | 99 "%s expects argument '%s' to be in the range [0..%" Pd "].", \ |
| 102 CURRENT_FUNC, #length, max); \ | 100 CURRENT_FUNC, #length, max); \ |
| 103 } \ | 101 } \ |
| 104 } while (0) | 102 } while (0) |
| 105 | 103 |
| 106 | |
| 107 class Api : AllStatic { | 104 class Api : AllStatic { |
| 108 public: | 105 public: |
| 109 // Create on the stack to provide a new throw-safe api scope. | 106 // Create on the stack to provide a new throw-safe api scope. |
| 110 class Scope : public StackResource { | 107 class Scope : public StackResource { |
| 111 public: | 108 public: |
| 112 explicit Scope(Thread* thread) : StackResource(thread) { | 109 explicit Scope(Thread* thread) : StackResource(thread) { |
| 113 Dart_EnterScope(); | 110 Dart_EnterScope(); |
| 114 } | 111 } |
| 115 ~Scope() { Dart_ExitScope(); } | 112 ~Scope() { Dart_ExitScope(); } |
| 116 | 113 |
| (...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 300 return Api::NewError("%s: Cannot load after Dart_Precompile", \ | 297 return Api::NewError("%s: Cannot load after Dart_Precompile", \ |
| 301 CURRENT_FUNC); \ | 298 CURRENT_FUNC); \ |
| 302 } | 299 } |
| 303 | 300 |
| 304 #define ASSERT_CALLBACK_STATE(thread) \ | 301 #define ASSERT_CALLBACK_STATE(thread) \ |
| 305 ASSERT(thread->no_callback_scope_depth() == 0) | 302 ASSERT(thread->no_callback_scope_depth() == 0) |
| 306 | 303 |
| 307 } // namespace dart. | 304 } // namespace dart. |
| 308 | 305 |
| 309 #endif // RUNTIME_VM_DART_API_IMPL_H_ | 306 #endif // RUNTIME_VM_DART_API_IMPL_H_ |
| OLD | NEW |