| 8301 | |
| 8302 | |
| 8303 | static void simpleexp (LexState *ls, expdesc *v) { |
| 8304 | /* simpleexp -> NUMBER | STRING | NIL | true | false | ... | |
| 8305 | constructor | FUNCTION body | primaryexp */ |
| 8306 | switch (ls->t.token) { |
| 8307 | case TK_NUMBER: { |
| 8308 | init_exp(v, VKNUM, 0); |
| 8309 | v->u.nval = ls->t.seminfo.r; |
| 8310 | break; |
| 8311 | } |
| 8312 | case TK_STRING: { |
| 8313 | codestring(ls, v, ls->t.seminfo.ts); |
| 8314 | break; |
| 8315 | } |
| 8316 | case TK_NIL: { |
| 8317 | init_exp(v, VNIL, 0); |
| 8318 | break; |
| 8319 | } |
| 8320 | case TK_TRUE: { |
| 8321 | init_exp(v, VTRUE, 0); |
| 8322 | break; |
| 8323 | } |
| 8324 | case TK_FALSE: { |
| 8325 | init_exp(v, VFALSE, 0); |
| 8326 | break; |
| 8327 | } |
| 8328 | case TK_DOTS: { /* vararg */ |
| 8329 | FuncState *fs = ls->fs; |
| 8330 | check_condition(ls, fs->f->is_vararg, |
| 8331 | "cannot use " LUA_QL("...") " outside a vararg function"); |
| 8332 | fs->f->is_vararg &= ~VARARG_NEEDSARG; /* don't need 'arg' */ |
| 8333 | init_exp(v, VVARARG, luaK_codeABC(fs, OP_VARARG, 0, 1, 0)); |
| 8334 | break; |
| 8335 | } |
| 8336 | case '{': { /* constructor */ |
| 8337 | constructor(ls, v); |
| 8338 | return; |
| 8339 | } |
| 8340 | case TK_FUNCTION: { |
| 8341 | luaX_next(ls); |
| 8342 | body(ls, v, 0, ls->linenumber); |
| 8343 | return; |
| 8344 | } |
| 8345 | default: { |
| 8346 | primaryexp(ls, v); |
| 8347 | return; |
| 8348 | } |
| 8349 | } |
| 8350 | luaX_next(ls); |
| 8351 | } |
| 8352 | |
| 8353 | |
| 8354 | static UnOpr getunopr (int op) { |
no test coverage detected