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

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

Issue 243973002: - Add a minimal implementation of Capability. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 6 years, 8 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
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/class_finalizer.h" 7 #include "vm/class_finalizer.h"
8 #include "vm/code_generator.h" 8 #include "vm/code_generator.h"
9 #include "vm/compiler.h" 9 #include "vm/compiler.h"
10 #include "vm/debugger.h" 10 #include "vm/debugger.h"
(...skipping 363 matching lines...) Expand 10 before | Expand all | Expand 10 after
374 const Array& args = Array::Handle(Array::New(kNumArguments)); 374 const Array& args = Array::Handle(Array::New(kNumArguments));
375 args.SetAt(0, left); 375 args.SetAt(0, left);
376 args.SetAt(1, right); 376 args.SetAt(1, right);
377 const Object& result = Object::Handle(DartEntry::InvokeFunction(function, 377 const Object& result = Object::Handle(DartEntry::InvokeFunction(function,
378 args)); 378 args));
379 ASSERT(result.IsInstance() || result.IsError()); 379 ASSERT(result.IsInstance() || result.IsError());
380 return result.raw(); 380 return result.raw();
381 } 381 }
382 382
383 383
384 RawObject* DartLibraryCalls::LookupReceivePort(Dart_Port port_id) { 384 RawObject* DartLibraryCalls::LookupHandler(Dart_Port port_id) {
385 Isolate* isolate = Isolate::Current(); 385 Isolate* isolate = Isolate::Current();
386 Function& function = 386 Function& function =
387 Function::Handle(isolate, 387 Function::Handle(isolate,
388 isolate->object_store()->lookup_receive_port_function()); 388 isolate->object_store()->lookup_port_handler());
389 const int kNumArguments = 1; 389 const int kNumArguments = 1;
390 if (function.IsNull()) { 390 if (function.IsNull()) {
391 Library& isolate_lib = Library::Handle(Library::IsolateLibrary()); 391 Library& isolate_lib = Library::Handle(Library::IsolateLibrary());
392 ASSERT(!isolate_lib.IsNull()); 392 ASSERT(!isolate_lib.IsNull());
393 const String& class_name = 393 const String& class_name =
394 String::Handle(isolate_lib.PrivateName(Symbols::_RawReceivePortImpl())); 394 String::Handle(isolate_lib.PrivateName(Symbols::_RawReceivePortImpl()));
395 const String& function_name = 395 const String& function_name =
396 String::Handle(isolate_lib.PrivateName(Symbols::_lookupReceivePort())); 396 String::Handle(isolate_lib.PrivateName(Symbols::_lookupHandler()));
397 function = Resolver::ResolveStatic(isolate_lib, 397 function = Resolver::ResolveStatic(isolate_lib,
398 class_name, 398 class_name,
399 function_name, 399 function_name,
400 kNumArguments, 400 kNumArguments,
401 Object::empty_array()); 401 Object::empty_array());
402 ASSERT(!function.IsNull()); 402 ASSERT(!function.IsNull());
403 isolate->object_store()->set_lookup_receive_port_function(function); 403 isolate->object_store()->set_lookup_port_handler(function);
404 } 404 }
405 const Array& args = Array::Handle(Array::New(kNumArguments)); 405 const Array& args = Array::Handle(Array::New(kNumArguments));
406 args.SetAt(0, Integer::Handle(Integer::New(port_id))); 406 args.SetAt(0, Integer::Handle(Integer::New(port_id)));
407 const Object& result = 407 const Object& result =
408 Object::Handle(DartEntry::InvokeFunction(function, args)); 408 Object::Handle(DartEntry::InvokeFunction(function, args));
409 return result.raw(); 409 return result.raw();
410 } 410 }
411 411
412 412
413 RawObject* DartLibraryCalls::HandleMessage(const Object& receive_port, 413 RawObject* DartLibraryCalls::HandleMessage(const Object& handler,
414 const Instance& message) { 414 const Instance& message) {
415 Isolate* isolate = Isolate::Current(); 415 Isolate* isolate = Isolate::Current();
416 Function& function = Function::Handle(isolate, 416 Function& function = Function::Handle(isolate,
417 isolate->object_store()->handle_message_function()); 417 isolate->object_store()->handle_message_function());
418 const int kNumArguments = 2; 418 const int kNumArguments = 2;
419 if (function.IsNull()) { 419 if (function.IsNull()) {
420 Library& isolate_lib = Library::Handle(isolate, Library::IsolateLibrary()); 420 Library& isolate_lib = Library::Handle(isolate, Library::IsolateLibrary());
421 ASSERT(!isolate_lib.IsNull()); 421 ASSERT(!isolate_lib.IsNull());
422 const String& class_name = String::Handle(isolate, 422 const String& class_name = String::Handle(isolate,
423 isolate_lib.PrivateName(Symbols::_RawReceivePortImpl())); 423 isolate_lib.PrivateName(Symbols::_RawReceivePortImpl()));
424 const String& function_name = String::Handle(isolate, 424 const String& function_name = String::Handle(isolate,
425 isolate_lib.PrivateName(Symbols::_handleMessage())); 425 isolate_lib.PrivateName(Symbols::_handleMessage()));
426 function = Resolver::ResolveStatic(isolate_lib, 426 function = Resolver::ResolveStatic(isolate_lib,
427 class_name, 427 class_name,
428 function_name, 428 function_name,
429 kNumArguments, 429 kNumArguments,
430 Object::empty_array()); 430 Object::empty_array());
431 ASSERT(!function.IsNull()); 431 ASSERT(!function.IsNull());
432 isolate->object_store()->set_handle_message_function(function); 432 isolate->object_store()->set_handle_message_function(function);
433 } 433 }
434 const Array& args = Array::Handle(isolate, Array::New(kNumArguments)); 434 const Array& args = Array::Handle(isolate, Array::New(kNumArguments));
435 args.SetAt(0, receive_port); 435 args.SetAt(0, handler);
436 args.SetAt(1, message); 436 args.SetAt(1, message);
437 if (isolate->debugger()->IsStepping()) { 437 if (isolate->debugger()->IsStepping()) {
438 // If the isolate is being debugged and the debugger was stepping 438 // If the isolate is being debugged and the debugger was stepping
439 // through code, enable single stepping so debugger will stop 439 // through code, enable single stepping so debugger will stop
440 // at the first location the user is interested in. 440 // at the first location the user is interested in.
441 isolate->debugger()->SetSingleStep(); 441 isolate->debugger()->SetSingleStep();
442 } 442 }
443 const Object& result = Object::Handle(isolate, 443 const Object& result = Object::Handle(isolate,
444 DartEntry::InvokeFunction(function, args)); 444 DartEntry::InvokeFunction(function, args));
445 ASSERT(result.IsNull() || result.IsError()); 445 ASSERT(result.IsNull() || result.IsError());
446 return result.raw(); 446 return result.raw();
447 } 447 }
448 448
449 449
450 RawObject* DartLibraryCalls::NewSendPort(Dart_Port port_id) {
451 Library& isolate_lib = Library::Handle(Library::IsolateLibrary());
452 ASSERT(!isolate_lib.IsNull());
453 const String& class_name =
454 String::Handle(isolate_lib.PrivateName(Symbols::_SendPortImpl()));
455 const int kNumArguments = 1;
456 const String& function_name =
457 String::Handle(isolate_lib.PrivateName(Symbols::_create()));
458 const Function& function = Function::Handle(
459 Resolver::ResolveStatic(isolate_lib,
460 class_name,
461 function_name,
462 kNumArguments,
463 Object::empty_array()));
464 ASSERT(!function.IsNull());
465 const Array& args = Array::Handle(Array::New(kNumArguments));
466 args.SetAt(0, Integer::Handle(Integer::New(port_id)));
467 return DartEntry::InvokeFunction(function, args);
468 }
469
470
471 RawObject* DartLibraryCalls::MapSetAt(const Instance& map, 450 RawObject* DartLibraryCalls::MapSetAt(const Instance& map,
472 const Instance& key, 451 const Instance& key,
473 const Instance& value) { 452 const Instance& value) {
474 const int kNumArguments = 3; 453 const int kNumArguments = 3;
475 ArgumentsDescriptor args_desc( 454 ArgumentsDescriptor args_desc(
476 Array::Handle(ArgumentsDescriptor::New(kNumArguments))); 455 Array::Handle(ArgumentsDescriptor::New(kNumArguments)));
477 const Function& function = Function::Handle( 456 const Function& function = Function::Handle(
478 Resolver::ResolveDynamic(map, 457 Resolver::ResolveDynamic(map,
479 Symbols::AssignIndexToken(), 458 Symbols::AssignIndexToken(),
480 args_desc)); 459 args_desc));
481 ASSERT(!function.IsNull()); 460 ASSERT(!function.IsNull());
482 const Array& args = Array::Handle(Array::New(kNumArguments)); 461 const Array& args = Array::Handle(Array::New(kNumArguments));
483 args.SetAt(0, map); 462 args.SetAt(0, map);
484 args.SetAt(1, key); 463 args.SetAt(1, key);
485 args.SetAt(2, value); 464 args.SetAt(2, value);
486 const Object& result = Object::Handle(DartEntry::InvokeFunction(function, 465 const Object& result = Object::Handle(DartEntry::InvokeFunction(function,
487 args)); 466 args));
488 return result.raw(); 467 return result.raw();
489 } 468 }
490 469
491
492 RawObject* DartLibraryCalls::PortGetId(const Instance& port) {
493 const Class& cls = Class::Handle(port.clazz());
494 const Library& isolate_lib = Library::Handle(Library::IsolateLibrary());
495 const String& func_name =
496 String::Handle(isolate_lib.PrivateName(
497 String::Handle(Field::GetterName(Symbols::_id()))));
498 const Function& func = Function::Handle(cls.LookupDynamicFunction(func_name));
499 ASSERT(!func.IsNull());
500 const Array& args = Array::Handle(Array::New(1));
501 args.SetAt(0, port);
502 return DartEntry::InvokeFunction(func, args);
503 }
504
505
506 bool DartLibraryCalls::IsSendPort(const Instance& obj) {
507 // Get instance class.
508 const Class& cls = Class::Handle(obj.clazz());
509 // Get send port class from isolate library.
510 const Library& isolate_lib = Library::Handle(Library::IsolateLibrary());
511 const Class& send_port_cls = Class::Handle(
512 isolate_lib.LookupClassAllowPrivate(Symbols::_SendPortImpl()));
513 // Check for the same class id.
514 ASSERT(!send_port_cls.IsNull());
515 return cls.id() == send_port_cls.id();
516 }
517
518
519 bool DartLibraryCalls::IsReceivePort(const Instance& obj) {
520 // Get instance class.
521 const Class& cls = Class::Handle(obj.clazz());
522 // Get send port class from isolate library.
523 const Library& isolate_lib = Library::Handle(Library::IsolateLibrary());
524 const Class& recv_port_cls = Class::Handle(
525 isolate_lib.LookupClassAllowPrivate(Symbols::_RawReceivePortImpl()));
526 // Check for the same class id.
527 ASSERT(!recv_port_cls.IsNull());
528 return cls.id() == recv_port_cls.id();
529 }
530
531 } // namespace dart 470 } // namespace dart
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698