forked from facebook/hermes
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathasync-function.js
More file actions
162 lines (149 loc) · 6.19 KB
/
async-function.js
File metadata and controls
162 lines (149 loc) · 6.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
// RUN: %hermesc -O0 -dump-bytecode %s | %FileCheck %s --match-full-lines
async function simpleReturn() {
return 1;
}
// CHECK-LABEL:NCFunction<simpleReturn>(1 params, 19 registers, 0 symbols):
// CHECK-NEXT:Offset in debug table: source 0x{{.*}}, lexical 0x0000
// CHECK-NEXT: CreateEnvironment r0
// CHECK-NEXT: LoadThisNS r1
// CHECK-NEXT: LoadConstUndefined r2
// CHECK-NEXT: Mov r3, r2
// CHECK-NEXT: CreateGeneratorClosure r4, r0, 2
// CHECK-NEXT: GetBuiltinClosure r5, "HermesBuiltin.spawnAsync"
// CHECK-NEXT: ReifyArguments r3
// CHECK-NEXT: Mov r6, r3
// CHECK-NEXT: Mov r12, r2
// CHECK-NEXT: Mov r11, r4
// CHECK-NEXT: Mov r10, r1
// CHECK-NEXT: Mov r9, r6
// CHECK-NEXT: Call r7, r5, 4
// CHECK-NEXT: Ret r7
// CHECK-LABEL:NCFunction<?anon_0_simpleReturn>(1 params, 3 registers, 0 symbols):
// CHECK-NEXT: CreateEnvironment r0
// CHECK-NEXT: CreateGenerator r1, r0, 3
// CHECK-NEXT: Ret r1
// CHECK-LABEL:Function<?anon_0_?anon_0_simpleReturn>(1 params, 6 registers, 0 symbols):
// CHECK-NEXT: StartGenerator
// CHECK-NEXT: CreateEnvironment r0
// CHECK-NEXT: LoadConstUInt8 r0, 1
// CHECK-NEXT: LoadConstUndefined r1
// CHECK-NEXT: ResumeGenerator r3, r2
// CHECK-NEXT: Mov r4, r2
// CHECK-NEXT: JmpTrue L1, r4
// CHECK-NEXT: CompleteGenerator
// CHECK-NEXT: Ret r0
// CHECK-NEXT:L1:
// CHECK-NEXT: CompleteGenerator
// CHECK-NEXT: Ret r3
async function simpleAwait() {
var x = await 2;
return x;
}
// CHECK-LABEL:NCFunction<simpleAwait>(1 params, 19 registers, 1 symbols):
// CHECK-NEXT:Offset in debug table: source 0x{{.*}}, lexical 0x0000
// CHECK-NEXT: CreateEnvironment r0
// CHECK-NEXT: LoadThisNS r1
// CHECK-NEXT: LoadConstUndefined r2
// CHECK-NEXT: Mov r3, r2
// CHECK-NEXT: StoreNPToEnvironment r0, 0, r2
// CHECK-NEXT: CreateGeneratorClosure r4, r0, 5
// CHECK-NEXT: GetBuiltinClosure r5, "HermesBuiltin.spawnAsync"
// CHECK-NEXT: ReifyArguments r3
// CHECK-NEXT: Mov r6, r3
// CHECK-NEXT: Mov r12, r2
// CHECK-NEXT: Mov r11, r4
// CHECK-NEXT: Mov r10, r1
// CHECK-NEXT: Mov r9, r6
// CHECK-NEXT: Call r7, r5, 4
// CHECK-NEXT: Ret r7
// CHECK-LABEL:NCFunction<?anon_0_simpleAwait>(1 params, 4 registers, 1 symbols):
// CHECK-NEXT: CreateEnvironment r0
// CHECK-NEXT: LoadConstUndefined r1
// CHECK-NEXT: StoreNPToEnvironment r0, 0, r1
// CHECK-NEXT: CreateGenerator r2, r0, 6
// CHECK-NEXT: Ret r2
// CHECK-LABEL:Function<?anon_0_?anon_0_simpleAwait>(1 params, 8 registers, 1 symbols):
// CHECK-NEXT:Offset in debug table: source 0x{{.*}}, lexical 0x0000
// CHECK-NEXT: StartGenerator
// CHECK-NEXT: CreateEnvironment r0
// CHECK-NEXT: LoadConstUndefined r1
// CHECK-NEXT: LoadConstUInt8 r2, 2
// CHECK-NEXT: ResumeGenerator r4, r3
// CHECK-NEXT: Mov r5, r3
// CHECK-NEXT: JmpTrue L1, r5
// CHECK-NEXT: StoreNPToEnvironment r0, 0, r1
// CHECK-NEXT: SaveGenerator L2
// CHECK-NEXT: Ret r2
// CHECK-NEXT:L2:
// CHECK-NEXT: ResumeGenerator r5, r3
// CHECK-NEXT: Mov r6, r3
// CHECK-NEXT: JmpTrue L3, r6
// CHECK-NEXT: StoreToEnvironment r0, 0, r5
// CHECK-NEXT: LoadFromEnvironment r6, r0, 0
// CHECK-NEXT: CompleteGenerator
// CHECK-NEXT: Ret r6
// CHECK-NEXT:L3:
// CHECK-NEXT: CompleteGenerator
// CHECK-NEXT: Ret r5
// CHECK-NEXT:L1:
// CHECK-NEXT: CompleteGenerator
// CHECK-NEXT: Ret r4
var simpleAsyncFE = async function () {
var x = await 2;
return x;
}
// CHECK-LABEL:NCFunction<simpleAsyncFE>(1 params, 19 registers, 1 symbols):
// CHECK-NEXT:Offset in debug table: source 0x{{.*}}, lexical 0x0000
// CHECK-NEXT: CreateEnvironment r0
// CHECK-NEXT: LoadThisNS r1
// CHECK-NEXT: LoadConstUndefined r2
// CHECK-NEXT: Mov r3, r2
// CHECK-NEXT: StoreNPToEnvironment r0, 0, r2
// CHECK-NEXT: CreateGeneratorClosure r4, r0, 8
// CHECK-NEXT: GetBuiltinClosure r5, "HermesBuiltin.spawnAsync"
// CHECK-NEXT: ReifyArguments r3
// CHECK-NEXT: Mov r6, r3
// CHECK-NEXT: Mov r12, r2
// CHECK-NEXT: Mov r11, r4
// CHECK-NEXT: Mov r10, r1
// CHECK-NEXT: Mov r9, r6
// CHECK-NEXT: Call r7, r5, 4
// CHECK-NEXT: Ret r7
// CHECK-LABEL:NCFunction<?anon_0_simpleAsyncFE>(1 params, 4 registers, 1 symbols):
// CHECK-NEXT: CreateEnvironment r0
// CHECK-NEXT: LoadConstUndefined r1
// CHECK-NEXT: StoreNPToEnvironment r0, 0, r1
// CHECK-NEXT: CreateGenerator r2, r0, 9
// CHECK-NEXT: Ret r2
// CHECK-LABEL:Function<?anon_0_?anon_0_simpleAsyncFE>(1 params, 8 registers, 1 symbols):
// CHECK-NEXT:Offset in debug table: source 0x{{.*}}, lexical 0x0000
// CHECK-NEXT: StartGenerator
// CHECK-NEXT: CreateEnvironment r0
// CHECK-NEXT: LoadConstUndefined r1
// CHECK-NEXT: LoadConstUInt8 r2, 2
// CHECK-NEXT: ResumeGenerator r4, r3
// CHECK-NEXT: Mov r5, r3
// CHECK-NEXT: JmpTrue L1, r5
// CHECK-NEXT: StoreNPToEnvironment r0, 0, r1
// CHECK-NEXT: SaveGenerator L2
// CHECK-NEXT: Ret r2
// CHECK-NEXT:L2:
// CHECK-NEXT: ResumeGenerator r5, r3
// CHECK-NEXT: Mov r6, r3
// CHECK-NEXT: JmpTrue L3, r6
// CHECK-NEXT: StoreToEnvironment r0, 0, r5
// CHECK-NEXT: LoadFromEnvironment r6, r0, 0
// CHECK-NEXT: CompleteGenerator
// CHECK-NEXT: Ret r6
// CHECK-NEXT:L3:
// CHECK-NEXT: CompleteGenerator
// CHECK-NEXT: Ret r5
// CHECK-NEXT:L1:
// CHECK-NEXT: CompleteGenerator
// CHECK-NEXT: Ret r4