aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2021-09-15 11:18:41 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2021-09-15 11:18:41 -0300
commit2ff34717227b8046b0fdcb96206f11f5e888664e (patch)
tree112f054406eaa82363716882b4300d4ff98ab2ef
parent9db4bfed6bb9d5828c99c0f24749eedf54d70cc2 (diff)
downloadlua-2ff34717227b8046b0fdcb96206f11f5e888664e.tar.gz
lua-2ff34717227b8046b0fdcb96206f11f5e888664e.tar.bz2
lua-2ff34717227b8046b0fdcb96206f11f5e888664e.zip
Using 'inline' in some functions
According to ISO C, "making a function an inline function suggests that calls to the function be as fast as possible." (Not available in C89.)
-rw-r--r--lapi.c12
-rw-r--r--ldo.c8
-rw-r--r--llimits.h14
-rw-r--r--lvm.c12
-rw-r--r--makefile1
5 files changed, 32 insertions, 15 deletions
diff --git a/lapi.c b/lapi.c
index 34678917..071a06f3 100644
--- a/lapi.c
+++ b/lapi.c
@@ -86,10 +86,12 @@ static TValue *index2value (lua_State *L, int idx) {
86 } 86 }
87} 87}
88 88
89
90
89/* 91/*
90** Convert a valid actual index (not a pseudo-index) to its address. 92** Convert a valid actual index (not a pseudo-index) to its address.
91*/ 93*/
92static StkId index2stack (lua_State *L, int idx) { 94l_sinline StkId index2stack (lua_State *L, int idx) {
93 CallInfo *ci = L->ci; 95 CallInfo *ci = L->ci;
94 if (idx > 0) { 96 if (idx > 0) {
95 StkId o = ci->func + idx; 97 StkId o = ci->func + idx;
@@ -226,7 +228,7 @@ LUA_API void lua_closeslot (lua_State *L, int idx) {
226** Note that we move(copy) only the value inside the stack. 228** Note that we move(copy) only the value inside the stack.
227** (We do not move additional fields that may exist.) 229** (We do not move additional fields that may exist.)
228*/ 230*/
229static void reverse (lua_State *L, StkId from, StkId to) { 231l_sinline void reverse (lua_State *L, StkId from, StkId to) {
230 for (; from < to; from++, to--) { 232 for (; from < to; from++, to--) {
231 TValue temp; 233 TValue temp;
232 setobj(L, &temp, s2v(from)); 234 setobj(L, &temp, s2v(from));
@@ -446,7 +448,7 @@ LUA_API lua_CFunction lua_tocfunction (lua_State *L, int idx) {
446} 448}
447 449
448 450
449static void *touserdata (const TValue *o) { 451l_sinline void *touserdata (const TValue *o) {
450 switch (ttype(o)) { 452 switch (ttype(o)) {
451 case LUA_TUSERDATA: return getudatamem(uvalue(o)); 453 case LUA_TUSERDATA: return getudatamem(uvalue(o));
452 case LUA_TLIGHTUSERDATA: return pvalue(o); 454 case LUA_TLIGHTUSERDATA: return pvalue(o);
@@ -638,7 +640,7 @@ LUA_API int lua_pushthread (lua_State *L) {
638*/ 640*/
639 641
640 642
641static int auxgetstr (lua_State *L, const TValue *t, const char *k) { 643l_sinline int auxgetstr (lua_State *L, const TValue *t, const char *k) {
642 const TValue *slot; 644 const TValue *slot;
643 TString *str = luaS_new(L, k); 645 TString *str = luaS_new(L, k);
644 if (luaV_fastget(L, t, str, slot, luaH_getstr)) { 646 if (luaV_fastget(L, t, str, slot, luaH_getstr)) {
@@ -713,7 +715,7 @@ LUA_API int lua_geti (lua_State *L, int idx, lua_Integer n) {
713} 715}
714 716
715 717
716static int finishrawget (lua_State *L, const TValue *val) { 718l_sinline int finishrawget (lua_State *L, const TValue *val) {
717 if (isempty(val)) /* avoid copying empty items to the stack */ 719 if (isempty(val)) /* avoid copying empty items to the stack */
718 setnilvalue(s2v(L->top)); 720 setnilvalue(s2v(L->top));
719 else 721 else
diff --git a/ldo.c b/ldo.c
index 889cb34b..88b20f95 100644
--- a/ldo.c
+++ b/ldo.c
@@ -407,7 +407,7 @@ StkId luaD_tryfuncTM (lua_State *L, StkId func) {
407** expressions, multiple results for tail calls/single parameters) 407** expressions, multiple results for tail calls/single parameters)
408** separated. 408** separated.
409*/ 409*/
410static void moveresults (lua_State *L, StkId res, int nres, int wanted) { 410l_sinline void moveresults (lua_State *L, StkId res, int nres, int wanted) {
411 StkId firstresult; 411 StkId firstresult;
412 int i; 412 int i;
413 switch (wanted) { /* handle typical cases separately */ 413 switch (wanted) { /* handle typical cases separately */
@@ -499,8 +499,8 @@ void luaD_pretailcall (lua_State *L, CallInfo *ci, StkId func, int narg1) {
499} 499}
500 500
501 501
502static CallInfo *prepCallInfo (lua_State *L, StkId func, int nret, 502l_sinline CallInfo *prepCallInfo (lua_State *L, StkId func, int nret,
503 int mask, StkId top) { 503 int mask, StkId top) {
504 CallInfo *ci = L->ci = next_ci(L); /* new frame */ 504 CallInfo *ci = L->ci = next_ci(L); /* new frame */
505 ci->func = func; 505 ci->func = func;
506 ci->nresults = nret; 506 ci->nresults = nret;
@@ -572,7 +572,7 @@ CallInfo *luaD_precall (lua_State *L, StkId func, int nresults) {
572** number of recursive invocations in the C stack) or nyci (the same 572** number of recursive invocations in the C stack) or nyci (the same
573** plus increment number of non-yieldable calls). 573** plus increment number of non-yieldable calls).
574*/ 574*/
575static void ccall (lua_State *L, StkId func, int nResults, int inc) { 575l_sinline void ccall (lua_State *L, StkId func, int nResults, int inc) {
576 CallInfo *ci; 576 CallInfo *ci;
577 L->nCcalls += inc; 577 L->nCcalls += inc;
578 if (l_unlikely(getCcalls(L) >= LUAI_MAXCCALLS)) 578 if (l_unlikely(getCcalls(L) >= LUAI_MAXCCALLS))
diff --git a/llimits.h b/llimits.h
index 025f1c82..6c56ba5a 100644
--- a/llimits.h
+++ b/llimits.h
@@ -166,6 +166,20 @@ typedef LUAI_UACINT l_uacInt;
166 166
167 167
168/* 168/*
169** Inline functions
170*/
171#if !defined(LUA_USE_C89)
172#define l_inline inline
173#elif defined(__GNUC__)
174#define l_inline __inline__
175#else
176#define l_inline /* empty */
177#endif
178
179#define l_sinline static l_inline
180
181
182/*
169** type for virtual-machine instructions; 183** type for virtual-machine instructions;
170** must be an unsigned with (at least) 4 bytes (see details in lopcodes.h) 184** must be an unsigned with (at least) 4 bytes (see details in lopcodes.h)
171*/ 185*/
diff --git a/lvm.c b/lvm.c
index 29a211c6..bdc8e677 100644
--- a/lvm.c
+++ b/lvm.c
@@ -406,7 +406,7 @@ static int l_strcmp (const TString *ls, const TString *rs) {
406** from float to int.) 406** from float to int.)
407** When 'f' is NaN, comparisons must result in false. 407** When 'f' is NaN, comparisons must result in false.
408*/ 408*/
409static int LTintfloat (lua_Integer i, lua_Number f) { 409l_sinline int LTintfloat (lua_Integer i, lua_Number f) {
410 if (l_intfitsf(i)) 410 if (l_intfitsf(i))
411 return luai_numlt(cast_num(i), f); /* compare them as floats */ 411 return luai_numlt(cast_num(i), f); /* compare them as floats */
412 else { /* i < f <=> i < ceil(f) */ 412 else { /* i < f <=> i < ceil(f) */
@@ -423,7 +423,7 @@ static int LTintfloat (lua_Integer i, lua_Number f) {
423** Check whether integer 'i' is less than or equal to float 'f'. 423** Check whether integer 'i' is less than or equal to float 'f'.
424** See comments on previous function. 424** See comments on previous function.
425*/ 425*/
426static int LEintfloat (lua_Integer i, lua_Number f) { 426l_sinline int LEintfloat (lua_Integer i, lua_Number f) {
427 if (l_intfitsf(i)) 427 if (l_intfitsf(i))
428 return luai_numle(cast_num(i), f); /* compare them as floats */ 428 return luai_numle(cast_num(i), f); /* compare them as floats */
429 else { /* i <= f <=> i <= floor(f) */ 429 else { /* i <= f <=> i <= floor(f) */
@@ -440,7 +440,7 @@ static int LEintfloat (lua_Integer i, lua_Number f) {
440** Check whether float 'f' is less than integer 'i'. 440** Check whether float 'f' is less than integer 'i'.
441** See comments on previous function. 441** See comments on previous function.
442*/ 442*/
443static int LTfloatint (lua_Number f, lua_Integer i) { 443l_sinline int LTfloatint (lua_Number f, lua_Integer i) {
444 if (l_intfitsf(i)) 444 if (l_intfitsf(i))
445 return luai_numlt(f, cast_num(i)); /* compare them as floats */ 445 return luai_numlt(f, cast_num(i)); /* compare them as floats */
446 else { /* f < i <=> floor(f) < i */ 446 else { /* f < i <=> floor(f) < i */
@@ -457,7 +457,7 @@ static int LTfloatint (lua_Number f, lua_Integer i) {
457** Check whether float 'f' is less than or equal to integer 'i'. 457** Check whether float 'f' is less than or equal to integer 'i'.
458** See comments on previous function. 458** See comments on previous function.
459*/ 459*/
460static int LEfloatint (lua_Number f, lua_Integer i) { 460l_sinline int LEfloatint (lua_Number f, lua_Integer i) {
461 if (l_intfitsf(i)) 461 if (l_intfitsf(i))
462 return luai_numle(f, cast_num(i)); /* compare them as floats */ 462 return luai_numle(f, cast_num(i)); /* compare them as floats */
463 else { /* f <= i <=> ceil(f) <= i */ 463 else { /* f <= i <=> ceil(f) <= i */
@@ -473,7 +473,7 @@ static int LEfloatint (lua_Number f, lua_Integer i) {
473/* 473/*
474** Return 'l < r', for numbers. 474** Return 'l < r', for numbers.
475*/ 475*/
476static int LTnum (const TValue *l, const TValue *r) { 476l_sinline int LTnum (const TValue *l, const TValue *r) {
477 lua_assert(ttisnumber(l) && ttisnumber(r)); 477 lua_assert(ttisnumber(l) && ttisnumber(r));
478 if (ttisinteger(l)) { 478 if (ttisinteger(l)) {
479 lua_Integer li = ivalue(l); 479 lua_Integer li = ivalue(l);
@@ -495,7 +495,7 @@ static int LTnum (const TValue *l, const TValue *r) {
495/* 495/*
496** Return 'l <= r', for numbers. 496** Return 'l <= r', for numbers.
497*/ 497*/
498static int LEnum (const TValue *l, const TValue *r) { 498l_sinline int LEnum (const TValue *l, const TValue *r) {
499 lua_assert(ttisnumber(l) && ttisnumber(r)); 499 lua_assert(ttisnumber(l) && ttisnumber(r));
500 if (ttisinteger(l)) { 500 if (ttisinteger(l)) {
501 lua_Integer li = ivalue(l); 501 lua_Integer li = ivalue(l);
diff --git a/makefile b/makefile
index 7cfcbfe1..d46e650c 100644
--- a/makefile
+++ b/makefile
@@ -14,6 +14,7 @@ CWARNSCPP= \
14 -Wredundant-decls \ 14 -Wredundant-decls \
15 -Wdisabled-optimization \ 15 -Wdisabled-optimization \
16 -Wdouble-promotion \ 16 -Wdouble-promotion \
17 -Wmissing-declarations \
17 # the next warnings might be useful sometimes, 18 # the next warnings might be useful sometimes,
18 # but usually they generate too much noise 19 # but usually they generate too much noise
19 # -Werror \ 20 # -Werror \