12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- var jsp = require("uglify-js").parser;
- var pro = require("uglify-js").uglify;
- function instrument(code) {
- var ast = jsp.parse(code, false, true);
-
-
- var w = pro.ast_walker();
-
-
- var analyzing = [];
- function do_stat() {
- var ret;
- if (this[0].start && analyzing.indexOf(this) < 0) {
-
-
- analyzing.push(this);
- ret = [ "splice",
- [ [ "stat",
- [ "call", [ "name", "trace" ],
- [ [ "string", this[0].toString() ],
- [ "num", this[0].start.line ],
- [ "num", this[0].start.col ],
- [ "num", this[0].end.line ],
- [ "num", this[0].end.col ]]]],
- w.walk(this) ]];
- analyzing.pop(this);
- }
- return ret;
- };
- var new_ast = w.with_walkers({
- "stat" : do_stat,
- "label" : do_stat,
- "break" : do_stat,
- "continue" : do_stat,
- "debugger" : do_stat,
- "var" : do_stat,
- "const" : do_stat,
- "return" : do_stat,
- "throw" : do_stat,
- "try" : do_stat,
- "defun" : do_stat,
- "if" : do_stat,
- "while" : do_stat,
- "do" : do_stat,
- "for" : do_stat,
- "for-in" : do_stat,
- "switch" : do_stat,
- "with" : do_stat
- }, function(){
- return w.walk(ast);
- });
- return pro.gen_code(new_ast, { beautify: true });
- }
- var code = instrument(test.toString());
- console.log(code);
- function test() {
-
- a = 5;
- c += a + b;
- "foo";
-
- var foo = 5;
- const bar = 6, baz = 7;
-
- switch ("foo") {
- case "foo":
- return 1;
- case "bar":
- return 2;
- }
-
- for (var i = 0; i < 5; ++i) {
- console.log("Hello " + i);
- }
- for (var i in [ 1, 2, 3]) {
- console.log(i);
- }
-
-
- for (var i = 0; i < 5; ++i)
- console.log("foo");
- }
|