subtle bug in the order of the rewriter rules was causing some if/else chains to get confused by implicit indentation

This commit is contained in:
Jeremy Ashkenas 2010-02-13 09:39:25 -05:00
parent a62923ff97
commit 13b2dc8d31
5 changed files with 18 additions and 10 deletions

View File

@ -56,9 +56,19 @@
var js;
if (opts.tokens) {
puts(coffee.tokenize(code).join(' '));
} else if (opts.tree) {
puts(coffee.tree(code).toString());
} else {
opts.tree ? puts(coffee.tree(code).toString()) : (js = coffee.compile(code));
opts.run ? eval(js) : opts.print ? puts(js) : opts.lint ? exports.lint(js) : exports.write_js(source, coffee.compile(code));
js = coffee.compile(code);
if (opts.run) {
eval(js);
} else if (opts.print) {
puts(js);
} else if (opts.lint) {
exports.lint(js);
} else {
exports.write_js(source, coffee.compile(code));
}
}
return exports.compile_scripts();
});

View File

@ -118,13 +118,13 @@
return new OpNode('!!', $2);
}), o("- Expression", (function() {
return new OpNode('-', $2);
}), {
})), {
prec: 'UMINUS'
}), o("+ Expression", (function() {
}, o("+ Expression", (function() {
return new OpNode('+', $2);
}), {
})), {
prec: 'UPLUS'
}), o("NOT Expression", function() {
}, o("NOT Expression", function() {
return new OpNode('not', $2);
}), o("~ Expression", function() {
return new OpNode('~', $2);

View File

@ -807,9 +807,7 @@
toString: function toString(idt) {
var children;
idt = (idt || '') + TAB;
puts(this.body.expressions.length);
children = _.flatten([this.params, this.body.expressions]);
puts(children.length);
return this.type + '\n' + _.map(children, function(child) {
return idt + child.toString(idt);
}).join('');

View File

@ -53,8 +53,8 @@
this.remove_mid_expression_newlines();
this.move_commas_outside_outdents();
this.close_open_calls_and_indexes();
this.add_implicit_parentheses();
this.add_implicit_indentation();
this.add_implicit_parentheses();
this.ensure_balance(BALANCED_PAIRS);
this.rewrite_closing_parens();
return this.tokens;

View File

@ -45,8 +45,8 @@ re::rewrite: (tokens) ->
this.remove_mid_expression_newlines()
this.move_commas_outside_outdents()
this.close_open_calls_and_indexes()
this.add_implicit_parentheses()
this.add_implicit_indentation()
this.add_implicit_parentheses()
this.ensure_balance(BALANCED_PAIRS)
this.rewrite_closing_parens()
this.tokens