mirror of https://github.com/rusefi/lua.git
new functions 'lua_arith' and 'lua_compare'
This commit is contained in:
parent
59a59fafc6
commit
6980cb1aa7
36
lapi.c
36
lapi.c
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
** $Id: lapi.c,v 2.78 2009/06/01 19:09:26 roberto Exp roberto $
|
** $Id: lapi.c,v 2.79 2009/06/15 19:51:31 roberto Exp roberto $
|
||||||
** Lua API
|
** Lua API
|
||||||
** See Copyright Notice in lua.h
|
** See Copyright Notice in lua.h
|
||||||
*/
|
*/
|
||||||
|
@ -275,32 +275,34 @@ LUA_API int lua_rawequal (lua_State *L, int index1, int index2) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
LUA_API int lua_equal (lua_State *L, int index1, int index2) {
|
LUA_API void lua_arith (lua_State *L, int op) {
|
||||||
|
lua_lock(L);
|
||||||
|
api_checknelems(L, 2);
|
||||||
|
luaV_arith(L, L->top - 2, L->top - 2, L->top - 1, op - LUA_OPADD + TM_ADD);
|
||||||
|
L->top--;
|
||||||
|
lua_unlock(L);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
LUA_API int lua_compare (lua_State *L, int index1, int index2, int op) {
|
||||||
StkId o1, o2;
|
StkId o1, o2;
|
||||||
int i;
|
int i;
|
||||||
lua_lock(L); /* may call tag method */
|
lua_lock(L); /* may call tag method */
|
||||||
o1 = index2adr(L, index1);
|
o1 = index2adr(L, index1);
|
||||||
o2 = index2adr(L, index2);
|
o2 = index2adr(L, index2);
|
||||||
i = (o1 == luaO_nilobject || o2 == luaO_nilobject) ? 0 : equalobj(L, o1, o2);
|
if (o1 == luaO_nilobject || o2 == luaO_nilobject)
|
||||||
|
i = 0;
|
||||||
|
else switch (op) {
|
||||||
|
case LUA_OPEQ: i = equalobj(L, o1, o2); break;
|
||||||
|
case LUA_OPLT: i = luaV_lessthan(L, o1, o2); break;
|
||||||
|
case LUA_OPLE: i = luaV_lessequal(L, o1, o2); break;
|
||||||
|
default: api_check(L, 0); i = 0;
|
||||||
|
}
|
||||||
lua_unlock(L);
|
lua_unlock(L);
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
LUA_API int lua_lessthan (lua_State *L, int index1, int index2) {
|
|
||||||
StkId o1, o2;
|
|
||||||
int i;
|
|
||||||
lua_lock(L); /* may call tag method */
|
|
||||||
o1 = index2adr(L, index1);
|
|
||||||
o2 = index2adr(L, index2);
|
|
||||||
i = (o1 == luaO_nilobject || o2 == luaO_nilobject) ? 0
|
|
||||||
: luaV_lessthan(L, o1, o2);
|
|
||||||
lua_unlock(L);
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
LUA_API lua_Number lua_tonumber (lua_State *L, int idx) {
|
LUA_API lua_Number lua_tonumber (lua_State *L, int idx) {
|
||||||
TValue n;
|
TValue n;
|
||||||
const TValue *o = index2adr(L, idx);
|
const TValue *o = index2adr(L, idx);
|
||||||
|
|
16
ltests.c
16
ltests.c
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
** $Id: ltests.c,v 2.64 2009/06/10 16:57:53 roberto Exp roberto $
|
** $Id: ltests.c,v 2.65 2009/06/15 19:51:31 roberto Exp roberto $
|
||||||
** Internal Module for Debugging of the Lua Implementation
|
** Internal Module for Debugging of the Lua Implementation
|
||||||
** See Copyright Notice in lua.h
|
** See Copyright Notice in lua.h
|
||||||
*/
|
*/
|
||||||
|
@ -971,13 +971,17 @@ static int runC (lua_State *L, lua_State *L1, const char *pc) {
|
||||||
else if EQ("concat") {
|
else if EQ("concat") {
|
||||||
lua_concat(L1, getnum);
|
lua_concat(L1, getnum);
|
||||||
}
|
}
|
||||||
else if EQ("lessthan") {
|
else if EQ("arith") {
|
||||||
int a = getindex;
|
static char ops[] = "+-*/%^_";
|
||||||
lua_pushboolean(L1, lua_lessthan(L1, a, getindex));
|
int op;
|
||||||
|
skip(&pc);
|
||||||
|
op = strchr(ops, *pc++) - ops;
|
||||||
|
lua_arith(L, op);
|
||||||
}
|
}
|
||||||
else if EQ("equal") {
|
else if EQ("compare") {
|
||||||
int a = getindex;
|
int a = getindex;
|
||||||
lua_pushboolean(L1, lua_equal(L1, a, getindex));
|
int b = getindex;
|
||||||
|
lua_pushboolean(L1, lua_compare(L1, a, b, getnum));
|
||||||
}
|
}
|
||||||
else if EQ("call") {
|
else if EQ("call") {
|
||||||
int narg = getnum;
|
int narg = getnum;
|
||||||
|
|
31
lua.h
31
lua.h
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
** $Id: lua.h,v 1.237 2009/05/21 20:06:11 roberto Exp roberto $
|
** $Id: lua.h,v 1.238 2009/06/15 19:51:31 roberto Exp roberto $
|
||||||
** Lua - An Extensible Extension Language
|
** Lua - An Extensible Extension Language
|
||||||
** Lua.org, PUC-Rio, Brazil (http://www.lua.org)
|
** Lua.org, PUC-Rio, Brazil (http://www.lua.org)
|
||||||
** See Copyright Notice at the end of this file
|
** See Copyright Notice at the end of this file
|
||||||
|
@ -147,10 +147,6 @@ LUA_API int (lua_isuserdata) (lua_State *L, int idx);
|
||||||
LUA_API int (lua_type) (lua_State *L, int idx);
|
LUA_API int (lua_type) (lua_State *L, int idx);
|
||||||
LUA_API const char *(lua_typename) (lua_State *L, int tp);
|
LUA_API const char *(lua_typename) (lua_State *L, int tp);
|
||||||
|
|
||||||
LUA_API int (lua_equal) (lua_State *L, int idx1, int idx2);
|
|
||||||
LUA_API int (lua_rawequal) (lua_State *L, int idx1, int idx2);
|
|
||||||
LUA_API int (lua_lessthan) (lua_State *L, int idx1, int idx2);
|
|
||||||
|
|
||||||
LUA_API lua_Number (lua_tonumber) (lua_State *L, int idx);
|
LUA_API lua_Number (lua_tonumber) (lua_State *L, int idx);
|
||||||
LUA_API lua_Integer (lua_tointeger) (lua_State *L, int idx);
|
LUA_API lua_Integer (lua_tointeger) (lua_State *L, int idx);
|
||||||
LUA_API int (lua_toboolean) (lua_State *L, int idx);
|
LUA_API int (lua_toboolean) (lua_State *L, int idx);
|
||||||
|
@ -162,6 +158,28 @@ LUA_API lua_State *(lua_tothread) (lua_State *L, int idx);
|
||||||
LUA_API const void *(lua_topointer) (lua_State *L, int idx);
|
LUA_API const void *(lua_topointer) (lua_State *L, int idx);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Comparison and arithmetic functions
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define LUA_OPADD 0 /* ORDER TM */
|
||||||
|
#define LUA_OPSUB 1
|
||||||
|
#define LUA_OPMUL 2
|
||||||
|
#define LUA_OPDIV 3
|
||||||
|
#define LUA_OPMOD 4
|
||||||
|
#define LUA_OPPOW 5
|
||||||
|
#define LUA_OPUNM 6
|
||||||
|
|
||||||
|
LUA_API void (lua_arith) (lua_State *L, int op);
|
||||||
|
|
||||||
|
#define LUA_OPEQ 0
|
||||||
|
#define LUA_OPLT 1
|
||||||
|
#define LUA_OPLE 2
|
||||||
|
|
||||||
|
LUA_API int (lua_rawequal) (lua_State *L, int idx1, int idx2);
|
||||||
|
LUA_API int (lua_compare) (lua_State *L, int idx1, int idx2, int op);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** push functions (C -> stack)
|
** push functions (C -> stack)
|
||||||
*/
|
*/
|
||||||
|
@ -310,6 +328,9 @@ LUA_API void (lua_setallocf) (lua_State *L, lua_Alloc f, void *ud);
|
||||||
#define lua_Chunkreader lua_Reader
|
#define lua_Chunkreader lua_Reader
|
||||||
#define lua_Chunkwriter lua_Writer
|
#define lua_Chunkwriter lua_Writer
|
||||||
|
|
||||||
|
#define lua_equal(L,idx1,idx2) lua_compare(L,(idx1),(idx2),LUA_OPEQ)
|
||||||
|
#define lua_lessthan(L,idx1,idx2) lua_compare(L,(idx1),(idx2),LUA_OPLT)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue