spaghetti.rb
イタリア帰りのスパゲッティコードをどうぞ。
http://shinh.skr.jp/koneta/spaghetti.rb
使用後:
http://shinh.skr.jp/koneta/SDL_rwops_sp.c
使用前:
http://shinh.skr.jp/koneta/SDL_rwops.c
イタリア行ったのだから SDL_spaghetti を作れとのありがたい命を受けたのですが、どのへんが SDL なんだろうと不思議に思ったのでしかたなく SDL のソースコードを変換してみました。
for (i = 0; i < t->capacity; i++) { if (t->data[i].name) { ht_set(&n, t->data[i].name, t->data[i].value); } }
が
_10190:i = 0; _10200:if (!( i < t->capacity)) goto _10260; _10210:if (!(t->data[i].name)) goto _10230; _10220:ht_set(&n, t->data[i].name, t->data[i].value); _10230:0; _10240:i++; _10250:goto _10200;
になります。スパゲッティと言えば BASIC のようです。
実装はめんどくさかったです。 spaghetti.rb 自体もスパゲッティです。めんどくさかった割にできることは if, else, for, while のブロックを展開できるくらいです。 else if でうまくいかないとかバグも多いです。本当は変数をグローバル化するとか関数をインライン展開するとかいう工夫も必要なんだと思います。
要 LangScan 。
http://gonzui.sourceforge.net/langscan/
あと最近 Ruby に蝕まれている。