compiler: emit integers correctly

A while ago VM serialization format for Integer items was changed
but compiler continued to emit Integers in old format.
This commit changes compiler behaviour to be compatible with VM.
This commit is contained in:
Evgenii Stratonikov 2020-01-28 11:59:57 +03:00
parent f15ceff592
commit d190b3a2e0
2 changed files with 28 additions and 2 deletions

View file

@ -7,7 +7,7 @@ import (
"math/big"
"github.com/CityOfZion/neo-go/pkg/io"
"github.com/CityOfZion/neo-go/pkg/util"
"github.com/CityOfZion/neo-go/pkg/vm"
"github.com/CityOfZion/neo-go/pkg/vm/opcode"
)
@ -47,7 +47,7 @@ func emitInt(w *io.BinWriter, i int64) {
}
bInt := big.NewInt(i)
val := util.ArrayReverse(bInt.Bytes())
val := vm.IntToBytes(bInt)
emitBytes(w, val)
}

View file

@ -0,0 +1,26 @@
package compiler_test
import (
"bytes"
"fmt"
"math/big"
"testing"
)
// Test for #605, #623.
// Codegen should emit integers in proper format.
func TestManyVariables(t *testing.T) {
// any number with MSB=1 is suitable
// 155 was in the contract where this bug was first found.
const count = 155
buf := bytes.NewBufferString("package main\n")
for i := 0; i < count; i++ {
buf.WriteString(fmt.Sprintf("var a%d = %d\n", i, i))
}
buf.WriteString("func Main() int {\nreturn 7\n}\n")
src := buf.String()
eval(t, src, big.NewInt(7))
}