diff options
| author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1998-01-07 14:26:48 -0200 |
|---|---|---|
| committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1998-01-07 14:26:48 -0200 |
| commit | 26679b1a48de4f7cfcde985764cb31c78ece4fc3 (patch) | |
| tree | df30c6972204791dd6a792dd36c1dd132bc5dbf4 /liolib.c | |
| parent | e04c2b9aa817ed59b4e05025e0d33bfb3bba8f59 (diff) | |
| download | lua-26679b1a48de4f7cfcde985764cb31c78ece4fc3.tar.gz lua-26679b1a48de4f7cfcde985764cb31c78ece4fc3.tar.bz2 lua-26679b1a48de4f7cfcde985764cb31c78ece4fc3.zip | |
back to upavalues as extra arguments for C closures; this way it's
trivial to make currying.
Diffstat (limited to 'liolib.c')
| -rw-r--r-- | liolib.c | 20 |
1 files changed, 11 insertions, 9 deletions
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: liolib.c,v 1.12 1997/12/18 19:11:43 roberto Exp roberto $ | 2 | ** $Id: liolib.c,v 1.13 1997/12/26 18:38:16 roberto Exp roberto $ |
| 3 | ** Standard I/O (and system) library | 3 | ** Standard I/O (and system) library |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -34,6 +34,8 @@ | |||
| 34 | #define CLOSEDTAG 2 | 34 | #define CLOSEDTAG 2 |
| 35 | #define IOTAG 1 | 35 | #define IOTAG 1 |
| 36 | 36 | ||
| 37 | #define FIRSTARG 3 /* 1st and 2nd are upvalues */ | ||
| 38 | |||
| 37 | #define FINPUT "_INPUT" | 39 | #define FINPUT "_INPUT" |
| 38 | #define FOUTPUT "_OUTPUT" | 40 | #define FOUTPUT "_OUTPUT" |
| 39 | 41 | ||
| @@ -49,7 +51,7 @@ int pclose(); | |||
| 49 | 51 | ||
| 50 | static int gettag (int i) | 52 | static int gettag (int i) |
| 51 | { | 53 | { |
| 52 | return lua_getnumber(lua_upvalue(i)); | 54 | return lua_getnumber(lua_getparam(i)); |
| 53 | } | 55 | } |
| 54 | 56 | ||
| 55 | 57 | ||
| @@ -124,7 +126,7 @@ static void setreturn (FILE *f, char *name) | |||
| 124 | static void io_readfrom (void) | 126 | static void io_readfrom (void) |
| 125 | { | 127 | { |
| 126 | FILE *current; | 128 | FILE *current; |
| 127 | lua_Object f = lua_getparam(1); | 129 | lua_Object f = lua_getparam(FIRSTARG); |
| 128 | if (f == LUA_NOOBJECT) { | 130 | if (f == LUA_NOOBJECT) { |
| 129 | closefile(FINPUT); | 131 | closefile(FINPUT); |
| 130 | current = stdin; | 132 | current = stdin; |
| @@ -132,7 +134,7 @@ static void io_readfrom (void) | |||
| 132 | else if (lua_tag(f) == gettag(IOTAG)) | 134 | else if (lua_tag(f) == gettag(IOTAG)) |
| 133 | current = lua_getuserdata(f); | 135 | current = lua_getuserdata(f); |
| 134 | else { | 136 | else { |
| 135 | char *s = luaL_check_string(1); | 137 | char *s = luaL_check_string(FIRSTARG); |
| 136 | current = (*s == '|') ? popen(s+1, "r") : fopen(s, "r"); | 138 | current = (*s == '|') ? popen(s+1, "r") : fopen(s, "r"); |
| 137 | if (current == NULL) { | 139 | if (current == NULL) { |
| 138 | pushresult(0); | 140 | pushresult(0); |
| @@ -146,7 +148,7 @@ static void io_readfrom (void) | |||
| 146 | static void io_writeto (void) | 148 | static void io_writeto (void) |
| 147 | { | 149 | { |
| 148 | FILE *current; | 150 | FILE *current; |
| 149 | lua_Object f = lua_getparam(1); | 151 | lua_Object f = lua_getparam(FIRSTARG); |
| 150 | if (f == LUA_NOOBJECT) { | 152 | if (f == LUA_NOOBJECT) { |
| 151 | closefile(FOUTPUT); | 153 | closefile(FOUTPUT); |
| 152 | current = stdout; | 154 | current = stdout; |
| @@ -154,7 +156,7 @@ static void io_writeto (void) | |||
| 154 | else if (lua_tag(f) == gettag(IOTAG)) | 156 | else if (lua_tag(f) == gettag(IOTAG)) |
| 155 | current = lua_getuserdata(f); | 157 | current = lua_getuserdata(f); |
| 156 | else { | 158 | else { |
| 157 | char *s = luaL_check_string(1); | 159 | char *s = luaL_check_string(FIRSTARG); |
| 158 | current = (*s == '|') ? popen(s+1,"w") : fopen(s,"w"); | 160 | current = (*s == '|') ? popen(s+1,"w") : fopen(s,"w"); |
| 159 | if (current == NULL) { | 161 | if (current == NULL) { |
| 160 | pushresult(0); | 162 | pushresult(0); |
| @@ -167,7 +169,7 @@ static void io_writeto (void) | |||
| 167 | 169 | ||
| 168 | static void io_appendto (void) | 170 | static void io_appendto (void) |
| 169 | { | 171 | { |
| 170 | char *s = luaL_check_string(1); | 172 | char *s = luaL_check_string(FIRSTARG); |
| 171 | FILE *fp = fopen (s, "a"); | 173 | FILE *fp = fopen (s, "a"); |
| 172 | if (fp != NULL) | 174 | if (fp != NULL) |
| 173 | setreturn(fp, FOUTPUT); | 175 | setreturn(fp, FOUTPUT); |
| @@ -180,7 +182,7 @@ static void io_appendto (void) | |||
| 180 | 182 | ||
| 181 | static void io_read (void) | 183 | static void io_read (void) |
| 182 | { | 184 | { |
| 183 | int arg = 1; | 185 | int arg = FIRSTARG; |
| 184 | FILE *f = getfileparam(FINPUT, &arg); | 186 | FILE *f = getfileparam(FINPUT, &arg); |
| 185 | char *buff; | 187 | char *buff; |
| 186 | char *p = luaL_opt_string(arg, "[^\n]*{\n}"); | 188 | char *p = luaL_opt_string(arg, "[^\n]*{\n}"); |
| @@ -232,7 +234,7 @@ static void io_read (void) | |||
| 232 | 234 | ||
| 233 | static void io_write (void) | 235 | static void io_write (void) |
| 234 | { | 236 | { |
| 235 | int arg = 1; | 237 | int arg = FIRSTARG; |
| 236 | FILE *f = getfileparam(FOUTPUT, &arg); | 238 | FILE *f = getfileparam(FOUTPUT, &arg); |
| 237 | int status = 1; | 239 | int status = 1; |
| 238 | char *s; | 240 | char *s; |
