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

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

Issue 64223010: Harmony promises (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years, 1 month 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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 366 matching lines...) Expand 10 before | Expand all | Expand 10 after
377 !%IsAccessAllowedForObserver( 377 !%IsAccessAllowedForObserver(
378 callback, changeRecord.object, changeRecord.name))) { 378 callback, changeRecord.object, changeRecord.name))) {
379 return; 379 return;
380 } 380 }
381 381
382 var callbackInfo = CallbackInfoNormalize(callback); 382 var callbackInfo = CallbackInfoNormalize(callback);
383 if (!observationState.pendingObservers) 383 if (!observationState.pendingObservers)
384 observationState.pendingObservers = { __proto__: null }; 384 observationState.pendingObservers = { __proto__: null };
385 observationState.pendingObservers[callbackInfo.priority] = callback; 385 observationState.pendingObservers[callbackInfo.priority] = callback;
386 callbackInfo.push(changeRecord); 386 callbackInfo.push(changeRecord);
387 %SetObserverDeliveryPending(); 387 %SetMicrotasksPending(true);
rafaelw 2013/11/14 21:08:46 nit: All of these work items are run within a sing
rossberg 2013/11/26 13:23:52 Done.
388 } 388 }
389 389
390 function ObjectInfoEnqueueExternalChangeRecord(objectInfo, changeRecord, type) { 390 function ObjectInfoEnqueueExternalChangeRecord(objectInfo, changeRecord, type) {
391 if (!ObjectInfoHasActiveObservers(objectInfo)) 391 if (!ObjectInfoHasActiveObservers(objectInfo))
392 return; 392 return;
393 393
394 var hasType = !IS_UNDEFINED(type); 394 var hasType = !IS_UNDEFINED(type);
395 var newRecord = hasType ? 395 var newRecord = hasType ?
396 { object: ObjectInfoGetObject(objectInfo), type: type } : 396 { object: ObjectInfoGetObject(objectInfo), type: type } :
397 { object: ObjectInfoGetObject(objectInfo) }; 397 { object: ObjectInfoGetObject(objectInfo) };
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
555 return true; 555 return true;
556 } 556 }
557 557
558 function ObjectDeliverChangeRecords(callback) { 558 function ObjectDeliverChangeRecords(callback) {
559 if (!IS_SPEC_FUNCTION(callback)) 559 if (!IS_SPEC_FUNCTION(callback))
560 throw MakeTypeError("observe_non_function", ["deliverChangeRecords"]); 560 throw MakeTypeError("observe_non_function", ["deliverChangeRecords"]);
561 561
562 while (CallbackDeliverPending(callback)) {} 562 while (CallbackDeliverPending(callback)) {}
563 } 563 }
564 564
565 function DeliverChangeRecords() { 565 function ObserveMicrotasksRunner() {
rafaelw 2013/11/14 21:08:46 nit: along the same lines: ObserveMicrotaskRunner
rossberg 2013/11/26 13:23:52 Done.
566 while (observationState.pendingObservers) { 566 var pendingObservers = observationState.pendingObservers;
567 var pendingObservers = observationState.pendingObservers; 567 if (pendingObservers) {
568 observationState.pendingObservers = null; 568 observationState.pendingObservers = null;
569 for (var i in pendingObservers) { 569 for (var i in pendingObservers) {
570 CallbackDeliverPending(pendingObservers[i]); 570 CallbackDeliverPending(pendingObservers[i]);
571 } 571 }
572 } 572 }
573 } 573 }
574 RunMicrotasks.runners.push(ObserveMicrotasksRunner);
574 575
575 function SetupObjectObserve() { 576 function SetupObjectObserve() {
576 %CheckIsBootstrapping(); 577 %CheckIsBootstrapping();
577 InstallFunctions($Object, DONT_ENUM, $Array( 578 InstallFunctions($Object, DONT_ENUM, $Array(
578 "deliverChangeRecords", ObjectDeliverChangeRecords, 579 "deliverChangeRecords", ObjectDeliverChangeRecords,
579 "getNotifier", ObjectGetNotifier, 580 "getNotifier", ObjectGetNotifier,
580 "observe", ObjectObserve, 581 "observe", ObjectObserve,
581 "unobserve", ObjectUnobserve 582 "unobserve", ObjectUnobserve
582 )); 583 ));
583 InstallFunctions($Array, DONT_ENUM, $Array( 584 InstallFunctions($Array, DONT_ENUM, $Array(
584 "observe", ArrayObserve, 585 "observe", ArrayObserve,
585 "unobserve", ArrayUnobserve 586 "unobserve", ArrayUnobserve
586 )); 587 ));
587 InstallFunctions(notifierPrototype, DONT_ENUM, $Array( 588 InstallFunctions(notifierPrototype, DONT_ENUM, $Array(
588 "notify", ObjectNotifierNotify, 589 "notify", ObjectNotifierNotify,
589 "performChange", ObjectNotifierPerformChange 590 "performChange", ObjectNotifierPerformChange
590 )); 591 ));
591 } 592 }
592 593
593 SetupObjectObserve(); 594 SetupObjectObserve();
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698