diff --git a/lib/6to5/transformation/templates/typeof.js b/lib/6to5/transformation/templates/typeof.js new file mode 100644 index 0000000000..8efdeefe3d --- /dev/null +++ b/lib/6to5/transformation/templates/typeof.js @@ -0,0 +1,3 @@ +(function (obj) { + return obj && obj.constructor === Symbol ? "symbol" : typeof obj; +}); diff --git a/lib/6to5/transformation/transform.js b/lib/6to5/transformation/transform.js index bf647e1f69..e1ad5833d1 100644 --- a/lib/6to5/transformation/transform.js +++ b/lib/6to5/transformation/transform.js @@ -89,6 +89,7 @@ _.each({ _moduleFormatter: require("./transformers/_module-formatter"), useStrict: require("./transformers/use-strict"), + typeofSymbol: require("./transformers/optional-typeof-symbol"), coreAliasing: require("./transformers/optional-core-aliasing"), undefinedToVoid: require("./transformers/optional-undefined-to-void"), diff --git a/lib/6to5/transformation/transformers/optional-typeof-symbol.js b/lib/6to5/transformation/transformers/optional-typeof-symbol.js new file mode 100644 index 0000000000..6847d6c0f4 --- /dev/null +++ b/lib/6to5/transformation/transformers/optional-typeof-symbol.js @@ -0,0 +1,7 @@ +var t = require("../../types"); + +exports.UnaryExpression = function (node, parent, file, scope) { + if (node.operator === "typeof") { + return t.callExpression(file.addHelper("typeof"), [node.argument]); + } +}; diff --git a/test/fixtures/transformation/optional-typeof-symbol/basic/actual.js b/test/fixtures/transformation/optional-typeof-symbol/basic/actual.js new file mode 100644 index 0000000000..20422ebc64 --- /dev/null +++ b/test/fixtures/transformation/optional-typeof-symbol/basic/actual.js @@ -0,0 +1,2 @@ +var s = Symbol("s"); +assert.equal(typeof s, "symbol"); diff --git a/test/fixtures/transformation/optional-typeof-symbol/basic/exec.js b/test/fixtures/transformation/optional-typeof-symbol/basic/exec.js new file mode 100644 index 0000000000..20422ebc64 --- /dev/null +++ b/test/fixtures/transformation/optional-typeof-symbol/basic/exec.js @@ -0,0 +1,2 @@ +var s = Symbol("s"); +assert.equal(typeof s, "symbol"); diff --git a/test/fixtures/transformation/optional-typeof-symbol/basic/expected.js b/test/fixtures/transformation/optional-typeof-symbol/basic/expected.js new file mode 100644 index 0000000000..c33ed64571 --- /dev/null +++ b/test/fixtures/transformation/optional-typeof-symbol/basic/expected.js @@ -0,0 +1,8 @@ +"use strict"; + +var _typeof = function (obj) { + return obj && obj.constructor === Symbol ? "symbol" : typeof obj; +}; + +var s = Symbol("s"); +assert.equal(_typeof(s), "symbol");