Chromium Code Reviews| 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 "vm/bootstrap_natives.h" | 5 #include "vm/bootstrap_natives.h" |
| 6 | 6 |
| 7 #include "platform/json.h" | 7 #include "platform/json.h" |
| 8 #include "include/dart_api.h" | 8 #include "include/dart_api.h" |
| 9 #include "include/dart_debugger_api.h" | 9 #include "include/dart_debugger_api.h" |
| 10 #include "vm/dart_entry.h" | 10 #include "vm/dart_entry.h" |
| (...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 191 } else { | 191 } else { |
| 192 // Simple value. | 192 // Simple value. |
| 193 ASSERT(IsSimpleValue(arg)); | 193 ASSERT(IsSimpleValue(arg)); |
| 194 arg_array->Add(arg); | 194 arg_array->Add(arg); |
| 195 } | 195 } |
| 196 } | 196 } |
| 197 return Dart_True(); | 197 return Dart_True(); |
| 198 } | 198 } |
| 199 | 199 |
| 200 | 200 |
| 201 static Dart_Handle CreateLazyLibraryMirror(Dart_Handle lib) { | 201 static Dart_Handle CreateLazyMirror(Dart_Handle target) { |
| 202 if (Dart_IsNull(lib)) { | 202 if (Dart_IsNull(target)) { |
| 203 return lib; | 203 return target; |
| 204 } | 204 } |
| 205 Dart_Handle cls_name = Dart_NewString("_LazyLibraryMirror"); | 205 if (Dart_IsLibrary(target)) { |
| 206 Dart_Handle cls = Dart_GetClass(MirrorLib(), cls_name); | 206 Dart_Handle cls_name = Dart_NewString("_LazyLibraryMirror"); |
| 207 const int kNumArgs = 1; | 207 Dart_Handle cls = Dart_GetClass(MirrorLib(), cls_name); |
| 208 Dart_Handle args[kNumArgs]; | 208 const int kNumArgs = 1; |
| 209 args[0] = Dart_LibraryName(lib); | 209 Dart_Handle args[kNumArgs]; |
| 210 return Dart_New(cls, Dart_Null(), kNumArgs, args); | 210 args[0] = Dart_LibraryName(target); |
| 211 return Dart_New(cls, Dart_Null(), kNumArgs, args); | |
| 212 } else { | |
| 213 ASSERT(Dart_IsClass(target) || Dart_IsInterface(target)); | |
| 214 Dart_Handle cls_name = Dart_NewString("_LazyInterfaceMirror"); | |
| 215 Dart_Handle cls = Dart_GetClass(MirrorLib(), cls_name); | |
| 216 | |
| 217 Dart_Handle lib = Dart_ClassGetLibrary(target); | |
| 218 Dart_Handle lib_name; | |
| 219 if (Dart_IsNull(lib)) { | |
| 220 lib_name = Dart_Null(); | |
| 221 } else { | |
| 222 lib_name = Dart_LibraryName(lib); | |
| 223 } | |
| 224 | |
| 225 const int kNumArgs = 2; | |
| 226 Dart_Handle args[kNumArgs]; | |
| 227 args[0] = lib_name; | |
| 228 args[1] = Dart_ClassName(target); | |
| 229 return Dart_New(cls, Dart_Null(), kNumArgs, args); | |
| 230 } | |
| 211 } | 231 } |
| 212 | 232 |
| 213 | 233 |
| 214 static Dart_Handle CreateLazyInterfaceMirror(Dart_Handle intf) { | |
| 215 if (Dart_IsNull(intf)) { | |
| 216 return intf; | |
| 217 } | |
| 218 Dart_Handle cls_name = Dart_NewString("_LazyInterfaceMirror"); | |
| 219 Dart_Handle cls = Dart_GetClass(MirrorLib(), cls_name); | |
| 220 const int kNumArgs = 2; | |
| 221 Dart_Handle args[kNumArgs]; | |
| 222 args[0] = Dart_LibraryName(Dart_ClassGetLibrary(intf)); | |
| 223 args[1] = Dart_ClassName(intf); | |
| 224 return Dart_New(cls, Dart_Null(), kNumArgs, args); | |
| 225 } | |
| 226 | |
| 227 | |
| 228 static Dart_Handle CreateImplementsList(Dart_Handle intf) { | 234 static Dart_Handle CreateImplementsList(Dart_Handle intf) { |
| 229 intptr_t len = 0; | 235 intptr_t len = 0; |
| 230 Dart_Handle result = Dart_ClassGetInterfaceCount(intf, &len); | 236 Dart_Handle result = Dart_ClassGetInterfaceCount(intf, &len); |
| 231 if (Dart_IsError(result)) { | 237 if (Dart_IsError(result)) { |
| 232 return result; | 238 return result; |
| 233 } | 239 } |
| 234 | 240 |
| 235 Dart_Handle mirror_list = Dart_NewList(len); | 241 Dart_Handle mirror_list = Dart_NewList(len); |
| 236 if (Dart_IsError(mirror_list)) { | 242 if (Dart_IsError(mirror_list)) { |
| 237 return mirror_list; | 243 return mirror_list; |
| 238 } | 244 } |
| 239 | 245 |
| 240 for (int i = 0; i < len; i++) { | 246 for (int i = 0; i < len; i++) { |
| 241 Dart_Handle interface = Dart_ClassGetInterfaceAt(intf, i); | 247 Dart_Handle interface = Dart_ClassGetInterfaceAt(intf, i); |
| 242 if (Dart_IsError(interface)) { | 248 if (Dart_IsError(interface)) { |
| 243 return interface; | 249 return interface; |
| 244 } | 250 } |
| 245 Dart_Handle mirror = CreateLazyInterfaceMirror(interface); | 251 Dart_Handle mirror = CreateLazyMirror(interface); |
| 246 if (Dart_IsError(mirror)) { | 252 if (Dart_IsError(mirror)) { |
| 247 return mirror; | 253 return mirror; |
| 248 } | 254 } |
| 249 Dart_Handle result = Dart_ListSetAt(mirror_list, i, mirror); | 255 Dart_Handle result = Dart_ListSetAt(mirror_list, i, mirror); |
| 250 if (Dart_IsError(result)) { | 256 if (Dart_IsError(result)) { |
| 251 return result; | 257 return result; |
| 252 } | 258 } |
| 253 } | 259 } |
| 254 return mirror_list; | 260 return mirror_list; |
| 255 } | 261 } |
| 256 | 262 |
| 257 | 263 |
| 264 static Dart_Handle CreateMemberMap(Dart_Handle owner); | |
| 265 | |
| 266 | |
| 258 static Dart_Handle CreateInterfaceMirror(Dart_Handle intf, | 267 static Dart_Handle CreateInterfaceMirror(Dart_Handle intf, |
| 259 Dart_Handle intf_name, | 268 Dart_Handle intf_name, |
| 260 Dart_Handle lib) { | 269 Dart_Handle lib, |
| 270 Dart_Handle lib_mirror) { | |
| 261 ASSERT(Dart_IsClass(intf) || Dart_IsInterface(intf)); | 271 ASSERT(Dart_IsClass(intf) || Dart_IsInterface(intf)); |
| 262 Dart_Handle cls_name = Dart_NewString("_LocalInterfaceMirrorImpl"); | 272 Dart_Handle cls_name = Dart_NewString("_LocalInterfaceMirrorImpl"); |
| 263 Dart_Handle cls = Dart_GetClass(MirrorLib(), cls_name); | 273 Dart_Handle cls = Dart_GetClass(MirrorLib(), cls_name); |
| 264 if (Dart_IsError(cls)) { | 274 if (Dart_IsError(cls)) { |
| 265 return cls; | 275 return cls; |
| 266 } | 276 } |
| 267 | 277 |
| 268 // TODO(turnidge): Why am I getting Null when I expect Object? | 278 // TODO(turnidge): Why am I getting Null when I expect Object? |
| 269 Dart_Handle super_class = Dart_GetSuperclass(intf); | 279 Dart_Handle super_class = Dart_GetSuperclass(intf); |
| 270 if (Dart_IsNull(super_class)) { | 280 if (Dart_IsNull(super_class)) { |
| 271 super_class = Dart_GetClass(CoreLib(), Dart_NewString("Object")); | 281 super_class = Dart_GetClass(CoreLib(), Dart_NewString("Object")); |
| 272 } | 282 } |
| 273 Dart_Handle default_class = Dart_ClassGetDefault(intf); | 283 Dart_Handle default_class = Dart_ClassGetDefault(intf); |
| 274 | 284 Dart_Handle member_map = CreateMemberMap(intf); |
| 275 const int kNumArgs = 7; | 285 if (Dart_IsError(member_map)) { |
| 286 return member_map; | |
| 287 } | |
| 288 | |
| 289 const int kNumArgs = 8; | |
|
cshapiro
2012/06/28 23:57:47
Can this be eliminated, maybe by something like th
turnidge
2012/07/09 23:45:17
Done.
| |
| 276 Dart_Handle args[kNumArgs]; | 290 Dart_Handle args[kNumArgs]; |
| 277 args[0] = CreateVMReference(intf); | 291 args[0] = CreateVMReference(intf); |
| 278 args[1] = intf_name; | 292 args[1] = intf_name; |
| 279 args[2] = Dart_NewBoolean(Dart_IsClass(intf)); | 293 args[2] = Dart_NewBoolean(Dart_IsClass(intf)); |
| 280 args[3] = CreateLazyLibraryMirror(lib); | 294 args[3] = lib_mirror; |
| 281 args[4] = CreateLazyInterfaceMirror(super_class); | 295 args[4] = CreateLazyMirror(super_class); |
| 282 args[5] = CreateImplementsList(intf); | 296 args[5] = CreateImplementsList(intf); |
| 283 args[6] = CreateLazyInterfaceMirror(default_class); | 297 args[6] = CreateLazyMirror(default_class); |
| 298 args[7] = member_map; | |
| 284 Dart_Handle mirror = Dart_New(cls, Dart_Null(), kNumArgs, args); | 299 Dart_Handle mirror = Dart_New(cls, Dart_Null(), kNumArgs, args); |
| 285 return mirror; | 300 return mirror; |
| 286 } | 301 } |
| 287 | 302 |
| 288 | 303 |
| 289 static Dart_Handle CreateLibraryMemberMap(Dart_Handle lib) { | 304 static Dart_Handle CreateMethodMirror(Dart_Handle func, |
| 305 Dart_Handle func_name, | |
| 306 Dart_Handle lib_mirror) { | |
| 307 ASSERT(Dart_IsFunction(func)); | |
| 308 Dart_Handle cls_name = Dart_NewString("_LocalMethodMirrorImpl"); | |
| 309 Dart_Handle cls = Dart_GetClass(MirrorLib(), cls_name); | |
| 310 if (Dart_IsError(cls)) { | |
| 311 return cls; | |
| 312 } | |
| 313 | |
| 314 bool is_static = false; | |
| 315 bool is_abstract = false; | |
| 316 bool is_getter = false; | |
| 317 bool is_setter = false; | |
| 318 bool is_constructor = false; | |
| 319 | |
| 320 Dart_Handle result = Dart_FunctionIsStatic(func, &is_static); | |
| 321 if (Dart_IsError(result)) { | |
| 322 return result; | |
| 323 } | |
| 324 result = Dart_FunctionIsAbstract(func, &is_abstract); | |
| 325 if (Dart_IsError(result)) { | |
| 326 return result; | |
| 327 } | |
| 328 result = Dart_FunctionIsGetter(func, &is_getter); | |
| 329 if (Dart_IsError(result)) { | |
| 330 return result; | |
| 331 } | |
| 332 result = Dart_FunctionIsSetter(func, &is_setter); | |
| 333 if (Dart_IsError(result)) { | |
| 334 return result; | |
| 335 } | |
| 336 result = Dart_FunctionIsConstructor(func, &is_constructor); | |
| 337 if (Dart_IsError(result)) { | |
| 338 return result; | |
| 339 } | |
| 340 | |
| 341 // TODO(turnidge): Implement constructor kinds (arguments 7 - 10). | |
| 342 const int kNumArgs = 11; | |
|
cshapiro
2012/06/28 23:57:47
Same here, see above regarding the kNumArgs stuff.
turnidge
2012/07/09 23:45:17
Done.
| |
| 343 Dart_Handle args[kNumArgs]; | |
| 344 args[0] = func_name; | |
| 345 args[1] = lib_mirror; | |
| 346 args[2] = Dart_NewBoolean(is_static); | |
| 347 args[3] = Dart_NewBoolean(is_abstract); | |
| 348 args[4] = Dart_NewBoolean(is_getter); | |
| 349 args[5] = Dart_NewBoolean(is_setter); | |
| 350 args[6] = Dart_NewBoolean(is_constructor); | |
| 351 args[7] = Dart_False(); | |
| 352 args[8] = Dart_False(); | |
| 353 args[9] = Dart_False(); | |
| 354 args[10] = Dart_False(); | |
| 355 Dart_Handle mirror = Dart_New(cls, Dart_Null(), kNumArgs, args); | |
| 356 return mirror; | |
| 357 } | |
| 358 | |
| 359 | |
| 360 static Dart_Handle CreateVariableMirror(Dart_Handle var, | |
| 361 Dart_Handle var_name, | |
| 362 Dart_Handle lib_mirror) { | |
| 363 ASSERT(Dart_IsVariable(var)); | |
| 364 Dart_Handle cls_name = Dart_NewString("_LocalVariableMirrorImpl"); | |
| 365 Dart_Handle cls = Dart_GetClass(MirrorLib(), cls_name); | |
| 366 if (Dart_IsError(cls)) { | |
| 367 return cls; | |
| 368 } | |
| 369 | |
| 370 bool is_static = false; | |
| 371 bool is_final = false; | |
| 372 | |
| 373 Dart_Handle result = Dart_VariableIsStatic(var, &is_static); | |
| 374 if (Dart_IsError(result)) { | |
| 375 return result; | |
| 376 } | |
| 377 result = Dart_VariableIsFinal(var, &is_final); | |
| 378 if (Dart_IsError(result)) { | |
| 379 return result; | |
| 380 } | |
| 381 | |
| 382 const int kNumArgs = 4; | |
|
cshapiro
2012/06/28 23:57:47
Same here too.
turnidge
2012/07/09 23:45:17
Done.
| |
| 383 Dart_Handle args[kNumArgs]; | |
| 384 args[0] = var_name; | |
| 385 args[1] = lib_mirror; | |
| 386 args[2] = Dart_NewBoolean(is_static); | |
| 387 args[3] = Dart_NewBoolean(is_final); | |
| 388 Dart_Handle mirror = Dart_New(cls, Dart_Null(), kNumArgs, args); | |
| 389 return mirror; | |
| 390 } | |
| 391 | |
| 392 | |
| 393 static Dart_Handle CreateMemberMap(Dart_Handle owner) { | |
| 290 // TODO(turnidge): This should be an immutable map. | 394 // TODO(turnidge): This should be an immutable map. |
| 395 Dart_Handle owner_mirror = CreateLazyMirror(owner); | |
| 396 if (Dart_IsError(owner_mirror)) { | |
| 397 return owner_mirror; | |
| 398 } | |
| 291 Dart_Handle map = MapNew(); | 399 Dart_Handle map = MapNew(); |
| 292 | 400 |
| 293 Dart_Handle intf_names = Dart_LibraryGetClassNames(lib); | 401 Dart_Handle names; |
| 294 if (Dart_IsError(intf_names)) { | 402 Dart_Handle result; |
| 295 return intf_names; | |
| 296 } | |
| 297 intptr_t len; | 403 intptr_t len; |
|
cshapiro
2012/06/28 23:57:47
How do we know that len is always initialized? Ca
turnidge
2012/07/09 23:45:17
Taken care of by splitting out the 3 helper functi
| |
| 298 Dart_Handle result = Dart_ListLength(intf_names, &len); | 404 |
| 405 if (Dart_IsLibrary(owner)) { | |
| 406 // Add classes/interfaces. | |
| 407 names = Dart_LibraryGetClassNames(owner); | |
|
cshapiro
2012/06/28 23:57:47
Since names here is not the same as names below, i
turnidge
2012/07/09 23:45:17
Done.
| |
| 408 if (Dart_IsError(names)) { | |
| 409 return names; | |
| 410 } | |
| 411 result = Dart_ListLength(names, &len); | |
| 412 if (Dart_IsError(result)) { | |
| 413 return result; | |
| 414 } | |
| 415 for (int i = 0; i < len; i++) { | |
| 416 Dart_Handle intf_name = Dart_ListGetAt(names, i); | |
| 417 Dart_Handle intf = Dart_GetClass(owner, intf_name); | |
| 418 if (Dart_IsError(intf)) { | |
| 419 return intf; | |
| 420 } | |
| 421 Dart_Handle intf_mirror = | |
| 422 CreateInterfaceMirror(intf, intf_name, owner, owner_mirror); | |
| 423 if (Dart_IsError(intf_mirror)) { | |
| 424 return intf_mirror; | |
| 425 } | |
| 426 result = MapAdd(map, intf_name, intf_mirror); | |
| 427 if (Dart_IsError(result)) { | |
| 428 return result; | |
| 429 } | |
| 430 } | |
| 431 } | |
| 432 | |
| 433 // Add functions. | |
| 434 names = Dart_GetFunctionNames(owner); | |
| 435 if (Dart_IsError(names)) { | |
| 436 return names; | |
| 437 } | |
| 438 result = Dart_ListLength(names, &len); | |
| 299 if (Dart_IsError(result)) { | 439 if (Dart_IsError(result)) { |
| 300 return result; | 440 return result; |
| 301 } | 441 } |
| 302 for (int i = 0; i < len; i++) { | 442 for (int i = 0; i < len; i++) { |
| 303 Dart_Handle intf_name = Dart_ListGetAt(intf_names, i); | 443 Dart_Handle func_name = Dart_ListGetAt(names, i); |
| 304 Dart_Handle intf = Dart_GetClass(lib, intf_name); | 444 Dart_Handle func = Dart_LookupFunction(owner, func_name); |
| 305 if (Dart_IsError(intf)) { | 445 if (Dart_IsError(func)) { |
| 306 return intf; | 446 return func; |
| 307 } | 447 } |
| 308 Dart_Handle intf_mirror = CreateInterfaceMirror(intf, intf_name, lib); | 448 ASSERT(!Dart_IsNull(func)); |
| 309 if (Dart_IsError(intf_mirror)) { | 449 Dart_Handle func_mirror = CreateMethodMirror(func, func_name, owner_mirror); |
| 310 return intf_mirror; | 450 if (Dart_IsError(func_mirror)) { |
| 311 } | 451 return func_mirror; |
| 312 result = MapAdd(map, intf_name, intf_mirror); | 452 } |
| 313 } | 453 result = MapAdd(map, func_name, func_mirror); |
| 454 if (Dart_IsError(result)) { | |
| 455 return result; | |
| 456 } | |
| 457 } | |
| 458 | |
| 459 // Add variables. | |
| 460 names = Dart_GetVariableNames(owner); | |
|
cshapiro
2012/06/28 23:57:47
It looks like there are 3 different functions insi
turnidge
2012/07/09 23:45:17
Done.
| |
| 461 if (Dart_IsError(names)) { | |
| 462 return names; | |
| 463 } | |
| 464 result = Dart_ListLength(names, &len); | |
| 465 if (Dart_IsError(result)) { | |
| 466 return result; | |
| 467 } | |
| 468 for (int i = 0; i < len; i++) { | |
| 469 Dart_Handle var_name = Dart_ListGetAt(names, i); | |
| 470 Dart_Handle var = Dart_LookupVariable(owner, var_name); | |
| 471 if (Dart_IsError(var)) { | |
| 472 return var; | |
| 473 } | |
| 474 ASSERT(!Dart_IsNull(var)); | |
| 475 Dart_Handle var_mirror = CreateVariableMirror(var, var_name, owner_mirror); | |
| 476 if (Dart_IsError(var_mirror)) { | |
| 477 return var_mirror; | |
| 478 } | |
| 479 result = MapAdd(map, var_name, var_mirror); | |
| 480 if (Dart_IsError(result)) { | |
| 481 return result; | |
| 482 } | |
| 483 } | |
| 484 | |
| 314 return map; | 485 return map; |
| 315 } | 486 } |
| 316 | 487 |
| 317 | 488 |
| 318 static Dart_Handle CreateLibraryMirror(Dart_Handle lib) { | 489 static Dart_Handle CreateLibraryMirror(Dart_Handle lib) { |
| 319 Dart_Handle cls_name = Dart_NewString("_LocalLibraryMirrorImpl"); | 490 Dart_Handle cls_name = Dart_NewString("_LocalLibraryMirrorImpl"); |
| 320 Dart_Handle cls = Dart_GetClass(MirrorLib(), cls_name); | 491 Dart_Handle cls = Dart_GetClass(MirrorLib(), cls_name); |
| 321 if (Dart_IsError(cls)) { | 492 if (Dart_IsError(cls)) { |
| 322 return cls; | 493 return cls; |
| 323 } | 494 } |
| 324 Dart_Handle member_map = CreateLibraryMemberMap(lib); | 495 Dart_Handle member_map = CreateMemberMap(lib); |
| 325 if (Dart_IsError(member_map)) { | 496 if (Dart_IsError(member_map)) { |
| 326 return member_map; | 497 return member_map; |
| 327 } | 498 } |
| 328 const int kNumArgs = 4; | 499 const int kNumArgs = 4; |
| 329 Dart_Handle args[kNumArgs]; | 500 Dart_Handle args[kNumArgs]; |
| 330 args[0] = CreateVMReference(lib); | 501 args[0] = CreateVMReference(lib); |
| 331 args[1] = Dart_LibraryName(lib); | 502 args[1] = Dart_LibraryName(lib); |
| 332 args[2] = Dart_LibraryUrl(lib); | 503 args[2] = Dart_LibraryUrl(lib); |
| 333 args[3] = member_map; | 504 args[3] = member_map; |
| 334 Dart_Handle lib_mirror = Dart_New(cls, Dart_Null(), kNumArgs, args); | 505 Dart_Handle lib_mirror = Dart_New(cls, Dart_Null(), kNumArgs, args); |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 410 if (Dart_IsError(cls)) { | 581 if (Dart_IsError(cls)) { |
| 411 return cls; | 582 return cls; |
| 412 } | 583 } |
| 413 | 584 |
| 414 // TODO(turnidge): This is wrong. The Null class is distinct from object. | 585 // TODO(turnidge): This is wrong. The Null class is distinct from object. |
| 415 Dart_Handle object_class = Dart_GetClass(CoreLib(), Dart_NewString("Object")); | 586 Dart_Handle object_class = Dart_GetClass(CoreLib(), Dart_NewString("Object")); |
| 416 | 587 |
| 417 const int kNumArgs = 4; | 588 const int kNumArgs = 4; |
| 418 Dart_Handle args[kNumArgs]; | 589 Dart_Handle args[kNumArgs]; |
| 419 args[0] = CreateVMReference(Dart_Null()); | 590 args[0] = CreateVMReference(Dart_Null()); |
| 420 args[1] = CreateLazyInterfaceMirror(object_class); | 591 args[1] = CreateLazyMirror(object_class); |
| 421 args[2] = Dart_True(); | 592 args[2] = Dart_True(); |
| 422 args[3] = Dart_Null(); | 593 args[3] = Dart_Null(); |
| 423 Dart_Handle mirror = Dart_New(cls, Dart_Null(), kNumArgs, args); | 594 Dart_Handle mirror = Dart_New(cls, Dart_Null(), kNumArgs, args); |
| 424 return mirror; | 595 return mirror; |
| 425 } | 596 } |
| 426 | 597 |
| 427 | 598 |
| 428 static Dart_Handle CreateInstanceMirror(Dart_Handle instance) { | 599 static Dart_Handle CreateInstanceMirror(Dart_Handle instance) { |
| 429 if (Dart_IsNull(instance)) { | 600 if (Dart_IsNull(instance)) { |
| 430 return CreateNullMirror(); | 601 return CreateNullMirror(); |
| 431 } | 602 } |
| 432 ASSERT(Dart_IsInstance(instance)); | 603 ASSERT(Dart_IsInstance(instance)); |
| 433 Dart_Handle cls_name = Dart_NewString("_LocalInstanceMirrorImpl"); | 604 Dart_Handle cls_name = Dart_NewString("_LocalInstanceMirrorImpl"); |
| 434 Dart_Handle cls = Dart_GetClass(MirrorLib(), cls_name); | 605 Dart_Handle cls = Dart_GetClass(MirrorLib(), cls_name); |
| 435 if (Dart_IsError(cls)) { | 606 if (Dart_IsError(cls)) { |
| 436 return cls; | 607 return cls; |
| 437 } | 608 } |
| 438 Dart_Handle instance_cls = Dart_InstanceGetClass(instance); | 609 Dart_Handle instance_cls = Dart_InstanceGetClass(instance); |
| 439 if (Dart_IsError(instance_cls)) { | 610 if (Dart_IsError(instance_cls)) { |
| 440 return instance_cls; | 611 return instance_cls; |
| 441 } | 612 } |
| 442 bool is_simple = IsSimpleValue(instance); | 613 bool is_simple = IsSimpleValue(instance); |
| 443 const int kNumArgs = 4; | 614 const int kNumArgs = 4; |
| 444 Dart_Handle args[kNumArgs]; | 615 Dart_Handle args[kNumArgs]; |
| 445 args[0] = CreateVMReference(instance); | 616 args[0] = CreateVMReference(instance); |
| 446 args[1] = CreateLazyInterfaceMirror(instance_cls); | 617 args[1] = CreateLazyMirror(instance_cls); |
| 447 args[2] = Dart_NewBoolean(is_simple); | 618 args[2] = Dart_NewBoolean(is_simple); |
| 448 args[3] = (is_simple ? instance : Dart_Null()); | 619 args[3] = (is_simple ? instance : Dart_Null()); |
| 449 Dart_Handle mirror = Dart_New(cls, Dart_Null(), kNumArgs, args); | 620 Dart_Handle mirror = Dart_New(cls, Dart_Null(), kNumArgs, args); |
| 450 return mirror; | 621 return mirror; |
| 451 } | 622 } |
| 452 | 623 |
| 453 | 624 |
| 454 static Dart_Handle CreateMirroredError(Dart_Handle error) { | 625 static Dart_Handle CreateMirroredError(Dart_Handle error) { |
| 455 ASSERT(Dart_IsError(error)); | 626 ASSERT(Dart_IsError(error)); |
| 456 if (Dart_IsUnhandledExceptionError(error)) { | 627 if (Dart_IsUnhandledExceptionError(error)) { |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 542 Dart_SetReturnValue(args, wrapped_result); | 713 Dart_SetReturnValue(args, wrapped_result); |
| 543 } | 714 } |
| 544 | 715 |
| 545 void HandleMirrorsMessage(Isolate* isolate, | 716 void HandleMirrorsMessage(Isolate* isolate, |
| 546 Dart_Port reply_port, | 717 Dart_Port reply_port, |
| 547 const Instance& message) { | 718 const Instance& message) { |
| 548 UNIMPLEMENTED(); | 719 UNIMPLEMENTED(); |
| 549 } | 720 } |
| 550 | 721 |
| 551 } // namespace dart | 722 } // namespace dart |
| OLD | NEW |