| 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 #include "include/dart_api.h" | 5 #include "include/dart_api.h" |
| 6 #include "include/dart_debugger_api.h" | 6 #include "include/dart_debugger_api.h" |
| 7 #include "platform/json.h" | 7 #include "platform/json.h" |
| 8 #include "vm/bootstrap_natives.h" | 8 #include "vm/bootstrap_natives.h" |
| 9 #include "vm/dart_entry.h" | 9 #include "vm/dart_entry.h" |
| 10 #include "vm/exceptions.h" | 10 #include "vm/exceptions.h" |
| 11 #include "vm/message.h" | 11 #include "vm/message.h" |
| 12 #include "vm/port.h" | 12 #include "vm/port.h" |
| 13 #include "vm/resolver.h" | 13 #include "vm/resolver.h" |
| 14 | 14 |
| 15 namespace dart { | 15 namespace dart { |
| 16 | 16 |
| 17 inline Dart_Handle NewString(const char* str) { |
| 18 return Dart_NewStringFromCString(str); |
| 19 } |
| 20 |
| 21 |
| 17 DEFINE_NATIVE_ENTRY(Mirrors_isLocalPort, 1) { | 22 DEFINE_NATIVE_ENTRY(Mirrors_isLocalPort, 1) { |
| 18 GET_NATIVE_ARGUMENT(Instance, port, arguments->At(0)); | 23 GET_NATIVE_ARGUMENT(Instance, port, arguments->At(0)); |
| 19 | 24 |
| 20 // Get the port id from the SendPort instance. | 25 // Get the port id from the SendPort instance. |
| 21 const Object& id_obj = Object::Handle(DartLibraryCalls::PortGetId(port)); | 26 const Object& id_obj = Object::Handle(DartLibraryCalls::PortGetId(port)); |
| 22 if (id_obj.IsError()) { | 27 if (id_obj.IsError()) { |
| 23 Exceptions::PropagateError(Error::Cast(id_obj)); | 28 Exceptions::PropagateError(Error::Cast(id_obj)); |
| 24 UNREACHABLE(); | 29 UNREACHABLE(); |
| 25 } | 30 } |
| 26 ASSERT(id_obj.IsSmi() || id_obj.IsMint()); | 31 ASSERT(id_obj.IsSmi() || id_obj.IsMint()); |
| 27 Integer& id = Integer::Handle(); | 32 Integer& id = Integer::Handle(); |
| 28 id ^= id_obj.raw(); | 33 id ^= id_obj.raw(); |
| 29 Dart_Port port_id = static_cast<Dart_Port>(id.AsInt64Value()); | 34 Dart_Port port_id = static_cast<Dart_Port>(id.AsInt64Value()); |
| 30 return Bool::Get(PortMap::IsLocalPort(port_id)); | 35 return Bool::Get(PortMap::IsLocalPort(port_id)); |
| 31 } | 36 } |
| 32 | 37 |
| 33 | 38 |
| 34 // TODO(turnidge): Add Map support to the dart embedding api instead | 39 // TODO(turnidge): Add Map support to the dart embedding api instead |
| 35 // of implementing it here. | 40 // of implementing it here. |
| 36 static Dart_Handle CoreLib() { | 41 static Dart_Handle CoreLib() { |
| 37 Dart_Handle core_lib_name = Dart_NewString("dart:core"); | 42 Dart_Handle core_lib_name = NewString("dart:core"); |
| 38 return Dart_LookupLibrary(core_lib_name); | 43 return Dart_LookupLibrary(core_lib_name); |
| 39 } | 44 } |
| 40 | 45 |
| 41 | 46 |
| 42 static Dart_Handle MapNew() { | 47 static Dart_Handle MapNew() { |
| 43 // TODO(turnidge): Switch to an order-preserving map type. | 48 // TODO(turnidge): Switch to an order-preserving map type. |
| 44 Dart_Handle cls = Dart_GetClass(CoreLib(), Dart_NewString("Map")); | 49 Dart_Handle cls = Dart_GetClass(CoreLib(), NewString("Map")); |
| 45 if (Dart_IsError(cls)) { | 50 if (Dart_IsError(cls)) { |
| 46 return cls; | 51 return cls; |
| 47 } | 52 } |
| 48 return Dart_New(cls, Dart_Null(), 0, NULL); | 53 return Dart_New(cls, Dart_Null(), 0, NULL); |
| 49 } | 54 } |
| 50 | 55 |
| 51 | 56 |
| 52 static Dart_Handle MapAdd(Dart_Handle map, Dart_Handle key, Dart_Handle value) { | 57 static Dart_Handle MapAdd(Dart_Handle map, Dart_Handle key, Dart_Handle value) { |
| 53 Dart_Handle args[] = { key, value }; | 58 Dart_Handle args[] = { key, value }; |
| 54 return Dart_Invoke(map, Dart_NewString("[]="), ARRAY_SIZE(args), args); | 59 return Dart_Invoke(map, NewString("[]="), ARRAY_SIZE(args), args); |
| 55 } | 60 } |
| 56 | 61 |
| 57 | 62 |
| 58 static Dart_Handle MirrorLib() { | 63 static Dart_Handle MirrorLib() { |
| 59 Dart_Handle mirror_lib_name = Dart_NewString("dart:mirrors"); | 64 Dart_Handle mirror_lib_name = NewString("dart:mirrors"); |
| 60 return Dart_LookupLibrary(mirror_lib_name); | 65 return Dart_LookupLibrary(mirror_lib_name); |
| 61 } | 66 } |
| 62 | 67 |
| 63 | 68 |
| 64 static Dart_Handle IsMirror(Dart_Handle object, bool* is_mirror) { | 69 static Dart_Handle IsMirror(Dart_Handle object, bool* is_mirror) { |
| 65 Dart_Handle cls_name = Dart_NewString("Mirror"); | 70 Dart_Handle cls_name = NewString("Mirror"); |
| 66 Dart_Handle cls = Dart_GetClass(MirrorLib(), cls_name); | 71 Dart_Handle cls = Dart_GetClass(MirrorLib(), cls_name); |
| 67 if (Dart_IsError(cls)) { | 72 if (Dart_IsError(cls)) { |
| 68 return cls; | 73 return cls; |
| 69 } | 74 } |
| 70 Dart_Handle result = Dart_ObjectIsType(object, cls, is_mirror); | 75 Dart_Handle result = Dart_ObjectIsType(object, cls, is_mirror); |
| 71 if (Dart_IsError(result)) { | 76 if (Dart_IsError(result)) { |
| 72 return result; | 77 return result; |
| 73 } | 78 } |
| 74 return Dart_True(); // Indicates success. Result is in is_mirror. | 79 return Dart_True(); // Indicates success. Result is in is_mirror. |
| 75 } | 80 } |
| 76 | 81 |
| 77 | 82 |
| 78 static bool IsSimpleValue(Dart_Handle object) { | 83 static bool IsSimpleValue(Dart_Handle object) { |
| 79 return (Dart_IsNull(object) || | 84 return (Dart_IsNull(object) || |
| 80 Dart_IsNumber(object) || | 85 Dart_IsNumber(object) || |
| 81 Dart_IsString(object) || | 86 Dart_IsString(object) || |
| 82 Dart_IsBoolean(object)); | 87 Dart_IsBoolean(object)); |
| 83 } | 88 } |
| 84 | 89 |
| 85 | 90 |
| 86 static void FreeVMReference(Dart_Handle weak_ref, void* data) { | 91 static void FreeVMReference(Dart_Handle weak_ref, void* data) { |
| 87 Dart_Handle perm_handle = reinterpret_cast<Dart_Handle>(data); | 92 Dart_Handle perm_handle = reinterpret_cast<Dart_Handle>(data); |
| 88 Dart_DeletePersistentHandle(perm_handle); | 93 Dart_DeletePersistentHandle(perm_handle); |
| 89 Dart_DeletePersistentHandle(weak_ref); | 94 Dart_DeletePersistentHandle(weak_ref); |
| 90 } | 95 } |
| 91 | 96 |
| 92 | 97 |
| 93 static Dart_Handle CreateVMReference(Dart_Handle handle) { | 98 static Dart_Handle CreateVMReference(Dart_Handle handle) { |
| 94 // Create the VMReference object. | 99 // Create the VMReference object. |
| 95 Dart_Handle cls_name = Dart_NewString("VMReference"); | 100 Dart_Handle cls_name = NewString("VMReference"); |
| 96 Dart_Handle cls = Dart_GetClass(MirrorLib(), cls_name); | 101 Dart_Handle cls = Dart_GetClass(MirrorLib(), cls_name); |
| 97 if (Dart_IsError(cls)) { | 102 if (Dart_IsError(cls)) { |
| 98 return cls; | 103 return cls; |
| 99 } | 104 } |
| 100 Dart_Handle vm_ref = Dart_New(cls, Dart_Null(), 0, NULL); | 105 Dart_Handle vm_ref = Dart_New(cls, Dart_Null(), 0, NULL); |
| 101 if (Dart_IsError(vm_ref)) { | 106 if (Dart_IsError(vm_ref)) { |
| 102 return vm_ref; | 107 return vm_ref; |
| 103 } | 108 } |
| 104 | 109 |
| 105 // Allocate a persistent handle. | 110 // Allocate a persistent handle. |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 141 if (Dart_IsError(result)) { | 146 if (Dart_IsError(result)) { |
| 142 return result; | 147 return result; |
| 143 } | 148 } |
| 144 Dart_Handle perm_handle = reinterpret_cast<Dart_Handle>(perm_handle_value); | 149 Dart_Handle perm_handle = reinterpret_cast<Dart_Handle>(perm_handle_value); |
| 145 ASSERT(!Dart_IsError(perm_handle)); | 150 ASSERT(!Dart_IsError(perm_handle)); |
| 146 return perm_handle; | 151 return perm_handle; |
| 147 } | 152 } |
| 148 | 153 |
| 149 | 154 |
| 150 static Dart_Handle UnwrapMirror(Dart_Handle mirror) { | 155 static Dart_Handle UnwrapMirror(Dart_Handle mirror) { |
| 151 Dart_Handle field_name = Dart_NewString("_reference"); | 156 Dart_Handle field_name = NewString("_reference"); |
| 152 Dart_Handle vm_ref = Dart_GetField(mirror, field_name); | 157 Dart_Handle vm_ref = Dart_GetField(mirror, field_name); |
| 153 if (Dart_IsError(vm_ref)) { | 158 if (Dart_IsError(vm_ref)) { |
| 154 return vm_ref; | 159 return vm_ref; |
| 155 } | 160 } |
| 156 return UnwrapVMReference(vm_ref); | 161 return UnwrapVMReference(vm_ref); |
| 157 } | 162 } |
| 158 | 163 |
| 159 | 164 |
| 160 static Dart_Handle UnwrapArg(Dart_Handle arg) { | 165 static Dart_Handle UnwrapArg(Dart_Handle arg) { |
| 161 if (Dart_IsError(arg)) { | 166 if (Dart_IsError(arg)) { |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 206 if (Dart_IsError(result)) { | 211 if (Dart_IsError(result)) { |
| 207 return result; | 212 return result; |
| 208 } | 213 } |
| 209 | 214 |
| 210 int64_t param_count = fixed_param_count + opt_param_count; | 215 int64_t param_count = fixed_param_count + opt_param_count; |
| 211 Dart_Handle parameter_list = Dart_NewList(param_count); | 216 Dart_Handle parameter_list = Dart_NewList(param_count); |
| 212 if (Dart_IsError(parameter_list)) { | 217 if (Dart_IsError(parameter_list)) { |
| 213 return result; | 218 return result; |
| 214 } | 219 } |
| 215 | 220 |
| 216 Dart_Handle param_cls_name = Dart_NewString("_LocalParameterMirrorImpl"); | 221 Dart_Handle param_cls_name = NewString("_LocalParameterMirrorImpl"); |
| 217 Dart_Handle param_cls = Dart_GetClass(MirrorLib(), param_cls_name); | 222 Dart_Handle param_cls = Dart_GetClass(MirrorLib(), param_cls_name); |
| 218 if (Dart_IsError(param_cls)) { | 223 if (Dart_IsError(param_cls)) { |
| 219 return param_cls; | 224 return param_cls; |
| 220 } | 225 } |
| 221 | 226 |
| 222 for (int64_t i = 0; i < param_count; i++) { | 227 for (int64_t i = 0; i < param_count; i++) { |
| 223 Dart_Handle param_type = Dart_FunctionParameterType(func, i); | 228 Dart_Handle param_type = Dart_FunctionParameterType(func, i); |
| 224 if (Dart_IsError(param_type)) { | 229 if (Dart_IsError(param_type)) { |
| 225 return param_type; | 230 return param_type; |
| 226 } | 231 } |
| (...skipping 14 matching lines...) Expand all Loading... |
| 241 return parameter_list; | 246 return parameter_list; |
| 242 } | 247 } |
| 243 | 248 |
| 244 | 249 |
| 245 static Dart_Handle CreateLazyMirror(Dart_Handle target) { | 250 static Dart_Handle CreateLazyMirror(Dart_Handle target) { |
| 246 if (Dart_IsNull(target) || Dart_IsError(target)) { | 251 if (Dart_IsNull(target) || Dart_IsError(target)) { |
| 247 return target; | 252 return target; |
| 248 } | 253 } |
| 249 | 254 |
| 250 if (Dart_IsLibrary(target)) { | 255 if (Dart_IsLibrary(target)) { |
| 251 Dart_Handle cls_name = Dart_NewString("_LazyLibraryMirror"); | 256 Dart_Handle cls_name = NewString("_LazyLibraryMirror"); |
| 252 Dart_Handle cls = Dart_GetClass(MirrorLib(), cls_name); | 257 Dart_Handle cls = Dart_GetClass(MirrorLib(), cls_name); |
| 253 Dart_Handle args[] = { Dart_LibraryName(target) }; | 258 Dart_Handle args[] = { Dart_LibraryName(target) }; |
| 254 return Dart_New(cls, Dart_Null(), ARRAY_SIZE(args), args); | 259 return Dart_New(cls, Dart_Null(), ARRAY_SIZE(args), args); |
| 255 } | 260 } |
| 256 | 261 |
| 257 if (Dart_IsClass(target) || Dart_IsInterface(target)) { | 262 if (Dart_IsClass(target) || Dart_IsInterface(target)) { |
| 258 if (Dart_ClassIsFunctionType(target)) { | 263 if (Dart_ClassIsFunctionType(target)) { |
| 259 Dart_Handle cls_name = Dart_NewString("_LazyFunctionTypeMirror"); | 264 Dart_Handle cls_name = NewString("_LazyFunctionTypeMirror"); |
| 260 Dart_Handle cls = Dart_GetClass(MirrorLib(), cls_name); | 265 Dart_Handle cls = Dart_GetClass(MirrorLib(), cls_name); |
| 261 | 266 |
| 262 Dart_Handle sig = Dart_ClassGetFunctionTypeSignature(target); | 267 Dart_Handle sig = Dart_ClassGetFunctionTypeSignature(target); |
| 263 Dart_Handle return_type = Dart_FunctionReturnType(sig); | 268 Dart_Handle return_type = Dart_FunctionReturnType(sig); |
| 264 if (Dart_IsError(return_type)) { | 269 if (Dart_IsError(return_type)) { |
| 265 return return_type; | 270 return return_type; |
| 266 } | 271 } |
| 267 | 272 |
| 268 Dart_Handle args[] = { | 273 Dart_Handle args[] = { |
| 269 CreateLazyMirror(return_type), | 274 CreateLazyMirror(return_type), |
| 270 CreateParameterMirrorList(sig), | 275 CreateParameterMirrorList(sig), |
| 271 }; | 276 }; |
| 272 return Dart_New(cls, Dart_Null(), ARRAY_SIZE(args), args); | 277 return Dart_New(cls, Dart_Null(), ARRAY_SIZE(args), args); |
| 273 } else { | 278 } else { |
| 274 Dart_Handle cls_name = Dart_NewString("_LazyTypeMirror"); | 279 Dart_Handle cls_name = NewString("_LazyTypeMirror"); |
| 275 Dart_Handle cls = Dart_GetClass(MirrorLib(), cls_name); | 280 Dart_Handle cls = Dart_GetClass(MirrorLib(), cls_name); |
| 276 Dart_Handle lib = Dart_ClassGetLibrary(target); | 281 Dart_Handle lib = Dart_ClassGetLibrary(target); |
| 277 Dart_Handle lib_name; | 282 Dart_Handle lib_name; |
| 278 if (Dart_IsNull(lib)) { | 283 if (Dart_IsNull(lib)) { |
| 279 lib_name = Dart_Null(); | 284 lib_name = Dart_Null(); |
| 280 } else { | 285 } else { |
| 281 lib_name = Dart_LibraryName(lib); | 286 lib_name = Dart_LibraryName(lib); |
| 282 } | 287 } |
| 283 Dart_Handle args[] = { lib_name, Dart_ClassName(target) }; | 288 Dart_Handle args[] = { lib_name, Dart_ClassName(target) }; |
| 284 return Dart_New(cls, Dart_Null(), ARRAY_SIZE(args), args); | 289 return Dart_New(cls, Dart_Null(), ARRAY_SIZE(args), args); |
| 285 } | 290 } |
| 286 } | 291 } |
| 287 | 292 |
| 288 if (Dart_IsTypeVariable(target)) { | 293 if (Dart_IsTypeVariable(target)) { |
| 289 Dart_Handle var_name = Dart_TypeVariableName(target); | 294 Dart_Handle var_name = Dart_TypeVariableName(target); |
| 290 Dart_Handle owner = Dart_TypeVariableOwner(target); | 295 Dart_Handle owner = Dart_TypeVariableOwner(target); |
| 291 Dart_Handle owner_mirror = CreateLazyMirror(owner); | 296 Dart_Handle owner_mirror = CreateLazyMirror(owner); |
| 292 | 297 |
| 293 Dart_Handle cls_name = Dart_NewString("_LazyTypeVariableMirror"); | 298 Dart_Handle cls_name = NewString("_LazyTypeVariableMirror"); |
| 294 Dart_Handle cls = Dart_GetClass(MirrorLib(), cls_name); | 299 Dart_Handle cls = Dart_GetClass(MirrorLib(), cls_name); |
| 295 | 300 |
| 296 Dart_Handle args[] = { var_name, owner_mirror }; | 301 Dart_Handle args[] = { var_name, owner_mirror }; |
| 297 return Dart_New(cls, Dart_Null(), ARRAY_SIZE(args), args); | 302 return Dart_New(cls, Dart_Null(), ARRAY_SIZE(args), args); |
| 298 } | 303 } |
| 299 | 304 |
| 300 UNREACHABLE(); | 305 UNREACHABLE(); |
| 301 return Dart_Null(); | 306 return Dart_Null(); |
| 302 } | 307 } |
| 303 | 308 |
| (...skipping 25 matching lines...) Expand all Loading... |
| 329 } | 334 } |
| 330 } | 335 } |
| 331 return mirror_list; | 336 return mirror_list; |
| 332 } | 337 } |
| 333 | 338 |
| 334 | 339 |
| 335 static Dart_Handle CreateTypeVariableMirror(Dart_Handle type_var, | 340 static Dart_Handle CreateTypeVariableMirror(Dart_Handle type_var, |
| 336 Dart_Handle type_var_name, | 341 Dart_Handle type_var_name, |
| 337 Dart_Handle owner_mirror) { | 342 Dart_Handle owner_mirror) { |
| 338 ASSERT(Dart_IsTypeVariable(type_var)); | 343 ASSERT(Dart_IsTypeVariable(type_var)); |
| 339 Dart_Handle cls_name = Dart_NewString("_LocalTypeVariableMirrorImpl"); | 344 Dart_Handle cls_name = NewString("_LocalTypeVariableMirrorImpl"); |
| 340 Dart_Handle cls = Dart_GetClass(MirrorLib(), cls_name); | 345 Dart_Handle cls = Dart_GetClass(MirrorLib(), cls_name); |
| 341 if (Dart_IsError(cls)) { | 346 if (Dart_IsError(cls)) { |
| 342 return cls; | 347 return cls; |
| 343 } | 348 } |
| 344 | 349 |
| 345 Dart_Handle upper_bound = Dart_TypeVariableUpperBound(type_var); | 350 Dart_Handle upper_bound = Dart_TypeVariableUpperBound(type_var); |
| 346 if (Dart_IsError(upper_bound)) { | 351 if (Dart_IsError(upper_bound)) { |
| 347 return upper_bound; | 352 return upper_bound; |
| 348 } | 353 } |
| 349 | 354 |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 393 } | 398 } |
| 394 } | 399 } |
| 395 return map; | 400 return map; |
| 396 } | 401 } |
| 397 | 402 |
| 398 | 403 |
| 399 static Dart_Handle CreateTypedefMirror(Dart_Handle cls, | 404 static Dart_Handle CreateTypedefMirror(Dart_Handle cls, |
| 400 Dart_Handle cls_name, | 405 Dart_Handle cls_name, |
| 401 Dart_Handle owner, | 406 Dart_Handle owner, |
| 402 Dart_Handle owner_mirror) { | 407 Dart_Handle owner_mirror) { |
| 403 Dart_Handle mirror_cls_name = Dart_NewString("_LocalTypedefMirrorImpl"); | 408 Dart_Handle mirror_cls_name = NewString("_LocalTypedefMirrorImpl"); |
| 404 Dart_Handle mirror_cls = Dart_GetClass(MirrorLib(), mirror_cls_name); | 409 Dart_Handle mirror_cls = Dart_GetClass(MirrorLib(), mirror_cls_name); |
| 405 if (Dart_IsError(mirror_cls)) { | 410 if (Dart_IsError(mirror_cls)) { |
| 406 return mirror_cls; | 411 return mirror_cls; |
| 407 } | 412 } |
| 408 | 413 |
| 409 Dart_Handle referent = Dart_ClassGetTypedefReferent(cls); | 414 Dart_Handle referent = Dart_ClassGetTypedefReferent(cls); |
| 410 if (Dart_IsError(referent)) { | 415 if (Dart_IsError(referent)) { |
| 411 return referent; | 416 return referent; |
| 412 } | 417 } |
| 413 | 418 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 431 Dart_Handle intf_name, | 436 Dart_Handle intf_name, |
| 432 Dart_Handle lib, | 437 Dart_Handle lib, |
| 433 Dart_Handle lib_mirror) { | 438 Dart_Handle lib_mirror) { |
| 434 ASSERT(Dart_IsClass(intf) || Dart_IsInterface(intf)); | 439 ASSERT(Dart_IsClass(intf) || Dart_IsInterface(intf)); |
| 435 if (Dart_ClassIsTypedef(intf)) { | 440 if (Dart_ClassIsTypedef(intf)) { |
| 436 // This class is actually a typedef. Represent it specially in | 441 // This class is actually a typedef. Represent it specially in |
| 437 // reflection. | 442 // reflection. |
| 438 return CreateTypedefMirror(intf, intf_name, lib, lib_mirror); | 443 return CreateTypedefMirror(intf, intf_name, lib, lib_mirror); |
| 439 } | 444 } |
| 440 | 445 |
| 441 Dart_Handle cls_name = Dart_NewString("_LocalClassMirrorImpl"); | 446 Dart_Handle cls_name = NewString("_LocalClassMirrorImpl"); |
| 442 Dart_Handle cls = Dart_GetClass(MirrorLib(), cls_name); | 447 Dart_Handle cls = Dart_GetClass(MirrorLib(), cls_name); |
| 443 if (Dart_IsError(cls)) { | 448 if (Dart_IsError(cls)) { |
| 444 return cls; | 449 return cls; |
| 445 } | 450 } |
| 446 | 451 |
| 447 // TODO(turnidge): Why am I getting Null when I expect Object? | 452 // TODO(turnidge): Why am I getting Null when I expect Object? |
| 448 Dart_Handle super_class = Dart_GetSuperclass(intf); | 453 Dart_Handle super_class = Dart_GetSuperclass(intf); |
| 449 if (Dart_IsNull(super_class)) { | 454 if (Dart_IsNull(super_class)) { |
| 450 super_class = Dart_GetClass(CoreLib(), Dart_NewString("Object")); | 455 super_class = Dart_GetClass(CoreLib(), NewString("Object")); |
| 451 } | 456 } |
| 452 Dart_Handle default_class = Dart_ClassGetDefault(intf); | 457 Dart_Handle default_class = Dart_ClassGetDefault(intf); |
| 453 | 458 |
| 454 Dart_Handle intf_mirror = CreateLazyMirror(intf); | 459 Dart_Handle intf_mirror = CreateLazyMirror(intf); |
| 455 if (Dart_IsError(intf_mirror)) { | 460 if (Dart_IsError(intf_mirror)) { |
| 456 return intf_mirror; | 461 return intf_mirror; |
| 457 } | 462 } |
| 458 Dart_Handle member_map = CreateMemberMap(intf, intf_mirror); | 463 Dart_Handle member_map = CreateMemberMap(intf, intf_mirror); |
| 459 if (Dart_IsError(member_map)) { | 464 if (Dart_IsError(member_map)) { |
| 460 return member_map; | 465 return member_map; |
| (...skipping 21 matching lines...) Expand all Loading... |
| 482 }; | 487 }; |
| 483 Dart_Handle mirror = Dart_New(cls, Dart_Null(), ARRAY_SIZE(args), args); | 488 Dart_Handle mirror = Dart_New(cls, Dart_Null(), ARRAY_SIZE(args), args); |
| 484 return mirror; | 489 return mirror; |
| 485 } | 490 } |
| 486 | 491 |
| 487 | 492 |
| 488 static Dart_Handle CreateMethodMirror(Dart_Handle func, | 493 static Dart_Handle CreateMethodMirror(Dart_Handle func, |
| 489 Dart_Handle func_name, | 494 Dart_Handle func_name, |
| 490 Dart_Handle owner_mirror) { | 495 Dart_Handle owner_mirror) { |
| 491 ASSERT(Dart_IsFunction(func)); | 496 ASSERT(Dart_IsFunction(func)); |
| 492 Dart_Handle mirror_cls_name = Dart_NewString("_LocalMethodMirrorImpl"); | 497 Dart_Handle mirror_cls_name = NewString("_LocalMethodMirrorImpl"); |
| 493 Dart_Handle mirror_cls = Dart_GetClass(MirrorLib(), mirror_cls_name); | 498 Dart_Handle mirror_cls = Dart_GetClass(MirrorLib(), mirror_cls_name); |
| 494 if (Dart_IsError(mirror_cls)) { | 499 if (Dart_IsError(mirror_cls)) { |
| 495 return mirror_cls; | 500 return mirror_cls; |
| 496 } | 501 } |
| 497 | 502 |
| 498 bool is_static = false; | 503 bool is_static = false; |
| 499 bool is_abstract = false; | 504 bool is_abstract = false; |
| 500 bool is_getter = false; | 505 bool is_getter = false; |
| 501 bool is_setter = false; | 506 bool is_setter = false; |
| 502 bool is_constructor = false; | 507 bool is_constructor = false; |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 555 Dart_Handle mirror = | 560 Dart_Handle mirror = |
| 556 Dart_New(mirror_cls, Dart_Null(), ARRAY_SIZE(args), args); | 561 Dart_New(mirror_cls, Dart_Null(), ARRAY_SIZE(args), args); |
| 557 return mirror; | 562 return mirror; |
| 558 } | 563 } |
| 559 | 564 |
| 560 | 565 |
| 561 static Dart_Handle CreateVariableMirror(Dart_Handle var, | 566 static Dart_Handle CreateVariableMirror(Dart_Handle var, |
| 562 Dart_Handle var_name, | 567 Dart_Handle var_name, |
| 563 Dart_Handle lib_mirror) { | 568 Dart_Handle lib_mirror) { |
| 564 ASSERT(Dart_IsVariable(var)); | 569 ASSERT(Dart_IsVariable(var)); |
| 565 Dart_Handle cls_name = Dart_NewString("_LocalVariableMirrorImpl"); | 570 Dart_Handle cls_name = NewString("_LocalVariableMirrorImpl"); |
| 566 Dart_Handle cls = Dart_GetClass(MirrorLib(), cls_name); | 571 Dart_Handle cls = Dart_GetClass(MirrorLib(), cls_name); |
| 567 if (Dart_IsError(cls)) { | 572 if (Dart_IsError(cls)) { |
| 568 return cls; | 573 return cls; |
| 569 } | 574 } |
| 570 | 575 |
| 571 bool is_static = false; | 576 bool is_static = false; |
| 572 bool is_final = false; | 577 bool is_final = false; |
| 573 | 578 |
| 574 Dart_Handle result = Dart_VariableIsStatic(var, &is_static); | 579 Dart_Handle result = Dart_VariableIsStatic(var, &is_static); |
| 575 if (Dart_IsError(result)) { | 580 if (Dart_IsError(result)) { |
| (...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 788 Dart_Handle map = MapNew(); | 793 Dart_Handle map = MapNew(); |
| 789 result = AddConstructors(map, owner, owner_mirror); | 794 result = AddConstructors(map, owner, owner_mirror); |
| 790 if (Dart_IsError(result)) { | 795 if (Dart_IsError(result)) { |
| 791 return result; | 796 return result; |
| 792 } | 797 } |
| 793 return map; | 798 return map; |
| 794 } | 799 } |
| 795 | 800 |
| 796 | 801 |
| 797 static Dart_Handle CreateLibraryMirror(Dart_Handle lib) { | 802 static Dart_Handle CreateLibraryMirror(Dart_Handle lib) { |
| 798 Dart_Handle cls_name = Dart_NewString("_LocalLibraryMirrorImpl"); | 803 Dart_Handle cls_name = NewString("_LocalLibraryMirrorImpl"); |
| 799 Dart_Handle cls = Dart_GetClass(MirrorLib(), cls_name); | 804 Dart_Handle cls = Dart_GetClass(MirrorLib(), cls_name); |
| 800 if (Dart_IsError(cls)) { | 805 if (Dart_IsError(cls)) { |
| 801 return cls; | 806 return cls; |
| 802 } | 807 } |
| 803 Dart_Handle lazy_lib_mirror = CreateLazyMirror(lib); | 808 Dart_Handle lazy_lib_mirror = CreateLazyMirror(lib); |
| 804 if (Dart_IsError(lazy_lib_mirror)) { | 809 if (Dart_IsError(lazy_lib_mirror)) { |
| 805 return lazy_lib_mirror; | 810 return lazy_lib_mirror; |
| 806 } | 811 } |
| 807 Dart_Handle member_map = CreateMemberMap(lib, lazy_lib_mirror); | 812 Dart_Handle member_map = CreateMemberMap(lib, lazy_lib_mirror); |
| 808 if (Dart_IsError(member_map)) { | 813 if (Dart_IsError(member_map)) { |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 848 return lib_mirror; | 853 return lib_mirror; |
| 849 } | 854 } |
| 850 // TODO(turnidge): Check for duplicate library names. | 855 // TODO(turnidge): Check for duplicate library names. |
| 851 result = MapAdd(map, lib_key, lib_mirror); | 856 result = MapAdd(map, lib_key, lib_mirror); |
| 852 } | 857 } |
| 853 return map; | 858 return map; |
| 854 } | 859 } |
| 855 | 860 |
| 856 | 861 |
| 857 static Dart_Handle CreateIsolateMirror() { | 862 static Dart_Handle CreateIsolateMirror() { |
| 858 Dart_Handle cls_name = Dart_NewString("_LocalIsolateMirrorImpl"); | 863 Dart_Handle cls_name = NewString("_LocalIsolateMirrorImpl"); |
| 859 Dart_Handle cls = Dart_GetClass(MirrorLib(), cls_name); | 864 Dart_Handle cls = Dart_GetClass(MirrorLib(), cls_name); |
| 860 if (Dart_IsError(cls)) { | 865 if (Dart_IsError(cls)) { |
| 861 return cls; | 866 return cls; |
| 862 } | 867 } |
| 863 Dart_Handle args[] = { | 868 Dart_Handle args[] = { |
| 864 Dart_DebugName(), | 869 Dart_DebugName(), |
| 865 CreateLazyMirror(Dart_RootLibrary()), | 870 CreateLazyMirror(Dart_RootLibrary()), |
| 866 }; | 871 }; |
| 867 return Dart_New(cls, Dart_Null(), ARRAY_SIZE(args), args); | 872 return Dart_New(cls, Dart_Null(), ARRAY_SIZE(args), args); |
| 868 } | 873 } |
| 869 | 874 |
| 870 | 875 |
| 871 static Dart_Handle CreateMirrorSystem() { | 876 static Dart_Handle CreateMirrorSystem() { |
| 872 Dart_Handle cls_name = Dart_NewString("_LocalMirrorSystemImpl"); | 877 Dart_Handle cls_name = NewString("_LocalMirrorSystemImpl"); |
| 873 Dart_Handle cls = Dart_GetClass(MirrorLib(), cls_name); | 878 Dart_Handle cls = Dart_GetClass(MirrorLib(), cls_name); |
| 874 if (Dart_IsError(cls)) { | 879 if (Dart_IsError(cls)) { |
| 875 return cls; | 880 return cls; |
| 876 } | 881 } |
| 877 | 882 |
| 878 Dart_Handle libraries = CreateLibrariesMap(); | 883 Dart_Handle libraries = CreateLibrariesMap(); |
| 879 if (Dart_IsError(libraries)) { | 884 if (Dart_IsError(libraries)) { |
| 880 return libraries; | 885 return libraries; |
| 881 } | 886 } |
| 882 | 887 |
| 883 Dart_Handle args[] = { | 888 Dart_Handle args[] = { |
| 884 libraries, | 889 libraries, |
| 885 CreateIsolateMirror(), | 890 CreateIsolateMirror(), |
| 886 }; | 891 }; |
| 887 Dart_Handle mirror = Dart_New(cls, Dart_Null(), ARRAY_SIZE(args), args); | 892 Dart_Handle mirror = Dart_New(cls, Dart_Null(), ARRAY_SIZE(args), args); |
| 888 if (Dart_IsError(mirror)) { | 893 if (Dart_IsError(mirror)) { |
| 889 return mirror; | 894 return mirror; |
| 890 } | 895 } |
| 891 | 896 |
| 892 return mirror; | 897 return mirror; |
| 893 } | 898 } |
| 894 | 899 |
| 895 | 900 |
| 896 static Dart_Handle CreateNullMirror() { | 901 static Dart_Handle CreateNullMirror() { |
| 897 Dart_Handle cls_name = Dart_NewString("_LocalInstanceMirrorImpl"); | 902 Dart_Handle cls_name = NewString("_LocalInstanceMirrorImpl"); |
| 898 Dart_Handle cls = Dart_GetClass(MirrorLib(), cls_name); | 903 Dart_Handle cls = Dart_GetClass(MirrorLib(), cls_name); |
| 899 if (Dart_IsError(cls)) { | 904 if (Dart_IsError(cls)) { |
| 900 return cls; | 905 return cls; |
| 901 } | 906 } |
| 902 | 907 |
| 903 // TODO(turnidge): This is wrong. The Null class is distinct from object. | 908 // TODO(turnidge): This is wrong. The Null class is distinct from object. |
| 904 Dart_Handle object_class = Dart_GetClass(CoreLib(), Dart_NewString("Object")); | 909 Dart_Handle object_class = Dart_GetClass(CoreLib(), NewString("Object")); |
| 905 | 910 |
| 906 Dart_Handle args[] = { | 911 Dart_Handle args[] = { |
| 907 CreateVMReference(Dart_Null()), | 912 CreateVMReference(Dart_Null()), |
| 908 CreateLazyMirror(object_class), | 913 CreateLazyMirror(object_class), |
| 909 Dart_Null(), | 914 Dart_Null(), |
| 910 }; | 915 }; |
| 911 Dart_Handle mirror = Dart_New(cls, Dart_Null(), ARRAY_SIZE(args), args); | 916 Dart_Handle mirror = Dart_New(cls, Dart_Null(), ARRAY_SIZE(args), args); |
| 912 return mirror; | 917 return mirror; |
| 913 } | 918 } |
| 914 | 919 |
| 915 | 920 |
| 916 static Dart_Handle CreateInstanceMirror(Dart_Handle instance) { | 921 static Dart_Handle CreateInstanceMirror(Dart_Handle instance) { |
| 917 if (Dart_IsNull(instance)) { | 922 if (Dart_IsNull(instance)) { |
| 918 return CreateNullMirror(); | 923 return CreateNullMirror(); |
| 919 } | 924 } |
| 920 ASSERT(Dart_IsInstance(instance)); | 925 ASSERT(Dart_IsInstance(instance)); |
| 921 | 926 |
| 922 Dart_Handle instance_cls = Dart_InstanceGetClass(instance); | 927 Dart_Handle instance_cls = Dart_InstanceGetClass(instance); |
| 923 if (Dart_IsError(instance_cls)) { | 928 if (Dart_IsError(instance_cls)) { |
| 924 return instance_cls; | 929 return instance_cls; |
| 925 } | 930 } |
| 926 | 931 |
| 927 if (Dart_IsClosure(instance)) { | 932 if (Dart_IsClosure(instance)) { |
| 928 Dart_Handle cls_name = Dart_NewString("_LocalClosureMirrorImpl"); | 933 Dart_Handle cls_name = NewString("_LocalClosureMirrorImpl"); |
| 929 Dart_Handle cls = Dart_GetClass(MirrorLib(), cls_name); | 934 Dart_Handle cls = Dart_GetClass(MirrorLib(), cls_name); |
| 930 if (Dart_IsError(cls)) { | 935 if (Dart_IsError(cls)) { |
| 931 return cls; | 936 return cls; |
| 932 } | 937 } |
| 933 // We set the function field of ClosureMirrors outside of the constructor | 938 // We set the function field of ClosureMirrors outside of the constructor |
| 934 // to break the mutual recursion. | 939 // to break the mutual recursion. |
| 935 Dart_Handle func = Dart_ClosureFunction(instance); | 940 Dart_Handle func = Dart_ClosureFunction(instance); |
| 936 if (Dart_IsError(func)) { | 941 if (Dart_IsError(func)) { |
| 937 return func; | 942 return func; |
| 938 } | 943 } |
| 939 | 944 |
| 940 // TODO(turnidge): Why not use the real function name here? | 945 // TODO(turnidge): Why not use the real function name here? |
| 941 Dart_Handle func_name = Dart_NewString("call"); | 946 Dart_Handle func_name = NewString("call"); |
| 942 Dart_Handle func_owner = Dart_FunctionOwner(func); | 947 Dart_Handle func_owner = Dart_FunctionOwner(func); |
| 943 if (Dart_IsError(func_owner)) { | 948 if (Dart_IsError(func_owner)) { |
| 944 return func_owner; | 949 return func_owner; |
| 945 } | 950 } |
| 946 | 951 |
| 947 // TODO(turnidge): Pass the function owner here. This will require | 952 // TODO(turnidge): Pass the function owner here. This will require |
| 948 // us to support functions in CreateLazyMirror. | 953 // us to support functions in CreateLazyMirror. |
| 949 Dart_Handle func_mirror = | 954 Dart_Handle func_mirror = |
| 950 CreateMethodMirror(func, func_name, Dart_Null()); | 955 CreateMethodMirror(func, func_name, Dart_Null()); |
| 951 if (Dart_IsError(func_mirror)) { | 956 if (Dart_IsError(func_mirror)) { |
| 952 return func_mirror; | 957 return func_mirror; |
| 953 } | 958 } |
| 954 Dart_Handle args[] = { | 959 Dart_Handle args[] = { |
| 955 CreateVMReference(instance), | 960 CreateVMReference(instance), |
| 956 CreateLazyMirror(instance_cls), | 961 CreateLazyMirror(instance_cls), |
| 957 instance, | 962 instance, |
| 958 func_mirror, | 963 func_mirror, |
| 959 }; | 964 }; |
| 960 return Dart_New(cls, Dart_Null(), ARRAY_SIZE(args), args); | 965 return Dart_New(cls, Dart_Null(), ARRAY_SIZE(args), args); |
| 961 | 966 |
| 962 } else { | 967 } else { |
| 963 Dart_Handle cls_name = Dart_NewString("_LocalInstanceMirrorImpl"); | 968 Dart_Handle cls_name = NewString("_LocalInstanceMirrorImpl"); |
| 964 Dart_Handle cls = Dart_GetClass(MirrorLib(), cls_name); | 969 Dart_Handle cls = Dart_GetClass(MirrorLib(), cls_name); |
| 965 if (Dart_IsError(cls)) { | 970 if (Dart_IsError(cls)) { |
| 966 return cls; | 971 return cls; |
| 967 } | 972 } |
| 968 Dart_Handle args[] = { | 973 Dart_Handle args[] = { |
| 969 CreateVMReference(instance), | 974 CreateVMReference(instance), |
| 970 CreateLazyMirror(instance_cls), | 975 CreateLazyMirror(instance_cls), |
| 971 instance, | 976 instance, |
| 972 }; | 977 }; |
| 973 return Dart_New(cls, Dart_Null(), ARRAY_SIZE(args), args); | 978 return Dart_New(cls, Dart_Null(), ARRAY_SIZE(args), args); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 988 if (Dart_IsFatalError(exc_string)) { | 993 if (Dart_IsFatalError(exc_string)) { |
| 989 return exc_string; | 994 return exc_string; |
| 990 } | 995 } |
| 991 exc_string = Dart_Null(); | 996 exc_string = Dart_Null(); |
| 992 } | 997 } |
| 993 | 998 |
| 994 Dart_Handle stack = Dart_ErrorGetStacktrace(error); | 999 Dart_Handle stack = Dart_ErrorGetStacktrace(error); |
| 995 if (Dart_IsError(stack)) { | 1000 if (Dart_IsError(stack)) { |
| 996 return stack; | 1001 return stack; |
| 997 } | 1002 } |
| 998 Dart_Handle cls_name = Dart_NewString("MirroredUncaughtExceptionError"); | 1003 Dart_Handle cls_name = NewString("MirroredUncaughtExceptionError"); |
| 999 Dart_Handle cls = Dart_GetClass(MirrorLib(), cls_name); | 1004 Dart_Handle cls = Dart_GetClass(MirrorLib(), cls_name); |
| 1000 Dart_Handle args[] = { | 1005 Dart_Handle args[] = { |
| 1001 CreateInstanceMirror(exc), | 1006 CreateInstanceMirror(exc), |
| 1002 exc_string, | 1007 exc_string, |
| 1003 stack, | 1008 stack, |
| 1004 }; | 1009 }; |
| 1005 Dart_Handle mirrored_exc = | 1010 Dart_Handle mirrored_exc = |
| 1006 Dart_New(cls, Dart_Null(), ARRAY_SIZE(args), args); | 1011 Dart_New(cls, Dart_Null(), ARRAY_SIZE(args), args); |
| 1007 return Dart_NewUnhandledExceptionError(mirrored_exc); | 1012 return Dart_NewUnhandledExceptionError(mirrored_exc); |
| 1008 } else if (Dart_IsApiError(error) || | 1013 } else if (Dart_IsApiError(error) || |
| 1009 Dart_IsCompilationError(error)) { | 1014 Dart_IsCompilationError(error)) { |
| 1010 Dart_Handle cls_name = Dart_NewString("MirroredCompilationError"); | 1015 Dart_Handle cls_name = NewString("MirroredCompilationError"); |
| 1011 Dart_Handle cls = Dart_GetClass(MirrorLib(), cls_name); | 1016 Dart_Handle cls = Dart_GetClass(MirrorLib(), cls_name); |
| 1012 Dart_Handle args[] = { Dart_NewString(Dart_GetError(error)) }; | 1017 Dart_Handle args[] = { NewString(Dart_GetError(error)) }; |
| 1013 Dart_Handle mirrored_exc = | 1018 Dart_Handle mirrored_exc = |
| 1014 Dart_New(cls, Dart_Null(), ARRAY_SIZE(args), args); | 1019 Dart_New(cls, Dart_Null(), ARRAY_SIZE(args), args); |
| 1015 return Dart_NewUnhandledExceptionError(mirrored_exc); | 1020 return Dart_NewUnhandledExceptionError(mirrored_exc); |
| 1016 } else { | 1021 } else { |
| 1017 ASSERT(Dart_IsFatalError(error)); | 1022 ASSERT(Dart_IsFatalError(error)); |
| 1018 return error; | 1023 return error; |
| 1019 } | 1024 } |
| 1020 } | 1025 } |
| 1021 | 1026 |
| 1022 | 1027 |
| (...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1191 } | 1196 } |
| 1192 | 1197 |
| 1193 | 1198 |
| 1194 void HandleMirrorsMessage(Isolate* isolate, | 1199 void HandleMirrorsMessage(Isolate* isolate, |
| 1195 Dart_Port reply_port, | 1200 Dart_Port reply_port, |
| 1196 const Instance& message) { | 1201 const Instance& message) { |
| 1197 UNIMPLEMENTED(); | 1202 UNIMPLEMENTED(); |
| 1198 } | 1203 } |
| 1199 | 1204 |
| 1200 } // namespace dart | 1205 } // namespace dart |
| OLD | NEW |