review chnages

This commit is contained in:
vedhavyas 2018-11-26 13:35:53 +01:00
parent a5c4c6b82f
commit da590e60ee
No known key found for this signature in database
GPG key ID: 317BF0923E3EB7E5
2 changed files with 8 additions and 4 deletions

View file

@ -243,7 +243,7 @@ func (arguments Arguments) Pack(args ...interface{}) ([]byte, error) {
// input offset is the bytes offset for packed output // input offset is the bytes offset for packed output
inputOffset := 0 inputOffset := 0
for _, abiArg := range abiArgs { for _, abiArg := range abiArgs {
inputOffset += getOffset(abiArg.Type) inputOffset += getDynamicTypeOffset(abiArg.Type)
} }
var ret []byte var ret []byte
for i, a := range args { for i, a := range args {

View file

@ -196,7 +196,7 @@ func (t Type) pack(v reflect.Value) ([]byte, error) {
offset := 0 offset := 0
offsetReq := offsetRequired(*t.Elem) offsetReq := offsetRequired(*t.Elem)
if offsetReq { if offsetReq {
offset = getOffset(*t.Elem) * v.Len() offset = getDynamicTypeOffset(*t.Elem) * v.Len()
} }
var tail []byte var tail []byte
for i := 0; i < v.Len(); i++ { for i := 0; i < v.Len(); i++ {
@ -231,8 +231,12 @@ func offsetRequired(t Type) bool {
return t.T == StringTy || t.T == BytesTy || t.T == SliceTy || (t.T == ArrayTy && offsetRequired(*t.Elem)) return t.T == StringTy || t.T == BytesTy || t.T == SliceTy || (t.T == ArrayTy && offsetRequired(*t.Elem))
} }
// getOffset returns the offset to be added for t // getDynamicTypeOffset returns the offset for the type.
func getOffset(t Type) int { // See offsetRequired to know which types are considered dynamic.
// if the type t is an array and element type is not a dynamic type, then we consider it a static type and
// return 32 * size of array since length prefix is not required.
// If t is a dynamic type or element type(for slices and arrays) is dynamic, then we simply return 32 as offset.
func getDynamicTypeOffset(t Type) int {
// if it is an array and there are no dynamic types // if it is an array and there are no dynamic types
// then the array is static type // then the array is static type
if t.T == ArrayTy && !offsetRequired(*t.Elem) { if t.T == ArrayTy && !offsetRequired(*t.Elem) {