mirror of https://github.com/rusefi/lua.git
pow operation is defined in mathlib.c
This commit is contained in:
parent
9bee23fd05
commit
a84aa11f71
25
mathlib.c
25
mathlib.c
|
@ -3,7 +3,7 @@
|
||||||
** Mathematics library to LUA
|
** Mathematics library to LUA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
char *rcs_mathlib="$Id: mathlib.c,v 1.3 1994/08/15 14:13:44 celes Exp celes $";
|
char *rcs_mathlib="$Id: mathlib.c,v 1.4 1994/10/11 13:06:47 celes Exp roberto $";
|
||||||
|
|
||||||
#include <stdio.h> /* NULL */
|
#include <stdio.h> /* NULL */
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
@ -160,17 +160,28 @@ static void math_sqrt (void)
|
||||||
lua_pushnumber (sqrt(d));
|
lua_pushnumber (sqrt(d));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int old_pow;
|
||||||
|
|
||||||
static void math_pow (void)
|
static void math_pow (void)
|
||||||
{
|
{
|
||||||
double d1, d2;
|
|
||||||
lua_Object o1 = lua_getparam (1);
|
lua_Object o1 = lua_getparam (1);
|
||||||
lua_Object o2 = lua_getparam (2);
|
lua_Object o2 = lua_getparam (2);
|
||||||
if (!lua_isnumber(o1) || !lua_isnumber(o2))
|
lua_Object op = lua_getparam(3);
|
||||||
{ lua_error ("incorrect arguments to function `pow'"); return; }
|
if (!lua_isnumber(o1) || !lua_isnumber(o2) || *(lua_getstring(op)) != 'p')
|
||||||
d1 = lua_getnumber(o1);
|
{
|
||||||
d2 = lua_getnumber(o2);
|
lua_pushobject(o1);
|
||||||
|
lua_pushobject(o2);
|
||||||
|
lua_pushobject(op);
|
||||||
|
if (lua_callfunction(lua_getlocked(old_pow)) != 0)
|
||||||
|
lua_error(NULL);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
double d1 = lua_getnumber(o1);
|
||||||
|
double d2 = lua_getnumber(o2);
|
||||||
lua_pushnumber (pow(d1,d2));
|
lua_pushnumber (pow(d1,d2));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void math_min (void)
|
static void math_min (void)
|
||||||
{
|
{
|
||||||
|
@ -292,7 +303,6 @@ void mathlib_open (void)
|
||||||
lua_register ("floor", math_floor);
|
lua_register ("floor", math_floor);
|
||||||
lua_register ("mod", math_mod);
|
lua_register ("mod", math_mod);
|
||||||
lua_register ("sqrt", math_sqrt);
|
lua_register ("sqrt", math_sqrt);
|
||||||
lua_register ("pow", math_pow);
|
|
||||||
lua_register ("min", math_min);
|
lua_register ("min", math_min);
|
||||||
lua_register ("max", math_max);
|
lua_register ("max", math_max);
|
||||||
lua_register ("log", math_log);
|
lua_register ("log", math_log);
|
||||||
|
@ -300,4 +310,5 @@ void mathlib_open (void)
|
||||||
lua_register ("exp", math_exp);
|
lua_register ("exp", math_exp);
|
||||||
lua_register ("deg", math_deg);
|
lua_register ("deg", math_deg);
|
||||||
lua_register ("rad", math_rad);
|
lua_register ("rad", math_rad);
|
||||||
|
old_pow = lua_lock(lua_setfallback("arith", math_pow));
|
||||||
}
|
}
|
||||||
|
|
32
opcode.c
32
opcode.c
|
@ -3,7 +3,7 @@
|
||||||
** TecCGraf - PUC-Rio
|
** TecCGraf - PUC-Rio
|
||||||
*/
|
*/
|
||||||
|
|
||||||
char *rcs_opcode="$Id: opcode.c,v 3.14 1994/11/17 13:58:57 roberto Exp roberto $";
|
char *rcs_opcode="$Id: opcode.c,v 3.15 1994/11/17 16:41:42 roberto Exp roberto $";
|
||||||
|
|
||||||
#include <setjmp.h>
|
#include <setjmp.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -69,7 +69,7 @@ static void lua_message (char *s)
|
||||||
*/
|
*/
|
||||||
void lua_error (char *s)
|
void lua_error (char *s)
|
||||||
{
|
{
|
||||||
lua_message(s);
|
if (s) lua_message(s);
|
||||||
if (errorJmp)
|
if (errorJmp)
|
||||||
longjmp(*errorJmp, 1);
|
longjmp(*errorJmp, 1);
|
||||||
else
|
else
|
||||||
|
@ -877,19 +877,19 @@ static int lua_execute (Byte *pc, int base)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LTOP:
|
case LTOP:
|
||||||
comparison(LUA_T_NUMBER, LUA_T_NIL, LUA_T_NIL, "<");
|
comparison(LUA_T_NUMBER, LUA_T_NIL, LUA_T_NIL, "lt");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LEOP:
|
case LEOP:
|
||||||
comparison(LUA_T_NUMBER, LUA_T_NUMBER, LUA_T_NIL, "<=");
|
comparison(LUA_T_NUMBER, LUA_T_NUMBER, LUA_T_NIL, "le");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GTOP:
|
case GTOP:
|
||||||
comparison(LUA_T_NIL, LUA_T_NIL, LUA_T_NUMBER, ">");
|
comparison(LUA_T_NIL, LUA_T_NIL, LUA_T_NUMBER, "gt");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GEOP:
|
case GEOP:
|
||||||
comparison(LUA_T_NIL, LUA_T_NUMBER, LUA_T_NUMBER, ">=");
|
comparison(LUA_T_NIL, LUA_T_NUMBER, LUA_T_NUMBER, "ge");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ADDOP:
|
case ADDOP:
|
||||||
|
@ -897,7 +897,7 @@ static int lua_execute (Byte *pc, int base)
|
||||||
Object *l = top-2;
|
Object *l = top-2;
|
||||||
Object *r = top-1;
|
Object *r = top-1;
|
||||||
if (tonumber(r) || tonumber(l))
|
if (tonumber(r) || tonumber(l))
|
||||||
call_arith("+");
|
call_arith("add");
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
nvalue(l) += nvalue(r);
|
nvalue(l) += nvalue(r);
|
||||||
|
@ -911,7 +911,7 @@ static int lua_execute (Byte *pc, int base)
|
||||||
Object *l = top-2;
|
Object *l = top-2;
|
||||||
Object *r = top-1;
|
Object *r = top-1;
|
||||||
if (tonumber(r) || tonumber(l))
|
if (tonumber(r) || tonumber(l))
|
||||||
call_arith("-");
|
call_arith("sub");
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
nvalue(l) -= nvalue(r);
|
nvalue(l) -= nvalue(r);
|
||||||
|
@ -925,7 +925,7 @@ static int lua_execute (Byte *pc, int base)
|
||||||
Object *l = top-2;
|
Object *l = top-2;
|
||||||
Object *r = top-1;
|
Object *r = top-1;
|
||||||
if (tonumber(r) || tonumber(l))
|
if (tonumber(r) || tonumber(l))
|
||||||
call_arith("*");
|
call_arith("mul");
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
nvalue(l) *= nvalue(r);
|
nvalue(l) *= nvalue(r);
|
||||||
|
@ -939,7 +939,7 @@ static int lua_execute (Byte *pc, int base)
|
||||||
Object *l = top-2;
|
Object *l = top-2;
|
||||||
Object *r = top-1;
|
Object *r = top-1;
|
||||||
if (tonumber(r) || tonumber(l))
|
if (tonumber(r) || tonumber(l))
|
||||||
call_arith("/");
|
call_arith("div");
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
nvalue(l) /= nvalue(r);
|
nvalue(l) /= nvalue(r);
|
||||||
|
@ -949,17 +949,7 @@ static int lua_execute (Byte *pc, int base)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case POWOP:
|
case POWOP:
|
||||||
{
|
call_arith("pow");
|
||||||
Object *l = top-2;
|
|
||||||
Object *r = top-1;
|
|
||||||
if (tonumber(r) || tonumber(l))
|
|
||||||
call_arith("^");
|
|
||||||
else
|
|
||||||
{
|
|
||||||
nvalue(l) = pow(nvalue(l), nvalue(r));
|
|
||||||
--top;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CONCOP:
|
case CONCOP:
|
||||||
|
|
Loading…
Reference in New Issue