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

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

Issue 326183002: Pass around the current isolate in exception handling code. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 6 months 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 | Annotate | Revision Log
« no previous file with comments | « runtime/vm/code_generator.cc ('k') | runtime/vm/exceptions.h » ('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) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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 #include "include/dart_api.h" 5 #include "include/dart_api.h"
6 #include "include/dart_mirrors_api.h" 6 #include "include/dart_mirrors_api.h"
7 #include "include/dart_native_api.h" 7 #include "include/dart_native_api.h"
8 8
9 #include "platform/assert.h" 9 #include "platform/assert.h"
10 #include "vm/bigint_operations.h" 10 #include "vm/bigint_operations.h"
(...skipping 2680 matching lines...) Expand 10 before | Expand all | Expand 10 after
2691 // exception. 2691 // exception.
2692 ApiState* state = isolate->api_state(); 2692 ApiState* state = isolate->api_state();
2693 ASSERT(state != NULL); 2693 ASSERT(state != NULL);
2694 const Instance* saved_exception; 2694 const Instance* saved_exception;
2695 { 2695 {
2696 NoGCScope no_gc; 2696 NoGCScope no_gc;
2697 RawInstance* raw_exception = exception.raw(); 2697 RawInstance* raw_exception = exception.raw();
2698 state->UnwindScopes(isolate->top_exit_frame_info()); 2698 state->UnwindScopes(isolate->top_exit_frame_info());
2699 saved_exception = &Instance::Handle(raw_exception); 2699 saved_exception = &Instance::Handle(raw_exception);
2700 } 2700 }
2701 Exceptions::Throw(*saved_exception); 2701 Exceptions::Throw(isolate, *saved_exception);
2702 const String& message = String::Handle( 2702 const String& message = String::Handle(
2703 String::New("Exception was not thrown, internal error")); 2703 String::New("Exception was not thrown, internal error"));
2704 return ApiError::New(message); 2704 return ApiError::New(message);
2705 } 2705 }
2706 2706
2707 // TODO(sgjesse): value should always be smaller then 0xff. Add error handling. 2707 // TODO(sgjesse): value should always be smaller then 0xff. Add error handling.
2708 #define GET_LIST_ELEMENT_AS_BYTES(isolate, type, obj, native_array, offset, \ 2708 #define GET_LIST_ELEMENT_AS_BYTES(isolate, type, obj, native_array, offset, \
2709 length) \ 2709 length) \
2710 const type& array = type::Cast(obj); \ 2710 const type& array = type::Cast(obj); \
2711 if (Utils::RangeCheck(offset, length, array.Length())) { \ 2711 if (Utils::RangeCheck(offset, length, array.Length())) { \
(...skipping 1493 matching lines...) Expand 10 before | Expand all | Expand 10 after
4205 ApiState* state = isolate->api_state(); 4205 ApiState* state = isolate->api_state();
4206 ASSERT(state != NULL); 4206 ASSERT(state != NULL);
4207 const Instance* saved_exception; 4207 const Instance* saved_exception;
4208 { 4208 {
4209 NoGCScope no_gc; 4209 NoGCScope no_gc;
4210 RawInstance* raw_exception = 4210 RawInstance* raw_exception =
4211 Api::UnwrapInstanceHandle(isolate, exception).raw(); 4211 Api::UnwrapInstanceHandle(isolate, exception).raw();
4212 state->UnwindScopes(isolate->top_exit_frame_info()); 4212 state->UnwindScopes(isolate->top_exit_frame_info());
4213 saved_exception = &Instance::Handle(raw_exception); 4213 saved_exception = &Instance::Handle(raw_exception);
4214 } 4214 }
4215 Exceptions::Throw(*saved_exception); 4215 Exceptions::Throw(isolate, *saved_exception);
4216 return Api::NewError("Exception was not thrown, internal error"); 4216 return Api::NewError("Exception was not thrown, internal error");
4217 } 4217 }
4218 4218
4219 4219
4220 DART_EXPORT Dart_Handle Dart_ReThrowException(Dart_Handle exception, 4220 DART_EXPORT Dart_Handle Dart_ReThrowException(Dart_Handle exception,
4221 Dart_Handle stacktrace) { 4221 Dart_Handle stacktrace) {
4222 Isolate* isolate = Isolate::Current(); 4222 Isolate* isolate = Isolate::Current();
4223 CHECK_ISOLATE(isolate); 4223 CHECK_ISOLATE(isolate);
4224 CHECK_CALLBACK_STATE(isolate); 4224 CHECK_CALLBACK_STATE(isolate);
4225 { 4225 {
(...skipping 21 matching lines...) Expand all
4247 { 4247 {
4248 NoGCScope no_gc; 4248 NoGCScope no_gc;
4249 RawInstance* raw_exception = 4249 RawInstance* raw_exception =
4250 Api::UnwrapInstanceHandle(isolate, exception).raw(); 4250 Api::UnwrapInstanceHandle(isolate, exception).raw();
4251 RawInstance* raw_stacktrace = 4251 RawInstance* raw_stacktrace =
4252 Api::UnwrapInstanceHandle(isolate, stacktrace).raw(); 4252 Api::UnwrapInstanceHandle(isolate, stacktrace).raw();
4253 state->UnwindScopes(isolate->top_exit_frame_info()); 4253 state->UnwindScopes(isolate->top_exit_frame_info());
4254 saved_exception = &Instance::Handle(raw_exception); 4254 saved_exception = &Instance::Handle(raw_exception);
4255 saved_stacktrace = &Instance::Handle(raw_stacktrace); 4255 saved_stacktrace = &Instance::Handle(raw_stacktrace);
4256 } 4256 }
4257 Exceptions::ReThrow(*saved_exception, *saved_stacktrace); 4257 Exceptions::ReThrow(isolate, *saved_exception, *saved_stacktrace);
4258 return Api::NewError("Exception was not re thrown, internal error"); 4258 return Api::NewError("Exception was not re thrown, internal error");
4259 } 4259 }
4260 4260
4261 4261
4262 // --- Native fields and functions --- 4262 // --- Native fields and functions ---
4263 4263
4264 DART_EXPORT Dart_Handle Dart_CreateNativeWrapperClass(Dart_Handle library, 4264 DART_EXPORT Dart_Handle Dart_CreateNativeWrapperClass(Dart_Handle library,
4265 Dart_Handle name, 4265 Dart_Handle name,
4266 int field_count) { 4266 int field_count) {
4267 Isolate* isolate = Isolate::Current(); 4267 Isolate* isolate = Isolate::Current();
(...skipping 920 matching lines...) Expand 10 before | Expand all | Expand 10 after
5188 5188
5189 5189
5190 DART_EXPORT void Dart_RegisterRootServiceRequestCallback( 5190 DART_EXPORT void Dart_RegisterRootServiceRequestCallback(
5191 const char* name, 5191 const char* name,
5192 Dart_ServiceRequestCallback callback, 5192 Dart_ServiceRequestCallback callback,
5193 void* user_data) { 5193 void* user_data) {
5194 Service::RegisterRootEmbedderCallback(name, callback, user_data); 5194 Service::RegisterRootEmbedderCallback(name, callback, user_data);
5195 } 5195 }
5196 5196
5197 } // namespace dart 5197 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/code_generator.cc ('k') | runtime/vm/exceptions.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698