}}}
(context *funcContext, names []string, exprs []ast.Expr, reg int, nvars int, line int)
| 814 | } // }}} |
| 815 | |
| 816 | func compileRegAssignment(context *funcContext, names []string, exprs []ast.Expr, reg int, nvars int, line int) { // {{{ |
| 817 | lennames := len(names) |
| 818 | lenexprs := len(exprs) |
| 819 | namesassigned := 0 |
| 820 | ec := &expcontext{} |
| 821 | |
| 822 | for namesassigned < lennames && namesassigned < lenexprs { |
| 823 | if isVarArgReturnExpr(exprs[namesassigned]) && (lenexprs-namesassigned-1) <= 0 { |
| 824 | |
| 825 | varargopt := nvars - namesassigned |
| 826 | ecupdate(ec, ecVararg, reg, varargopt-1) |
| 827 | compileExpr(context, reg, exprs[namesassigned], ec) |
| 828 | reg += varargopt |
| 829 | namesassigned = lennames |
| 830 | } else { |
| 831 | ecupdate(ec, ecLocal, reg, 0) |
| 832 | compileExpr(context, reg, exprs[namesassigned], ec) |
| 833 | reg += 1 |
| 834 | namesassigned += 1 |
| 835 | } |
| 836 | } |
| 837 | |
| 838 | // extra left names |
| 839 | if lennames > namesassigned { |
| 840 | restleft := lennames - namesassigned - 1 |
| 841 | context.Code.AddLoadNil(reg, reg+restleft, line) |
| 842 | reg += restleft |
| 843 | } |
| 844 | |
| 845 | // extra right exprs |
| 846 | for i := namesassigned; i < lenexprs; i++ { |
| 847 | varargopt := -1 |
| 848 | if i != lenexprs-1 { |
| 849 | varargopt = 0 |
| 850 | } |
| 851 | ecupdate(ec, ecNone, reg, varargopt) |
| 852 | reg += compileExpr(context, reg, exprs[i], ec) |
| 853 | } |
| 854 | } // }}} |
| 855 | |
| 856 | func compileLocalAssignStmt(context *funcContext, stmt *ast.LocalAssignStmt) { // {{{ |
| 857 | reg := context.RegTop() |
no test coverage detected
searching dependent graphs…