aboutsummaryrefslogtreecommitdiff
path: root/lbuiltin.c
diff options
context:
space:
mode:
Diffstat (limited to 'lbuiltin.c')
-rw-r--r--lbuiltin.c88
1 files changed, 45 insertions, 43 deletions
diff --git a/lbuiltin.c b/lbuiltin.c
index a6282b06..2e5833ed 100644
--- a/lbuiltin.c
+++ b/lbuiltin.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lbuiltin.c,v 1.110 2000/05/24 13:54:49 roberto Exp roberto $ 2** $Id: lbuiltin.c,v 1.111 2000/05/26 19:17:57 roberto Exp roberto $
3** Built-in functions 3** Built-in functions
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -438,10 +438,49 @@ void luaB_tremove (lua_State *L) {
438} 438}
439 439
440 440
441static void luaB_foreachi (lua_State *L) {
442 const Hash *t = gettable(L, 1);
443 int n = (int)getnarg(L, t);
444 int i;
445 lua_Object f = luaL_functionarg(L, 2);
446 luaD_checkstack(L, 3); /* for f, key, and val */
447 for (i=1; i<=n; i++) {
448 *(L->top++) = *f;
449 ttype(L->top) = TAG_NUMBER; nvalue(L->top++) = i;
450 *(L->top++) = *luaH_getnum(t, i);
451 luaD_call(L, L->top-3, 1);
452 if (ttype(L->top-1) != TAG_NIL)
453 return;
454 L->top--; /* remove nil result */
455 }
456}
457
458
459static void luaB_foreach (lua_State *L) {
460 const Hash *a = gettable(L, 1);
461 lua_Object f = luaL_functionarg(L, 2);
462 int i;
463 luaD_checkstack(L, 3); /* for f, key, and val */
464 for (i=0; i<a->size; i++) {
465 const Node *nd = &(a->node[i]);
466 if (ttype(val(nd)) != TAG_NIL) {
467 *(L->top++) = *f;
468 *(L->top++) = *key(nd);
469 *(L->top++) = *val(nd);
470 luaD_call(L, L->top-3, 1);
471 if (ttype(L->top-1) != TAG_NIL)
472 return;
473 L->top--; /* remove result */
474 }
475 }
476}
477
478
441/* 479/*
442** {====================================================== 480** {======================================================
443** Quicksort 481** Quicksort
444** (based on `Algorithms in MODULA-3', Robert Sedgewick; Addison-Wesley, 1993.) 482** (based on `Algorithms in MODULA-3', Robert Sedgewick;
483** Addison-Wesley, 1993.)
445*/ 484*/
446 485
447static void swap (lua_State *L, Hash *a, int i, int j) { 486static void swap (lua_State *L, Hash *a, int i, int j) {
@@ -539,43 +578,6 @@ void luaB_sort (lua_State *L) {
539 578
540#ifdef LUA_DEPRECATETFUNCS 579#ifdef LUA_DEPRECATETFUNCS
541 580
542static void luaB_foreachi (lua_State *L) {
543 const Hash *t = gettable(L, 1);
544 int n = (int)getnarg(L, t);
545 int i;
546 lua_Object f = luaL_functionarg(L, 2);
547 luaD_checkstack(L, 3); /* for f, key, and val */
548 for (i=1; i<=n; i++) {
549 *(L->top++) = *f;
550 ttype(L->top) = TAG_NUMBER; nvalue(L->top++) = i;
551 *(L->top++) = *luaH_getnum(t, i);
552 luaD_call(L, L->top-3, 1);
553 if (ttype(L->top-1) != TAG_NIL)
554 return;
555 L->top--; /* remove nil result */
556 }
557}
558
559
560static void luaB_foreach (lua_State *L) {
561 const Hash *a = gettable(L, 1);
562 lua_Object f = luaL_functionarg(L, 2);
563 int i;
564 luaD_checkstack(L, 3); /* for f, key, and val */
565 for (i=0; i<a->size; i++) {
566 const Node *nd = &(a->node[i]);
567 if (ttype(val(nd)) != TAG_NIL) {
568 *(L->top++) = *f;
569 *(L->top++) = *key(nd);
570 *(L->top++) = *val(nd);
571 luaD_call(L, L->top-3, 1);
572 if (ttype(L->top-1) != TAG_NIL)
573 return;
574 L->top--; /* remove result */
575 }
576 }
577}
578
579#define num_deprecated 4 581#define num_deprecated 4
580 582
581static const struct luaL_reg deprecated_global_funcs[num_deprecated] = { 583static const struct luaL_reg deprecated_global_funcs[num_deprecated] = {
@@ -587,8 +589,6 @@ static const struct luaL_reg deprecated_global_funcs[num_deprecated] = {
587 589
588 590
589static const struct luaL_reg other_deprecated_global_funcs[] = { 591static const struct luaL_reg other_deprecated_global_funcs[] = {
590 {"foreach", luaB_foreach},
591 {"foreachi", luaB_foreachi},
592 {"rawgettable", luaB_rawget}, 592 {"rawgettable", luaB_rawget},
593 {"rawsettable", luaB_rawset} 593 {"rawsettable", luaB_rawset}
594}; 594};
@@ -618,10 +618,10 @@ static void obsolete_func (lua_State *L) {
618} 618}
619 619
620 620
621#define num_deprecated 8 621#define num_deprecated 6
622 622
623static const char *const obsolete_names [num_deprecated] = { 623static const char *const obsolete_names [num_deprecated] = {
624 "foreach", "foreachi", "foreachvar", "nextvar", "rawgetglobal", 624 "foreachvar", "nextvar", "rawgetglobal",
625 "rawgettable", "rawsetglobal", "rawsettable" 625 "rawgettable", "rawsetglobal", "rawsettable"
626}; 626};
627 627
@@ -648,6 +648,8 @@ static const struct luaL_reg builtin_funcs[] = {
648 {"dofile", luaB_dofile}, 648 {"dofile", luaB_dofile},
649 {"dostring", luaB_dostring}, 649 {"dostring", luaB_dostring},
650 {"error", luaB_error}, 650 {"error", luaB_error},
651 {"foreach", luaB_foreach},
652 {"foreachi", luaB_foreachi},
651 {"getglobal", luaB_getglobal}, 653 {"getglobal", luaB_getglobal},
652 {"gettagmethod", luaB_gettagmethod}, 654 {"gettagmethod", luaB_gettagmethod},
653 {"globals", luaB_globals}, 655 {"globals", luaB_globals},