Unified · Split
| @@ -9,7 +9,7 @@ For details and rationale, see http://www.lua.org/license.html . · 8 unmodified lines | |||
| 9 | 9 | ||
| 10 | =============================================================================== | 10 | =============================================================================== |
| 11 | 11 | ||
| 12 | Copyright (C) 1994-2006 Lua.org, PUC-Rio. | 12 | Copyright (C) 1994-2007 Lua.org, PUC-Rio. |
| 13 | 13 | ||
| 14 | Permission is hereby granted, free of charge, to any person obtaining a copy | 14 | Permission is hereby granted, free of charge, to any person obtaining a copy |
| 15 | of this software and associated documentation files (the "Software"), to deal | 15 | of this software and associated documentation files (the "Software"), to deal |
| @@ -14,7 +14,7 @@ HISTORY for Lua 5.1 · 13 unmodified lines | |||
| 14 | API: | 14 | API: |
| 15 | + new functions: lua_createtable, lua_get(set)field, lua_push(to)integer. | 15 | + new functions: lua_createtable, lua_get(set)field, lua_push(to)integer. |
| 16 | + user supplies memory allocator (lua_open becomes lua_newstate). | 16 | + user supplies memory allocator (lua_open becomes lua_newstate). |
| 17 | + luaopen_* functionst must be called through Lua. | 17 | + luaopen_* functions must be called through Lua. |
| 18 | Implementation: | 18 | Implementation: |
| 19 | + new configuration scheme via luaconf.h. | 19 | + new configuration scheme via luaconf.h. |
| 20 | + incremental garbage collection. | 20 | + incremental garbage collection. |
| @@ -8,7 +8,10 @@ INSTALL for Lua 5.1 · 7 unmodified lines | |||
| 8 | Building Lua on Unix systems should be very easy. First do "make" and | 8 | Building Lua on Unix systems should be very easy. First do "make" and |
| 9 | see if your platform is listed. If so, just do "make xxx", where xxx | 9 | see if your platform is listed. If so, just do "make xxx", where xxx |
| 10 | is your platform name. The platforms currently supported are: | 10 | is your platform name. The platforms currently supported are: |
| 11 | ansi bsd generic linux macosx mingw posix solaris | 11 | aix ansi bsd freebsd generic linux macosx mingw posix solaris |
| 12 | |||
| 13 | If your platform is not listed, try the closest one or posix, generic, | ||
| 14 | ansi, in this order. | ||
| 12 | 15 | ||
| 13 | See below for customization instructions and for instructions on how | 16 | See below for customization instructions and for instructions on how |
| 14 | to build with other Windows compilers. | 17 | to build with other Windows compilers. |
| @@ -81,8 +84,8 @@ INSTALL for Lua 5.1 · 66 unmodified lines | |||
| 81 | 84 | ||
| 82 | compiler: library, luac.c print.c | 85 | compiler: library, luac.c print.c |
| 83 | 86 | ||
| 84 | If you use Visual Studio .NET, you can use etc/luavs.bat | 87 | If you use Visual Studio .NET, you can use etc/luavs.bat in its |
| 85 | in its "Command Prompt". | 88 | "Command Prompt". |
| 86 | 89 | ||
| 87 | If all you want is to build the Lua interpreter, you may put all .c files | 90 | If all you want is to build the Lua interpreter, you may put all .c files |
| 88 | in a single project, except for luac.c and print.c. Or just use etc/all.c. | 91 | in a single project, except for luac.c and print.c. Or just use etc/all.c. |
| @@ -890,8 +890,8 @@ function definitions are explained in <a href="#2.5.9">§2.5.9</a>; · 889 unmodified lines | |||
| 890 | function calls are explained in <a href="#2.5.8">§2.5.8</a>; | 890 | function calls are explained in <a href="#2.5.8">§2.5.8</a>; |
| 891 | table constructors are explained in <a href="#2.5.7">§2.5.7</a>. | 891 | table constructors are explained in <a href="#2.5.7">§2.5.7</a>. |
| 892 | Vararg expressions, | 892 | Vararg expressions, |
| 893 | denoted by three dots ('<code>...</code>'), can only be used inside | 893 | denoted by three dots ('<code>...</code>'), can only be used when |
| 894 | vararg functions; | 894 | directly inside a vararg function; |
| 895 | they are explained in <a href="#2.5.9">§2.5.9</a>. | 895 | they are explained in <a href="#2.5.9">§2.5.9</a>. |
| 896 | 896 | ||
| 897 | 897 | ||
| @@ -3222,7 +3222,7 @@ and returns this address. · 2324 unmodified lines | |||
| 3222 | 3222 | ||
| 3223 | 3223 | ||
| 3224 | <p> | 3224 | <p> |
| 3225 | Userdata represents C values in Lua. | 3225 | Userdata represent C values in Lua. |
| 3226 | A <em>full userdata</em> represents a block of memory. | 3226 | A <em>full userdata</em> represents a block of memory. |
| 3227 | It is an object (like a table): | 3227 | It is an object (like a table): |
| 3228 | you must create it, it can have its own metatable, | 3228 | you must create it, it can have its own metatable, |
| @@ -3498,7 +3498,7 @@ Pushes a light userdata onto the stack. · 269 unmodified lines | |||
| 3498 | 3498 | ||
| 3499 | 3499 | ||
| 3500 | <p> | 3500 | <p> |
| 3501 | Userdata represents C values in Lua. | 3501 | Userdata represent C values in Lua. |
| 3502 | A <em>light userdata</em> represents a pointer. | 3502 | A <em>light userdata</em> represents a pointer. |
| 3503 | It is a value (like a number): | 3503 | It is a value (like a number): |
| 3504 | you do not create it, it has no individual metatable, | 3504 | you do not create it, it has no individual metatable, |
| @@ -8511,7 +8511,7 @@ Here is the complete syntax of Lua in extended BNF. · 5006 unmodified lines | |||
| 8511 | <HR> | 8511 | <HR> |
| 8512 | <SMALL> | 8512 | <SMALL> |
| 8513 | Last update: | 8513 | Last update: |
| 8514 | Fri Mar 23 14:37:09 BRT 2007 | 8514 | Mon Mar 26 12:59:26 BRT 2007 |
| 8515 | </SMALL> | 8515 | </SMALL> |
| 8516 | <!-- | 8516 | <!-- |
| 8517 | Last change: ready for Lua 5.1.2 | 8517 | Last change: ready for Lua 5.1.2 |
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: loadlib.c,v 1.52 2006/04/10 18:27:23 roberto Exp $ | 2 | ** $Id: loadlib.c,v 1.54a 2006/07/03 20:16:49 roberto Exp $ |
| 3 | ** Dynamic library loader for Lua | 3 | ** Dynamic library loader for Lua |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | ** | 5 | ** |
| @@ -16,9 +16,9 @@ · 10 unmodified lines | |||
| 16 | #define loadlib_c | 16 | #define loadlib_c |
| 17 | #define LUA_LIB | 17 | #define LUA_LIB |
| 18 | 18 | ||
| 19 | #include "lauxlib.h" | ||
| 20 | #include "lobject.h" | ||
| 21 | #include "lua.h" | 19 | #include "lua.h" |
| 20 | |||
| 21 | #include "lauxlib.h" | ||
| 22 | #include "lualib.h" | 22 | #include "lualib.h" |
| 23 | 23 | ||
| 24 | 24 | ||
| @@ -356,15 +356,16 @@ static const char *findfile (lua_State *L, const char *name, · 331 unmodified lines | |||
| 356 | path = lua_tostring(L, -1); | 356 | path = lua_tostring(L, -1); |
| 357 | if (path == NULL) | 357 | if (path == NULL) |
| 358 | luaL_error(L, LUA_QL("package.%s") " must be a string", pname); | 358 | luaL_error(L, LUA_QL("package.%s") " must be a string", pname); |
| 359 | lua_pushstring(L, ""); /* error accumulator */ | 359 | lua_pushliteral(L, ""); /* error accumulator */ |
| 360 | while ((path = pushnexttemplate(L, path)) != NULL) { | 360 | while ((path = pushnexttemplate(L, path)) != NULL) { |
| 361 | const char *filename; | 361 | const char *filename; |
| 362 | filename = luaL_gsub(L, lua_tostring(L, -1), LUA_PATH_MARK, name); | 362 | filename = luaL_gsub(L, lua_tostring(L, -1), LUA_PATH_MARK, name); |
| 363 | lua_remove(L, -2); /* remove path template */ | ||
| 363 | if (readable(filename)) /* does file exist and is readable? */ | 364 | if (readable(filename)) /* does file exist and is readable? */ |
| 364 | return filename; /* return that file name */ | 365 | return filename; /* return that file name */ |
| 365 | lua_pop(L, 2); /* remove path template and file name */ | 366 | lua_pushfstring(L, "\n\tno file " LUA_QS, filename); |
| 366 | luaO_pushfstring(L, "\n\tno file " LUA_QS, filename); | 367 | lua_remove(L, -2); /* remove file name */ |
| 367 | lua_concat(L, 2); | 368 | lua_concat(L, 2); /* add entry to possible error message */ |
| 368 | } | 369 | } |
| 369 | return NULL; /* not found */ | 370 | return NULL; /* not found */ |
| 370 | } | 371 | } |
| @@ -423,8 +424,8 @@ static int loader_Croot (lua_State *L) { · 52 unmodified lines | |||
| 423 | funcname = mkfuncname(L, name); | 424 | funcname = mkfuncname(L, name); |
| 424 | if ((stat = ll_loadfunc(L, filename, funcname)) != 0) { | 425 | if ((stat = ll_loadfunc(L, filename, funcname)) != 0) { |
| 425 | if (stat != ERRFUNC) loaderror(L, filename); /* real error */ | 426 | if (stat != ERRFUNC) loaderror(L, filename); /* real error */ |
| 426 | luaO_pushfstring(L, "\n\tno module " LUA_QS " in file " LUA_QS, | 427 | lua_pushfstring(L, "\n\tno module " LUA_QS " in file " LUA_QS, |
| 427 | name, filename); | 428 | name, filename); |
| 428 | return 1; /* function not found */ | 429 | return 1; /* function not found */ |
| 429 | } | 430 | } |
| 430 | return 1; | 431 | return 1; |
| @@ -438,7 +439,7 @@ static int loader_preload (lua_State *L) { · 7 unmodified lines | |||
| 438 | luaL_error(L, LUA_QL("package.preload") " must be a table"); | 439 | luaL_error(L, LUA_QL("package.preload") " must be a table"); |
| 439 | lua_getfield(L, -1, name); | 440 | lua_getfield(L, -1, name); |
| 440 | if (lua_isnil(L, -1)) /* not found? */ | 441 | if (lua_isnil(L, -1)) /* not found? */ |
| 441 | luaO_pushfstring(L, "\n\tno field package.preload['%s']", name); | 442 | lua_pushfstring(L, "\n\tno field package.preload['%s']", name); |
| 442 | return 1; | 443 | return 1; |
| 443 | } | 444 | } |
| 444 | 445 | ||
| @@ -462,7 +463,7 @@ static int ll_require (lua_State *L) { · 17 unmodified lines | |||
| 462 | lua_getfield(L, LUA_ENVIRONINDEX, "loaders"); | 463 | lua_getfield(L, LUA_ENVIRONINDEX, "loaders"); |
| 463 | if (!lua_istable(L, -1)) | 464 | if (!lua_istable(L, -1)) |
| 464 | luaL_error(L, LUA_QL("package.loaders") " must be a table"); | 465 | luaL_error(L, LUA_QL("package.loaders") " must be a table"); |
| 465 | lua_pushstring(L, ""); /* error message accumulator */ | 466 | lua_pushliteral(L, ""); /* error message accumulator */ |
| 466 | for (i=1; ; i++) { | 467 | for (i=1; ; i++) { |
| 467 | lua_rawgeti(L, -2, i); /* get a loader */ | 468 | lua_rawgeti(L, -2, i); /* get a loader */ |
| 468 | if (lua_isnil(L, -1)) | 469 | if (lua_isnil(L, -1)) |
| @@ -646,8 +647,8 @@ LUALIB_API int luaopen_package (lua_State *L) { · 177 unmodified lines | |||
| 646 | setpath(L, "path", LUA_PATH, LUA_PATH_DEFAULT); /* set field `path' */ | 647 | setpath(L, "path", LUA_PATH, LUA_PATH_DEFAULT); /* set field `path' */ |
| 647 | setpath(L, "cpath", LUA_CPATH, LUA_CPATH_DEFAULT); /* set field `cpath' */ | 648 | setpath(L, "cpath", LUA_CPATH, LUA_CPATH_DEFAULT); /* set field `cpath' */ |
| 648 | /* store config information */ | 649 | /* store config information */ |
| 649 | lua_pushstring(L, LUA_DIRSEP "\n" LUA_PATHSEP "\n" LUA_PATH_MARK "\n" | 650 | lua_pushliteral(L, LUA_DIRSEP "\n" LUA_PATHSEP "\n" LUA_PATH_MARK "\n" |
| 650 | LUA_EXECDIR "\n" LUA_IGMARK); | 651 | LUA_EXECDIR "\n" LUA_IGMARK); |
| 651 | lua_setfield(L, -2, "config"); | 652 | lua_setfield(L, -2, "config"); |
| 652 | /* set field `loaded' */ | 653 | /* set field `loaded' */ |
| 653 | luaL_findtable(L, LUA_REGISTRYINDEX, "_LOADED", 2); | 654 | luaL_findtable(L, LUA_REGISTRYINDEX, "_LOADED", 2); |
| @@ -165,7 +165,7 @@ static int call_binTM (lua_State *L, const TValue *p1, const TValue *p2, · 164 unmodified lines | |||
| 165 | const TValue *tm = luaT_gettmbyobj(L, p1, event); /* try first operand */ | 165 | const TValue *tm = luaT_gettmbyobj(L, p1, event); /* try first operand */ |
| 166 | if (ttisnil(tm)) | 166 | if (ttisnil(tm)) |
| 167 | tm = luaT_gettmbyobj(L, p2, event); /* try second operand */ | 167 | tm = luaT_gettmbyobj(L, p2, event); /* try second operand */ |
| 168 | if (!ttisfunction(tm)) return 0; | 168 | if (ttisnil(tm)) return 0; |
| 169 | callTMres(L, res, tm, p1, p2); | 169 | callTMres(L, res, tm, p1, p2); |
| 170 | return 1; | 170 | return 1; |
| 171 | } | 171 | } |
| @@ -285,7 +285,7 @@ void luaV_concat (lua_State *L, int total, int last) { · 113 unmodified lines | |||
| 285 | if (!call_binTM(L, top-2, top-1, top-2, TM_CONCAT)) | 285 | if (!call_binTM(L, top-2, top-1, top-2, TM_CONCAT)) |
| 286 | luaG_concaterror(L, top-2, top-1); | 286 | luaG_concaterror(L, top-2, top-1); |
| 287 | } else if (tsvalue(top-1)->len == 0) /* second op is empty? */ | 287 | } else if (tsvalue(top-1)->len == 0) /* second op is empty? */ |
| 288 | tostring(L, top - 2); /* result is first op (as string) */ | 288 | (void)tostring(L, top - 2); /* result is first op (as string) */ |
| 289 | else { | 289 | else { |
| 290 | /* at least two string values; get as many as possible */ | 290 | /* at least two string values; get as many as possible */ |
| 291 | size_t tl = tsvalue(top-1)->len; | 291 | size_t tl = tsvalue(top-1)->len; |
| @@ -23,8 +23,7 @@ · 22 unmodified lines | |||
| 23 | static void PrintString(const TString* ts) | 23 | static void PrintString(const TString* ts) |
| 24 | { | 24 | { |
| 25 | const char* s=getstr(ts); | 25 | const char* s=getstr(ts); |
| 26 | int n=ts->tsv.len; | 26 | size_t i,n=ts->tsv.len; |
| 27 | int i; | ||
| 28 | putchar('"'); | 27 | putchar('"'); |
| 29 | for (i=0; i<n; i++) | 28 | for (i=0; i<n; i++) |
| 30 | { | 29 | { |