root/as2/E3Engine/VirtualMachineCodeList.txt

リビジョン 299, 5.9 kB (コミッタ: yossy, コミット時期: 4 年 前)

Imported Lab code.

Line 
1 Spark用スクリプトエンジン用仮想マシン命令一覧
2
3 各命令・値ごとに配列の要素1個分消費します。
4 各値の見方:
5 v    変数値。何でもあり。
6 id  識別子。基本的に文字列。
7 %  値の代入先。入れたいインデックスの、"命令からの"オフセット。*
8 :% ラベル。そのラベルが指すインデックスの、"命令からの"オフセット。*
9
10 * 例えば、addの結果をtraceしたい場合、
11 add v1 v2 %
12 trace v
13 %はvを指さなければいけない。
14 この時vは、%の命令である"addから数えて"5つ目にあるため、
15 add v1(1つ目) v2(2つ目) %(3つ目)
16 trace(4つ目) v(5つ目)
17 %には5を代入しなければならない。
18 よって、
19 add v1 v2 5
20 trace v
21 となる。
22
23 nop
24 (no operation)
25 何もしない
26
27 spd
28 (suspend)
29 処理を中断する
30
31 lit v %
32 (literal)
33 リテラルvを%に代入
34
35 call id n %
36 (call function)
37 関数idをn個の引数で呼び出して結果を%に代入
38
39 calll id n %
40 (call local function)
41 関数idをn個の引数で呼び出して結果を%に代入
42
43 callm o id n %
44 (call member function)
45 関数v.idをn個の引数で呼び出して結果を%に代入
46
47 callf o n %
48 (call functor)
49 関数オブジェクトoをn個の引数で呼び出して結果を%に代入
50
51 ret v
52 (return function)
53 戻り値vで呼び出し元に戻る
54
55 cret v
56 (return coroutine)
57 戻り値vでコルーチンの呼び出し元に戻る
58
59 func :% %
60 (function declare)
61 :%までを本体とする関数オブジェクトを生成して%に代入
62
63 cor :% %
64 (coroutine declare)
65 :%までを本体とするコルーチンを生成して%に代入
66
67 arg n id
68 (get argument)
69 n番目の引数を変数idに代入
70
71 jmp :%
72 (jump)
73 :%に飛ぶ
74
75 if v :%
76 (jump if)
77 vが真で「なければ」:%に飛ぶ(真であれば次のコードが実行される)
78
79 nif v :%
80 (jump if not)
81 vが偽で「なければ」:%に飛ぶ(偽であれば次のコードが実行される)
82
83 add v1 v2 %
84 (add)
85 v1+v2を%に代入
86
87 sub v1 v2 %
88 (subtract)
89 v1-v2を%に代入
90
91 mul v1 v2 %
92 (multiply)
93 v1*v2を%に代入
94
95 div v1 v2 %
96 (divide)
97 v1/v2を%に代入
98
99 mod v1 v2 %
100 (modulo)
101 v1%v2を%に代入
102
103 and v1 v2 %
104 (bitwise and)
105 v1&v2を%に代入
106
107 or v1 v2 %
108 (bitwise or)
109 v1|v2を%に代入
110
111 xor v1 v2 %
112 (bitwise xor)
113 v1^v2を%に代入
114
115 not v %
116 (bitwise not)
117 ~vを%に代入
118
119 lnot v %
120 (logical not)
121 !vを%に代入
122
123 lsh v1 v2 %
124 (left shift)
125 v1<<v2を%に代入
126
127 rsh v1 v2 %
128 (signed right shift)
129 v1>>v2を%に代入
130
131 ursh v1 v2 %
132 (unsigned right shift)
133 v1>>>v2を%に代入
134
135 inc v %
136 (increment)
137 vを加算して%に代入
138
139 dec v %
140 (decrement)
141 vを減算して%に代入
142
143 ceq v1 v2 %
144 (compare equal)
145 v1==v2の結果を%に代入
146
147 cseq v1 v2 %
148 (compare strict equal)
149 v1===v2の結果を%に代入
150
151 cne v1 v2 %
152 (compare not equal)
153 v1!=v2の結果を%に代入
154
155 csne v1 v2 %
156 (compare not strict equal)
157 v1!==v2の結果を%に代入
158
159 clt v1 v2 %
160 (compare less than)
161 v1<v2の結果を%に代入
162
163 cgt v1 v2 %
164 (compare greater than)
165 v1>v2の結果を%に代入
166
167 cle v1 v2 %
168 (compare less than or equal)
169 v1<=v2の結果を%に代入
170
171 cge v1 v2 %
172 (compare greater than or equal)
173 v1>=v2の結果を%に代入
174
175 dup v %1 %2
176 (duplicate)
177 %1と%2にvを代入
178
179 this %
180 (this)
181 thisを%に代入
182
183 array n %
184 (initialize array)
185 n個の要素を持つ配列を生成して%に代入
186
187 obj n %
188 (initialize object)
189 n個のキーと値のペアを持つオブジェクトを生成して%に代入
190
191 setl id v %
192 (set local variable)
193 現在の実行コンテキスト上の変数idにvを代入(変数idが存在しなければ生成; スコープチェーンは見ない)
194
195 getl id %
196 (get local variable)
197 現在の実行コンテキスト上の変数idを探して%に代入(スコープチェーンは見ない)
198
199 set id v %
200 (set variable)
201 現在の実行コンテキストを基点とするスコープチェーンから変数idを探してvを代入
202
203 get id %
204 (get variable)
205 現在の実行コンテキストを基点とするスコープチェーンから変数idを探して%に代入
206
207 setm o id v %
208 (set member)
209 o.idにvを代入
210
211 getm o id %
212 (get member)
213 o.idを%に代入
214
215 new v n %
216 (new instance)
217 クラスvをn個の引数で生成して%に代入
218
219 del id %
220 (delete)
221 変数idを削除し、その成否を%に代入
222
223 dell id %
224 (delete local)
225 変数idを削除し、その成否を%に代入
226
227 delm o id %
228 (delete member)
229 o.idを削除し、その成否を%に代入
230
231 typeof v %
232 (typeof)
233 typeof vの結果を%に代入
234
235 insof v1 v2 %
236 (instanceof)
237 v1 instanceof v2の結果を%に代入
238
239 num v %
240 (to number)
241 Number(v)の結果を%に代入
242
243 str v %
244 (to string)
245 String(v)の結果を%に代入
246
247 with v
248 (start with)
249 スコープチェーンの先頭にvを追加
250
251 ewith
252 (end with)
253 スコープチェーンから先頭のオブジェクトを取り除く
254
255 push v
256 (push)
257 vをスタックに積む
258
259 pop %
260 (pop)
261 スタックから値を取り出し%に代入
262
263 trace v
264 (trace)
265 trace(v)
266
267 以下、実装予定
268 cast v1 v2 %
269 (cast)
270 v1をv2にキャストした結果を%に代入
271
272 stry :%
273 (start try)
274 tryに入る(例外が投げられると:%に飛ぶ)
275
276 etry
277 (end try)
278 tryから抜ける
279
280 throw v
281 (throw)
282 例外vをスローする
283
284
285 SETLOCAL 'a', false
286 SETLOCAL 'b', true
287 GET  'a', *a
288 DUP (*a) *not *c
289 NOT (*not) *if
290 IF (*if) *end
291 GET 'b' *c
292 end:
293 SETLOCAL 'c', (*c)
294
295
296 A && Bの生成
297 式A $
298 DUP _ $$ $
299 NIF _ <end>
300 式B $$
301 <end>
302 代入先 _
303    ↑ここで両方の$$をpopしてしまう
304
305 A || Bの生成
306 式A $
307 DUP _ $$ $
308 IF _ <end>
309 式B $$
310 <end>
311 代入先 _
312    ↑ここで両方の$$をpopしてしまう
313
314 GET id $
315 ADD _ 2 $
316 SET id _ $
317
318 GET id $
319 GET id $
320 DUP _ $2 $4
321 DUP _ $1 $3
322 GETM _1 _2 $
323 ADD _ 2 $
324 SETM _3 _4 _ $
Note: リポジトリブラウザについてのヘルプは TracBrowser を参照してください。