Browse Source

src: disable harmony classes

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 https://github.com/iojs/io.js/issues/251 for background and
discussion.

PR-URL: https://github.com/iojs/io.js/pull/272
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Domenic Denicola <domenic@domenicdenicola.com>
v1.8.0-commit
Ben Noordhuis 10 years ago
parent
commit
a2751e3e1e
  1. 6
      src/node.cc
  2. 21
      test/parallel/test-v8-features.js

6
src/node.cc

@ -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

21
test/parallel/test-v8-features.js

@ -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]');
Loading…
Cancel
Save