Support async generator method introduced in ES2018

refs: https://tc39.github.io/proposal-async-iteration/
refs: https://tc39.github.io/proposal-async-iteration/#prod-AsyncGeneratorMethod
diff --git a/escodegen.js b/escodegen.js
index 3d864bb..9208803 100644
--- a/escodegen.js
+++ b/escodegen.js
@@ -868,13 +868,15 @@
     }
 
     function generateMethodPrefix(prop) {
-        var func = prop.value;
+        var func = prop.value, prefix = '';
         if (func.async) {
-            return generateAsyncPrefix(func, !prop.computed);
-        } else {
-            // avoid space before method name
-            return generateStarSuffix(func) ? '*' : '';
+            prefix += generateAsyncPrefix(func, !prop.computed);
         }
+        if (func.generator) {
+            // avoid space before method name
+            prefix += generateStarSuffix(func) ? '*' : '';
+        }
+        return prefix;
     }
 
     CodeGenerator.prototype.generatePattern = function (node, precedence, flags) {
diff --git a/test/harmony.js b/test/harmony.js
index 0237b82..a57e484 100644
--- a/test/harmony.js
+++ b/test/harmony.js
@@ -6280,7 +6280,104 @@
             }
         }
 
+    },
+
+    'ES2018 async generator method': {
+        'class C {\n    async *readLines(file) {\n        while (!file.EOF) {\n            yield await file.readLine();\n        }\n    }\n}': {
+            generateFrom: {
+                "type": "ClassDeclaration",
+                "id": {
+                    "type": "Identifier",
+                    "name": "C"
+                },
+                "superClass": null,
+                "body": {
+                    "type": "ClassBody",
+                    "body": [
+                        {
+                            "type": "MethodDefinition",
+                            "key": {
+                                "type": "Identifier",
+                                "name": "readLines"
+                            },
+                            "value": {
+                                "type": "FunctionExpression",
+                                "id": null,
+                                "params": [
+                                    {
+                                        "type": "Identifier",
+                                        "name": "file"
+                                    }
+                                ],
+                                "body": {
+                                    "type": "BlockStatement",
+                                    "body": [
+                                        {
+                                            "type": "WhileStatement",
+                                            "test": {
+                                                "type": "UnaryExpression",
+                                                "operator": "!",
+                                                "prefix": true,
+                                                "argument": {
+                                                    "type": "MemberExpression",
+                                                    "object": {
+                                                        "type": "Identifier",
+                                                        "name": "file"
+                                                    },
+                                                    "property": {
+                                                        "type": "Identifier",
+                                                        "name": "EOF"
+                                                    },
+                                                    "computed": false
+                                                }
+                                            },
+                                            "body": {
+                                                "type": "BlockStatement",
+                                                "body": [
+                                                    {
+                                                        "type": "ExpressionStatement",
+                                                        "expression": {
+                                                            "type": "YieldExpression",
+                                                            "argument": {
+                                                                "type": "AwaitExpression",
+                                                                "argument": {
+                                                                    "type": "CallExpression",
+                                                                    "callee": {
+                                                                        "type": "MemberExpression",
+                                                                        "object": {
+                                                                            "type": "Identifier",
+                                                                            "name": "file"
+                                                                        },
+                                                                        "property": {
+                                                                            "type": "Identifier",
+                                                                            "name": "readLine"
+                                                                        },
+                                                                        "computed": false
+                                                                    },
+                                                                    "arguments": []
+                                                                }
+                                                            },
+                                                            "delegate": false
+                                                        }
+                                                    }
+                                                ]
+                                            }
+                                        }
+                                    ]
+                                },
+                                "generator": true,
+                                "async": true
+                            },
+                            "kind": "method",
+                            "computed": false,
+                            "static": false
+                        }
+                    ]
+                }
+            }
+        }
     }
+
 };
 
 function updateDeeply(target, override) {