1
0
mirror of https://github.com/lua/lua.git synced 2025-01-28 06:03:00 +08:00

^ operator is defined by global `__pow'

This commit is contained in:
Roberto Ierusalimschy 2003-03-11 09:30:37 -03:00
parent 034de1fe73
commit 4039bf457d
2 changed files with 5 additions and 6 deletions

View File

@ -1,5 +1,5 @@
/*
** $Id: lmathlib.c,v 1.54 2002/12/20 10:26:33 roberto Exp roberto $
** $Id: lmathlib.c,v 1.55 2003/03/11 12:24:34 roberto Exp roberto $
** Standard mathematical library
** See Copyright Notice in lua.h
*/
@ -240,7 +240,7 @@ LUALIB_API int luaopen_math (lua_State *L) {
lua_settable(L, -3);
lua_pushliteral(L, "__pow");
lua_pushcfunction(L, math_pow);
lua_settable(L, LUA_REGISTRYINDEX);
lua_settable(L, LUA_GLOBALSINDEX);
return 1;
}

7
lvm.c
View File

@ -1,5 +1,5 @@
/*
** $Id: lvm.c,v 1.280 2003/03/06 19:37:42 roberto Exp roberto $
** $Id: lvm.c,v 1.281 2003/03/07 13:21:31 roberto Exp roberto $
** Lua virtual machine
** See Copyright Notice in lua.h
*/
@ -357,11 +357,10 @@ static void Arith (lua_State *L, StkId ra,
case TM_MUL: setnvalue(ra, nvalue(b) * nvalue(c)); break;
case TM_DIV: setnvalue(ra, nvalue(b) / nvalue(c)); break;
case TM_POW: {
const TObject *f = luaH_getstr(hvalue(registry(L)),
G(L)->tmname[TM_POW]);
const TObject *f = luaH_getstr(hvalue(gt(L)), G(L)->tmname[TM_POW]);
ptrdiff_t res = savestack(L, ra);
if (!ttisfunction(f))
luaG_runerror(L, "`pow' (for `^' operator) is not a function");
luaG_runerror(L, "`__pow' (`^' operator) is not a function");
callTMres(L, f, b, c);
ra = restorestack(L, res); /* previous call may change stack */
setobjs2s(ra, L->top);