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

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

Issue 1473403003: Move ApiLocalScope out of class ApiState into class Thread so that the API local handles and zone e… (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: code-review-patch Created 5 years 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
« no previous file with comments | « runtime/vm/bootstrap.cc ('k') | runtime/vm/dart_api_impl.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 VM_DART_API_IMPL_H_ 5 #ifndef VM_DART_API_IMPL_H_
6 #define VM_DART_API_IMPL_H_ 6 #define 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 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
49 #define CHECK_NO_ISOLATE(isolate) \ 49 #define CHECK_NO_ISOLATE(isolate) \
50 do { \ 50 do { \
51 TRACE_API_CALL(CURRENT_FUNC); \ 51 TRACE_API_CALL(CURRENT_FUNC); \
52 if ((isolate) != NULL) { \ 52 if ((isolate) != NULL) { \
53 FATAL1("%s expects there to be no current isolate. Did you " \ 53 FATAL1("%s expects there to be no current isolate. Did you " \
54 "forget to call Dart_ExitIsolate?", CURRENT_FUNC); \ 54 "forget to call Dart_ExitIsolate?", CURRENT_FUNC); \
55 } \ 55 } \
56 } while (0) 56 } while (0)
57 57
58 // Checks that the current isolate is not NULL and that it has an API scope. 58 // Checks that the current isolate is not NULL and that it has an API scope.
59 #define CHECK_ISOLATE_SCOPE(isolate) \ 59 #define CHECK_API_SCOPE(thread) \
60 do { \ 60 do { \
61 Isolate* tmp = (isolate); \ 61 Thread* tmpT = (thread); \
62 CHECK_ISOLATE(tmp); \ 62 Isolate* tmpI = tmpT->isolate(); \
63 ApiState* state = tmp->api_state(); \ 63 CHECK_ISOLATE(tmpI); \
64 ASSERT(state); \ 64 if (tmpT->api_top_scope() == NULL) { \
65 if (state->top_scope() == NULL) { \
66 FATAL1("%s expects to find a current scope. Did you forget to call " \ 65 FATAL1("%s expects to find a current scope. Did you forget to call " \
67 "Dart_EnterScope?", CURRENT_FUNC); \ 66 "Dart_EnterScope?", CURRENT_FUNC); \
68 } \ 67 } \
69 } while (0) 68 } while (0)
70 69
71 #define DARTSCOPE(thread) \ 70 #define DARTSCOPE(thread) \
72 Thread* T = (thread); \ 71 Thread* T = (thread); \
73 Isolate* I = T->isolate(); \ 72 CHECK_API_SCOPE(T); \
74 CHECK_ISOLATE_SCOPE(I); \
75 HANDLESCOPE(T); 73 HANDLESCOPE(T);
76 74
77 75
78 #define RETURN_TYPE_ERROR(zone, dart_handle, type) \ 76 #define RETURN_TYPE_ERROR(zone, dart_handle, type) \
79 do { \ 77 do { \
80 const Object& tmp = \ 78 const Object& tmp = \
81 Object::Handle(zone, Api::UnwrapHandle((dart_handle))); \ 79 Object::Handle(zone, Api::UnwrapHandle((dart_handle))); \
82 if (tmp.IsNull()) { \ 80 if (tmp.IsNull()) { \
83 return Api::NewError("%s expects argument '%s' to be non-null.", \ 81 return Api::NewError("%s expects argument '%s' to be non-null.", \
84 CURRENT_FUNC, #dart_handle); \ 82 CURRENT_FUNC, #dart_handle); \
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 } 115 }
118 ~Scope() { 116 ~Scope() {
119 Dart_ExitScope(); 117 Dart_ExitScope();
120 } 118 }
121 119
122 private: 120 private:
123 DISALLOW_COPY_AND_ASSIGN(Scope); 121 DISALLOW_COPY_AND_ASSIGN(Scope);
124 }; 122 };
125 123
126 // Creates a new local handle. 124 // Creates a new local handle.
127 static Dart_Handle NewHandle(Isolate* isolate, RawObject* raw); 125 static Dart_Handle NewHandle(Thread* thread, RawObject* raw);
128 126
129 // Unwraps the raw object from the handle. 127 // Unwraps the raw object from the handle.
130 static RawObject* UnwrapHandle(Dart_Handle object); 128 static RawObject* UnwrapHandle(Dart_Handle object);
131 129
132 // Unwraps a raw Type from the handle. The handle will be null if 130 // Unwraps a raw Type from the handle. The handle will be null if
133 // the object was not of the requested Type. 131 // the object was not of the requested Type.
134 #define DECLARE_UNWRAP(Type) \ 132 #define DECLARE_UNWRAP(Type) \
135 static const Type& Unwrap##Type##Handle(Zone* zone, \ 133 static const Type& Unwrap##Type##Handle(Zone* zone, \
136 Dart_Handle object); 134 Dart_Handle object);
137 CLASS_LIST_FOR_HANDLES(DECLARE_UNWRAP) 135 CLASS_LIST_FOR_HANDLES(DECLARE_UNWRAP)
138 #undef DECLARE_UNWRAP 136 #undef DECLARE_UNWRAP
139 137
140 // Unwraps the raw object from the handle using a reused handle. 138 // Unwraps the raw object from the handle using a reused handle.
141 static const String& UnwrapStringHandle( 139 static const String& UnwrapStringHandle(
142 const ReusableObjectHandleScope& reused, Dart_Handle object); 140 const ReusableObjectHandleScope& reused, Dart_Handle object);
143 static const Instance& UnwrapInstanceHandle( 141 static const Instance& UnwrapInstanceHandle(
144 const ReusableObjectHandleScope& reused, Dart_Handle object); 142 const ReusableObjectHandleScope& reused, Dart_Handle object);
145 143
146 // Returns an Error handle if isolate is in an inconsistent state 144 // Returns an Error handle if isolate is in an inconsistent state
147 // or there was an error while finalizing classes. 145 // or there was an error while finalizing classes.
148 // Returns a Success handle when no error condition exists. 146 // Returns a Success handle when no error condition exists.
149 static Dart_Handle CheckAndFinalizePendingClasses(Isolate *isolate); 147 static Dart_Handle CheckAndFinalizePendingClasses(Thread *thread);
150 148
151 // Casts the internal Isolate* type to the external Dart_Isolate type. 149 // Casts the internal Isolate* type to the external Dart_Isolate type.
152 static Dart_Isolate CastIsolate(Isolate* isolate); 150 static Dart_Isolate CastIsolate(Isolate* isolate);
153 151
154 // Gets the handle used to designate successful return. 152 // Gets the handle used to designate successful return.
155 static Dart_Handle Success() { return Api::True(); } 153 static Dart_Handle Success() { return Api::True(); }
156 154
157 // Sets up the acquired error object after initializing an Isolate. This 155 // Sets up the acquired error object after initializing an Isolate. This
158 // object is pre-created because we will not be able to allocate this 156 // object is pre-created because we will not be able to allocate this
159 // object when the error actually occurs. When the error occurs there will 157 // object when the error actually occurs. When the error occurs there will
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 static Dart_Handle False() { 207 static Dart_Handle False() {
210 return false_handle_; 208 return false_handle_;
211 } 209 }
212 210
213 // Gets a handle to EmptyString. 211 // Gets a handle to EmptyString.
214 static Dart_Handle EmptyString() { 212 static Dart_Handle EmptyString() {
215 return empty_string_handle_; 213 return empty_string_handle_;
216 } 214 }
217 215
218 // Retrieves the top ApiLocalScope. 216 // Retrieves the top ApiLocalScope.
219 static ApiLocalScope* TopScope(Isolate* isolate); 217 static ApiLocalScope* TopScope(Thread* thread);
220 218
221 // Performs one-time initialization needed by the API. 219 // Performs one-time initialization needed by the API.
222 static void InitOnce(); 220 static void InitOnce();
223 221
224 // Allocates handles for objects in the VM isolate. 222 // Allocates handles for objects in the VM isolate.
225 static void InitHandles(); 223 static void InitHandles();
226 224
227 // Helper function to get the peer value of an external string object. 225 // Helper function to get the peer value of an external string object.
228 static bool StringGetPeerHelper(NativeArguments* args, 226 static bool StringGetPeerHelper(NativeArguments* args,
229 int arg_index, 227 int arg_index,
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
266 static void SetDoubleReturnValue(NativeArguments* args, double retval) { 264 static void SetDoubleReturnValue(NativeArguments* args, double retval) {
267 args->SetReturnUnsafe(Double::New(retval)); 265 args->SetReturnUnsafe(Double::New(retval));
268 } 266 }
269 static void SetWeakHandleReturnValue(NativeArguments* args, 267 static void SetWeakHandleReturnValue(NativeArguments* args,
270 Dart_WeakPersistentHandle retval); 268 Dart_WeakPersistentHandle retval);
271 269
272 static RawString* CallEnvironmentCallback(Thread* thread, 270 static RawString* CallEnvironmentCallback(Thread* thread,
273 const String& name); 271 const String& name);
274 272
275 private: 273 private:
276 static Dart_Handle InitNewHandle(Isolate* isolate, RawObject* raw); 274 static Dart_Handle InitNewHandle(Thread* thread, RawObject* raw);
277 275
278 // Thread local key used by the API. Currently holds the current 276 // Thread local key used by the API. Currently holds the current
279 // ApiNativeScope if any. 277 // ApiNativeScope if any.
280 static ThreadLocalKey api_native_key_; 278 static ThreadLocalKey api_native_key_;
281 static Dart_Handle true_handle_; 279 static Dart_Handle true_handle_;
282 static Dart_Handle false_handle_; 280 static Dart_Handle false_handle_;
283 static Dart_Handle null_handle_; 281 static Dart_Handle null_handle_;
284 static Dart_Handle empty_string_handle_; 282 static Dart_Handle empty_string_handle_;
285 283
286 friend class ApiNativeScope; 284 friend class ApiNativeScope;
(...skipping 18 matching lines...) Expand all
305 return Api::NewError("%s: Cannot load after Dart_Precompile", \ 303 return Api::NewError("%s: Cannot load after Dart_Precompile", \
306 CURRENT_FUNC); \ 304 CURRENT_FUNC); \
307 } \ 305 } \
308 306
309 #define ASSERT_CALLBACK_STATE(thread) \ 307 #define ASSERT_CALLBACK_STATE(thread) \
310 ASSERT(thread->no_callback_scope_depth() == 0) 308 ASSERT(thread->no_callback_scope_depth() == 0)
311 309
312 } // namespace dart. 310 } // namespace dart.
313 311
314 #endif // VM_DART_API_IMPL_H_ 312 #endif // VM_DART_API_IMPL_H_
OLDNEW
« no previous file with comments | « runtime/vm/bootstrap.cc ('k') | runtime/vm/dart_api_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698