aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2011-06-28 14:13:52 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2011-06-28 14:13:52 -0300
commit17526ed2fe81c52dd6cf22d90fea7fea62d07229 (patch)
tree5091eb31cce94a2ae028832b190889778fc7ecce
parentf180822fa6f99a27d3c01bb166af53788681d861 (diff)
downloadlua-17526ed2fe81c52dd6cf22d90fea7fea62d07229.tar.gz
lua-17526ed2fe81c52dd6cf22d90fea7fea62d07229.tar.bz2
lua-17526ed2fe81c52dd6cf22d90fea7fea62d07229.zip
no more errors on accesses to 'string' and strings
-rw-r--r--lstrlib.c26
1 files changed, 7 insertions, 19 deletions
diff --git a/lstrlib.c b/lstrlib.c
index 20199fdb..979522ae 100644
--- a/lstrlib.c
+++ b/lstrlib.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lstrlib.c,v 1.168 2011/06/09 18:22:47 roberto Exp roberto $ 2** $Id: lstrlib.c,v 1.169 2011/06/16 14:14:05 roberto Exp roberto $
3** Standard library for string operations and pattern-matching 3** Standard library for string operations and pattern-matching
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -917,15 +917,6 @@ static int str_format (lua_State *L) {
917/* }====================================================== */ 917/* }====================================================== */
918 918
919 919
920static int noindex (lua_State *L) {
921 const char *f = lua_tostring(L, 2);
922 if (f)
923 return luaL_error(L, "no field '%s' in strings", f);
924 else
925 return luaL_error(L, "no such field in strings");
926}
927
928
929static const luaL_Reg strlib[] = { 920static const luaL_Reg strlib[] = {
930 {"byte", str_byte}, 921 {"byte", str_byte},
931 {"char", str_char}, 922 {"char", str_char},
@@ -941,22 +932,19 @@ static const luaL_Reg strlib[] = {
941 {"reverse", str_reverse}, 932 {"reverse", str_reverse},
942 {"sub", str_sub}, 933 {"sub", str_sub},
943 {"upper", str_upper}, 934 {"upper", str_upper},
944 {"__index", noindex},
945 {NULL, NULL} 935 {NULL, NULL}
946}; 936};
947 937
948 938
949static void createmetatable (lua_State *L) { 939static void createmetatable (lua_State *L) {
950 /* setmetatable("", {__index = string}) */ 940 lua_createtable(L, 0, 1); /* table to be metatable for strings */
951 lua_pushliteral(L, ""); /* dummy string */ 941 lua_pushliteral(L, ""); /* dummy string */
952 lua_createtable(L, 0, 1); /* create metatable for strings */ 942 lua_pushvalue(L, -2); /* copy table */
953 lua_pushvalue(L, -3); /* set the string library... */ 943 lua_setmetatable(L, -2); /* set table as metatable for strings */
954 lua_setfield(L, -2, "__index"); /* ...as the __index metamethod */
955 lua_setmetatable(L, -2); /* set metatable for strings */
956 lua_pop(L, 1); /* pop dummy string */ 944 lua_pop(L, 1); /* pop dummy string */
957 /* setmetatable(string, string) */ 945 lua_pushvalue(L, -2); /* get string library */
958 lua_pushvalue(L, -1); /* push string library */ 946 lua_setfield(L, -2, "__index"); /* metatable.__index = string */
959 lua_setmetatable(L, -2); /* set it as its own metatable */ 947 lua_pop(L, 1); /* pop metatable */
960} 948}
961 949
962 950