Improve yield support and restrict usage of strict
- Partially reverting91cdb93e57andeaf3911c31and reimplement - Add generators support for objects and classes - Only classes can have static methods so restrict use of it Special thanks to @rvanvelzen and @kzc for reviewing this patch and providing constructive feedback over and over again.
This commit is contained in:
@@ -560,6 +560,20 @@ function OutputStream(options) {
|
||||
}
|
||||
});
|
||||
|
||||
PARENS(AST_Yield, function(output){
|
||||
var p = output.parent();
|
||||
// (yield 1) + (yield 2)
|
||||
// a = yield 3
|
||||
if (p instanceof AST_Binary && p.operator !== "=")
|
||||
return true;
|
||||
// (yield 1) ? yield 2 : yield 3
|
||||
if (p instanceof AST_Conditional && p.condition === this)
|
||||
return true;
|
||||
// -(yield 4)
|
||||
if (p instanceof AST_Unary)
|
||||
return true;
|
||||
});
|
||||
|
||||
PARENS(AST_PropAccess, function(output){
|
||||
var p = output.parent();
|
||||
if (p instanceof AST_New && p.expression === this) {
|
||||
@@ -868,6 +882,9 @@ function OutputStream(options) {
|
||||
output.print("static");
|
||||
output.space();
|
||||
}
|
||||
if (self.is_generator) {
|
||||
output.print("*");
|
||||
}
|
||||
self._do_print(output, true /* do not print "function" */);
|
||||
});
|
||||
|
||||
@@ -887,6 +904,17 @@ function OutputStream(options) {
|
||||
self._do_print(output, "throw");
|
||||
});
|
||||
|
||||
/* -----[ yield ]----- */
|
||||
|
||||
DEFPRINT(AST_Yield, function(self, output){
|
||||
var star = self.is_star ? "*" : "";
|
||||
output.print("yield" + star);
|
||||
if (self.expression) {
|
||||
output.space();
|
||||
self.expression.print(output);
|
||||
}
|
||||
});
|
||||
|
||||
/* -----[ loop control ]----- */
|
||||
AST_LoopControl.DEFMETHOD("_do_print", function(output, kind){
|
||||
output.print(kind);
|
||||
@@ -1218,13 +1246,8 @@ function OutputStream(options) {
|
||||
output.print(self.operator);
|
||||
});
|
||||
DEFPRINT(AST_Binary, function(self, output){
|
||||
var isYield = (self.left.operator == "yield" || self.left.operator === "yield*");
|
||||
var op = self.operator;
|
||||
|
||||
isYield && output.print("(");
|
||||
self.left.print(output);
|
||||
isYield && output.print(")");
|
||||
|
||||
if (op[0] == ">" /* ">>" ">>>" ">" ">=" */
|
||||
&& self.left instanceof AST_UnaryPostfix
|
||||
&& self.left.operator == "--") {
|
||||
@@ -1234,10 +1257,7 @@ function OutputStream(options) {
|
||||
// the space is optional depending on "beautify"
|
||||
output.space();
|
||||
}
|
||||
|
||||
isYield = (self.right.operator == "yield" || self.right.operator === "yield*");
|
||||
output.print(op);
|
||||
|
||||
if ((op == "<" || op == "<<")
|
||||
&& self.right instanceof AST_UnaryPrefix
|
||||
&& self.right.operator == "!"
|
||||
|
||||
Reference in New Issue
Block a user