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

Side by Side Diff: src/runtime.js

Issue 1319133002: [es6] Implement spec compliant ToName (actually ToPropertyKey). (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@ToPrimitive
Patch Set: 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/macros.py ('k') | src/runtime/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 2006-2008 the V8 project authors. All rights reserved. 1 // Copyright 2006-2008 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 // This files contains runtime support implemented in JavaScript. 5 // This files contains runtime support implemented in JavaScript.
6 6
7 // CAUTION: Some of the functions specified in this file are called 7 // CAUTION: Some of the functions specified in this file are called
8 // directly from compiled code. These are the functions with names in 8 // directly from compiled code. These are the functions with names in
9 // ALL CAPS. The compiled code passes the first argument in 'this'. 9 // ALL CAPS. The compiled code passes the first argument in 'this'.
10 10
11 11
12 // The following declarations are shared with other native JS files. 12 // The following declarations are shared with other native JS files.
13 // They are all declared at this one spot to avoid redeclaration errors. 13 // They are all declared at this one spot to avoid redeclaration errors.
14 var $defaultString; 14 var $defaultString;
15 var $NaN; 15 var $NaN;
16 var $nonNumberToNumber; 16 var $nonNumberToNumber;
17 var $nonStringToString; 17 var $nonStringToString;
18 var $sameValue; 18 var $sameValue;
19 var $sameValueZero; 19 var $sameValueZero;
20 var $toInteger; 20 var $toInteger;
21 var $toLength; 21 var $toLength;
22 var $toName;
23 var $toNumber; 22 var $toNumber;
24 var $toPositiveInteger; 23 var $toPositiveInteger;
25 var $toPrimitive; 24 var $toPrimitive;
26 var $toString; 25 var $toString;
27 26
28 (function(global, utils) { 27 (function(global, utils) {
29 28
30 %CheckIsBootstrapping(); 29 %CheckIsBootstrapping();
31 30
32 var GlobalArray = global.Array; 31 var GlobalArray = global.Array;
(...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after
427 function IN(x) { 426 function IN(x) {
428 if (!IS_SPEC_OBJECT(x)) { 427 if (!IS_SPEC_OBJECT(x)) {
429 throw %make_type_error(kInvalidInOperatorUse, this, x); 428 throw %make_type_error(kInvalidInOperatorUse, this, x);
430 } 429 }
431 if (%_IsNonNegativeSmi(this)) { 430 if (%_IsNonNegativeSmi(this)) {
432 if (IS_ARRAY(x) && %_HasFastPackedElements(x)) { 431 if (IS_ARRAY(x) && %_HasFastPackedElements(x)) {
433 return this < x.length; 432 return this < x.length;
434 } 433 }
435 return %HasElement(x, this); 434 return %HasElement(x, this);
436 } 435 }
437 return %HasProperty(x, %to_name(this)); 436 return %HasProperty(x, this);
438 } 437 }
439 438
440 439
441 function CALL_NON_FUNCTION() { 440 function CALL_NON_FUNCTION() {
442 var delegate = %GetFunctionDelegate(this); 441 var delegate = %GetFunctionDelegate(this);
443 if (!IS_FUNCTION(delegate)) { 442 if (!IS_FUNCTION(delegate)) {
444 var callsite = %RenderCallSite(); 443 var callsite = %RenderCallSite();
445 if (callsite == "") callsite = typeof this; 444 if (callsite == "") callsite = typeof this;
446 throw %make_type_error(kCalledNonCallable, callsite); 445 throw %make_type_error(kCalledNonCallable, callsite);
447 } 446 }
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
609 return %to_number_fun(this); 608 return %to_number_fun(this);
610 } 609 }
611 610
612 611
613 // Convert the receiver to a string - forward to ToString. 612 // Convert the receiver to a string - forward to ToString.
614 function TO_STRING() { 613 function TO_STRING() {
615 return %to_string_fun(this); 614 return %to_string_fun(this);
616 } 615 }
617 616
618 617
619 // Convert the receiver to a string or symbol - forward to ToName.
620 function TO_NAME() {
621 return %to_name(this);
622 }
623
624
625 /* ------------------------------------- 618 /* -------------------------------------
626 - - - C o n v e r s i o n s - - - 619 - - - C o n v e r s i o n s - - -
627 ------------------------------------- 620 -------------------------------------
628 */ 621 */
629 622
630 // ECMA-262, section 9.1, page 30. Use null/undefined for no hint, 623 // ECMA-262, section 9.1, page 30. Use null/undefined for no hint,
631 // (1) for number hint, and (2) for string hint. 624 // (1) for number hint, and (2) for string hint.
632 function ToPrimitive(x, hint) { 625 function ToPrimitive(x, hint) {
633 if (!IS_SPEC_OBJECT(x)) return x; 626 if (!IS_SPEC_OBJECT(x)) return x;
634 if (hint == NO_HINT) hint = (IS_DATE(x)) ? STRING_HINT : NUMBER_HINT; 627 if (hint == NO_HINT) hint = (IS_DATE(x)) ? STRING_HINT : NUMBER_HINT;
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
683 676
684 function NonStringToString(x) { 677 function NonStringToString(x) {
685 if (IS_NUMBER(x)) return %_NumberToString(x); 678 if (IS_NUMBER(x)) return %_NumberToString(x);
686 if (IS_BOOLEAN(x)) return x ? 'true' : 'false'; 679 if (IS_BOOLEAN(x)) return x ? 'true' : 'false';
687 if (IS_UNDEFINED(x)) return 'undefined'; 680 if (IS_UNDEFINED(x)) return 'undefined';
688 // Types that can't be converted to string are caught in DefaultString. 681 // Types that can't be converted to string are caught in DefaultString.
689 return (IS_NULL(x)) ? 'null' : ToString(DefaultString(x)); 682 return (IS_NULL(x)) ? 'null' : ToString(DefaultString(x));
690 } 683 }
691 684
692 685
693 // ES6 symbols
694 function ToName(x) {
695 return IS_SYMBOL(x) ? x : ToString(x);
696 }
697
698
699 // ECMA-262, section 9.4, page 34. 686 // ECMA-262, section 9.4, page 34.
700 function ToInteger(x) { 687 function ToInteger(x) {
701 if (%_IsSmi(x)) return x; 688 if (%_IsSmi(x)) return x;
702 return %NumberToInteger(ToNumber(x)); 689 return %NumberToInteger(ToNumber(x));
703 } 690 }
704 691
705 692
706 // ES6, draft 08-24-14, section 7.1.15 693 // ES6, draft 08-24-14, section 7.1.15
707 function ToLength(arg) { 694 function ToLength(arg) {
708 arg = ToInteger(arg); 695 arg = ToInteger(arg);
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
826 // Exports 813 // Exports
827 814
828 $defaultString = DefaultString; 815 $defaultString = DefaultString;
829 $NaN = %GetRootNaN(); 816 $NaN = %GetRootNaN();
830 $nonNumberToNumber = NonNumberToNumber; 817 $nonNumberToNumber = NonNumberToNumber;
831 $nonStringToString = NonStringToString; 818 $nonStringToString = NonStringToString;
832 $sameValue = SameValue; 819 $sameValue = SameValue;
833 $sameValueZero = SameValueZero; 820 $sameValueZero = SameValueZero;
834 $toInteger = ToInteger; 821 $toInteger = ToInteger;
835 $toLength = ToLength; 822 $toLength = ToLength;
836 $toName = ToName;
837 $toNumber = ToNumber; 823 $toNumber = ToNumber;
838 $toPositiveInteger = ToPositiveInteger; 824 $toPositiveInteger = ToPositiveInteger;
839 $toPrimitive = ToPrimitive; 825 $toPrimitive = ToPrimitive;
840 $toString = ToString; 826 $toString = ToString;
841 827
842 %InstallToContext([ 828 %InstallToContext([
843 "add_builtin", ADD, 829 "add_builtin", ADD,
844 "add_strong_builtin", ADD_STRONG, 830 "add_strong_builtin", ADD_STRONG,
845 "apply_prepare_builtin", APPLY_PREPARE, 831 "apply_prepare_builtin", APPLY_PREPARE,
846 "bit_and_builtin", BIT_AND, 832 "bit_and_builtin", BIT_AND,
(...skipping 23 matching lines...) Expand all
870 "sar_strong_builtin", SAR_STRONG, 856 "sar_strong_builtin", SAR_STRONG,
871 "shl_builtin", SHL, 857 "shl_builtin", SHL,
872 "shl_strong_builtin", SHL_STRONG, 858 "shl_strong_builtin", SHL_STRONG,
873 "shr_builtin", SHR, 859 "shr_builtin", SHR,
874 "shr_strong_builtin", SHR_STRONG, 860 "shr_strong_builtin", SHR_STRONG,
875 "stack_overflow_builtin", STACK_OVERFLOW, 861 "stack_overflow_builtin", STACK_OVERFLOW,
876 "string_add_left_builtin", STRING_ADD_LEFT, 862 "string_add_left_builtin", STRING_ADD_LEFT,
877 "string_add_right_builtin", STRING_ADD_RIGHT, 863 "string_add_right_builtin", STRING_ADD_RIGHT,
878 "sub_builtin", SUB, 864 "sub_builtin", SUB,
879 "sub_strong_builtin", SUB_STRONG, 865 "sub_strong_builtin", SUB_STRONG,
880 "to_name_builtin", TO_NAME,
881 "to_string_builtin", TO_STRING, 866 "to_string_builtin", TO_STRING,
882 ]); 867 ]);
883 868
884 %InstallToContext([ 869 %InstallToContext([
885 "concat_iterable_to_array", ConcatIterableToArray, 870 "concat_iterable_to_array", ConcatIterableToArray,
886 "non_number_to_number", NonNumberToNumber, 871 "non_number_to_number", NonNumberToNumber,
887 "non_string_to_string", NonStringToString, 872 "non_string_to_string", NonStringToString,
888 "to_integer_fun", ToInteger, 873 "to_integer_fun", ToInteger,
889 "to_length_fun", ToLength, 874 "to_length_fun", ToLength,
890 "to_name", ToName,
891 "to_number_fun", ToNumber, 875 "to_number_fun", ToNumber,
892 "to_primitive", ToPrimitive, 876 "to_primitive", ToPrimitive,
893 "to_string_fun", ToString, 877 "to_string_fun", ToString,
894 ]); 878 ]);
895 879
896 utils.Export(function(to) { 880 utils.Export(function(to) {
897 to.ToBoolean = ToBoolean; 881 to.ToBoolean = ToBoolean;
898 to.ToLength = ToLength; 882 to.ToLength = ToLength;
899 to.ToName = ToName;
900 to.ToNumber = ToNumber; 883 to.ToNumber = ToNumber;
901 to.ToPrimitive = ToPrimitive; 884 to.ToPrimitive = ToPrimitive;
902 to.ToString = ToString; 885 to.ToString = ToString;
903 }); 886 });
904 887
905 }) 888 })
OLDNEW
« no previous file with comments | « src/macros.py ('k') | src/runtime/runtime.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698