| 725 | |
| 726 | |
| 727 | static void simpleexp (LexState *ls, expdesc *v) { |
| 728 | /* simpleexp -> NUMBER | STRING | NIL | true | false | ... | |
| 729 | constructor | FUNCTION body | primaryexp */ |
| 730 | switch (ls->t.token) { |
| 731 | case TK_NUMBER: { |
| 732 | init_exp(v, VKNUM, 0); |
| 733 | v->u.nval = ls->t.seminfo.r; |
| 734 | break; |
| 735 | } |
| 736 | case TK_STRING: { |
| 737 | codestring(ls, v, ls->t.seminfo.ts); |
| 738 | break; |
| 739 | } |
| 740 | case TK_NIL: { |
| 741 | init_exp(v, VNIL, 0); |
| 742 | break; |
| 743 | } |
| 744 | case TK_TRUE: { |
| 745 | init_exp(v, VTRUE, 0); |
| 746 | break; |
| 747 | } |
| 748 | case TK_FALSE: { |
| 749 | init_exp(v, VFALSE, 0); |
| 750 | break; |
| 751 | } |
| 752 | case TK_DOTS: { /* vararg */ |
| 753 | FuncState *fs = ls->fs; |
| 754 | check_condition(ls, fs->f->is_vararg, |
| 755 | "cannot use " LUA_QL("...") " outside a vararg function"); |
| 756 | fs->f->is_vararg &= ~VARARG_NEEDSARG; /* don't need 'arg' */ |
| 757 | init_exp(v, VVARARG, luaK_codeABC(fs, OP_VARARG, 0, 1, 0)); |
| 758 | break; |
| 759 | } |
| 760 | case '{': { /* constructor */ |
| 761 | constructor(ls, v); |
| 762 | return; |
| 763 | } |
| 764 | case TK_FUNCTION: { |
| 765 | luaX_next(ls); |
| 766 | body(ls, v, 0, ls->linenumber); |
| 767 | return; |
| 768 | } |
| 769 | default: { |
| 770 | primaryexp(ls, v); |
| 771 | return; |
| 772 | } |
| 773 | } |
| 774 | luaX_next(ls); |
| 775 | } |
| 776 | |
| 777 | |
| 778 | static UnOpr getunopr (int op) { |
no test coverage detected