Skip to content
Permalink
Browse files

test: v8-flags is sensitive to script caching

V8 may cache compiled scripts, and it is not safe to assume that the
V8 flags can be changed after an isolate has been created. In this
particular case, since we are using the same script multiple times,
the test would fail if V8 cached the result of the compilation.

Ref: #6280
Fixes: #6258
PR-URL: #6316
Reviewed-By: bnoordhuis - Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: targos - Michaël Zasso <mic.besace@gmail.com>
Reviewed-By: cjihrig - Colin Ihrig <cjihrig@gmail.com>
  • Loading branch information...
ofrobots committed Apr 20, 2016
1 parent 1e4d053 commit a770a163abea062a7322e11ed2989c4c26844ce8
Showing with 6 additions and 3 deletions.
  1. +6 −3 test/parallel/test-v8-flags.js
@@ -4,10 +4,13 @@ var assert = require('assert');
var v8 = require('v8');
var vm = require('vm');

// Note: changing V8 flags after an isolate started is not guaranteed to work.
// Specifically here, V8 may cache compiled scripts between the flip of the
// flag. We use a different script each time to work around this problem.
v8.setFlagsFromString('--allow_natives_syntax');
assert(eval('%_IsSmi(42)'));
assert(vm.runInThisContext('%_IsSmi(42)'));
assert(vm.runInThisContext('%_IsSmi(43)'));

v8.setFlagsFromString('--noallow_natives_syntax');
assert.throws(function() { eval('%_IsSmi(42)'); }, SyntaxError);
assert.throws(function() { vm.runInThisContext('%_IsSmi(42)'); }, SyntaxError);
assert.throws(function() { eval('%_IsSmi(44)'); }, SyntaxError);
assert.throws(function() { vm.runInThisContext('%_IsSmi(45)'); }, SyntaxError);

0 comments on commit a770a16

Please sign in to comment.
You can’t perform that action at this time.