maxtaco / tamejs

JavaScript code rewriter for taming async-callback-style code

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

switch to uglify.JS parser

maxtaco opened this issue · comments

This will solve a lot of the issues with the current parser, like bad error messages and also uneven support for statements not terminated with semi-colons.

Thoughts:

  • Do a pre-processing run that rewrites twait --> function __twait (), so that way it will compile as actual javascript?
  • Need to find a good way to pick off this since it's not a grammar feature as exposed to the AST walker API.

Another thing broken in the current parser: "use strict"; at the top of the file. It results in this confusing compilation error message:

tamejs/lib/parser.js:133
     var lst = $$[$0-1].concat ($$[$0]);
                     ^
TypeError: Object #<Node> has no method 'concat'
    at Object.anonymous (tamejs/lib/parser.js:133:22)
    at Object.parse (tamejs/lib/parser.js:428:40)
    at Engine.parse (tamejs/lib/engine.js:362:19)
    at tamejs/lib/main.js:186:9
    at tamejs/lib/engine.js:339:6
    at [object Object].<anonymous> (fs.js:107:5)
    at [object Object].emit (events.js:61:17)
    at afterRead (fs.js:878:12)
    at wrapper (fs.js:245:17)

Thanks for the note --- atop which file?

I just tried to compile a .tjs file with "use strict"; at the top. Example:

"use strict";

await {
  setTimeout(defer(var e, a), 100);
}

console.log("done");

+1 on using the uglify.JS parser, or equivalent-- having random semicolon-related compiler issues and it's driving me batty! :)

Really sorry about that, are there certain cases in particular that come up a lot that I can try to engineer around?

the one that probably gets me the most is semicolons on lines inside 1-liner anonymous functions, but TBH I just switched over to writing semicolons just to avoid the issue. :)

-keegan

On Friday, August 5, 2011 at 5:49 AM, maxtaco wrote:

Really sorry about that, are there certain cases in particular that come up a lot that I can try to engineer around?

Reply to this email directly or view it on GitHub:
#5 (comment)

There are also issues with semi colons inside regular expressions.. i.e.

var img_data = req.body.data.match(/^data:image/png;base64,(.+)/);

had to become

var img_data = req.body.data.match('^data:image/png;base64,(.+)');

to compile and I haven't yet worked around the issue where when using the optimist option parser library, calls to .default cause a parse error.. https://gist.github.com/1270412

Hacked my way around the immediate problem https://gist.github.com/1270453 which was not being able to do obj.default();