X-Git-Url: http://git.madism.org/?a=blobdiff_plain;f=tools%2Fcpkg2c.mll;h=57e825895b6d07158aa9c61b6190ec68aceac110;hb=8f75834aeadb902879602a82a259f4d3bf9c569c;hp=b33cf84c0db16f4ca8297ceba4f08f4f0087594a;hpb=597020b9829312a50c15784916f473da9e75efd0;p=apps%2Fmadmutt.git diff --git a/tools/cpkg2c.mll b/tools/cpkg2c.mll index b33cf84..57e8258 100644 --- a/tools/cpkg2c.mll +++ b/tools/cpkg2c.mll @@ -31,6 +31,14 @@ let put_line = printf "#line %d \"%s\"\n" + let isspace = function |' '|'\t' -> true | _ -> false + + let strip s = + let l = ref 0 and r = ref (String.length s) in + while (isspace s.[!l] && !l < !r) do incr l done; + while (isspace s.[!r - 1] && !l < !r) do decr r done; + String.sub s !l (!r - !l) + (* @types related {{{ *) type typedef = @@ -91,9 +99,9 @@ | [t] -> (false, type_find lpos fpos t) | _ -> assert false in - match s with + match strip s with | "void" -> [] - | s -> List.map aux (Str.split (Str.regexp "[ \t]+,[ \t]+") s) + | s -> List.map aux (Str.split (Str.regexp "[ \t]*,[ \t]*") s) let parse_args lpos fpos s = let aux t = @@ -102,9 +110,9 @@ | [t; n] -> ((false, type_find lpos fpos t), n) | _ -> assert false in - match s with + match strip s with | "void" -> [] - | s -> List.map aux (Str.split (Str.regexp "[ \t]+,[ \t]+") s) + | s -> List.map aux (Str.split (Str.regexp "[ \t]*,[ \t]*") s) (* }}} *) (* parsing helpers {{{ *) @@ -415,7 +423,7 @@ and ext_bodycode buf = parse ) 0 fn.args); printf "\n#define RAISE(s) luaL_error(L, (s))\n"; if fn.rettype = [] then ( - printf "#define RETURN return luaM_ret_%s_%s(L)\n" pkg.name fn.fname + printf "#define RETURN() return luaM_ret_%s_%s(L)\n" pkg.name fn.fname ) else ( printf "#define RETURN(luaM_x1"; for i = 2 to retlen do printf ", luaM_x%d" i done; @@ -524,7 +532,7 @@ int luaopen_%s(lua_State *L) luaL_newmetatable(L, \"%s\"); mt = lua_gettop(L); - lua_pushliteral(L, \"%s\"); + lua_pushliteral(L, \"__index\"); lua_pushvalue(L, mt); /* upvalue 1 */ lua_pushvalue(L, methods); /* upvalue 2 */ lua_pushcclosure(L, &luaM_%s_index, 2); @@ -541,8 +549,8 @@ int luaopen_%s(lua_State *L) lua_setmetatable(L, methods); - lua_pop(L, 1); /* drop mt */ - return 1; /* return methods */ + lua_pop(L, 2); /* drop mt + methods */ + return 1; } ")