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:
parent
f15ceff592
commit
d190b3a2e0
2 changed files with 28 additions and 2 deletions
|
@ -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)
|
||||
}
|
||||
|
||||
|
|
26
pkg/compiler/limit_test.go
Normal file
26
pkg/compiler/limit_test.go
Normal 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))
|
||||
}
|
Loading…
Reference in a new issue