From 7053b3b2c07ad0ceeb56390b8f9dfb224d694cc1 Mon Sep 17 00:00:00 2001 From: Evgenii Stratonikov Date: Wed, 29 Jan 2020 10:24:35 +0300 Subject: [PATCH] compiler: optimize append argument processing Append should leave it's result on top of the stack. Thus we need to transform top of the stack: (top) a . b --> (top) a . b . b It can be done with just OVER + SWAP. --- pkg/compiler/codegen.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/pkg/compiler/codegen.go b/pkg/compiler/codegen.go index 47711bd86..1cce7c6e7 100644 --- a/pkg/compiler/codegen.go +++ b/pkg/compiler/codegen.go @@ -744,10 +744,8 @@ func (c *codegen) convertBuiltin(expr *ast.CallExpr) { if isByteArrayType(typ) { emitOpcode(c.prog.BinWriter, opcode.CAT) } else { + emitOpcode(c.prog.BinWriter, opcode.OVER) emitOpcode(c.prog.BinWriter, opcode.SWAP) - emitOpcode(c.prog.BinWriter, opcode.DUP) - emitOpcode(c.prog.BinWriter, opcode.PUSH2) - emitOpcode(c.prog.BinWriter, opcode.XSWAP) emitOpcode(c.prog.BinWriter, opcode.APPEND) } case "panic":