first cut of async/await (#2098)

- async arrow functions not yet supported


fixes #1789
This commit is contained in:
kzc
2017-06-14 18:15:48 -04:00
committed by Alex Lam S.L
parent 7cc03d4d40
commit 100e18305d
7 changed files with 310 additions and 18 deletions

View File

@@ -978,6 +978,10 @@ function OutputStream(options) {
AST_Lambda.DEFMETHOD("_do_print", function(output, nokeyword){
var self = this;
if (!nokeyword) {
if (this.async) {
output.print("async");
output.space();
}
output.print("function");
if (this.is_generator) {
output.star();
@@ -1083,6 +1087,22 @@ function OutputStream(options) {
}
});
DEFPRINT(AST_Await, function(self, output){
output.print("await");
output.space();
var e = self.expression;
var parens = !(
e instanceof AST_Call
|| e instanceof AST_SymbolRef
|| e instanceof AST_PropAccess
|| e instanceof AST_Unary
|| e instanceof AST_Constant
);
if (parens) output.print("(");
self.expression.print(output);
if (parens) output.print(")");
});
/* -----[ loop control ]----- */
AST_LoopControl.DEFMETHOD("_do_print", function(output, kind){
output.print(kind);
@@ -1629,7 +1649,7 @@ function OutputStream(options) {
self._print_getter_setter("get", output);
});
DEFPRINT(AST_ConciseMethod, function(self, output){
self._print_getter_setter(self.is_generator && "*", output);
self._print_getter_setter(self.is_generator && "*" || self.async && "async", output);
});
AST_Symbol.DEFMETHOD("_do_print", function(output){
var def = this.definition();