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

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

Issue 12315087: Hook up simulator (if needed) when calling Dart code. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 10 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/dart_entry.h ('k') | runtime/vm/dart_entry_test.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 #include "vm/dart_entry.h" 5 #include "vm/dart_entry.h"
6 6
7 #include "vm/code_generator.h" 7 #include "vm/code_generator.h"
8 #include "vm/compiler.h" 8 #include "vm/compiler.h"
9 #include "vm/object_store.h" 9 #include "vm/object_store.h"
10 #include "vm/resolver.h" 10 #include "vm/resolver.h"
11 #include "vm/simulator.h"
11 #include "vm/stub_code.h" 12 #include "vm/stub_code.h"
12 #include "vm/symbols.h" 13 #include "vm/symbols.h"
13 14
14 namespace dart { 15 namespace dart {
15 16
16 // A cache of VM heap allocated arguments descriptors. 17 // A cache of VM heap allocated arguments descriptors.
17 RawArray* ArgumentsDescriptor::cached_args_descriptors_[kCachedDescriptorCount]; 18 RawArray* ArgumentsDescriptor::cached_args_descriptors_[kCachedDescriptorCount];
18 19
19 20
20 RawObject* DartEntry::InvokeDynamic(const Function& function, 21 RawObject* DartEntry::InvokeFunction(const Function& function,
21 const Array& arguments) { 22 const Array& arguments) {
22 const Array& arg_desc = 23 const Array& arguments_descriptor =
23 Array::Handle(ArgumentsDescriptor::New(arguments.Length())); 24 Array::Handle(ArgumentsDescriptor::New(arguments.Length()));
24 return InvokeDynamic(function, arguments, arg_desc); 25 return InvokeFunction(function, arguments, arguments_descriptor);
25 } 26 }
26 27
27 28
28 RawObject* DartEntry::InvokeDynamic(const Function& function, 29 RawObject* DartEntry::InvokeFunction(const Function& function,
29 const Array& arguments, 30 const Array& arguments,
30 const Array& arguments_descriptor) { 31 const Array& arguments_descriptor) {
32 const Context& context =
33 Context::ZoneHandle(Isolate::Current()->object_store()->empty_context());
34 ASSERT(context.isolate() == Isolate::Current());
35 return InvokeFunction(function, arguments, arguments_descriptor, context);
36 }
37
38
39 RawObject* DartEntry::InvokeFunction(const Function& function,
40 const Array& arguments,
41 const Array& arguments_descriptor,
42 const Context& context) {
31 // Get the entrypoint corresponding to the function specified, this 43 // Get the entrypoint corresponding to the function specified, this
32 // will result in a compilation of the function if it is not already 44 // will result in a compilation of the function if it is not already
33 // compiled. 45 // compiled.
34 if (!function.HasCode()) { 46 if (!function.HasCode()) {
35 const Error& error = Error::Handle(Compiler::CompileFunction(function)); 47 const Error& error = Error::Handle(Compiler::CompileFunction(function));
36 if (!error.IsNull()) { 48 if (!error.IsNull()) {
37 return error.raw();
38 }
39 }
40
41 // Now Call the invoke stub which will invoke the dart function.
42 invokestub entrypoint = reinterpret_cast<invokestub>(
43 StubCode::InvokeDartCodeEntryPoint());
44 const Context& context =
45 Context::ZoneHandle(Isolate::Current()->object_store()->empty_context());
46 ASSERT(context.isolate() == Isolate::Current());
47 const Code& code = Code::Handle(function.CurrentCode());
48 ASSERT(!code.IsNull());
49 ASSERT(Isolate::Current()->no_callback_scope_depth() == 0);
50 return entrypoint(code.EntryPoint(),
51 arguments_descriptor,
52 arguments,
53 context);
54 }
55
56
57 RawObject* DartEntry::InvokeStatic(const Function& function,
58 const Array& arguments) {
59 const Array& arguments_descriptor =
60 Array::Handle(ArgumentsDescriptor::New(arguments.Length()));
61 return InvokeStatic(function, arguments, arguments_descriptor);
62 }
63
64
65 RawObject* DartEntry::InvokeStatic(const Function& function,
66 const Array& arguments,
67 const Array& arguments_descriptor) {
68 // Get the entrypoint corresponding to the function specified, this
69 // will result in a compilation of the function if it is not already
70 // compiled.
71 ASSERT(!function.IsNull());
72 if (!function.HasCode()) {
73 const Error& error = Error::Handle(Compiler::CompileFunction(function));
74 if (!error.IsNull()) {
75 return error.raw(); 49 return error.raw();
76 } 50 }
77 } 51 }
78 // Now Call the invoke stub which will invoke the dart function. 52 // Now Call the invoke stub which will invoke the dart function.
79 invokestub entrypoint = reinterpret_cast<invokestub>( 53 invokestub entrypoint = reinterpret_cast<invokestub>(
80 StubCode::InvokeDartCodeEntryPoint()); 54 StubCode::InvokeDartCodeEntryPoint());
81 const Context& context =
82 Context::ZoneHandle(Isolate::Current()->object_store()->empty_context());
83 ASSERT(context.isolate() == Isolate::Current());
84 const Code& code = Code::Handle(function.CurrentCode()); 55 const Code& code = Code::Handle(function.CurrentCode());
85 ASSERT(!code.IsNull()); 56 ASSERT(!code.IsNull());
86 ASSERT(Isolate::Current()->no_callback_scope_depth() == 0); 57 ASSERT(Isolate::Current()->no_callback_scope_depth() == 0);
87 return entrypoint(code.EntryPoint(), 58 #ifdef USING_SIMULATOR
88 arguments_descriptor, 59 return bit_copy<RawObject*, int64_t>(Simulator::Current()->Call(
89 arguments, 60 reinterpret_cast<int32_t>(entrypoint),
90 context); 61 static_cast<int32_t>(code.EntryPoint()),
62 reinterpret_cast<int32_t>(&arguments_descriptor),
63 reinterpret_cast<int32_t>(&arguments),
64 reinterpret_cast<int32_t>(&context),
65 0));
66 #else
67 return entrypoint(code.EntryPoint(),
68 arguments_descriptor,
69 arguments,
70 context);
71 #endif
91 } 72 }
92 73
93 74
94 RawObject* DartEntry::InvokeClosure(const Instance& closure, 75 RawObject* DartEntry::InvokeClosure(const Array& arguments) {
95 const Array& arguments) {
96 const Array& arguments_descriptor = 76 const Array& arguments_descriptor =
97 Array::Handle(ArgumentsDescriptor::New(arguments.Length())); 77 Array::Handle(ArgumentsDescriptor::New(arguments.Length()));
98 return InvokeClosure(closure, arguments, arguments_descriptor); 78 return InvokeClosure(arguments, arguments_descriptor);
99 } 79 }
100 80
101 81
102 RawObject* DartEntry::InvokeClosure(const Instance& instance, 82 RawObject* DartEntry::InvokeClosure(const Array& arguments,
103 const Array& arguments,
104 const Array& arguments_descriptor) { 83 const Array& arguments_descriptor) {
105 ASSERT(instance.raw() == arguments.At(0)); 84 Instance& instance = Instance::Handle();
85 instance ^= arguments.At(0);
106 // Get the entrypoint corresponding to the closure function or to the call 86 // Get the entrypoint corresponding to the closure function or to the call
107 // method of the instance. This will result in a compilation of the function 87 // method of the instance. This will result in a compilation of the function
108 // if it is not already compiled. 88 // if it is not already compiled.
109 Function& function = Function::Handle(); 89 Function& function = Function::Handle();
110 Context& context = Context::Handle(); 90 Context& context = Context::Handle();
111 if (instance.IsCallable(&function, &context)) { 91 if (instance.IsCallable(&function, &context)) {
112 // Only invoke the function if its arguments are compatible. 92 // Only invoke the function if its arguments are compatible.
113 const ArgumentsDescriptor args_desc(arguments_descriptor); 93 const ArgumentsDescriptor args_desc(arguments_descriptor);
114 if (function.AreValidArgumentCounts(args_desc.Count(), 94 if (function.AreValidArgumentCounts(args_desc.Count(),
115 args_desc.NamedCount(), 95 args_desc.NamedCount(),
116 NULL)) { 96 NULL)) {
117 if (!function.HasCode()) {
118 const Error& error = Error::Handle(Compiler::CompileFunction(function));
119 if (!error.IsNull()) {
120 return error.raw();
121 }
122 }
123 // Now call the invoke stub which will invoke the closure function or
124 // 'call' function.
125 // The closure or non-closure object (receiver) is passed as implicit 97 // The closure or non-closure object (receiver) is passed as implicit
126 // first argument. It is already included in the arguments array. 98 // first argument. It is already included in the arguments array.
127 invokestub entrypoint = reinterpret_cast<invokestub>( 99 return InvokeFunction(function, arguments, arguments_descriptor, context);
128 StubCode::InvokeDartCodeEntryPoint());
129 ASSERT(context.isolate() == Isolate::Current());
130 const Code& code = Code::Handle(function.CurrentCode());
131 ASSERT(!code.IsNull());
132 ASSERT(Isolate::Current()->no_callback_scope_depth() == 0);
133 return entrypoint(code.EntryPoint(),
134 arguments_descriptor,
135 arguments,
136 context);
137 } 100 }
138 } 101 }
139 // There is no compatible 'call' method, so invoke noSuchMethod. 102 // There is no compatible 'call' method, so invoke noSuchMethod.
140 return InvokeNoSuchMethod(instance, 103 return InvokeNoSuchMethod(instance,
141 Symbols::Call(), 104 Symbols::Call(),
142 arguments, 105 arguments,
143 arguments_descriptor); 106 arguments_descriptor);
144 } 107 }
145 108
146 109
(...skipping 15 matching lines...) Expand all
162 Resolver::ResolveStaticByName(invocation_mirror_class, 125 Resolver::ResolveStaticByName(invocation_mirror_class,
163 function_name, 126 function_name,
164 Resolver::kIsQualified)); 127 Resolver::kIsQualified));
165 ASSERT(!allocation_function.IsNull()); 128 ASSERT(!allocation_function.IsNull());
166 const int kNumAllocationArgs = 3; 129 const int kNumAllocationArgs = 3;
167 const Array& allocation_args = Array::Handle(Array::New(kNumAllocationArgs)); 130 const Array& allocation_args = Array::Handle(Array::New(kNumAllocationArgs));
168 allocation_args.SetAt(0, target_name); 131 allocation_args.SetAt(0, target_name);
169 allocation_args.SetAt(1, arguments_descriptor); 132 allocation_args.SetAt(1, arguments_descriptor);
170 allocation_args.SetAt(2, arguments); 133 allocation_args.SetAt(2, arguments);
171 const Object& invocation_mirror = Object::Handle( 134 const Object& invocation_mirror = Object::Handle(
172 InvokeStatic(allocation_function, allocation_args)); 135 InvokeFunction(allocation_function, allocation_args));
173 136
174 // Now use the invocation mirror object and invoke NoSuchMethod. 137 // Now use the invocation mirror object and invoke NoSuchMethod.
175 const int kNumArguments = 2; 138 const int kNumArguments = 2;
176 const int kNumNamedArguments = 0; 139 const int kNumNamedArguments = 0;
177 const Function& function = Function::Handle( 140 const Function& function = Function::Handle(
178 Resolver::ResolveDynamic(receiver, 141 Resolver::ResolveDynamic(receiver,
179 Symbols::NoSuchMethod(), 142 Symbols::NoSuchMethod(),
180 kNumArguments, 143 kNumArguments,
181 kNumNamedArguments)); 144 kNumNamedArguments));
182 ASSERT(!function.IsNull()); 145 ASSERT(!function.IsNull());
183 const Array& args = Array::Handle(Array::New(kNumArguments)); 146 const Array& args = Array::Handle(Array::New(kNumArguments));
184 args.SetAt(0, receiver); 147 args.SetAt(0, receiver);
185 args.SetAt(1, invocation_mirror); 148 args.SetAt(1, invocation_mirror);
186 return InvokeDynamic(function, args); 149 return InvokeFunction(function, args);
187 } 150 }
188 151
189 152
190 ArgumentsDescriptor::ArgumentsDescriptor(const Array& array) 153 ArgumentsDescriptor::ArgumentsDescriptor(const Array& array)
191 : array_(array) { 154 : array_(array) {
192 } 155 }
193 156
194 157
195 intptr_t ArgumentsDescriptor::Count() const { 158 intptr_t ArgumentsDescriptor::Count() const {
196 return Smi::CheckedHandle(array_.At(kCountIndex)).Value(); 159 return Smi::CheckedHandle(array_.At(kCountIndex)).Value();
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
343 obj = arguments.At(i); 306 obj = arguments.At(i);
344 constructor_arguments.SetAt((i + kNumExtraArgs), obj); 307 constructor_arguments.SetAt((i + kNumExtraArgs), obj);
345 } 308 }
346 309
347 const String& function_name = String::Handle( 310 const String& function_name = String::Handle(
348 String::Concat(class_name, constructor_name)); 311 String::Concat(class_name, constructor_name));
349 const Function& constructor = 312 const Function& constructor =
350 Function::Handle(cls.LookupConstructorAllowPrivate(function_name)); 313 Function::Handle(cls.LookupConstructorAllowPrivate(function_name));
351 ASSERT(!constructor.IsNull()); 314 ASSERT(!constructor.IsNull());
352 const Object& retval = 315 const Object& retval =
353 Object::Handle(DartEntry::InvokeStatic(constructor, constructor_arguments)); 316 Object::Handle(DartEntry::InvokeFunction(constructor,
317 constructor_arguments));
354 ASSERT(retval.IsNull() || retval.IsError()); 318 ASSERT(retval.IsNull() || retval.IsError());
355 if (retval.IsError()) { 319 if (retval.IsError()) {
356 return retval.raw(); 320 return retval.raw();
357 } 321 }
358 return exception_object.raw(); 322 return exception_object.raw();
359 } 323 }
360 324
361 325
362 RawObject* DartLibraryCalls::ToString(const Instance& receiver) { 326 RawObject* DartLibraryCalls::ToString(const Instance& receiver) {
363 const int kNumArguments = 1; // Receiver. 327 const int kNumArguments = 1; // Receiver.
364 const int kNumNamedArguments = 0; // None. 328 const int kNumNamedArguments = 0; // None.
365 const Function& function = Function::Handle( 329 const Function& function = Function::Handle(
366 Resolver::ResolveDynamic(receiver, 330 Resolver::ResolveDynamic(receiver,
367 Symbols::toString(), 331 Symbols::toString(),
368 kNumArguments, 332 kNumArguments,
369 kNumNamedArguments)); 333 kNumNamedArguments));
370 ASSERT(!function.IsNull()); 334 ASSERT(!function.IsNull());
371 const Array& args = Array::Handle(Array::New(kNumArguments)); 335 const Array& args = Array::Handle(Array::New(kNumArguments));
372 args.SetAt(0, receiver); 336 args.SetAt(0, receiver);
373 const Object& result = Object::Handle(DartEntry::InvokeDynamic(function, 337 const Object& result = Object::Handle(DartEntry::InvokeFunction(function,
374 args)); 338 args));
375 ASSERT(result.IsInstance() || result.IsError()); 339 ASSERT(result.IsInstance() || result.IsError());
376 return result.raw(); 340 return result.raw();
377 } 341 }
378 342
379 343
380 RawObject* DartLibraryCalls::Equals(const Instance& left, 344 RawObject* DartLibraryCalls::Equals(const Instance& left,
381 const Instance& right) { 345 const Instance& right) {
382 const int kNumArguments = 2; 346 const int kNumArguments = 2;
383 const int kNumNamedArguments = 0; 347 const int kNumNamedArguments = 0;
384 const Function& function = Function::Handle( 348 const Function& function = Function::Handle(
385 Resolver::ResolveDynamic(left, 349 Resolver::ResolveDynamic(left,
386 Symbols::EqualOperator(), 350 Symbols::EqualOperator(),
387 kNumArguments, 351 kNumArguments,
388 kNumNamedArguments)); 352 kNumNamedArguments));
389 ASSERT(!function.IsNull()); 353 ASSERT(!function.IsNull());
390 354
391 const Array& args = Array::Handle(Array::New(kNumArguments)); 355 const Array& args = Array::Handle(Array::New(kNumArguments));
392 args.SetAt(0, left); 356 args.SetAt(0, left);
393 args.SetAt(1, right); 357 args.SetAt(1, right);
394 const Object& result = Object::Handle(DartEntry::InvokeDynamic(function, 358 const Object& result = Object::Handle(DartEntry::InvokeFunction(function,
395 args)); 359 args));
396 ASSERT(result.IsInstance() || result.IsError()); 360 ASSERT(result.IsInstance() || result.IsError());
397 return result.raw(); 361 return result.raw();
398 } 362 }
399 363
400 364
401 RawObject* DartLibraryCalls::LookupReceivePort(Dart_Port port_id) { 365 RawObject* DartLibraryCalls::LookupReceivePort(Dart_Port port_id) {
402 Isolate* isolate = Isolate::Current(); 366 Isolate* isolate = Isolate::Current();
403 Function& function = 367 Function& function =
404 Function::Handle(isolate, 368 Function::Handle(isolate,
405 isolate->object_store()->lookup_receive_port_function()); 369 isolate->object_store()->lookup_receive_port_function());
406 const int kNumArguments = 1; 370 const int kNumArguments = 1;
407 if (function.IsNull()) { 371 if (function.IsNull()) {
408 Library& isolate_lib = Library::Handle(Library::IsolateLibrary()); 372 Library& isolate_lib = Library::Handle(Library::IsolateLibrary());
409 ASSERT(!isolate_lib.IsNull()); 373 ASSERT(!isolate_lib.IsNull());
410 const String& class_name = 374 const String& class_name =
411 String::Handle(isolate_lib.PrivateName(Symbols::_ReceivePortImpl())); 375 String::Handle(isolate_lib.PrivateName(Symbols::_ReceivePortImpl()));
412 const String& function_name = 376 const String& function_name =
413 String::Handle(isolate_lib.PrivateName(Symbols::_lookupReceivePort())); 377 String::Handle(isolate_lib.PrivateName(Symbols::_lookupReceivePort()));
414 function = Resolver::ResolveStatic(isolate_lib, 378 function = Resolver::ResolveStatic(isolate_lib,
415 class_name, 379 class_name,
416 function_name, 380 function_name,
417 kNumArguments, 381 kNumArguments,
418 Object::empty_array(), 382 Object::empty_array(),
419 Resolver::kIsQualified); 383 Resolver::kIsQualified);
420 isolate->object_store()->set_lookup_receive_port_function(function); 384 isolate->object_store()->set_lookup_receive_port_function(function);
421 } 385 }
422 const Array& args = Array::Handle(Array::New(kNumArguments)); 386 const Array& args = Array::Handle(Array::New(kNumArguments));
423 args.SetAt(0, Integer::Handle(Integer::New(port_id))); 387 args.SetAt(0, Integer::Handle(Integer::New(port_id)));
424 const Object& result = 388 const Object& result =
425 Object::Handle(DartEntry::InvokeStatic(function, args)); 389 Object::Handle(DartEntry::InvokeFunction(function, args));
426 return result.raw(); 390 return result.raw();
427 } 391 }
428 392
429 393
430 RawObject* DartLibraryCalls::HandleMessage(const Object& receive_port, 394 RawObject* DartLibraryCalls::HandleMessage(const Object& receive_port,
431 Dart_Port reply_port_id, 395 Dart_Port reply_port_id,
432 const Instance& message) { 396 const Instance& message) {
433 Isolate* isolate = Isolate::Current(); 397 Isolate* isolate = Isolate::Current();
434 Function& function = 398 Function& function =
435 Function::Handle(isolate, 399 Function::Handle(isolate,
(...skipping 12 matching lines...) Expand all
448 kNumArguments, 412 kNumArguments,
449 Object::empty_array(), 413 Object::empty_array(),
450 Resolver::kIsQualified); 414 Resolver::kIsQualified);
451 isolate->object_store()->set_handle_message_function(function); 415 isolate->object_store()->set_handle_message_function(function);
452 } 416 }
453 const Array& args = Array::Handle(isolate, Array::New(kNumArguments)); 417 const Array& args = Array::Handle(isolate, Array::New(kNumArguments));
454 args.SetAt(0, receive_port); 418 args.SetAt(0, receive_port);
455 args.SetAt(1, Integer::Handle(isolate, Integer::New(reply_port_id))); 419 args.SetAt(1, Integer::Handle(isolate, Integer::New(reply_port_id)));
456 args.SetAt(2, message); 420 args.SetAt(2, message);
457 const Object& result = 421 const Object& result =
458 Object::Handle(isolate, DartEntry::InvokeStatic(function, args)); 422 Object::Handle(isolate, DartEntry::InvokeFunction(function, args));
459 ASSERT(result.IsNull() || result.IsError()); 423 ASSERT(result.IsNull() || result.IsError());
460 return result.raw(); 424 return result.raw();
461 } 425 }
462 426
463 427
464 RawObject* DartLibraryCalls::NewSendPort(intptr_t port_id) { 428 RawObject* DartLibraryCalls::NewSendPort(intptr_t port_id) {
465 Library& isolate_lib = Library::Handle(Library::IsolateLibrary()); 429 Library& isolate_lib = Library::Handle(Library::IsolateLibrary());
466 ASSERT(!isolate_lib.IsNull()); 430 ASSERT(!isolate_lib.IsNull());
467 const String& class_name = 431 const String& class_name =
468 String::Handle(isolate_lib.PrivateName(Symbols::_SendPortImpl())); 432 String::Handle(isolate_lib.PrivateName(Symbols::_SendPortImpl()));
469 const int kNumArguments = 1; 433 const int kNumArguments = 1;
470 const String& function_name = 434 const String& function_name =
471 String::Handle(isolate_lib.PrivateName(Symbols::_create())); 435 String::Handle(isolate_lib.PrivateName(Symbols::_create()));
472 const Function& function = Function::Handle( 436 const Function& function = Function::Handle(
473 Resolver::ResolveStatic(isolate_lib, 437 Resolver::ResolveStatic(isolate_lib,
474 class_name, 438 class_name,
475 function_name, 439 function_name,
476 kNumArguments, 440 kNumArguments,
477 Object::empty_array(), 441 Object::empty_array(),
478 Resolver::kIsQualified)); 442 Resolver::kIsQualified));
479 const Array& args = Array::Handle(Array::New(kNumArguments)); 443 const Array& args = Array::Handle(Array::New(kNumArguments));
480 args.SetAt(0, Integer::Handle(Integer::New(port_id))); 444 args.SetAt(0, Integer::Handle(Integer::New(port_id)));
481 return DartEntry::InvokeStatic(function, args); 445 return DartEntry::InvokeFunction(function, args);
482 } 446 }
483 447
484 448
485 RawObject* DartLibraryCalls::MapSetAt(const Instance& map, 449 RawObject* DartLibraryCalls::MapSetAt(const Instance& map,
486 const Instance& key, 450 const Instance& key,
487 const Instance& value) { 451 const Instance& value) {
488 const int kNumArguments = 3; 452 const int kNumArguments = 3;
489 const Function& function = Function::Handle( 453 const Function& function = Function::Handle(
490 Resolver::ResolveDynamic(map, 454 Resolver::ResolveDynamic(map,
491 Symbols::AssignIndexToken(), 455 Symbols::AssignIndexToken(),
492 kNumArguments, 456 kNumArguments,
493 0)); 457 0));
494 ASSERT(!function.IsNull()); 458 ASSERT(!function.IsNull());
495 const Array& args = Array::Handle(Array::New(kNumArguments)); 459 const Array& args = Array::Handle(Array::New(kNumArguments));
496 args.SetAt(0, map); 460 args.SetAt(0, map);
497 args.SetAt(1, key); 461 args.SetAt(1, key);
498 args.SetAt(2, value); 462 args.SetAt(2, value);
499 const Object& result = Object::Handle(DartEntry::InvokeDynamic(function, 463 const Object& result = Object::Handle(DartEntry::InvokeFunction(function,
500 args)); 464 args));
501 return result.raw(); 465 return result.raw();
502 } 466 }
503 467
504 468
505 RawObject* DartLibraryCalls::PortGetId(const Instance& port) { 469 RawObject* DartLibraryCalls::PortGetId(const Instance& port) {
506 const Class& cls = Class::Handle(port.clazz()); 470 const Class& cls = Class::Handle(port.clazz());
507 const Library& isolate_lib = Library::Handle(Library::IsolateLibrary()); 471 const Library& isolate_lib = Library::Handle(Library::IsolateLibrary());
508 const String& func_name = 472 const String& func_name =
509 String::Handle(isolate_lib.PrivateName( 473 String::Handle(isolate_lib.PrivateName(
510 String::Handle(Field::GetterName(Symbols::_id())))); 474 String::Handle(Field::GetterName(Symbols::_id()))));
511 const Function& func = Function::Handle(cls.LookupDynamicFunction(func_name)); 475 const Function& func = Function::Handle(cls.LookupDynamicFunction(func_name));
512 ASSERT(!func.IsNull()); 476 ASSERT(!func.IsNull());
513 const Array& args = Array::Handle(Array::New(1)); 477 const Array& args = Array::Handle(Array::New(1));
514 args.SetAt(0, port); 478 args.SetAt(0, port);
515 return DartEntry::InvokeDynamic(func, args); 479 return DartEntry::InvokeFunction(func, args);
516 } 480 }
517 481
518 482
519 } // namespace dart 483 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/dart_entry.h ('k') | runtime/vm/dart_entry_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698