| 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 _ $ |
|---|