Skip to content

Commit

Permalink
1. Set timeout and stop CFA if it hasn't finished by then.
Browse files Browse the repository at this point in the history
2. (Minor) Rm some prints from evtclassify.js,
   indentation change in benchmark.js
  • Loading branch information
dimvar committed Oct 30, 2011
1 parent ad703b5 commit 29cb694
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 24 deletions.
26 changes: 13 additions & 13 deletions lib/cfa2/benchmark.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,26 +2,26 @@
;

var print = console.log,
readFileSync = require('fs').readFileSync,
spawn = require('child_process').spawn,
parse = require('../../narcissus/lib/parser').parse,
getTags = require('./jscfa').getTags;
readFileSync = require('fs').readFileSync,
spawn = require('child_process').spawn,
parse = require('../../narcissus/lib/parser').parse,
getTags = require('./jscfa').getTags;

var arg = process.argv[2], files = [], done = false;

if ((arg === "sunspider") || (arg === "v8/v6")) {
var ls = spawn('ls', [arg]);
ls.stdout.on('data', function(data) {
var fs = (""+data).split("\n");
for (var i = 0, len = fs.length; i < len; i++)
/js$/.test(fs[i]) && files.push(arg + "/" + fs[i]);
});
var fs = (""+data).split("\n");
for (var i = 0, len = fs.length; i < len; i++)
/js$/.test(fs[i]) && files.push(arg + "/" + fs[i]);
});
ls.on('exit', function() {
for (var i = 0, len = files.length; i < len; i++) run(files[i]);
});
}
else
run(arg);
for (var i = 0, len = files.length; i < len; i++) run(files[i]);
});
}
else
run(arg);

function run(file) {
getTags(parse(readFileSync(file), file, 1), file, [], {});
Expand Down
7 changes: 1 addition & 6 deletions lib/cfa2/evtclassify.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ var resultsDir = process.argv[5] || ".";
try {
var ast = desugar(parse(readFileSync(addon), addon, 1));
var lines = ast.tokenizer.source.split("\n");
var results = analyze_addon(ast);
var results = analyze_addon(ast, 300);
var evts = [], contentObjs = [];

results.forEach(function(r) {
Expand All @@ -37,7 +37,6 @@ try {
humanReadableResults(evts, contentObjs);
print("done with humanreadableresults");
var fhandle = readFileSync(coordsFile);
print("readfilesync success");
var coords = parseCoords(fhandle);
var entries = [];

Expand Down Expand Up @@ -105,7 +104,6 @@ function humanReadableResults(evts, contentObjs) {
}

function parseCoords(src) {
print("entering parsecoords");
var obj = JSON.parse(src);
var result = [];
for (var key in obj) {
Expand All @@ -125,13 +123,11 @@ function parseCoords(src) {
: 0;
}
result.sort(compareLines);
print("exiting parsecoords");
return result;
}

// line: 1-indexed
function getRealPath(line, coords) {
//print("entering getrealpath");
var entry;
for (var i = coords.length - 1; i >= 0; i--) {
entry = coords[i];
Expand All @@ -140,7 +136,6 @@ function getRealPath(line, coords) {
}
var scriptOffset = line - entry.line;
var scriptStart = entry.realLine;
//print("exiting getrealpath");
return {
path: entry.realPath,
line: scriptStart + scriptOffset
Expand Down
16 changes: 11 additions & 5 deletions lib/cfa2/jscfa.js
Original file line number Diff line number Diff line change
Expand Up @@ -1466,6 +1466,7 @@ var flags;
var exports_object;
var exports_object_av_addr;
var commonJSmode;
var timeout = 120; // stop after 2 minutes if you're not done

// A summary contains a function node (fn), an array of abstract values (args),
// a timestamp (ts) and abstract values (res) and (err). It means: when we call
Expand Down Expand Up @@ -3451,6 +3452,8 @@ function evalFun(fn, args, withNew, cn) {
errval = avjoin(errval, errav);
}

if (process.uptime() > timeout) throw new Error("timeout");

// if (timestamp > big_ts) {
// print("big ts: " + timestamp);
// dumpHeap("heapdump" + timestamp + ".txt");
Expand Down Expand Up @@ -3666,10 +3669,12 @@ function cfa2(ast) {
// dumpHeap("heapdump.txt");
}
catch (e) {
print(e.message);
console.trace();
if (! ("code" in e)) e.code = CFA_ERROR;
throw e;
if (e.message !== "timeout") {
print(e.message);
console.trace();
if (! ("code" in e)) e.code = CFA_ERROR;
throw e;
}
}
}

Expand Down Expand Up @@ -4312,8 +4317,9 @@ var eventKinds = {
// ViewChanged event from greasemonkey?
};

function analyze_addon(ast) {
function analyze_addon(ast, tmout) {
print("Doing CFA");
timeout = tmout;
cfa2(ast);
// Addresses are irrelevant outside jscfa, convert results to array.
var rs = [];
Expand Down

0 comments on commit 29cb694

Please sign in to comment.