diff options
| author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1997-11-21 17:00:46 -0200 |
|---|---|---|
| committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1997-11-21 17:00:46 -0200 |
| commit | accd7bc25355be4350db6d117515c672121a67f2 (patch) | |
| tree | e351b89ca86b67a3c60874c230626a13517524b8 /llex.c | |
| parent | 6153200bc25bd99f9d3d25d7caa486b03b6535d5 (diff) | |
| download | lua-accd7bc25355be4350db6d117515c672121a67f2.tar.gz lua-accd7bc25355be4350db6d117515c672121a67f2.tar.bz2 lua-accd7bc25355be4350db6d117515c672121a67f2.zip | |
small modifications (format, small optimizations, etc)
Diffstat (limited to 'llex.c')
| -rw-r--r-- | llex.c | 318 |
1 files changed, 159 insertions, 159 deletions
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: llex.c,v 1.6 1997/11/19 17:29:23 roberto Exp roberto $ | 2 | ** $Id: llex.c,v 1.7 1997/11/19 17:35:47 roberto Exp roberto $ |
| 3 | ** Lexical Analizer | 3 | ** Lexical Analizer |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -23,7 +23,7 @@ | |||
| 23 | int lua_debug=0; | 23 | int lua_debug=0; |
| 24 | 24 | ||
| 25 | 25 | ||
| 26 | #define next(LL) (LL->current = zgetc(LL->lex_z)) | 26 | #define next(LS) (LS->current = zgetc(LS->lex_z)) |
| 27 | 27 | ||
| 28 | 28 | ||
| 29 | static struct { | 29 | static struct { |
| @@ -46,29 +46,29 @@ void luaX_init (void) | |||
| 46 | } | 46 | } |
| 47 | 47 | ||
| 48 | 48 | ||
| 49 | static void firstline (LexState *LL) | 49 | static void firstline (LexState *LS) |
| 50 | { | 50 | { |
| 51 | int c = zgetc(LL->lex_z); | 51 | int c = zgetc(LS->lex_z); |
| 52 | if (c == '#') | 52 | if (c == '#') |
| 53 | while((c=zgetc(LL->lex_z)) != '\n' && c != EOZ) /* skip first line */; | 53 | while ((c=zgetc(LS->lex_z)) != '\n' && c != EOZ) /* skip first line */; |
| 54 | zungetc(LL->lex_z); | 54 | zungetc(LS->lex_z); |
| 55 | } | 55 | } |
| 56 | 56 | ||
| 57 | 57 | ||
| 58 | void luaX_setinput (ZIO *z) | 58 | void luaX_setinput (ZIO *z) |
| 59 | { | 59 | { |
| 60 | LexState *LL = L->lexstate; | 60 | LexState *LS = L->lexstate; |
| 61 | LL->current = '\n'; | 61 | LS->current = '\n'; |
| 62 | LL->linelasttoken = 0; | 62 | LS->linelasttoken = 0; |
| 63 | LL->lastline = 0; | 63 | LS->lastline = 0; |
| 64 | LL->linenumber = 0; | 64 | LS->linenumber = 0; |
| 65 | LL->iflevel = 0; | 65 | LS->iflevel = 0; |
| 66 | LL->ifstate[0].skip = 0; | 66 | LS->ifstate[0].skip = 0; |
| 67 | LL->ifstate[0].elsepart = 1; /* to avoid a free $else */ | 67 | LS->ifstate[0].elsepart = 1; /* to avoid a free $else */ |
| 68 | LL->lex_z = z; | 68 | LS->lex_z = z; |
| 69 | firstline(LL); | 69 | firstline(LS); |
| 70 | LL->textbuff.buffsize = 20; | 70 | LS->textbuff.buffsize = 20; |
| 71 | LL->textbuff.text = luaM_buffer(LL->textbuff.buffsize); | 71 | LS->textbuff.text = luaM_buffer(LS->textbuff.buffsize); |
| 72 | } | 72 | } |
| 73 | 73 | ||
| 74 | 74 | ||
| @@ -81,10 +81,10 @@ void luaX_setinput (ZIO *z) | |||
| 81 | 81 | ||
| 82 | #define PRAGMASIZE 20 | 82 | #define PRAGMASIZE 20 |
| 83 | 83 | ||
| 84 | static void skipspace (LexState *LL) | 84 | static void skipspace (LexState *LS) |
| 85 | { | 85 | { |
| 86 | while (LL->current == ' ' || LL->current == '\t' || LL->current == '\r') | 86 | while (LS->current == ' ' || LS->current == '\t' || LS->current == '\r') |
| 87 | next(LL); | 87 | next(LS); |
| 88 | } | 88 | } |
| 89 | 89 | ||
| 90 | 90 | ||
| @@ -102,49 +102,49 @@ static int checkcond (char *buff) | |||
| 102 | } | 102 | } |
| 103 | 103 | ||
| 104 | 104 | ||
| 105 | static void readname (LexState *LL, char *buff) | 105 | static void readname (LexState *LS, char *buff) |
| 106 | { | 106 | { |
| 107 | int i = 0; | 107 | int i = 0; |
| 108 | skipspace(LL); | 108 | skipspace(LS); |
| 109 | while (isalnum(LL->current) || LL->current == '_') { | 109 | while (isalnum(LS->current) || LS->current == '_') { |
| 110 | if (i >= PRAGMASIZE) { | 110 | if (i >= PRAGMASIZE) { |
| 111 | buff[PRAGMASIZE] = 0; | 111 | buff[PRAGMASIZE] = 0; |
| 112 | luaY_syntaxerror("pragma too long", buff); | 112 | luaY_syntaxerror("pragma too long", buff); |
| 113 | } | 113 | } |
| 114 | buff[i++] = LL->current; | 114 | buff[i++] = LS->current; |
| 115 | next(LL); | 115 | next(LS); |
| 116 | } | 116 | } |
| 117 | buff[i] = 0; | 117 | buff[i] = 0; |
| 118 | } | 118 | } |
| 119 | 119 | ||
| 120 | 120 | ||
| 121 | static void inclinenumber (LexState *LL); | 121 | static void inclinenumber (LexState *LS); |
| 122 | 122 | ||
| 123 | 123 | ||
| 124 | static void ifskip (LexState *LL) | 124 | static void ifskip (LexState *LS) |
| 125 | { | 125 | { |
| 126 | while (LL->ifstate[LL->iflevel].skip) { | 126 | while (LS->ifstate[LS->iflevel].skip) { |
| 127 | if (LL->current == '\n') | 127 | if (LS->current == '\n') |
| 128 | inclinenumber(LL); | 128 | inclinenumber(LS); |
| 129 | else if (LL->current == EOZ) | 129 | else if (LS->current == EOZ) |
| 130 | luaY_syntaxerror("input ends inside a $if", ""); | 130 | luaY_syntaxerror("input ends inside a $if", ""); |
| 131 | else next(LL); | 131 | else next(LS); |
| 132 | } | 132 | } |
| 133 | } | 133 | } |
| 134 | 134 | ||
| 135 | 135 | ||
| 136 | static void inclinenumber (LexState *LL) | 136 | static void inclinenumber (LexState *LS) |
| 137 | { | 137 | { |
| 138 | static char *pragmas [] = | 138 | static char *pragmas [] = |
| 139 | {"debug", "nodebug", "endinput", "end", "ifnot", "if", "else", NULL}; | 139 | {"debug", "nodebug", "endinput", "end", "ifnot", "if", "else", NULL}; |
| 140 | next(LL); /* skip '\n' */ | 140 | next(LS); /* skip '\n' */ |
| 141 | ++LL->linenumber; | 141 | ++LS->linenumber; |
| 142 | if (LL->current == '$') { /* is a pragma? */ | 142 | if (LS->current == '$') { /* is a pragma? */ |
| 143 | char buff[PRAGMASIZE+1]; | 143 | char buff[PRAGMASIZE+1]; |
| 144 | int ifnot = 0; | 144 | int ifnot = 0; |
| 145 | int skip = LL->ifstate[LL->iflevel].skip; | 145 | int skip = LS->ifstate[LS->iflevel].skip; |
| 146 | next(LL); /* skip $ */ | 146 | next(LS); /* skip $ */ |
| 147 | readname(LL, buff); | 147 | readname(LS, buff); |
| 148 | switch (luaO_findstring(buff, pragmas)) { | 148 | switch (luaO_findstring(buff, pragmas)) { |
| 149 | case 0: /* debug */ | 149 | case 0: /* debug */ |
| 150 | if (!skip) lua_debug = 1; | 150 | if (!skip) lua_debug = 1; |
| @@ -154,42 +154,42 @@ static void inclinenumber (LexState *LL) | |||
| 154 | break; | 154 | break; |
| 155 | case 2: /* endinput */ | 155 | case 2: /* endinput */ |
| 156 | if (!skip) { | 156 | if (!skip) { |
| 157 | LL->current = EOZ; | 157 | LS->current = EOZ; |
| 158 | LL->iflevel = 0; /* to allow $endinput inside a $if */ | 158 | LS->iflevel = 0; /* to allow $endinput inside a $if */ |
| 159 | } | 159 | } |
| 160 | break; | 160 | break; |
| 161 | case 3: /* end */ | 161 | case 3: /* end */ |
| 162 | if (LL->iflevel-- == 0) | 162 | if (LS->iflevel-- == 0) |
| 163 | luaY_syntaxerror("unmatched $end", "$end"); | 163 | luaY_syntaxerror("unmatched $end", "$end"); |
| 164 | break; | 164 | break; |
| 165 | case 4: /* ifnot */ | 165 | case 4: /* ifnot */ |
| 166 | ifnot = 1; | 166 | ifnot = 1; |
| 167 | /* go through */ | 167 | /* go through */ |
| 168 | case 5: /* if */ | 168 | case 5: /* if */ |
| 169 | if (LL->iflevel == MAX_IFS-1) | 169 | if (LS->iflevel == MAX_IFS-1) |
| 170 | luaY_syntaxerror("too many nested `$ifs'", "$if"); | 170 | luaY_syntaxerror("too many nested `$ifs'", "$if"); |
| 171 | readname(LL, buff); | 171 | readname(LS, buff); |
| 172 | LL->iflevel++; | 172 | LS->iflevel++; |
| 173 | LL->ifstate[LL->iflevel].elsepart = 0; | 173 | LS->ifstate[LS->iflevel].elsepart = 0; |
| 174 | LL->ifstate[LL->iflevel].condition = checkcond(buff) ? !ifnot : ifnot; | 174 | LS->ifstate[LS->iflevel].condition = checkcond(buff) ? !ifnot : ifnot; |
| 175 | LL->ifstate[LL->iflevel].skip = skip || !LL->ifstate[LL->iflevel].condition; | 175 | LS->ifstate[LS->iflevel].skip = skip || !LS->ifstate[LS->iflevel].condition; |
| 176 | break; | 176 | break; |
| 177 | case 6: /* else */ | 177 | case 6: /* else */ |
| 178 | if (LL->ifstate[LL->iflevel].elsepart) | 178 | if (LS->ifstate[LS->iflevel].elsepart) |
| 179 | luaY_syntaxerror("unmatched $else", "$else"); | 179 | luaY_syntaxerror("unmatched $else", "$else"); |
| 180 | LL->ifstate[LL->iflevel].elsepart = 1; | 180 | LS->ifstate[LS->iflevel].elsepart = 1; |
| 181 | LL->ifstate[LL->iflevel].skip = LL->ifstate[LL->iflevel-1].skip || | 181 | LS->ifstate[LS->iflevel].skip = LS->ifstate[LS->iflevel-1].skip || |
| 182 | LL->ifstate[LL->iflevel].condition; | 182 | LS->ifstate[LS->iflevel].condition; |
| 183 | break; | 183 | break; |
| 184 | default: | 184 | default: |
| 185 | luaY_syntaxerror("invalid pragma", buff); | 185 | luaY_syntaxerror("invalid pragma", buff); |
| 186 | } | 186 | } |
| 187 | skipspace(LL); | 187 | skipspace(LS); |
| 188 | if (LL->current == '\n') /* pragma must end with a '\n' ... */ | 188 | if (LS->current == '\n') /* pragma must end with a '\n' ... */ |
| 189 | inclinenumber(LL); | 189 | inclinenumber(LS); |
| 190 | else if (LL->current != EOZ) /* or eof */ | 190 | else if (LS->current != EOZ) /* or eof */ |
| 191 | luaY_syntaxerror("invalid pragma format", buff); | 191 | luaY_syntaxerror("invalid pragma format", buff); |
| 192 | ifskip(LL); | 192 | ifskip(LS); |
| 193 | } | 193 | } |
| 194 | } | 194 | } |
| 195 | 195 | ||
| @@ -202,11 +202,11 @@ static void inclinenumber (LexState *LL) | |||
| 202 | 202 | ||
| 203 | 203 | ||
| 204 | 204 | ||
| 205 | static void save (LexState *LL, int c) | 205 | static void save (LexState *LS, int c) |
| 206 | { | 206 | { |
| 207 | if (LL->textbuff.tokensize >= LL->textbuff.buffsize) | 207 | if (LS->textbuff.tokensize >= LS->textbuff.buffsize) |
| 208 | LL->textbuff.text = luaM_buffer(LL->textbuff.buffsize *= 2); | 208 | LS->textbuff.text = luaM_buffer(LS->textbuff.buffsize *= 2); |
| 209 | LL->textbuff.text[LL->textbuff.tokensize++] = c; | 209 | LS->textbuff.text[LS->textbuff.tokensize++] = c; |
| 210 | } | 210 | } |
| 211 | 211 | ||
| 212 | 212 | ||
| @@ -217,44 +217,44 @@ char *luaX_lasttoken (void) | |||
| 217 | } | 217 | } |
| 218 | 218 | ||
| 219 | 219 | ||
| 220 | #define save_and_next(LL) (save(LL, LL->current), next(LL)) | 220 | #define save_and_next(LS) (save(LS, LS->current), next(LS)) |
| 221 | 221 | ||
| 222 | 222 | ||
| 223 | static int read_long_string (LexState *LL, YYSTYPE *l) | 223 | static int read_long_string (LexState *LS, YYSTYPE *l) |
| 224 | { | 224 | { |
| 225 | int cont = 0; | 225 | int cont = 0; |
| 226 | while (1) { | 226 | while (1) { |
| 227 | switch (LL->current) { | 227 | switch (LS->current) { |
| 228 | case EOZ: | 228 | case EOZ: |
| 229 | save(LL, 0); | 229 | save(LS, 0); |
| 230 | return WRONGTOKEN; | 230 | return WRONGTOKEN; |
| 231 | case '[': | 231 | case '[': |
| 232 | save_and_next(LL); | 232 | save_and_next(LS); |
| 233 | if (LL->current == '[') { | 233 | if (LS->current == '[') { |
| 234 | cont++; | 234 | cont++; |
| 235 | save_and_next(LL); | 235 | save_and_next(LS); |
| 236 | } | 236 | } |
| 237 | continue; | 237 | continue; |
| 238 | case ']': | 238 | case ']': |
| 239 | save_and_next(LL); | 239 | save_and_next(LS); |
| 240 | if (LL->current == ']') { | 240 | if (LS->current == ']') { |
| 241 | if (cont == 0) goto endloop; | 241 | if (cont == 0) goto endloop; |
| 242 | cont--; | 242 | cont--; |
| 243 | save_and_next(LL); | 243 | save_and_next(LS); |
| 244 | } | 244 | } |
| 245 | continue; | 245 | continue; |
| 246 | case '\n': | 246 | case '\n': |
| 247 | save(LL, '\n'); | 247 | save(LS, '\n'); |
| 248 | inclinenumber(LL); | 248 | inclinenumber(LS); |
| 249 | continue; | 249 | continue; |
| 250 | default: | 250 | default: |
| 251 | save_and_next(LL); | 251 | save_and_next(LS); |
| 252 | } | 252 | } |
| 253 | } endloop: | 253 | } endloop: |
| 254 | save_and_next(LL); /* pass the second ']' */ | 254 | save_and_next(LS); /* pass the second ']' */ |
| 255 | LL->textbuff.text[LL->textbuff.tokensize-2] = 0; /* erases ']]' */ | 255 | LS->textbuff.text[LS->textbuff.tokensize-2] = 0; /* erases ']]' */ |
| 256 | l->pTStr = luaS_new(LL->textbuff.text+2); | 256 | l->pTStr = luaS_new(LS->textbuff.text+2); |
| 257 | LL->textbuff.text[LL->textbuff.tokensize-2] = ']'; /* restores ']]' */ | 257 | LS->textbuff.text[LS->textbuff.tokensize-2] = ']'; /* restores ']]' */ |
| 258 | return STRING; | 258 | return STRING; |
| 259 | } | 259 | } |
| 260 | 260 | ||
| @@ -266,103 +266,103 @@ static int read_long_string (LexState *LL, YYSTYPE *l) | |||
| 266 | int luaY_lex (YYSTYPE *l); | 266 | int luaY_lex (YYSTYPE *l); |
| 267 | int luaY_lex (YYSTYPE *l) | 267 | int luaY_lex (YYSTYPE *l) |
| 268 | { | 268 | { |
| 269 | LexState *LL = L->lexstate; | 269 | LexState *LS = L->lexstate; |
| 270 | double a; | 270 | double a; |
| 271 | LL->textbuff.tokensize = 0; | 271 | LS->textbuff.tokensize = 0; |
| 272 | if (lua_debug) | 272 | if (lua_debug) |
| 273 | luaY_codedebugline(LL->linelasttoken); | 273 | luaY_codedebugline(LS->linelasttoken); |
| 274 | LL->linelasttoken = LL->linenumber; | 274 | LS->linelasttoken = LS->linenumber; |
| 275 | while (1) { | 275 | while (1) { |
| 276 | switch (LL->current) { | 276 | switch (LS->current) { |
| 277 | case '\n': | 277 | case '\n': |
| 278 | inclinenumber(LL); | 278 | inclinenumber(LS); |
| 279 | LL->linelasttoken = LL->linenumber; | 279 | LS->linelasttoken = LS->linenumber; |
| 280 | continue; | 280 | continue; |
| 281 | 281 | ||
| 282 | case ' ': case '\t': case '\r': /* CR: to avoid problems with DOS */ | 282 | case ' ': case '\t': case '\r': /* CR: to avoid problems with DOS */ |
| 283 | next(LL); | 283 | next(LS); |
| 284 | continue; | 284 | continue; |
| 285 | 285 | ||
| 286 | case '-': | 286 | case '-': |
| 287 | save_and_next(LL); | 287 | save_and_next(LS); |
| 288 | if (LL->current != '-') return '-'; | 288 | if (LS->current != '-') return '-'; |
| 289 | do { next(LL); } while (LL->current != '\n' && LL->current != EOZ); | 289 | do { next(LS); } while (LS->current != '\n' && LS->current != EOZ); |
| 290 | LL->textbuff.tokensize = 0; | 290 | LS->textbuff.tokensize = 0; |
| 291 | continue; | 291 | continue; |
| 292 | 292 | ||
| 293 | case '[': | 293 | case '[': |
| 294 | save_and_next(LL); | 294 | save_and_next(LS); |
| 295 | if (LL->current != '[') return '['; | 295 | if (LS->current != '[') return '['; |
| 296 | else { | 296 | else { |
| 297 | save_and_next(LL); /* pass the second '[' */ | 297 | save_and_next(LS); /* pass the second '[' */ |
| 298 | return read_long_string(LL, l); | 298 | return read_long_string(LS, l); |
| 299 | } | 299 | } |
| 300 | 300 | ||
| 301 | case '=': | 301 | case '=': |
| 302 | save_and_next(LL); | 302 | save_and_next(LS); |
| 303 | if (LL->current != '=') return '='; | 303 | if (LS->current != '=') return '='; |
| 304 | else { save_and_next(LL); return EQ; } | 304 | else { save_and_next(LS); return EQ; } |
| 305 | 305 | ||
| 306 | case '<': | 306 | case '<': |
| 307 | save_and_next(LL); | 307 | save_and_next(LS); |
| 308 | if (LL->current != '=') return '<'; | 308 | if (LS->current != '=') return '<'; |
| 309 | else { save_and_next(LL); return LE; } | 309 | else { save_and_next(LS); return LE; } |
| 310 | 310 | ||
| 311 | case '>': | 311 | case '>': |
| 312 | save_and_next(LL); | 312 | save_and_next(LS); |
| 313 | if (LL->current != '=') return '>'; | 313 | if (LS->current != '=') return '>'; |
| 314 | else { save_and_next(LL); return GE; } | 314 | else { save_and_next(LS); return GE; } |
| 315 | 315 | ||
| 316 | case '~': | 316 | case '~': |
| 317 | save_and_next(LL); | 317 | save_and_next(LS); |
| 318 | if (LL->current != '=') return '~'; | 318 | if (LS->current != '=') return '~'; |
| 319 | else { save_and_next(LL); return NE; } | 319 | else { save_and_next(LS); return NE; } |
| 320 | 320 | ||
| 321 | case '"': | 321 | case '"': |
| 322 | case '\'': { | 322 | case '\'': { |
| 323 | int del = LL->current; | 323 | int del = LS->current; |
| 324 | save_and_next(LL); | 324 | save_and_next(LS); |
| 325 | while (LL->current != del) { | 325 | while (LS->current != del) { |
| 326 | switch (LL->current) { | 326 | switch (LS->current) { |
| 327 | case EOZ: | 327 | case EOZ: |
| 328 | case '\n': | 328 | case '\n': |
| 329 | save(LL, 0); | 329 | save(LS, 0); |
| 330 | return WRONGTOKEN; | 330 | return WRONGTOKEN; |
| 331 | case '\\': | 331 | case '\\': |
| 332 | next(LL); /* do not save the '\' */ | 332 | next(LS); /* do not save the '\' */ |
| 333 | switch (LL->current) { | 333 | switch (LS->current) { |
| 334 | case 'n': save(LL, '\n'); next(LL); break; | 334 | case 'n': save(LS, '\n'); next(LS); break; |
| 335 | case 't': save(LL, '\t'); next(LL); break; | 335 | case 't': save(LS, '\t'); next(LS); break; |
| 336 | case 'r': save(LL, '\r'); next(LL); break; | 336 | case 'r': save(LS, '\r'); next(LS); break; |
| 337 | case '\n': save(LL, '\n'); inclinenumber(LL); break; | 337 | case '\n': save(LS, '\n'); inclinenumber(LS); break; |
| 338 | default : save_and_next(LL); break; | 338 | default : save_and_next(LS); break; |
| 339 | } | 339 | } |
| 340 | break; | 340 | break; |
| 341 | default: | 341 | default: |
| 342 | save_and_next(LL); | 342 | save_and_next(LS); |
| 343 | } | 343 | } |
| 344 | } | 344 | } |
| 345 | next(LL); /* skip delimiter */ | 345 | next(LS); /* skip delimiter */ |
| 346 | save(LL, 0); | 346 | save(LS, 0); |
| 347 | l->pTStr = luaS_new(LL->textbuff.text+1); | 347 | l->pTStr = luaS_new(LS->textbuff.text+1); |
| 348 | LL->textbuff.text[LL->textbuff.tokensize-1] = del; /* restore delimiter */ | 348 | LS->textbuff.text[LS->textbuff.tokensize-1] = del; /* restore delimiter */ |
| 349 | return STRING; | 349 | return STRING; |
| 350 | } | 350 | } |
| 351 | 351 | ||
| 352 | case '.': | 352 | case '.': |
| 353 | save_and_next(LL); | 353 | save_and_next(LS); |
| 354 | if (LL->current == '.') | 354 | if (LS->current == '.') |
| 355 | { | 355 | { |
| 356 | save_and_next(LL); | 356 | save_and_next(LS); |
| 357 | if (LL->current == '.') | 357 | if (LS->current == '.') |
| 358 | { | 358 | { |
| 359 | save_and_next(LL); | 359 | save_and_next(LS); |
| 360 | return DOTS; /* ... */ | 360 | return DOTS; /* ... */ |
| 361 | } | 361 | } |
| 362 | else return CONC; /* .. */ | 362 | else return CONC; /* .. */ |
| 363 | } | 363 | } |
| 364 | else if (!isdigit(LL->current)) return '.'; | 364 | else if (!isdigit(LS->current)) return '.'; |
| 365 | /* LL->current is a digit: goes through to number */ | 365 | /* LS->current is a digit: goes through to number */ |
| 366 | a=0.0; | 366 | a=0.0; |
| 367 | goto fraction; | 367 | goto fraction; |
| 368 | 368 | ||
| @@ -370,38 +370,38 @@ int luaY_lex (YYSTYPE *l) | |||
| 370 | case '5': case '6': case '7': case '8': case '9': | 370 | case '5': case '6': case '7': case '8': case '9': |
| 371 | a=0.0; | 371 | a=0.0; |
| 372 | do { | 372 | do { |
| 373 | a=10.0*a+(LL->current-'0'); | 373 | a=10.0*a+(LS->current-'0'); |
| 374 | save_and_next(LL); | 374 | save_and_next(LS); |
| 375 | } while (isdigit(LL->current)); | 375 | } while (isdigit(LS->current)); |
| 376 | if (LL->current == '.') { | 376 | if (LS->current == '.') { |
| 377 | save_and_next(LL); | 377 | save_and_next(LS); |
| 378 | if (LL->current == '.') { | 378 | if (LS->current == '.') { |
| 379 | save(LL, 0); | 379 | save(LS, 0); |
| 380 | luaY_error( | 380 | luaY_error( |
| 381 | "ambiguous syntax (decimal point x string concatenation)"); | 381 | "ambiguous syntax (decimal point x string concatenation)"); |
| 382 | } | 382 | } |
| 383 | } | 383 | } |
| 384 | fraction: | 384 | fraction: |
| 385 | { double da=0.1; | 385 | { double da=0.1; |
| 386 | while (isdigit(LL->current)) | 386 | while (isdigit(LS->current)) |
| 387 | { | 387 | { |
| 388 | a+=(LL->current-'0')*da; | 388 | a+=(LS->current-'0')*da; |
| 389 | da/=10.0; | 389 | da/=10.0; |
| 390 | save_and_next(LL); | 390 | save_and_next(LS); |
| 391 | } | 391 | } |
| 392 | if (toupper(LL->current) == 'E') { | 392 | if (toupper(LS->current) == 'E') { |
| 393 | int e=0; | 393 | int e=0; |
| 394 | int neg; | 394 | int neg; |
| 395 | double ea; | 395 | double ea; |
| 396 | save_and_next(LL); | 396 | save_and_next(LS); |
| 397 | neg=(LL->current=='-'); | 397 | neg=(LS->current=='-'); |
| 398 | if (LL->current == '+' || LL->current == '-') save_and_next(LL); | 398 | if (LS->current == '+' || LS->current == '-') save_and_next(LS); |
| 399 | if (!isdigit(LL->current)) { | 399 | if (!isdigit(LS->current)) { |
| 400 | save(LL, 0); return WRONGTOKEN; } | 400 | save(LS, 0); return WRONGTOKEN; } |
| 401 | do { | 401 | do { |
| 402 | e=10.0*e+(LL->current-'0'); | 402 | e=10.0*e+(LS->current-'0'); |
| 403 | save_and_next(LL); | 403 | save_and_next(LS); |
| 404 | } while (isdigit(LL->current)); | 404 | } while (isdigit(LS->current)); |
| 405 | for (ea=neg?0.1:10.0; e>0; e>>=1) | 405 | for (ea=neg?0.1:10.0; e>0; e>>=1) |
| 406 | { | 406 | { |
| 407 | if (e & 1) a*=ea; | 407 | if (e & 1) a*=ea; |
| @@ -413,23 +413,23 @@ int luaY_lex (YYSTYPE *l) | |||
| 413 | } | 413 | } |
| 414 | 414 | ||
| 415 | case EOZ: | 415 | case EOZ: |
| 416 | save(LL, 0); | 416 | save(LS, 0); |
| 417 | if (LL->iflevel > 0) | 417 | if (LS->iflevel > 0) |
| 418 | luaY_error("missing $endif"); | 418 | luaY_error("missing $endif"); |
| 419 | return 0; | 419 | return 0; |
| 420 | 420 | ||
| 421 | default: | 421 | default: |
| 422 | if (LL->current != '_' && !isalpha(LL->current)) { | 422 | if (LS->current != '_' && !isalpha(LS->current)) { |
| 423 | save_and_next(LL); | 423 | save_and_next(LS); |
| 424 | return LL->textbuff.text[0]; | 424 | return LS->textbuff.text[0]; |
| 425 | } | 425 | } |
| 426 | else { /* identifier or reserved word */ | 426 | else { /* identifier or reserved word */ |
| 427 | TaggedString *ts; | 427 | TaggedString *ts; |
| 428 | do { | 428 | do { |
| 429 | save_and_next(LL); | 429 | save_and_next(LS); |
| 430 | } while (isalnum(LL->current) || LL->current == '_'); | 430 | } while (isalnum(LS->current) || LS->current == '_'); |
| 431 | save(LL, 0); | 431 | save(LS, 0); |
| 432 | ts = luaS_new(LL->textbuff.text); | 432 | ts = luaS_new(LS->textbuff.text); |
| 433 | if (ts->head.marked > 255) | 433 | if (ts->head.marked > 255) |
| 434 | return ts->head.marked; /* reserved word */ | 434 | return ts->head.marked; /* reserved word */ |
| 435 | l->pTStr = ts; | 435 | l->pTStr = ts; |
