mirror of
https://github.com/nspcc-dev/neo-go.git
synced 2024-12-23 13:41:37 +00:00
WIP
Imported from CityOfZion/neo-storm (cbfc89972e977fa808e9f68c9ad5c6c18bef291d).
This commit is contained in:
parent
a765561b3a
commit
36b253872f
1 changed files with 21 additions and 2 deletions
|
@ -430,10 +430,29 @@ func (c *codegen) Visit(node ast.Node) ast.Visitor {
|
|||
if !isBuiltin {
|
||||
if numArgs == 2 {
|
||||
emitOpcode(c.prog, vm.SWAP)
|
||||
}
|
||||
if numArgs == 3 {
|
||||
} else if numArgs == 3 {
|
||||
emitInt(c.prog, 2)
|
||||
emitOpcode(c.prog, vm.XSWAP)
|
||||
} else {
|
||||
half := int(numArgs / 2)
|
||||
|
||||
for i := 0; i < half; i++ {
|
||||
to := numArgs - 1 - i
|
||||
|
||||
emitInt(c.prog, int64(to))
|
||||
emitOpcode(c.prog, vm.PICK)
|
||||
|
||||
emitInt(c.prog, int64(i+1))
|
||||
emitOpcode(c.prog, vm.PICK)
|
||||
|
||||
emitInt(c.prog, int64(to+2))
|
||||
emitOpcode(c.prog, vm.XSWAP)
|
||||
emitOpcode(c.prog, vm.DROP)
|
||||
|
||||
emitInt(c.prog, int64(i+1))
|
||||
emitOpcode(c.prog, vm.XSWAP)
|
||||
emitOpcode(c.prog, vm.DROP)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue