diff --git a/pkg/compiler/codegen.go b/pkg/compiler/codegen.go index 1a609f8fc..957a508e7 100644 --- a/pkg/compiler/codegen.go +++ b/pkg/compiler/codegen.go @@ -9,6 +9,7 @@ import ( "go/token" "go/types" "math" + "math/big" "sort" "strings" @@ -208,9 +209,12 @@ func (c *codegen) emitLoadConst(t types.TypeAndValue) { case types.Int, types.UntypedInt, types.Uint, types.Int8, types.Uint8, types.Int16, types.Uint16, - types.Int32, types.Uint32, types.Int64, types.Uint64: + types.Int32, types.Uint32, types.Int64: val, _ := constant.Int64Val(t.Value) emit.Int(c.prog.BinWriter, val) + case types.Uint64: + val, _ := constant.Int64Val(t.Value) + emit.BigInt(c.prog.BinWriter, new(big.Int).SetUint64(uint64(val))) case types.String, types.UntypedString: val := constant.StringVal(t.Value) emit.String(c.prog.BinWriter, val) diff --git a/pkg/compiler/numeric_test.go b/pkg/compiler/numeric_test.go index fba35d01a..500aaeaad 100644 --- a/pkg/compiler/numeric_test.go +++ b/pkg/compiler/numeric_test.go @@ -18,6 +18,14 @@ var numericTestCases = []testCase{ `, big.NewInt(6), }, + { + "shift uint64", + `package foo + func Main() uint64 { + return 1 << 63 + }`, + new(big.Int).SetUint64(1 << 63), + }, } func TestNumericExprs(t *testing.T) {