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

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

Issue 1316933002: [es6] Initial steps towards a correct implementation of IsCallable. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Rebase again. Created 5 years, 3 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
« no previous file with comments | « src/mips64/lithium-codegen-mips64.cc ('k') | src/objects.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 var $observeEnqueueSpliceRecord; 5 var $observeEnqueueSpliceRecord;
6 var $observeBeginPerformSplice; 6 var $observeBeginPerformSplice;
7 var $observeEndPerformSplice; 7 var $observeEndPerformSplice;
8 8
9 var $observeObjectMethods; 9 var $observeObjectMethods;
10 var $observeArrayMethods; 10 var $observeArrayMethods;
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 if (IS_UNDEFINED(acceptList)) 171 if (IS_UNDEFINED(acceptList))
172 return callback; 172 return callback;
173 var observer = nullProtoObject(); 173 var observer = nullProtoObject();
174 observer.callback = callback; 174 observer.callback = callback;
175 observer.accept = acceptList; 175 observer.accept = acceptList;
176 return observer; 176 return observer;
177 } 177 }
178 178
179 179
180 function ObserverGetCallback(observer) { 180 function ObserverGetCallback(observer) {
181 return IS_SPEC_FUNCTION(observer) ? observer : observer.callback; 181 return IS_CALLABLE(observer) ? observer : observer.callback;
182 } 182 }
183 183
184 184
185 function ObserverGetAcceptTypes(observer) { 185 function ObserverGetAcceptTypes(observer) {
186 return IS_SPEC_FUNCTION(observer) ? defaultAcceptTypes : observer.accept; 186 return IS_CALLABLE(observer) ? defaultAcceptTypes : observer.accept;
187 } 187 }
188 188
189 189
190 function ObserverIsActive(observer, objectInfo) { 190 function ObserverIsActive(observer, objectInfo) {
191 return TypeMapIsDisjointFrom(ObjectInfoGetPerformingTypes(objectInfo), 191 return TypeMapIsDisjointFrom(ObjectInfoGetPerformingTypes(objectInfo),
192 ObserverGetAcceptTypes(observer)); 192 ObserverGetAcceptTypes(observer));
193 } 193 }
194 194
195 195
196 function ObjectInfoGetOrCreate(object) { 196 function ObjectInfoGetOrCreate(object) {
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
231 objectInfo.notifier = notifier; 231 objectInfo.notifier = notifier;
232 %WeakCollectionSet(GetObservationStateJS().notifierObjectInfoMap, 232 %WeakCollectionSet(GetObservationStateJS().notifierObjectInfoMap,
233 notifier, objectInfo, $getHash(notifier)); 233 notifier, objectInfo, $getHash(notifier));
234 } 234 }
235 235
236 return objectInfo.notifier; 236 return objectInfo.notifier;
237 } 237 }
238 238
239 239
240 function ChangeObserversIsOptimized(changeObservers) { 240 function ChangeObserversIsOptimized(changeObservers) {
241 return IS_SPEC_FUNCTION(changeObservers) || 241 return IS_CALLABLE(changeObservers) ||
242 IS_SPEC_FUNCTION(changeObservers.callback); 242 IS_CALLABLE(changeObservers.callback);
243 } 243 }
244 244
245 245
246 // The set of observers on an object is called 'changeObservers'. The first 246 // The set of observers on an object is called 'changeObservers'. The first
247 // observer is referenced directly via objectInfo.changeObservers. When a second 247 // observer is referenced directly via objectInfo.changeObservers. When a second
248 // is added, changeObservers "normalizes" to become a mapping of callback 248 // is added, changeObservers "normalizes" to become a mapping of callback
249 // priority -> observer and is then stored on objectInfo.changeObservers. 249 // priority -> observer and is then stored on objectInfo.changeObservers.
250 function ObjectInfoNormalizeChangeObservers(objectInfo) { 250 function ObjectInfoNormalizeChangeObservers(objectInfo) {
251 if (ChangeObserversIsOptimized(objectInfo.changeObservers)) { 251 if (ChangeObserversIsOptimized(objectInfo.changeObservers)) {
252 var observer = objectInfo.changeObservers; 252 var observer = objectInfo.changeObservers;
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
381 } 381 }
382 return callbackInfo; 382 return callbackInfo;
383 } 383 }
384 384
385 385
386 function ObjectObserve(object, callback, acceptList) { 386 function ObjectObserve(object, callback, acceptList) {
387 if (!IS_SPEC_OBJECT(object)) 387 if (!IS_SPEC_OBJECT(object))
388 throw MakeTypeError(kObserveNonObject, "observe", "observe"); 388 throw MakeTypeError(kObserveNonObject, "observe", "observe");
389 if (%IsJSGlobalProxy(object)) 389 if (%IsJSGlobalProxy(object))
390 throw MakeTypeError(kObserveGlobalProxy, "observe"); 390 throw MakeTypeError(kObserveGlobalProxy, "observe");
391 if (!IS_SPEC_FUNCTION(callback)) 391 if (!IS_CALLABLE(callback))
392 throw MakeTypeError(kObserveNonFunction, "observe"); 392 throw MakeTypeError(kObserveNonFunction, "observe");
393 if (ObjectIsFrozen(callback)) 393 if (ObjectIsFrozen(callback))
394 throw MakeTypeError(kObserveCallbackFrozen); 394 throw MakeTypeError(kObserveCallbackFrozen);
395 395
396 var objectObserveFn = %GetObjectContextObjectObserve(object); 396 var objectObserveFn = %GetObjectContextObjectObserve(object);
397 return objectObserveFn(object, callback, acceptList); 397 return objectObserveFn(object, callback, acceptList);
398 } 398 }
399 399
400 400
401 function NativeObjectObserve(object, callback, acceptList) { 401 function NativeObjectObserve(object, callback, acceptList) {
402 var objectInfo = ObjectInfoGetOrCreate(object); 402 var objectInfo = ObjectInfoGetOrCreate(object);
403 var typeList = ConvertAcceptListToTypeMap(acceptList); 403 var typeList = ConvertAcceptListToTypeMap(acceptList);
404 ObjectInfoAddObserver(objectInfo, callback, typeList); 404 ObjectInfoAddObserver(objectInfo, callback, typeList);
405 return object; 405 return object;
406 } 406 }
407 407
408 408
409 function ObjectUnobserve(object, callback) { 409 function ObjectUnobserve(object, callback) {
410 if (!IS_SPEC_OBJECT(object)) 410 if (!IS_SPEC_OBJECT(object))
411 throw MakeTypeError(kObserveNonObject, "unobserve", "unobserve"); 411 throw MakeTypeError(kObserveNonObject, "unobserve", "unobserve");
412 if (%IsJSGlobalProxy(object)) 412 if (%IsJSGlobalProxy(object))
413 throw MakeTypeError(kObserveGlobalProxy, "unobserve"); 413 throw MakeTypeError(kObserveGlobalProxy, "unobserve");
414 if (!IS_SPEC_FUNCTION(callback)) 414 if (!IS_CALLABLE(callback))
415 throw MakeTypeError(kObserveNonFunction, "unobserve"); 415 throw MakeTypeError(kObserveNonFunction, "unobserve");
416 416
417 var objectInfo = ObjectInfoGet(object); 417 var objectInfo = ObjectInfoGet(object);
418 if (IS_UNDEFINED(objectInfo)) 418 if (IS_UNDEFINED(objectInfo))
419 return object; 419 return object;
420 420
421 ObjectInfoRemoveObserver(objectInfo, callback); 421 ObjectInfoRemoveObserver(objectInfo, callback);
422 return object; 422 return object;
423 } 423 }
424 424
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
581 581
582 function ObjectNotifierPerformChange(changeType, changeFn) { 582 function ObjectNotifierPerformChange(changeType, changeFn) {
583 if (!IS_SPEC_OBJECT(this)) 583 if (!IS_SPEC_OBJECT(this))
584 throw MakeTypeError(kCalledOnNonObject, "performChange"); 584 throw MakeTypeError(kCalledOnNonObject, "performChange");
585 585
586 var objectInfo = ObjectInfoGetFromNotifier(this); 586 var objectInfo = ObjectInfoGetFromNotifier(this);
587 if (IS_UNDEFINED(objectInfo)) 587 if (IS_UNDEFINED(objectInfo))
588 throw MakeTypeError(kObserveNotifyNonNotifier); 588 throw MakeTypeError(kObserveNotifyNonNotifier);
589 if (!IS_STRING(changeType)) 589 if (!IS_STRING(changeType))
590 throw MakeTypeError(kObservePerformNonString); 590 throw MakeTypeError(kObservePerformNonString);
591 if (!IS_SPEC_FUNCTION(changeFn)) 591 if (!IS_CALLABLE(changeFn))
592 throw MakeTypeError(kObservePerformNonFunction); 592 throw MakeTypeError(kObservePerformNonFunction);
593 593
594 var performChangeFn = %GetObjectContextNotifierPerformChange(objectInfo); 594 var performChangeFn = %GetObjectContextNotifierPerformChange(objectInfo);
595 performChangeFn(objectInfo, changeType, changeFn); 595 performChangeFn(objectInfo, changeType, changeFn);
596 } 596 }
597 597
598 598
599 function NativeObjectNotifierPerformChange(objectInfo, changeType, changeFn) { 599 function NativeObjectNotifierPerformChange(objectInfo, changeType, changeFn) {
600 ObjectInfoAddPerformingType(objectInfo, changeType); 600 ObjectInfoAddPerformingType(objectInfo, changeType);
601 601
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
649 // TODO: combine the following runtime calls for perf optimization. 649 // TODO: combine the following runtime calls for perf optimization.
650 var delivered = []; 650 var delivered = [];
651 %MoveArrayContents(callbackInfo, delivered); 651 %MoveArrayContents(callbackInfo, delivered);
652 %DeliverObservationChangeRecords(callback, delivered); 652 %DeliverObservationChangeRecords(callback, delivered);
653 653
654 return true; 654 return true;
655 } 655 }
656 656
657 657
658 function ObjectDeliverChangeRecords(callback) { 658 function ObjectDeliverChangeRecords(callback) {
659 if (!IS_SPEC_FUNCTION(callback)) 659 if (!IS_CALLABLE(callback))
660 throw MakeTypeError(kObserveNonFunction, "deliverChangeRecords"); 660 throw MakeTypeError(kObserveNonFunction, "deliverChangeRecords");
661 661
662 while (CallbackDeliverPending(callback)) {} 662 while (CallbackDeliverPending(callback)) {}
663 } 663 }
664 664
665 665
666 function ObserveMicrotaskRunner() { 666 function ObserveMicrotaskRunner() {
667 var pendingObservers = GetPendingObservers(); 667 var pendingObservers = GetPendingObservers();
668 if (!IS_NULL(pendingObservers)) { 668 if (!IS_NULL(pendingObservers)) {
669 SetPendingObservers(null); 669 SetPendingObservers(null);
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
707 "native_object_get_notifier", NativeObjectGetNotifier, 707 "native_object_get_notifier", NativeObjectGetNotifier,
708 "native_object_notifier_perform_change", NativeObjectNotifierPerformChange, 708 "native_object_notifier_perform_change", NativeObjectNotifierPerformChange,
709 "native_object_observe", NativeObjectObserve, 709 "native_object_observe", NativeObjectObserve,
710 "observers_begin_perform_splice", BeginPerformSplice, 710 "observers_begin_perform_splice", BeginPerformSplice,
711 "observers_end_perform_splice", EndPerformSplice, 711 "observers_end_perform_splice", EndPerformSplice,
712 "observers_enqueue_splice", EnqueueSpliceRecord, 712 "observers_enqueue_splice", EnqueueSpliceRecord,
713 "observers_notify_change", NotifyChange, 713 "observers_notify_change", NotifyChange,
714 ]); 714 ]);
715 715
716 }) 716 })
OLDNEW
« no previous file with comments | « src/mips64/lithium-codegen-mips64.cc ('k') | src/objects.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698