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

Side by Side Diff: src/symbol.js

Issue 1306303003: [es6] Implement spec compliant ToPrimitive in the runtime. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Address Michis comments. 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
OLDNEW
1 // Copyright 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 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 // Expects following symbols to be set in the bootstrapper during genesis: 5 // Expects following symbols to be set in the bootstrapper during genesis:
6 // - symbolHasInstance 6 // - symbolHasInstance
7 // - symbolIsConcatSpreadable 7 // - symbolIsConcatSpreadable
8 // - symbolIsRegExp 8 // - symbolIsRegExp
9 // - symbolIterator 9 // - symbolIterator
10 // - symbolToPrimitive
10 // - symbolToStringTag 11 // - symbolToStringTag
11 // - symbolUnscopables 12 // - symbolUnscopables
12 13
13 var $symbolToString; 14 var $symbolToString;
14 15
15 (function(global, utils) { 16 (function(global, utils) {
16 17
17 "use strict"; 18 "use strict";
18 19
19 %CheckIsBootstrapping(); 20 %CheckIsBootstrapping();
(...skipping 13 matching lines...) Expand all
33 34
34 // ------------------------------------------------------------------- 35 // -------------------------------------------------------------------
35 36
36 function SymbolConstructor(x) { 37 function SymbolConstructor(x) {
37 if (%_IsConstructCall()) throw MakeTypeError(kNotConstructor, "Symbol"); 38 if (%_IsConstructCall()) throw MakeTypeError(kNotConstructor, "Symbol");
38 // NOTE: Passing in a Symbol value will throw on ToString(). 39 // NOTE: Passing in a Symbol value will throw on ToString().
39 return %CreateSymbol(IS_UNDEFINED(x) ? x : ToString(x)); 40 return %CreateSymbol(IS_UNDEFINED(x) ? x : ToString(x));
40 } 41 }
41 42
42 43
44 // 19.4.3.4 Symbol.prototype [ @@toPrimitive ] ( hint )
45 function SymbolToPrimitive(hint) {
46 if (!(IS_SYMBOL(this) || IS_SYMBOL_WRAPPER(this))) {
47 throw MakeTypeError(kIncompatibleMethodReceiver,
48 "Symbol.prototype [ @@toPrimitive ]", this);
49 }
50 return %_ValueOf(this);
51 }
52
53
43 function SymbolToString() { 54 function SymbolToString() {
44 if (!(IS_SYMBOL(this) || IS_SYMBOL_WRAPPER(this))) { 55 if (!(IS_SYMBOL(this) || IS_SYMBOL_WRAPPER(this))) {
45 throw MakeTypeError(kIncompatibleMethodReceiver, 56 throw MakeTypeError(kIncompatibleMethodReceiver,
46 "Symbol.prototype.toString", this); 57 "Symbol.prototype.toString", this);
47 } 58 }
48 var description = %SymbolDescription(%_ValueOf(this)); 59 var description = %SymbolDescription(%_ValueOf(this));
49 return "Symbol(" + (IS_UNDEFINED(description) ? "" : description) + ")"; 60 return "Symbol(" + (IS_UNDEFINED(description) ? "" : description) + ")";
50 } 61 }
51 62
52 63
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
90 101
91 %SetCode(GlobalSymbol, SymbolConstructor); 102 %SetCode(GlobalSymbol, SymbolConstructor);
92 %FunctionSetPrototype(GlobalSymbol, new GlobalObject()); 103 %FunctionSetPrototype(GlobalSymbol, new GlobalObject());
93 104
94 utils.InstallConstants(GlobalSymbol, [ 105 utils.InstallConstants(GlobalSymbol, [
95 // TODO(rossberg): expose when implemented. 106 // TODO(rossberg): expose when implemented.
96 // "hasInstance", symbolHasInstance, 107 // "hasInstance", symbolHasInstance,
97 // "isConcatSpreadable", symbolIsConcatSpreadable, 108 // "isConcatSpreadable", symbolIsConcatSpreadable,
98 // "isRegExp", symbolIsRegExp, 109 // "isRegExp", symbolIsRegExp,
99 "iterator", symbolIterator, 110 "iterator", symbolIterator,
111 "toPrimitive", symbolToPrimitive,
100 // TODO(dslomov, caitp): Currently defined in harmony-tostring.js --- 112 // TODO(dslomov, caitp): Currently defined in harmony-tostring.js ---
101 // Move here when shipping 113 // Move here when shipping
102 // "toStringTag", symbolToStringTag, 114 // "toStringTag", symbolToStringTag,
103 "unscopables", symbolUnscopables 115 "unscopables", symbolUnscopables
104 ]); 116 ]);
105 117
106 utils.InstallFunctions(GlobalSymbol, DONT_ENUM, [ 118 utils.InstallFunctions(GlobalSymbol, DONT_ENUM, [
107 "for", SymbolFor, 119 "for", SymbolFor,
108 "keyFor", SymbolKeyFor 120 "keyFor", SymbolKeyFor
109 ]); 121 ]);
110 122
111 %AddNamedProperty( 123 %AddNamedProperty(
112 GlobalSymbol.prototype, "constructor", GlobalSymbol, DONT_ENUM); 124 GlobalSymbol.prototype, "constructor", GlobalSymbol, DONT_ENUM);
125 utils.SetFunctionName(SymbolToPrimitive, symbolToPrimitive);
126 %AddNamedProperty(
127 GlobalSymbol.prototype, symbolToPrimitive, SymbolToPrimitive,
128 DONT_ENUM | READ_ONLY);
113 %AddNamedProperty( 129 %AddNamedProperty(
114 GlobalSymbol.prototype, symbolToStringTag, "Symbol", DONT_ENUM | READ_ONLY); 130 GlobalSymbol.prototype, symbolToStringTag, "Symbol", DONT_ENUM | READ_ONLY);
115 131
116 utils.InstallFunctions(GlobalSymbol.prototype, DONT_ENUM, [ 132 utils.InstallFunctions(GlobalSymbol.prototype, DONT_ENUM, [
117 "toString", SymbolToString, 133 "toString", SymbolToString,
118 "valueOf", SymbolValueOf 134 "valueOf", SymbolValueOf
119 ]); 135 ]);
120 136
121 utils.InstallFunctions(GlobalObject, DONT_ENUM, [ 137 utils.InstallFunctions(GlobalObject, DONT_ENUM, [
122 "getOwnPropertySymbols", ObjectGetOwnPropertySymbols 138 "getOwnPropertySymbols", ObjectGetOwnPropertySymbols
123 ]); 139 ]);
124 140
125 $symbolToString = SymbolToString; 141 $symbolToString = SymbolToString;
126 142
127 }) 143 })
OLDNEW
« src/objects.cc ('K') | « src/runtime/runtime-scopes.cc ('k') | src/x64/code-stubs-x64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698