aboutsummaryrefslogtreecommitdiff
path: root/lauxlib.c
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2000-08-28 14:57:04 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2000-08-28 14:57:04 -0300
commit9fdf73bc9a6b4c6afbfff1d8181fface6b1c6761 (patch)
treeda8d97d954e5ffabf9ff275df725f1e0a3a5b3e6 /lauxlib.c
parentf1fd9b5c2c21f24d25d7813f431a3495702ebea6 (diff)
downloadlua-9fdf73bc9a6b4c6afbfff1d8181fface6b1c6761.tar.gz
lua-9fdf73bc9a6b4c6afbfff1d8181fface6b1c6761.tar.bz2
lua-9fdf73bc9a6b4c6afbfff1d8181fface6b1c6761.zip
first version for new API
Diffstat (limited to 'lauxlib.c')
-rw-r--r--lauxlib.c68
1 files changed, 29 insertions, 39 deletions
diff --git a/lauxlib.c b/lauxlib.c
index a657c2c0..2234934b 100644
--- a/lauxlib.c
+++ b/lauxlib.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lauxlib.c,v 1.29 2000/06/12 13:52:05 roberto Exp roberto $ 2** $Id: lauxlib.c,v 1.30 2000/08/09 19:16:57 roberto Exp roberto $
3** Auxiliary functions for building Lua libraries 3** Auxiliary functions for building Lua libraries
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -41,72 +41,61 @@ void luaL_argerror (lua_State *L, int narg, const char *extramsg) {
41} 41}
42 42
43 43
44static void type_error (lua_State *L, int narg, const char *type_name, 44static void type_error (lua_State *L, int narg, const char *type_name) {
45 lua_Object o) {
46 char buff[100]; 45 char buff[100];
47 const char *otype = (o == LUA_NOOBJECT) ? "no value" : lua_type(L, o); 46 const char *rt = lua_type(L, narg);
48 sprintf(buff, "%.10s expected, got %.10s", type_name, otype); 47 if (*rt == 'N') rt = "no value";
48 sprintf(buff, "%.10s expected, got %.10s", type_name, rt);
49 luaL_argerror(L, narg, buff); 49 luaL_argerror(L, narg, buff);
50} 50}
51 51
52 52
53static const char *checkstr (lua_State *L, lua_Object o, int narg, 53/*
54 size_t *len) { 54** use the 3rd letter of type names for testing:
55 const char *s = lua_getstring(L, o); 55** nuMber, niL, stRing, fuNction, usErdata, taBle, anY
56 if (!s) type_error(L, narg, "string", o); 56*/
57 if (len) *len = lua_strlen(L, o); 57void luaL_checktype(lua_State *L, int narg, const char *tname) {
58 const char *rt = lua_type(L, narg);
59 if (!(*rt != 'N' && (tname[2] == 'y' || tname[2] == rt[2])))
60 type_error(L, narg, tname);
61}
62
63
64static const char *checkstr (lua_State *L, int narg, size_t *len) {
65 const char *s = lua_tostring(L, narg);
66 if (!s) type_error(L, narg, "string");
67 if (len) *len = lua_strlen(L, narg);
58 return s; 68 return s;
59} 69}
60 70
61const char *luaL_check_lstr (lua_State *L, int narg, size_t *len) { 71const char *luaL_check_lstr (lua_State *L, int narg, size_t *len) {
62 return checkstr(L, lua_getparam(L, narg), narg, len); 72 return checkstr(L, narg, len);
63} 73}
64 74
65const char *luaL_opt_lstr (lua_State *L, int narg, const char *def, 75const char *luaL_opt_lstr (lua_State *L, int narg, const char *def,
66 size_t *len) { 76 size_t *len) {
67 lua_Object o = lua_getparam(L, narg); 77 if (lua_isnull(L, narg)) {
68 if (o == LUA_NOOBJECT) {
69 if (len) *len = def ? strlen(def) : 0; 78 if (len) *len = def ? strlen(def) : 0;
70 return def; 79 return def;
71 } 80 }
72 else return checkstr(L, o, narg, len); 81 else return checkstr(L, narg, len);
73} 82}
74 83
75double luaL_check_number (lua_State *L, int narg) { 84double luaL_check_number (lua_State *L, int narg) {
76 lua_Object o = lua_getparam(L, narg); 85 if (!lua_isnumber(L, narg)) type_error(L, narg, "number");
77 if (!lua_isnumber(L, o)) type_error(L, narg, "number", o); 86 return lua_tonumber(L, narg);
78 return lua_getnumber(L, o);
79} 87}
80 88
81 89
82double luaL_opt_number (lua_State *L, int narg, double def) { 90double luaL_opt_number (lua_State *L, int narg, double def) {
83 lua_Object o = lua_getparam(L, narg); 91 if (lua_isnull(L, narg)) return def;
84 if (o == LUA_NOOBJECT) return def;
85 else { 92 else {
86 if (!lua_isnumber(L, o)) type_error(L, narg, "number", o); 93 if (!lua_isnumber(L, narg)) type_error(L, narg, "number");
87 return lua_getnumber(L, o); 94 return lua_tonumber(L, narg);
88 } 95 }
89} 96}
90 97
91 98
92lua_Object luaL_tablearg (lua_State *L, int narg) {
93 lua_Object o = lua_getparam(L, narg);
94 if (!lua_istable(L, o)) type_error(L, narg, "table", o);
95 return o;
96}
97
98lua_Object luaL_functionarg (lua_State *L, int narg) {
99 lua_Object o = lua_getparam(L, narg);
100 if (!lua_isfunction(L, o)) type_error(L, narg, "function", o);
101 return o;
102}
103
104lua_Object luaL_nonnullarg (lua_State *L, int narg) {
105 lua_Object o = lua_getparam(L, narg);
106 luaL_arg_check(L, o != LUA_NOOBJECT, narg, "value expected");
107 return o;
108}
109
110void luaL_openlib (lua_State *L, const struct luaL_reg *l, int n) { 99void luaL_openlib (lua_State *L, const struct luaL_reg *l, int n) {
111 int i; 100 int i;
112 for (i=0; i<n; i++) 101 for (i=0; i<n; i++)
@@ -150,3 +139,4 @@ void luaL_filesource (char *out, const char *filename, int len) {
150 if (filename == NULL) filename = "(stdin)"; 139 if (filename == NULL) filename = "(stdin)";
151 sprintf(out, "@%.*s", len-2, filename); /* -2 for '@' and '\0' */ 140 sprintf(out, "@%.*s", len-2, filename); /* -2 for '@' and '\0' */
152} 141}
142