| 8264 | |
| 8265 | |
| 8266 | static void primaryexp (LexState *ls, expdesc *v) { |
| 8267 | /* primaryexp -> |
| 8268 | prefixexp { `.' NAME | `[' exp `]' | `:' NAME funcargs | funcargs } */ |
| 8269 | FuncState *fs = ls->fs; |
| 8270 | prefixexp(ls, v); |
| 8271 | for (;;) { |
| 8272 | switch (ls->t.token) { |
| 8273 | case '.': { /* field */ |
| 8274 | field(ls, v); |
| 8275 | break; |
| 8276 | } |
| 8277 | case '[': { /* `[' exp1 `]' */ |
| 8278 | expdesc key; |
| 8279 | luaK_exp2anyreg(fs, v); |
| 8280 | yindex(ls, &key); |
| 8281 | luaK_indexed(fs, v, &key); |
| 8282 | break; |
| 8283 | } |
| 8284 | case ':': { /* `:' NAME funcargs */ |
| 8285 | expdesc key; |
| 8286 | luaX_next(ls); |
| 8287 | checkname(ls, &key); |
| 8288 | luaK_self(fs, v, &key); |
| 8289 | funcargs(ls, v); |
| 8290 | break; |
| 8291 | } |
| 8292 | case '(': case TK_STRING: case '{': { /* funcargs */ |
| 8293 | luaK_exp2nextreg(fs, v); |
| 8294 | funcargs(ls, v); |
| 8295 | break; |
| 8296 | } |
| 8297 | default: return; |
| 8298 | } |
| 8299 | } |
| 8300 | } |
| 8301 | |
| 8302 | |
| 8303 | static void simpleexp (LexState *ls, expdesc *v) { |
no test coverage detected