if ((1 / val) < 0) {
return make_node(AST_UnaryPrefix, orig, {
operator: "-",
- expression: make_node(AST_Number, null, { value: -val })
+ expression: make_node(AST_Number, orig, { value: -val })
});
}
return new AST_ObjectGetter(args);
}
},
+ ArrayExpression: function(M) {
+ return new AST_Array({
+ start : my_start_token(M),
+ end : my_end_token(M),
+ elements : M.elements.map(function(elem){
+ return elem === null ? new AST_Hole() : from_moz(elem);
+ })
+ });
+ },
ObjectExpression: function(M) {
return new AST_Object({
start : my_start_token(M),
map("CatchClause", AST_Catch, "param>argname, body%body");
map("ThisExpression", AST_This);
- map("ArrayExpression", AST_Array, "elements@elements");
map("FunctionExpression", AST_Function, "id>name, params@argnames, body%body");
map("BinaryExpression", AST_Binary, "operator=operator, left>left, right>right");
map("LogicalExpression", AST_Binary, "operator=operator, left>left, right>right");
};
});
+ def_to_moz(AST_Array, function To_Moz_ArrayExpression(M) {
+ return {
+ type: "ArrayExpression",
+ elements: M.elements.map(to_moz)
+ };
+ });
+
def_to_moz(AST_Object, function To_Moz_ObjectExpression(M) {
return {
type: "ObjectExpression",
--- /dev/null
+var assert = require("assert");
+var exec = require("child_process").exec;
+
+describe("spidermonkey export/import sanity test", function() {
+ it("should produce a functional build when using --self with spidermonkey", function (done) {
+ this.timeout(20000);
+
+ var uglifyjs = '"' + process.argv[0] + '" bin/uglifyjs';
+ var command = uglifyjs + " --self -cm --wrap SpiderUglify --dump-spidermonkey-ast | " +
+ uglifyjs + " --spidermonkey -cm";
+
+ exec(command, function (err, stdout) {
+ if (err) throw err;
+
+ eval(stdout);
+ assert.strictEqual(typeof SpiderUglify, "object");
+
+ var ast = SpiderUglify.parse("foo([true,,2+3]);");
+ assert.strictEqual(true, ast instanceof SpiderUglify.AST_Node);
+
+ ast.figure_out_scope();
+ ast = SpiderUglify.Compressor({}).compress(ast);
+ assert.strictEqual(true, ast instanceof SpiderUglify.AST_Node);
+
+ var stream = SpiderUglify.OutputStream({});
+ ast.print(stream);
+ var code = stream.toString();
+ assert.strictEqual(code, "foo([!0,,5]);");
+
+ done();
+ });
+ });
+});