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 (function(global, utils) { | 5 (function(global, utils) { |
6 | 6 |
7 "use strict"; | 7 "use strict"; |
8 | 8 |
9 %CheckIsBootstrapping(); | 9 %CheckIsBootstrapping(); |
10 | 10 |
(...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
317 function ObjectInfoGetPerformingTypes(objectInfo) { | 317 function ObjectInfoGetPerformingTypes(objectInfo) { |
318 return objectInfo.performingCount > 0 ? objectInfo.performing : null; | 318 return objectInfo.performingCount > 0 ? objectInfo.performing : null; |
319 } | 319 } |
320 | 320 |
321 | 321 |
322 function ConvertAcceptListToTypeMap(arg) { | 322 function ConvertAcceptListToTypeMap(arg) { |
323 // We use undefined as a sentinel for the default accept list. | 323 // We use undefined as a sentinel for the default accept list. |
324 if (IS_UNDEFINED(arg)) | 324 if (IS_UNDEFINED(arg)) |
325 return arg; | 325 return arg; |
326 | 326 |
327 if (!IS_SPEC_OBJECT(arg)) throw MakeTypeError(kObserveInvalidAccept); | 327 if (!IS_RECEIVER(arg)) throw MakeTypeError(kObserveInvalidAccept); |
328 | 328 |
329 var len = TO_INTEGER(arg.length); | 329 var len = TO_INTEGER(arg.length); |
330 if (len < 0) len = 0; | 330 if (len < 0) len = 0; |
331 | 331 |
332 return TypeMapCreateFromList(arg, len); | 332 return TypeMapCreateFromList(arg, len); |
333 } | 333 } |
334 | 334 |
335 | 335 |
336 // CallbackInfo's optimized state is just a number which represents its global | 336 // CallbackInfo's optimized state is just a number which represents its global |
337 // priority. When a change record must be enqueued for the callback, it | 337 // 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... |
373 var priority = callbackInfo; | 373 var priority = callbackInfo; |
374 callbackInfo = new InternalArray; | 374 callbackInfo = new InternalArray; |
375 callbackInfo.priority = priority; | 375 callbackInfo.priority = priority; |
376 CallbackInfoSet(callback, callbackInfo); | 376 CallbackInfoSet(callback, callbackInfo); |
377 } | 377 } |
378 return callbackInfo; | 378 return callbackInfo; |
379 } | 379 } |
380 | 380 |
381 | 381 |
382 function ObjectObserve(object, callback, acceptList) { | 382 function ObjectObserve(object, callback, acceptList) { |
383 if (!IS_SPEC_OBJECT(object)) | 383 if (!IS_RECEIVER(object)) |
384 throw MakeTypeError(kObserveNonObject, "observe", "observe"); | 384 throw MakeTypeError(kObserveNonObject, "observe", "observe"); |
385 if (%IsJSGlobalProxy(object)) | 385 if (%IsJSGlobalProxy(object)) |
386 throw MakeTypeError(kObserveGlobalProxy, "observe"); | 386 throw MakeTypeError(kObserveGlobalProxy, "observe"); |
387 if (%IsAccessCheckNeeded(object)) | 387 if (%IsAccessCheckNeeded(object)) |
388 throw MakeTypeError(kObserveAccessChecked, "observe"); | 388 throw MakeTypeError(kObserveAccessChecked, "observe"); |
389 if (!IS_CALLABLE(callback)) | 389 if (!IS_CALLABLE(callback)) |
390 throw MakeTypeError(kObserveNonFunction, "observe"); | 390 throw MakeTypeError(kObserveNonFunction, "observe"); |
391 if (ObjectIsFrozen(callback)) | 391 if (ObjectIsFrozen(callback)) |
392 throw MakeTypeError(kObserveCallbackFrozen); | 392 throw MakeTypeError(kObserveCallbackFrozen); |
393 | 393 |
394 var objectObserveFn = %GetObjectContextObjectObserve(object); | 394 var objectObserveFn = %GetObjectContextObjectObserve(object); |
395 return objectObserveFn(object, callback, acceptList); | 395 return objectObserveFn(object, callback, acceptList); |
396 } | 396 } |
397 | 397 |
398 | 398 |
399 function NativeObjectObserve(object, callback, acceptList) { | 399 function NativeObjectObserve(object, callback, acceptList) { |
400 var objectInfo = ObjectInfoGetOrCreate(object); | 400 var objectInfo = ObjectInfoGetOrCreate(object); |
401 var typeList = ConvertAcceptListToTypeMap(acceptList); | 401 var typeList = ConvertAcceptListToTypeMap(acceptList); |
402 ObjectInfoAddObserver(objectInfo, callback, typeList); | 402 ObjectInfoAddObserver(objectInfo, callback, typeList); |
403 return object; | 403 return object; |
404 } | 404 } |
405 | 405 |
406 | 406 |
407 function ObjectUnobserve(object, callback) { | 407 function ObjectUnobserve(object, callback) { |
408 if (!IS_SPEC_OBJECT(object)) | 408 if (!IS_RECEIVER(object)) |
409 throw MakeTypeError(kObserveNonObject, "unobserve", "unobserve"); | 409 throw MakeTypeError(kObserveNonObject, "unobserve", "unobserve"); |
410 if (%IsJSGlobalProxy(object)) | 410 if (%IsJSGlobalProxy(object)) |
411 throw MakeTypeError(kObserveGlobalProxy, "unobserve"); | 411 throw MakeTypeError(kObserveGlobalProxy, "unobserve"); |
412 if (!IS_CALLABLE(callback)) | 412 if (!IS_CALLABLE(callback)) |
413 throw MakeTypeError(kObserveNonFunction, "unobserve"); | 413 throw MakeTypeError(kObserveNonFunction, "unobserve"); |
414 | 414 |
415 var objectInfo = ObjectInfoGet(object); | 415 var objectInfo = ObjectInfoGet(object); |
416 if (IS_UNDEFINED(objectInfo)) | 416 if (IS_UNDEFINED(objectInfo)) |
417 return object; | 417 return object; |
418 | 418 |
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
557 oldValue: oldValue | 557 oldValue: oldValue |
558 }; | 558 }; |
559 } | 559 } |
560 | 560 |
561 ObjectFreeze(changeRecord); | 561 ObjectFreeze(changeRecord); |
562 ObjectInfoEnqueueInternalChangeRecord(objectInfo, changeRecord); | 562 ObjectInfoEnqueueInternalChangeRecord(objectInfo, changeRecord); |
563 } | 563 } |
564 | 564 |
565 | 565 |
566 function ObjectNotifierNotify(changeRecord) { | 566 function ObjectNotifierNotify(changeRecord) { |
567 if (!IS_SPEC_OBJECT(this)) | 567 if (!IS_RECEIVER(this)) |
568 throw MakeTypeError(kCalledOnNonObject, "notify"); | 568 throw MakeTypeError(kCalledOnNonObject, "notify"); |
569 | 569 |
570 var objectInfo = ObjectInfoGetFromNotifier(this); | 570 var objectInfo = ObjectInfoGetFromNotifier(this); |
571 if (IS_UNDEFINED(objectInfo)) | 571 if (IS_UNDEFINED(objectInfo)) |
572 throw MakeTypeError(kObserveNotifyNonNotifier); | 572 throw MakeTypeError(kObserveNotifyNonNotifier); |
573 if (!IS_STRING(changeRecord.type)) | 573 if (!IS_STRING(changeRecord.type)) |
574 throw MakeTypeError(kObserveTypeNonString); | 574 throw MakeTypeError(kObserveTypeNonString); |
575 | 575 |
576 ObjectInfoEnqueueExternalChangeRecord(objectInfo, changeRecord); | 576 ObjectInfoEnqueueExternalChangeRecord(objectInfo, changeRecord); |
577 } | 577 } |
578 | 578 |
579 | 579 |
580 function ObjectNotifierPerformChange(changeType, changeFn) { | 580 function ObjectNotifierPerformChange(changeType, changeFn) { |
581 if (!IS_SPEC_OBJECT(this)) | 581 if (!IS_RECEIVER(this)) |
582 throw MakeTypeError(kCalledOnNonObject, "performChange"); | 582 throw MakeTypeError(kCalledOnNonObject, "performChange"); |
583 | 583 |
584 var objectInfo = ObjectInfoGetFromNotifier(this); | 584 var objectInfo = ObjectInfoGetFromNotifier(this); |
585 if (IS_UNDEFINED(objectInfo)) | 585 if (IS_UNDEFINED(objectInfo)) |
586 throw MakeTypeError(kObserveNotifyNonNotifier); | 586 throw MakeTypeError(kObserveNotifyNonNotifier); |
587 if (!IS_STRING(changeType)) | 587 if (!IS_STRING(changeType)) |
588 throw MakeTypeError(kObservePerformNonString); | 588 throw MakeTypeError(kObservePerformNonString); |
589 if (!IS_CALLABLE(changeFn)) | 589 if (!IS_CALLABLE(changeFn)) |
590 throw MakeTypeError(kObservePerformNonFunction); | 590 throw MakeTypeError(kObservePerformNonFunction); |
591 | 591 |
592 var performChangeFn = %GetObjectContextNotifierPerformChange(objectInfo); | 592 var performChangeFn = %GetObjectContextNotifierPerformChange(objectInfo); |
593 performChangeFn(objectInfo, changeType, changeFn); | 593 performChangeFn(objectInfo, changeType, changeFn); |
594 } | 594 } |
595 | 595 |
596 | 596 |
597 function NativeObjectNotifierPerformChange(objectInfo, changeType, changeFn) { | 597 function NativeObjectNotifierPerformChange(objectInfo, changeType, changeFn) { |
598 ObjectInfoAddPerformingType(objectInfo, changeType); | 598 ObjectInfoAddPerformingType(objectInfo, changeType); |
599 | 599 |
600 var changeRecord; | 600 var changeRecord; |
601 try { | 601 try { |
602 changeRecord = changeFn(); | 602 changeRecord = changeFn(); |
603 } finally { | 603 } finally { |
604 ObjectInfoRemovePerformingType(objectInfo, changeType); | 604 ObjectInfoRemovePerformingType(objectInfo, changeType); |
605 } | 605 } |
606 | 606 |
607 if (IS_SPEC_OBJECT(changeRecord)) | 607 if (IS_RECEIVER(changeRecord)) |
608 ObjectInfoEnqueueExternalChangeRecord(objectInfo, changeRecord, changeType); | 608 ObjectInfoEnqueueExternalChangeRecord(objectInfo, changeRecord, changeType); |
609 } | 609 } |
610 | 610 |
611 | 611 |
612 function ObjectGetNotifier(object) { | 612 function ObjectGetNotifier(object) { |
613 if (!IS_SPEC_OBJECT(object)) | 613 if (!IS_RECEIVER(object)) |
614 throw MakeTypeError(kObserveNonObject, "getNotifier", "getNotifier"); | 614 throw MakeTypeError(kObserveNonObject, "getNotifier", "getNotifier"); |
615 if (%IsJSGlobalProxy(object)) | 615 if (%IsJSGlobalProxy(object)) |
616 throw MakeTypeError(kObserveGlobalProxy, "getNotifier"); | 616 throw MakeTypeError(kObserveGlobalProxy, "getNotifier"); |
617 if (%IsAccessCheckNeeded(object)) | 617 if (%IsAccessCheckNeeded(object)) |
618 throw MakeTypeError(kObserveAccessChecked, "getNotifier"); | 618 throw MakeTypeError(kObserveAccessChecked, "getNotifier"); |
619 | 619 |
620 if (ObjectIsFrozen(object)) return null; | 620 if (ObjectIsFrozen(object)) return null; |
621 | 621 |
622 if (!%ObjectWasCreatedInCurrentOrigin(object)) return null; | 622 if (!%ObjectWasCreatedInCurrentOrigin(object)) return null; |
623 | 623 |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
712 | 712 |
713 utils.Export(function(to) { | 713 utils.Export(function(to) { |
714 to.ObserveArrayMethods = ObserveArrayMethods; | 714 to.ObserveArrayMethods = ObserveArrayMethods; |
715 to.ObserveBeginPerformSplice = BeginPerformSplice; | 715 to.ObserveBeginPerformSplice = BeginPerformSplice; |
716 to.ObserveEndPerformSplice = EndPerformSplice; | 716 to.ObserveEndPerformSplice = EndPerformSplice; |
717 to.ObserveEnqueueSpliceRecord = EnqueueSpliceRecord; | 717 to.ObserveEnqueueSpliceRecord = EnqueueSpliceRecord; |
718 to.ObserveObjectMethods = ObserveObjectMethods; | 718 to.ObserveObjectMethods = ObserveObjectMethods; |
719 }); | 719 }); |
720 | 720 |
721 }) | 721 }) |
OLD | NEW |