2008-09-01から1ヶ月間の記事一覧
式での文字列と変数で管理している文字列のバッファを分けて考えたらいいんじゃないかと思った。 式での文字列 不変 '\0' を含まない 文字列型変数から式へ: '\0' までを取り出す 変数で管理している文字列のバッファ 可変。 代入や連結、 poke や memcpy な…
*first dimtype a, 1 b = *first c = *last mes varuse(a) ; >> 0 mes varuse(b) ; >> 0 mes varuse(c) ; >> 1 d = a, b, c mes foreach d ; 0, 1 は skip される mes cnt ; >> 2 loop *lastvaruse ってコード先頭を指すラベルかどうかを調べているだけじゃ…
(function(a){a=1;return arguments[0]})(9,8,7) // => 1知りませんでした><
#module #defcfunc f mes a@ return 0 #global a = 111 a = 222, f()は 111 を表示するでしょうか、それとも 222 を表示するでしょうかーという話。 オフィシャル HSP でも HSPLet でも 222 でした。 こんなもの、HSPの仕様的に決まっているとも思えないので…
dim a, 1, 0, 1 mes length(a) mes length2(a) mes length3(a) mes length4(a)1 0 1 0こんなlengthもいけるのかー。 とりあえず今は 1 1 1 0 になっても困るようなケースはほとんどないと信じておく。
タイトルどおり。 スタックから n 個 pop するときに var args = stack.slice(-argc); stack.length -= argc; とかしてたんだけど、これだと argc が 0 のとき args が空の配列でなく stack 全体のコピーになってしまう。 これでハマった。 - はてさて、どう…
a(0,0) = 1 : a(1,0) = 2 : a(2,0) = 3 はエラーになるもんね。そうだったそうだった。 - ってアッッ! a(0,0) = 1, 2, 3 も実行したらエラーになった。 ああ、なんだ。そうだったのか。 ということで、「等価じゃない」というのはうそでした。
dim a, 1, 1, 1, 1 mes a(0, 0, 0, 0, 0)a(1,1,1,1,1) = 1どっちもエラーにならない。
dim a, 3, 3 a.1.0 = 111, 222, 333 repeat 3 : y = cnt repeat 3 : x = cnt mes "a("+x+","+y+") = "+a(x,y) loop loopこれ、オフィシャルHSP3だと代入のところでエラーになる。 HSPLetなら通ってしまう。 a(0,0) = 0 a(1,0) = 111 a(2,0) = 222 a(0,1) = 3…
mrefのリソースID 0, 1 を使うってだけ。 #module #defcfunc get_pval1 var mref hspctx, 68 dupptr vptr, hspctx(207), 4 return vptr #defcfunc get_aptr1 var mref hspctx, 68 dupptr vptr, hspctx(207)+4, 4 return vptr #global #module #defcfunc get_…
るびま には宿題として関数呼び出しを実装してみろ、というのがあったのでやってみました。 http://www.fujidig.com/misc/js/sleepvm2.html サンプルのプログラムとしてユークリッドの互除法をやってみました。 # goto :main :gcd # ユークリッドの互除法 ge…
http://www.fujidig.com/misc/js/sleepvm.html
VM に興味がわいたので るびま を読んだ。 そして、 RubiMaVM を Javascript に移植してみた。 var RubiMaVM = {}; RubiMaVM.Instruction = function Instruction(code, opts) { this.code = code; this.opts = opts; }; RubiMaVM.Instruction.prototype.toS…
a = 1, 2, 3 dup b, a b.5 = 42 ; error!謎仕様