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

Side by Side Diff: src/object-observe.js

Issue 307543008: Simplify, speed-up correct-context ObjectObserve calls (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: <sigh> remove style fix Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | src/runtime.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 "use strict"; 5 "use strict";
6 6
7 // Overview: 7 // Overview:
8 // 8 //
9 // This file contains all of the routing and accounting for Object.observe. 9 // This file contains all of the routing and accounting for Object.observe.
10 // User code will interact with these mechanisms via the Object.observe APIs 10 // User code will interact with these mechanisms via the Object.observe APIs
(...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after
361 function ObjectObserve(object, callback, acceptList) { 361 function ObjectObserve(object, callback, acceptList) {
362 if (!IS_SPEC_OBJECT(object)) 362 if (!IS_SPEC_OBJECT(object))
363 throw MakeTypeError("observe_non_object", ["observe"]); 363 throw MakeTypeError("observe_non_object", ["observe"]);
364 if (%IsJSGlobalProxy(object)) 364 if (%IsJSGlobalProxy(object))
365 throw MakeTypeError("observe_global_proxy", ["observe"]); 365 throw MakeTypeError("observe_global_proxy", ["observe"]);
366 if (!IS_SPEC_FUNCTION(callback)) 366 if (!IS_SPEC_FUNCTION(callback))
367 throw MakeTypeError("observe_non_function", ["observe"]); 367 throw MakeTypeError("observe_non_function", ["observe"]);
368 if (ObjectIsFrozen(callback)) 368 if (ObjectIsFrozen(callback))
369 throw MakeTypeError("observe_callback_frozen"); 369 throw MakeTypeError("observe_callback_frozen");
370 370
371 return %ObjectObserveInObjectContext(object, callback, acceptList); 371 var objectObserveFn = %GetObjectContextObjectObserve(object);
372 return objectObserveFn(object, callback, acceptList);
372 } 373 }
373 374
374 function NativeObjectObserve(object, callback, acceptList) { 375 function NativeObjectObserve(object, callback, acceptList) {
375 var objectInfo = ObjectInfoGetOrCreate(object); 376 var objectInfo = ObjectInfoGetOrCreate(object);
376 var typeList = ConvertAcceptListToTypeMap(acceptList); 377 var typeList = ConvertAcceptListToTypeMap(acceptList);
377 ObjectInfoAddObserver(objectInfo, callback, typeList); 378 ObjectInfoAddObserver(objectInfo, callback, typeList);
378 return object; 379 return object;
379 } 380 }
380 381
381 function ObjectUnobserve(object, callback) { 382 function ObjectUnobserve(object, callback) {
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
536 throw MakeTypeError("called_on_non_object", ["performChange"]); 537 throw MakeTypeError("called_on_non_object", ["performChange"]);
537 538
538 var objectInfo = ObjectInfoGetFromNotifier(this); 539 var objectInfo = ObjectInfoGetFromNotifier(this);
539 if (IS_UNDEFINED(objectInfo)) 540 if (IS_UNDEFINED(objectInfo))
540 throw MakeTypeError("observe_notify_non_notifier"); 541 throw MakeTypeError("observe_notify_non_notifier");
541 if (!IS_STRING(changeType)) 542 if (!IS_STRING(changeType))
542 throw MakeTypeError("observe_perform_non_string"); 543 throw MakeTypeError("observe_perform_non_string");
543 if (!IS_SPEC_FUNCTION(changeFn)) 544 if (!IS_SPEC_FUNCTION(changeFn))
544 throw MakeTypeError("observe_perform_non_function"); 545 throw MakeTypeError("observe_perform_non_function");
545 546
546 return %ObjectNotifierPerformChangeInObjectContext( 547 var performChangeFn = %GetObjectContextNotifierPerformChange(objectInfo);
547 objectInfo, changeType, changeFn); 548 performChangeFn(objectInfo, changeType, changeFn);
548 } 549 }
549 550
550 function NativeObjectNotifierPerformChange(objectInfo, changeType, changeFn) { 551 function NativeObjectNotifierPerformChange(objectInfo, changeType, changeFn) {
551 ObjectInfoAddPerformingType(objectInfo, changeType); 552 ObjectInfoAddPerformingType(objectInfo, changeType);
552 553
553 var changeRecord; 554 var changeRecord;
554 try { 555 try {
555 changeRecord = %_CallFunction(UNDEFINED, changeFn); 556 changeRecord = %_CallFunction(UNDEFINED, changeFn);
556 } finally { 557 } finally {
557 ObjectInfoRemovePerformingType(objectInfo, changeType); 558 ObjectInfoRemovePerformingType(objectInfo, changeType);
558 } 559 }
559 560
560 if (IS_SPEC_OBJECT(changeRecord)) 561 if (IS_SPEC_OBJECT(changeRecord))
561 ObjectInfoEnqueueExternalChangeRecord(objectInfo, changeRecord, changeType); 562 ObjectInfoEnqueueExternalChangeRecord(objectInfo, changeRecord, changeType);
562 } 563 }
563 564
564 function ObjectGetNotifier(object) { 565 function ObjectGetNotifier(object) {
565 if (!IS_SPEC_OBJECT(object)) 566 if (!IS_SPEC_OBJECT(object))
566 throw MakeTypeError("observe_non_object", ["getNotifier"]); 567 throw MakeTypeError("observe_non_object", ["getNotifier"]);
567 if (%IsJSGlobalProxy(object)) 568 if (%IsJSGlobalProxy(object))
568 throw MakeTypeError("observe_global_proxy", ["getNotifier"]); 569 throw MakeTypeError("observe_global_proxy", ["getNotifier"]);
569 570
570 if (ObjectIsFrozen(object)) return null; 571 if (ObjectIsFrozen(object)) return null;
571 572
572 if (!%ObjectWasCreatedInCurrentOrigin(object)) return null; 573 if (!%ObjectWasCreatedInCurrentOrigin(object)) return null;
573 574
574 return %ObjectGetNotifierInObjectContext(object); 575 var getNotifierFn = %GetObjectContextObjectGetNotifier(object);
576 return getNotifierFn(object);
575 } 577 }
576 578
577 function NativeObjectGetNotifier(object) { 579 function NativeObjectGetNotifier(object) {
578 var objectInfo = ObjectInfoGetOrCreate(object); 580 var objectInfo = ObjectInfoGetOrCreate(object);
579 return ObjectInfoGetNotifier(objectInfo); 581 return ObjectInfoGetNotifier(objectInfo);
580 } 582 }
581 583
582 function CallbackDeliverPending(callback) { 584 function CallbackDeliverPending(callback) {
583 var callbackInfo = GetCallbackInfoMap().get(callback); 585 var callbackInfo = GetCallbackInfoMap().get(callback);
584 if (IS_UNDEFINED(callbackInfo) || IS_NUMBER(callbackInfo)) 586 if (IS_UNDEFINED(callbackInfo) || IS_NUMBER(callbackInfo))
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
630 "observe", ArrayObserve, 632 "observe", ArrayObserve,
631 "unobserve", ArrayUnobserve 633 "unobserve", ArrayUnobserve
632 )); 634 ));
633 InstallFunctions(notifierPrototype, DONT_ENUM, $Array( 635 InstallFunctions(notifierPrototype, DONT_ENUM, $Array(
634 "notify", ObjectNotifierNotify, 636 "notify", ObjectNotifierNotify,
635 "performChange", ObjectNotifierPerformChange 637 "performChange", ObjectNotifierPerformChange
636 )); 638 ));
637 } 639 }
638 640
639 SetupObjectObserve(); 641 SetupObjectObserve();
OLDNEW
« no previous file with comments | « no previous file | src/runtime.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698