[interpreter] support async functions in Ignition
BUG=v8:4483, v8:4907, 618603 LOG=N R=neis@chromium.org, yangguo@chromium.org, littledan@chromium.org Review-Url: https://codereview.chromium.org/2051423003 Cr-Commit-Position: refs/heads/master@{#36938}
This commit is contained in:
parent
ac1587bb86
commit
1a30866239
@ -1024,6 +1024,10 @@ inline bool IsAsyncFunction(FunctionKind kind) {
|
|||||||
return kind & FunctionKind::kAsyncFunction;
|
return kind & FunctionKind::kAsyncFunction;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline bool IsResumableFunction(FunctionKind kind) {
|
||||||
|
return IsGeneratorFunction(kind) || IsAsyncFunction(kind);
|
||||||
|
}
|
||||||
|
|
||||||
inline bool IsConciseMethod(FunctionKind kind) {
|
inline bool IsConciseMethod(FunctionKind kind) {
|
||||||
DCHECK(IsValidFunctionKind(kind));
|
DCHECK(IsValidFunctionKind(kind));
|
||||||
return kind & FunctionKind::kConciseMethod;
|
return kind & FunctionKind::kConciseMethod;
|
||||||
|
@ -571,7 +571,7 @@ Handle<BytecodeArray> BytecodeGenerator::MakeBytecode() {
|
|||||||
|
|
||||||
RegisterAllocationScope register_scope(this);
|
RegisterAllocationScope register_scope(this);
|
||||||
|
|
||||||
if (IsGeneratorFunction(info()->literal()->kind())) {
|
if (IsResumableFunction(info()->literal()->kind())) {
|
||||||
generator_state_ = register_allocator()->NewRegister();
|
generator_state_ = register_allocator()->NewRegister();
|
||||||
VisitGeneratorPrologue();
|
VisitGeneratorPrologue();
|
||||||
}
|
}
|
||||||
@ -698,8 +698,8 @@ void BytecodeGenerator::VisitGeneratorPrologue() {
|
|||||||
|
|
||||||
builder()->Bind(®ular_call);
|
builder()->Bind(®ular_call);
|
||||||
// This is a regular call. Fall through to the ordinary function prologue,
|
// This is a regular call. Fall through to the ordinary function prologue,
|
||||||
// after which we will run into the generator object creation and the initial
|
// after which we will run into the generator object creation and other extra
|
||||||
// yield (both inserted by the parser).
|
// code inserted by the parser.
|
||||||
}
|
}
|
||||||
|
|
||||||
void BytecodeGenerator::VisitBlock(Block* stmt) {
|
void BytecodeGenerator::VisitBlock(Block* stmt) {
|
||||||
|
14
test/mjsunit/harmony/regress/regress-618603.js
Normal file
14
test/mjsunit/harmony/regress/regress-618603.js
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
// Copyright 2016 the V8 project authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style license that can be
|
||||||
|
// found in the LICENSE file.
|
||||||
|
|
||||||
|
// Flags: --harmony-async-await --ignition-generators
|
||||||
|
|
||||||
|
try {
|
||||||
|
} catch(e) {; }
|
||||||
|
function __f_7(expected, run) {
|
||||||
|
var __v_10 = run();
|
||||||
|
};
|
||||||
|
__f_7("[1,2,3]", () => (function() {
|
||||||
|
return (async () => {[...await arguments] })();
|
||||||
|
})());
|
Loading…
Reference in New Issue
Block a user