1
0
Fork 0
forked from len0rd/rockbox

Lua: implement the ^ and % operators

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@22070 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Maurus Cuelenaere 2009-07-27 16:06:51 +00:00
parent 74d4d0db0c
commit 527b069653
2 changed files with 33 additions and 22 deletions

View file

@ -529,13 +529,13 @@
@@ The luai_num* macros define the primitive operations over numbers. @@ The luai_num* macros define the primitive operations over numbers.
*/ */
#if defined(LUA_CORE) #if defined(LUA_CORE)
#include <math.h> extern long rb_pow(long, long);
#define luai_numadd(a,b) ((a)+(b)) #define luai_numadd(a,b) ((a)+(b))
#define luai_numsub(a,b) ((a)-(b)) #define luai_numsub(a,b) ((a)-(b))
#define luai_nummul(a,b) ((a)*(b)) #define luai_nummul(a,b) ((a)*(b))
#define luai_numdiv(a,b) ((a)/(b)) #define luai_numdiv(a,b) ((a)/(b))
#define luai_nummod(a,b) ((a) - floor((a)/(b))*(b)) #define luai_nummod(a,b) ((a)%(b))
#define luai_numpow(a,b) (pow(a,b)) #define luai_numpow(a,b) (rb_pow(a,b))
#define luai_numunm(a) (-(a)) #define luai_numunm(a) (-(a))
#define luai_numeq(a,b) ((a)==(b)) #define luai_numeq(a,b) ((a)==(b))
#define luai_numlt(a,b) ((a)<(b)) #define luai_numlt(a,b) ((a)<(b))

View file

@ -32,28 +32,40 @@ char *strerror(int errnum)
{ {
(void) errnum; (void) errnum;
DEBUGF("strerror()\n"); DEBUGF("strerror(%d)\n", errnum);
return NULL; return NULL;
} }
long floor(long x) long rb_pow(long x, long n)
{ {
(void) x; long pow = 1;
unsigned long u;
DEBUGF("floor()\n"); if(n <= 0)
{
if(n == 0 || x == 1)
return 1;
return 0; if(x != -1)
} return x != 0 ? 1/x : 0;
long pow(long x, long y) n = -n;
{ }
(void) x;
(void) y;
DEBUGF("pow()\n"); u = n;
while(1)
{
if(u & 01)
pow *= x;
return 0; if(u >>= 1)
x *= x;
else
break;
}
return pow;
} }
int strcoll(const char * str1, const char * str2) int strcoll(const char * str1, const char * str2)
@ -91,4 +103,3 @@ const char* get_current_path(lua_State *L, int level)
return NULL; return NULL;
} }