LUA

lua_getstack

LUA

lua_pcall()に失敗して、lua_getstackでデバッグ情報を取り出そうとするけど何故か失敗。スタックにエラーメッセージが積まれてるとか、そんなんが原因かな? あとで調査のこと。 参考

Rua: Procまわり

http://storehouse.sakura.ne.jp/viewvc/viewvc.cgi/rua/rua/?root=svn とりあえず、Ruby側で関数を定義できるようにした。 Luaで定義した関数をRubyで呼ぶ Rubyで定義した関数をLuaで呼ぶ Hashとテーブルの相互互換 Array→テーブル Lua側の関数を呼び出せる…

Rua: Luaの関数をcall

http://storehouse.sakura.ne.jp/viewvc/viewvc.cgi/rua/rua/?root=svn できるはできた…が頻繁にSEGVがおきる。 いらない機能かなぁ。。。 追記 例外まわりがアレなんだ!追記2 Rubyのノリで書いてるとlocal付けるの忘れるなぁ。。。 require 'rua' rua = R…

lua_getglobal

LUA

変数が見つからなかったら、nilをスタックに積むっぽい。 一応、メモ。

Rua: 大域変数の定義とか追加

http://storehouse.sakura.ne.jp/viewvc/viewvc.cgi/rua/rua/rua.c?root=svn&view=markup LuaかわいいよLua。 も、さっくさく実装が進む。 とりあえずの目標。 Luaで定義した関数をRubyで呼ぶ Rubyで定義した関数をLuaで呼ぶ Hashとテーブルの相互互換 Array…

Rua: テーブルまわりとか

http://storehouse.sakura.ne.jp/viewvc/viewvc.cgi/rua/rua/rua.c?root=svn&view=markup Array→テーブルは1オリジンにした。 Luaで定義した関数をRubyで呼ぶ Rubyで定義した関数をLuaで呼ぶ Hashとテーブルの相互互換 Array→テーブル require 'rua' rua = …

単純なRuby拡張を作った

とりあえず、簡単なのはさくっとできた。 rua.c (MSC) __declspec(dllexport) void Init_rua(void); #include "ruby.h" #include "lua.h" #include "lualib.h" #include "lauxlib.h" struct rua { lua_State *L; }; static void rua_free(struct rua *p) { i…

lua_pcallの戻り値

LUA

lua_pcallでコード辺を評価しても戻り値が帰ってこないな…と思ったら、引数の数を0にしてた。。。orzRuby的には def eval(argc = 1) とかしたほうがいいかな? 追記 コード辺でも明示的にreturnしないとnilが返ってきた。

printを呼ぶ

LUA

#include "lua.h" #include "lualib.h" #include "lauxlib.h" int main() { lua_State *L = lua_open(); luaopen_base(L); luaL_loadstring(L, "function f() print(0) end"); lua_call(L, 0, 0); lua_getglobal(L, "f"); if(lua_pcall(L, 0, 0, 0) != 0) { …

単純なeval

LUA

#include <stdio.h> #include "lua.h" #include "lualib.h" #include "lauxlib.h" int main() { lua_State *L; lua_Debug *ar; L = lua_open(); luaopen_base(L); luaL_loadstring(L, "a = 100 \n print(a)"); if(lua_pcall(L, 0, 0, 0) != 0) { printf("error: %s\n"</stdio.h>…

スタックを調べる

LUA

スタックが良く分からなかったので、調べてみた。 #include <stdio.h> #include "lua.h" #include "lualib.h" #include "lauxlib.h" int main() { lua_State *L = lua_open(); luaL_loadstring(L,"function f(x, y) return x + y end"); printf("top: %d\n", lua_gett</stdio.h>…

スタックを調べる その2

LUA

Rubyへの型変換を考える

LUA

とりあえずこんな感じかな。 Lua Ruby nil nil ブーリアン TrueClass/FalseClass 数値 Float 文字列 String 関数 Proc…じゃなくて独自定義かな? ユーザーデータ いらないっかな。。。 スレッド どうしよ。。。 テーブル Hash 今気づいたけどtrue/falseってB…

組み込みのサンプル

LUA

ちょっとしたサンプル。2chの書き込みから。 #include <stdio.h> #include "lua.h" #include "lualib.h" #include "lauxlib.h" int main() { lua_State *L = lua_open(); luaL_loadstring(L,"function f(x, y) return x + y end"); lua_call(L, 0, 0); lua_getglobal(</stdio.h>…