Index: src/symbol.js |
diff --git a/src/symbol.js b/src/symbol.js |
index 8cac2c56a2f69cfa8397c6c13bb0d07ef9f33f1f..3f6e281777086cb9317071a730767db99c9db157 100644 |
--- a/src/symbol.js |
+++ b/src/symbol.js |
@@ -7,6 +7,7 @@ |
// - symbolIsConcatSpreadable |
// - symbolIsRegExp |
// - symbolIterator |
+// - symbolToPrimitive |
// - symbolToStringTag |
// - symbolUnscopables |
@@ -40,6 +41,16 @@ function SymbolConstructor(x) { |
} |
+// 19.4.3.4 Symbol.prototype [ @@toPrimitive ] ( hint ) |
+function SymbolToPrimitive(hint) { |
+ if (!(IS_SYMBOL(this) || IS_SYMBOL_WRAPPER(this))) { |
+ throw MakeTypeError(kIncompatibleMethodReceiver, |
+ "Symbol.prototype [ @@toPrimitive ]", this); |
+ } |
+ return %_ValueOf(this); |
+} |
+ |
+ |
function SymbolToString() { |
if (!(IS_SYMBOL(this) || IS_SYMBOL_WRAPPER(this))) { |
throw MakeTypeError(kIncompatibleMethodReceiver, |
@@ -97,6 +108,7 @@ utils.InstallConstants(GlobalSymbol, [ |
// "isConcatSpreadable", symbolIsConcatSpreadable, |
// "isRegExp", symbolIsRegExp, |
"iterator", symbolIterator, |
+ "toPrimitive", symbolToPrimitive, |
// TODO(dslomov, caitp): Currently defined in harmony-tostring.js --- |
// Move here when shipping |
// "toStringTag", symbolToStringTag, |
@@ -110,6 +122,10 @@ utils.InstallFunctions(GlobalSymbol, DONT_ENUM, [ |
%AddNamedProperty( |
GlobalSymbol.prototype, "constructor", GlobalSymbol, DONT_ENUM); |
+utils.SetFunctionName(SymbolToPrimitive, symbolToPrimitive); |
+%AddNamedProperty( |
+ GlobalSymbol.prototype, symbolToPrimitive, SymbolToPrimitive, |
+ DONT_ENUM | READ_ONLY); |
%AddNamedProperty( |
GlobalSymbol.prototype, symbolToStringTag, "Symbol", DONT_ENUM | READ_ONLY); |