Skip to content

Commit

Permalink
src: disable harmony classes
Browse files Browse the repository at this point in the history
The V8 development branch has unshipped ES6 classes pending resolution
of a number of inheritance edge cases.  Disable classes in io.js for
the sake of feature parity.

See #251 for background and
discussion.

PR-URL: #272
Reviewed-By: Colin Ihrig <[email protected]>
Reviewed-By: Domenic Denicola <[email protected]>
  • Loading branch information
bnoordhuis committed Jan 9, 2015
1 parent bc629c0 commit a2751e3
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 0 deletions.
6 changes: 6 additions & 0 deletions src/node.cc
Original file line number Diff line number Diff line change
Expand Up @@ -3355,6 +3355,12 @@ void Init(int* argc,
DispatchDebugMessagesAsyncCallback);
uv_unref(reinterpret_cast<uv_handle_t*>(&dispatch_debug_messages_async));

// TODO(bnoordhuis) V8 3.32 is unshipping Harmony classes for the moment.
// We're currently at 3.31, disable classes for feature parity. Remove
// again when we upgrade.
V8::SetFlagsFromString("--noharmony_classes",
sizeof("--noharmony_classes") - 1);

#if defined(NODE_V8_OPTIONS)
// Should come before the call to V8::SetFlagsFromCommandLine()
// so the user can disable a flag --foo at run-time by passing
Expand Down
21 changes: 21 additions & 0 deletions test/parallel/test-v8-features.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
var common = require('../common');
var assert = require('assert');
var spawnSync = require('child_process').spawnSync;
var v8 = require('v8');

// --harmony_classes implies --harmony_scoping; ensure that scoping still works
// when classes are disabled.
assert.throws(function() { eval('"use strict"; class C {}'); }, SyntaxError);
eval('"use strict"; let x = 42'); // Should not throw.
eval('"use strict"; const y = 42'); // Should not throw.

v8.setFlagsFromString('--harmony_classes');
eval('"use strict"; class C {}'); // Should not throw.
eval('"use strict"; let x = 42'); // Should not throw.
eval('"use strict"; const y = 42'); // Should not throw.

// Verify that the --harmony_classes flag unlocks classes again.
var args = ['--harmony_classes', '--use_strict', '-p', 'class C {}'];
var cp = spawnSync(process.execPath, args);
assert.equal(cp.status, 0);
assert.equal(cp.stdout.toString('utf8').trim(), '[Function: C]');

0 comments on commit a2751e3

Please sign in to comment.