(e exprDesc, r int)
| 614 | } |
| 615 | |
| 616 | func (f *function) dischargeToRegister(e exprDesc, r int) exprDesc { |
| 617 | switch e = f.DischargeVariables(e); e.kind { |
| 618 | case kindNil: |
| 619 | f.loadNil(r, 1) |
| 620 | case kindFalse: |
| 621 | f.EncodeABC(opLoadBool, r, 0, 0) |
| 622 | case kindTrue: |
| 623 | f.EncodeABC(opLoadBool, r, 1, 0) |
| 624 | case kindConstant: |
| 625 | f.EncodeConstant(r, e.info) |
| 626 | case kindNumber: |
| 627 | f.EncodeConstant(r, f.NumberConstant(e.value)) |
| 628 | case kindRelocatable: |
| 629 | f.Instruction(e).setA(r) |
| 630 | case kindNonRelocatable: |
| 631 | if r != e.info { |
| 632 | f.EncodeABC(opMove, r, e.info, 0) |
| 633 | } |
| 634 | default: |
| 635 | f.assert(e.kind == kindVoid || e.kind == kindJump) |
| 636 | return e |
| 637 | } |
| 638 | e.kind, e.info = kindNonRelocatable, r |
| 639 | return e |
| 640 | } |
| 641 | |
| 642 | func (f *function) dischargeToAnyRegister(e exprDesc) exprDesc { |
| 643 | if e.kind != kindNonRelocatable { |
no test coverage detected