diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2010-12-17 13:14:58 -0200 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2010-12-17 13:14:58 -0200 |
commit | d51743b0c77f7e6a12d06bb139b0a135eb0138dc (patch) | |
tree | 5def9b4ac08ba8d4184c183e00e352e638fad72e | |
parent | 1a92c2b354bd08031a744cb39125a8c5d04349c3 (diff) | |
download | lua-d51743b0c77f7e6a12d06bb139b0a135eb0138dc.tar.gz lua-d51743b0c77f7e6a12d06bb139b0a135eb0138dc.tar.bz2 lua-d51743b0c77f7e6a12d06bb139b0a135eb0138dc.zip |
removed 'newproxy'
-rw-r--r-- | lbaselib.c | 38 |
1 files changed, 1 insertions, 37 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: lbaselib.c,v 1.254 2010/12/08 12:58:04 roberto Exp roberto $ | 2 | ** $Id: lbaselib.c,v 1.255 2010/12/13 16:38:00 roberto Exp roberto $ |
3 | ** Basic library | 3 | ** Basic library |
4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
5 | */ | 5 | */ |
@@ -425,34 +425,6 @@ static int luaB_tostring (lua_State *L) { | |||
425 | } | 425 | } |
426 | 426 | ||
427 | 427 | ||
428 | static int luaB_newproxy (lua_State *L) { | ||
429 | lua_settop(L, 1); | ||
430 | lua_newuserdata(L, 0); /* create proxy */ | ||
431 | if (lua_toboolean(L, 1) == 0) | ||
432 | return 1; /* no metatable */ | ||
433 | else if (lua_isboolean(L, 1)) { | ||
434 | lua_createtable(L, 0, 1); /* create a new metatable `m' ... */ | ||
435 | lua_pushboolean(L, 1); | ||
436 | lua_setfield(L, -2, "__gc"); /* ... m.__gc = true (HACK!!)... */ | ||
437 | lua_pushvalue(L, -1); /* ... and mark `m' as a valid metatable */ | ||
438 | lua_pushboolean(L, 1); | ||
439 | lua_rawset(L, lua_upvalueindex(1)); /* weaktable[m] = true */ | ||
440 | } | ||
441 | else { | ||
442 | int validproxy = 0; /* to check if weaktable[metatable(u)] == true */ | ||
443 | if (lua_getmetatable(L, 1)) { | ||
444 | lua_rawget(L, lua_upvalueindex(1)); | ||
445 | validproxy = lua_toboolean(L, -1); | ||
446 | lua_pop(L, 1); /* remove value */ | ||
447 | } | ||
448 | luaL_argcheck(L, validproxy, 1, "boolean or proxy expected"); | ||
449 | lua_getmetatable(L, 1); /* metatable is valid; get it */ | ||
450 | } | ||
451 | lua_setmetatable(L, 2); | ||
452 | return 1; | ||
453 | } | ||
454 | |||
455 | |||
456 | static const luaL_Reg base_funcs[] = { | 428 | static const luaL_Reg base_funcs[] = { |
457 | {"assert", luaB_assert}, | 429 | {"assert", luaB_assert}, |
458 | {"collectgarbage", luaB_collectgarbage}, | 430 | {"collectgarbage", luaB_collectgarbage}, |
@@ -491,14 +463,6 @@ LUAMOD_API int luaopen_base (lua_State *L) { | |||
491 | luaL_setfuncs(L, base_funcs, 0); | 463 | luaL_setfuncs(L, base_funcs, 0); |
492 | lua_pushliteral(L, LUA_VERSION); | 464 | lua_pushliteral(L, LUA_VERSION); |
493 | lua_setfield(L, -2, "_VERSION"); /* set global _VERSION */ | 465 | lua_setfield(L, -2, "_VERSION"); /* set global _VERSION */ |
494 | /* `newproxy' needs a weaktable as upvalue */ | ||
495 | lua_createtable(L, 0, 1); /* new table `w' */ | ||
496 | lua_pushvalue(L, -1); /* `w' will be its own metatable */ | ||
497 | lua_setmetatable(L, -2); | ||
498 | lua_pushliteral(L, "kv"); | ||
499 | lua_setfield(L, -2, "__mode"); /* metatable(w).__mode = "kv" */ | ||
500 | lua_pushcclosure(L, luaB_newproxy, 1); | ||
501 | lua_setfield(L, -2, "newproxy"); /* set global `newproxy' */ | ||
502 | return 1; | 466 | return 1; |
503 | } | 467 | } |
504 | 468 | ||