OLD | NEW |
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 $observeNotifyChange; | 5 var $observeNotifyChange; |
6 var $observeEnqueueSpliceRecord; | 6 var $observeEnqueueSpliceRecord; |
7 var $observeBeginPerformSplice; | 7 var $observeBeginPerformSplice; |
8 var $observeEndPerformSplice; | 8 var $observeEndPerformSplice; |
9 var $observeNativeObjectObserve; | 9 var $observeNativeObjectObserve; |
10 var $observeNativeObjectGetNotifier; | 10 var $observeNativeObjectGetNotifier; |
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
308 function ObjectInfoGetPerformingTypes(objectInfo) { | 308 function ObjectInfoGetPerformingTypes(objectInfo) { |
309 return objectInfo.performingCount > 0 ? objectInfo.performing : null; | 309 return objectInfo.performingCount > 0 ? objectInfo.performing : null; |
310 } | 310 } |
311 | 311 |
312 | 312 |
313 function ConvertAcceptListToTypeMap(arg) { | 313 function ConvertAcceptListToTypeMap(arg) { |
314 // We use undefined as a sentinel for the default accept list. | 314 // We use undefined as a sentinel for the default accept list. |
315 if (IS_UNDEFINED(arg)) | 315 if (IS_UNDEFINED(arg)) |
316 return arg; | 316 return arg; |
317 | 317 |
318 if (!IS_SPEC_OBJECT(arg)) | 318 if (!IS_SPEC_OBJECT(arg)) throw MakeTypeError(kObserveInvalidAccept); |
319 throw MakeTypeError("observe_invalid_accept"); | |
320 | 319 |
321 var len = ToInteger(arg.length); | 320 var len = ToInteger(arg.length); |
322 if (len < 0) len = 0; | 321 if (len < 0) len = 0; |
323 | 322 |
324 return TypeMapCreateFromList(arg, len); | 323 return TypeMapCreateFromList(arg, len); |
325 } | 324 } |
326 | 325 |
327 | 326 |
328 // CallbackInfo's optimized state is just a number which represents its global | 327 // CallbackInfo's optimized state is just a number which represents its global |
329 // priority. When a change record must be enqueued for the callback, it | 328 // priority. When a change record must be enqueued for the callback, it |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
365 callbackInfo = new InternalArray; | 364 callbackInfo = new InternalArray; |
366 callbackInfo.priority = priority; | 365 callbackInfo.priority = priority; |
367 CallbackInfoSet(callback, callbackInfo); | 366 CallbackInfoSet(callback, callbackInfo); |
368 } | 367 } |
369 return callbackInfo; | 368 return callbackInfo; |
370 } | 369 } |
371 | 370 |
372 | 371 |
373 function ObjectObserve(object, callback, acceptList) { | 372 function ObjectObserve(object, callback, acceptList) { |
374 if (!IS_SPEC_OBJECT(object)) | 373 if (!IS_SPEC_OBJECT(object)) |
375 throw MakeTypeError("observe_non_object", ["observe"]); | 374 throw MakeTypeError(kObserveNonObject, "observe", "observe"); |
376 if (%IsJSGlobalProxy(object)) | 375 if (%IsJSGlobalProxy(object)) |
377 throw MakeTypeError("observe_global_proxy", ["observe"]); | 376 throw MakeTypeError(kObserveGlobalProxy, "observe"); |
378 if (!IS_SPEC_FUNCTION(callback)) | 377 if (!IS_SPEC_FUNCTION(callback)) |
379 throw MakeTypeError("observe_non_function", ["observe"]); | 378 throw MakeTypeError(kObserveNonFunction, "observe"); |
380 if (ObjectIsFrozen(callback)) | 379 if (ObjectIsFrozen(callback)) |
381 throw MakeTypeError("observe_callback_frozen"); | 380 throw MakeTypeError(kObserveCallbackFrozen); |
382 | 381 |
383 var objectObserveFn = %GetObjectContextObjectObserve(object); | 382 var objectObserveFn = %GetObjectContextObjectObserve(object); |
384 return objectObserveFn(object, callback, acceptList); | 383 return objectObserveFn(object, callback, acceptList); |
385 } | 384 } |
386 | 385 |
387 | 386 |
388 function NativeObjectObserve(object, callback, acceptList) { | 387 function NativeObjectObserve(object, callback, acceptList) { |
389 var objectInfo = ObjectInfoGetOrCreate(object); | 388 var objectInfo = ObjectInfoGetOrCreate(object); |
390 var typeList = ConvertAcceptListToTypeMap(acceptList); | 389 var typeList = ConvertAcceptListToTypeMap(acceptList); |
391 ObjectInfoAddObserver(objectInfo, callback, typeList); | 390 ObjectInfoAddObserver(objectInfo, callback, typeList); |
392 return object; | 391 return object; |
393 } | 392 } |
394 | 393 |
395 | 394 |
396 function ObjectUnobserve(object, callback) { | 395 function ObjectUnobserve(object, callback) { |
397 if (!IS_SPEC_OBJECT(object)) | 396 if (!IS_SPEC_OBJECT(object)) |
398 throw MakeTypeError("observe_non_object", ["unobserve"]); | 397 throw MakeTypeError(kObserveNonObject, "unobserve", "unobserve"); |
399 if (%IsJSGlobalProxy(object)) | 398 if (%IsJSGlobalProxy(object)) |
400 throw MakeTypeError("observe_global_proxy", ["unobserve"]); | 399 throw MakeTypeError(kObserveGlobalProxy, "unobserve"); |
401 if (!IS_SPEC_FUNCTION(callback)) | 400 if (!IS_SPEC_FUNCTION(callback)) |
402 throw MakeTypeError("observe_non_function", ["unobserve"]); | 401 throw MakeTypeError(kObserveNonFunction, "unobserve"); |
403 | 402 |
404 var objectInfo = ObjectInfoGet(object); | 403 var objectInfo = ObjectInfoGet(object); |
405 if (IS_UNDEFINED(objectInfo)) | 404 if (IS_UNDEFINED(objectInfo)) |
406 return object; | 405 return object; |
407 | 406 |
408 ObjectInfoRemoveObserver(objectInfo, callback); | 407 ObjectInfoRemoveObserver(objectInfo, callback); |
409 return object; | 408 return object; |
410 } | 409 } |
411 | 410 |
412 | 411 |
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
551 ObjectInfoEnqueueInternalChangeRecord(objectInfo, changeRecord); | 550 ObjectInfoEnqueueInternalChangeRecord(objectInfo, changeRecord); |
552 } | 551 } |
553 | 552 |
554 | 553 |
555 function ObjectNotifierNotify(changeRecord) { | 554 function ObjectNotifierNotify(changeRecord) { |
556 if (!IS_SPEC_OBJECT(this)) | 555 if (!IS_SPEC_OBJECT(this)) |
557 throw MakeTypeError(kCalledOnNonObject, "notify"); | 556 throw MakeTypeError(kCalledOnNonObject, "notify"); |
558 | 557 |
559 var objectInfo = ObjectInfoGetFromNotifier(this); | 558 var objectInfo = ObjectInfoGetFromNotifier(this); |
560 if (IS_UNDEFINED(objectInfo)) | 559 if (IS_UNDEFINED(objectInfo)) |
561 throw MakeTypeError("observe_notify_non_notifier"); | 560 throw MakeTypeError(kObserveNotifyNonNotifier); |
562 if (!IS_STRING(changeRecord.type)) | 561 if (!IS_STRING(changeRecord.type)) |
563 throw MakeTypeError("observe_type_non_string"); | 562 throw MakeTypeError(kObserveTypeNonString); |
564 | 563 |
565 ObjectInfoEnqueueExternalChangeRecord(objectInfo, changeRecord); | 564 ObjectInfoEnqueueExternalChangeRecord(objectInfo, changeRecord); |
566 } | 565 } |
567 | 566 |
568 | 567 |
569 function ObjectNotifierPerformChange(changeType, changeFn) { | 568 function ObjectNotifierPerformChange(changeType, changeFn) { |
570 if (!IS_SPEC_OBJECT(this)) | 569 if (!IS_SPEC_OBJECT(this)) |
571 throw MakeTypeError(kCalledOnNonObject, "performChange"); | 570 throw MakeTypeError(kCalledOnNonObject, "performChange"); |
572 | 571 |
573 var objectInfo = ObjectInfoGetFromNotifier(this); | 572 var objectInfo = ObjectInfoGetFromNotifier(this); |
574 if (IS_UNDEFINED(objectInfo)) | 573 if (IS_UNDEFINED(objectInfo)) |
575 throw MakeTypeError("observe_notify_non_notifier"); | 574 throw MakeTypeError(kObserveNotifyNonNotifier); |
576 if (!IS_STRING(changeType)) | 575 if (!IS_STRING(changeType)) |
577 throw MakeTypeError("observe_perform_non_string"); | 576 throw MakeTypeError(kObservePerformNonString); |
578 if (!IS_SPEC_FUNCTION(changeFn)) | 577 if (!IS_SPEC_FUNCTION(changeFn)) |
579 throw MakeTypeError("observe_perform_non_function"); | 578 throw MakeTypeError(kObservePerformNonFunction); |
580 | 579 |
581 var performChangeFn = %GetObjectContextNotifierPerformChange(objectInfo); | 580 var performChangeFn = %GetObjectContextNotifierPerformChange(objectInfo); |
582 performChangeFn(objectInfo, changeType, changeFn); | 581 performChangeFn(objectInfo, changeType, changeFn); |
583 } | 582 } |
584 | 583 |
585 | 584 |
586 function NativeObjectNotifierPerformChange(objectInfo, changeType, changeFn) { | 585 function NativeObjectNotifierPerformChange(objectInfo, changeType, changeFn) { |
587 ObjectInfoAddPerformingType(objectInfo, changeType); | 586 ObjectInfoAddPerformingType(objectInfo, changeType); |
588 | 587 |
589 var changeRecord; | 588 var changeRecord; |
590 try { | 589 try { |
591 changeRecord = %_CallFunction(UNDEFINED, changeFn); | 590 changeRecord = %_CallFunction(UNDEFINED, changeFn); |
592 } finally { | 591 } finally { |
593 ObjectInfoRemovePerformingType(objectInfo, changeType); | 592 ObjectInfoRemovePerformingType(objectInfo, changeType); |
594 } | 593 } |
595 | 594 |
596 if (IS_SPEC_OBJECT(changeRecord)) | 595 if (IS_SPEC_OBJECT(changeRecord)) |
597 ObjectInfoEnqueueExternalChangeRecord(objectInfo, changeRecord, changeType); | 596 ObjectInfoEnqueueExternalChangeRecord(objectInfo, changeRecord, changeType); |
598 } | 597 } |
599 | 598 |
600 | 599 |
601 function ObjectGetNotifier(object) { | 600 function ObjectGetNotifier(object) { |
602 if (!IS_SPEC_OBJECT(object)) | 601 if (!IS_SPEC_OBJECT(object)) |
603 throw MakeTypeError("observe_non_object", ["getNotifier"]); | 602 throw MakeTypeError(kObserveNonObject, "getNotifier", "getNotifier"); |
604 if (%IsJSGlobalProxy(object)) | 603 if (%IsJSGlobalProxy(object)) |
605 throw MakeTypeError("observe_global_proxy", ["getNotifier"]); | 604 throw MakeTypeError(kObserveGlobalProxy, "getNotifier"); |
606 | 605 |
607 if (ObjectIsFrozen(object)) return null; | 606 if (ObjectIsFrozen(object)) return null; |
608 | 607 |
609 if (!%ObjectWasCreatedInCurrentOrigin(object)) return null; | 608 if (!%ObjectWasCreatedInCurrentOrigin(object)) return null; |
610 | 609 |
611 var getNotifierFn = %GetObjectContextObjectGetNotifier(object); | 610 var getNotifierFn = %GetObjectContextObjectGetNotifier(object); |
612 return getNotifierFn(object); | 611 return getNotifierFn(object); |
613 } | 612 } |
614 | 613 |
615 | 614 |
(...skipping 21 matching lines...) Expand all Loading... |
637 var delivered = []; | 636 var delivered = []; |
638 %MoveArrayContents(callbackInfo, delivered); | 637 %MoveArrayContents(callbackInfo, delivered); |
639 %DeliverObservationChangeRecords(callback, delivered); | 638 %DeliverObservationChangeRecords(callback, delivered); |
640 | 639 |
641 return true; | 640 return true; |
642 } | 641 } |
643 | 642 |
644 | 643 |
645 function ObjectDeliverChangeRecords(callback) { | 644 function ObjectDeliverChangeRecords(callback) { |
646 if (!IS_SPEC_FUNCTION(callback)) | 645 if (!IS_SPEC_FUNCTION(callback)) |
647 throw MakeTypeError("observe_non_function", ["deliverChangeRecords"]); | 646 throw MakeTypeError(kObserveNonFunction, "deliverChangeRecords"); |
648 | 647 |
649 while (CallbackDeliverPending(callback)) {} | 648 while (CallbackDeliverPending(callback)) {} |
650 } | 649 } |
651 | 650 |
652 | 651 |
653 function ObserveMicrotaskRunner() { | 652 function ObserveMicrotaskRunner() { |
654 var pendingObservers = GetPendingObservers(); | 653 var pendingObservers = GetPendingObservers(); |
655 if (!IS_NULL(pendingObservers)) { | 654 if (!IS_NULL(pendingObservers)) { |
656 SetPendingObservers(null); | 655 SetPendingObservers(null); |
657 for (var i in pendingObservers) { | 656 for (var i in pendingObservers) { |
(...skipping 21 matching lines...) Expand all Loading... |
679 | 678 |
680 $observeNotifyChange = NotifyChange; | 679 $observeNotifyChange = NotifyChange; |
681 $observeEnqueueSpliceRecord = EnqueueSpliceRecord; | 680 $observeEnqueueSpliceRecord = EnqueueSpliceRecord; |
682 $observeBeginPerformSplice = BeginPerformSplice; | 681 $observeBeginPerformSplice = BeginPerformSplice; |
683 $observeEndPerformSplice = EndPerformSplice; | 682 $observeEndPerformSplice = EndPerformSplice; |
684 $observeNativeObjectObserve = NativeObjectObserve; | 683 $observeNativeObjectObserve = NativeObjectObserve; |
685 $observeNativeObjectGetNotifier = NativeObjectGetNotifier; | 684 $observeNativeObjectGetNotifier = NativeObjectGetNotifier; |
686 $observeNativeObjectNotifierPerformChange = NativeObjectNotifierPerformChange; | 685 $observeNativeObjectNotifierPerformChange = NativeObjectNotifierPerformChange; |
687 | 686 |
688 })(); | 687 })(); |
OLD | NEW |