aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2000-04-03 10:44:55 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2000-04-03 10:44:55 -0300
commit3e45496295bef65692f690d1633a9ce6ad9408b0 (patch)
tree6ca6562cde4480463b46be0bbd4693543d32e67e
parente30327728ca4efc3fb8591cf3ea0b65cafbd907a (diff)
downloadlua-3e45496295bef65692f690d1633a9ce6ad9408b0.tar.gz
lua-3e45496295bef65692f690d1633a9ce6ad9408b0.tar.bz2
lua-3e45496295bef65692f690d1633a9ce6ad9408b0.zip
syntactical details
-rw-r--r--lparser.c30
1 files changed, 13 insertions, 17 deletions
diff --git a/lparser.c b/lparser.c
index 5f0b6adb..05832288 100644
--- a/lparser.c
+++ b/lparser.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lparser.c,v 1.73 2000/03/24 17:26:08 roberto Exp roberto $ 2** $Id: lparser.c,v 1.74 2000/03/29 20:19:20 roberto Exp roberto $
3** LL(1) Parser and code generator for Lua 3** LL(1) Parser and code generator for Lua
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -901,17 +901,16 @@ static int funcname (LexState *ls, expdesc *v) {
901} 901}
902 902
903 903
904static int funcstat (LexState *ls, int line) { 904static void funcstat (LexState *ls, int line) {
905 /* funcstat -> FUNCTION funcname body */ 905 /* funcstat -> FUNCTION funcname body */
906 int needself; 906 int needself;
907 expdesc v; 907 expdesc v;
908 if (ls->fs->prev) /* inside other function? */ 908 if (ls->fs->prev) /* inside other function? */
909 return 0; 909 luaK_error(ls, "cannot nest this kind of function declaration");
910 setline_and_next(ls); /* skip FUNCTION */ 910 setline_and_next(ls); /* skip FUNCTION */
911 needself = funcname(ls, &v); 911 needself = funcname(ls, &v);
912 body(ls, needself, line); 912 body(ls, needself, line);
913 luaK_storevar(ls, &v); 913 luaK_storevar(ls, &v);
914 return 1;
915} 914}
916 915
917 916
@@ -969,42 +968,39 @@ static int stat (LexState *ls) {
969 case TK_IF: /* stat -> IF ifpart END */ 968 case TK_IF: /* stat -> IF ifpart END */
970 ifpart(ls); 969 ifpart(ls);
971 check_END(ls, TK_IF, line); 970 check_END(ls, TK_IF, line);
972 return 1; 971 break;
973 972
974 case TK_WHILE: /* stat -> whilestat */ 973 case TK_WHILE: /* stat -> whilestat */
975 whilestat(ls, line); 974 whilestat(ls, line);
976 return 1; 975 break;
977 976
978 case TK_DO: { /* stat -> DO block END */ 977 case TK_DO: { /* stat -> DO block END */
979 setline_and_next(ls); /* skip DO */ 978 setline_and_next(ls); /* skip DO */
980 block(ls); 979 block(ls);
981 check_END(ls, TK_DO, line); 980 check_END(ls, TK_DO, line);
982 return 1; 981 break;
983 } 982 }
984 983
985 case TK_REPEAT: /* stat -> repeatstat */ 984 case TK_REPEAT: /* stat -> repeatstat */
986 repeatstat(ls, line); 985 repeatstat(ls, line);
987 return 1; 986 break;
988 987
989 case TK_FUNCTION: /* stat -> funcstat */ 988 case TK_FUNCTION: /* stat -> funcstat */
990 return funcstat(ls, line); 989 funcstat(ls, line);
990 break;
991 991
992 case TK_LOCAL: /* stat -> localstat */ 992 case TK_LOCAL: /* stat -> localstat */
993 localstat(ls); 993 localstat(ls);
994 return 1; 994 break;
995 995
996 case TK_NAME: case '%': /* stat -> namestat */ 996 case TK_NAME: case '%': /* stat -> namestat */
997 namestat(ls); 997 namestat(ls);
998 return 1; 998 break;
999
1000 case TK_RETURN: case TK_END: case TK_UNTIL:
1001 case ';': case TK_ELSE: case TK_ELSEIF: case TK_EOS: /* `stat' follow */
1002 return 0;
1003 999
1004 default: 1000 default:
1005 error_unexpected(ls); 1001 return 0; /* no statement */
1006 return 0; /* to avoid warnings */
1007 } 1002 }
1003 return 1;
1008} 1004}
1009 1005
1010 1006