Skip to content

Commit

Permalink
benchmark: stop v8 benchmark clobbering RegExp
Browse files Browse the repository at this point in the history
deps/v8/benchmarks/regexp.js clobbers the RegExp global, breaking
util.format() and console.log().  Unclobber it to keep the other
benchmarks working.

Fixes the following error when running benchmark/misc/v8-bench.js:

    $ out/Release/iojs benchmark/misc/v8-bench.js
    util.js:84
        if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
            ^
    TypeError: object is not a function
        at Object.exports.debuglog (util.js:84:9)
        at timers.js:12:29
        at NativeModule.compile (node.js:800:5)
        at NativeModule.require (node.js:769:18)
        at net.js:5:14
        at NativeModule.compile (node.js:800:5)
        at NativeModule.require (node.js:769:18)
        at tty.js:4:11
        at NativeModule.compile (node.js:800:5)
        at Function.NativeModule.require (node.js:769:18)

This could alternatively be addressed by caching the RegExp global
in lib/util.js.  That's not a bad approach and I considered it but
doing it for just RegExp and not other globals would be half-baked.

Maybe the more thorough approach where we cache all globals at
start-up is something for a follow-up pull request.

Fixes: #475
PR-URL: #489
Reviewed-By: Colin Ihrig <[email protected]>
Reviewed-By: Yosuke Furukawa <[email protected]>
  • Loading branch information
bnoordhuis committed Jan 18, 2015
1 parent 1952219 commit 50177fb
Showing 1 changed file with 8 additions and 4 deletions.
12 changes: 8 additions & 4 deletions benchmark/misc/v8-bench.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,13 @@ global.print = function(s) {
console.log('misc/v8_bench.js %s', s);
};

global.load = function (x) {
var source = fs.readFileSync(path.join(dir, x), 'utf8');
vm.runInThisContext(source, x);
}
global.load = function(filename) {
var source = fs.readFileSync(path.join(dir, filename), 'utf8');
// deps/v8/benchmarks/regexp.js breaks console.log() because it clobbers
// the RegExp global, Restore the original when the script is done.
var $RegExp = global.RegExp;
vm.runInThisContext(source, { filename: filename });
global.RegExp = $RegExp;
};

load('run.js');

0 comments on commit 50177fb

Please sign in to comment.