MCPcopy Index your code
hub / github.com/yuin/gopher-lua / compileRegAssignment

Function compileRegAssignment

compile.go:816–854  ·  view source on GitHub ↗

}}}

(context *funcContext, names []string, exprs []ast.Expr, reg int, nvars int, line int)

Source from the content-addressed store, hash-verified

814} // }}}
815
816func 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
856func compileLocalAssignStmt(context *funcContext, stmt *ast.LocalAssignStmt) { // {{{
857 reg := context.RegTop()

Callers 2

compileLocalAssignStmtFunction · 0.85
compileGenericForStmtFunction · 0.85

Calls 4

isVarArgReturnExprFunction · 0.85
ecupdateFunction · 0.85
compileExprFunction · 0.85
AddLoadNilMethod · 0.80

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…