accounts/abi: make GetType public again (#21157)
This commit is contained in:
parent
d5c267fd30
commit
89043cba75
@ -39,11 +39,11 @@ func formatSliceString(kind reflect.Kind, sliceSize int) string {
|
|||||||
// type in t.
|
// type in t.
|
||||||
func sliceTypeCheck(t Type, val reflect.Value) error {
|
func sliceTypeCheck(t Type, val reflect.Value) error {
|
||||||
if val.Kind() != reflect.Slice && val.Kind() != reflect.Array {
|
if val.Kind() != reflect.Slice && val.Kind() != reflect.Array {
|
||||||
return typeErr(formatSliceString(t.getType().Kind(), t.Size), val.Type())
|
return typeErr(formatSliceString(t.GetType().Kind(), t.Size), val.Type())
|
||||||
}
|
}
|
||||||
|
|
||||||
if t.T == ArrayTy && val.Len() != t.Size {
|
if t.T == ArrayTy && val.Len() != t.Size {
|
||||||
return typeErr(formatSliceString(t.Elem.getType().Kind(), t.Size), formatSliceString(val.Type().Elem().Kind(), val.Len()))
|
return typeErr(formatSliceString(t.Elem.GetType().Kind(), t.Size), formatSliceString(val.Type().Elem().Kind(), val.Len()))
|
||||||
}
|
}
|
||||||
|
|
||||||
if t.Elem.T == SliceTy || t.Elem.T == ArrayTy {
|
if t.Elem.T == SliceTy || t.Elem.T == ArrayTy {
|
||||||
@ -52,8 +52,8 @@ func sliceTypeCheck(t Type, val reflect.Value) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if elemKind := val.Type().Elem().Kind(); elemKind != t.Elem.getType().Kind() {
|
if elemKind := val.Type().Elem().Kind(); elemKind != t.Elem.GetType().Kind() {
|
||||||
return typeErr(formatSliceString(t.Elem.getType().Kind(), t.Size), val.Type())
|
return typeErr(formatSliceString(t.Elem.GetType().Kind(), t.Size), val.Type())
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -66,10 +66,10 @@ func typeCheck(t Type, value reflect.Value) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Check base type validity. Element types will be checked later on.
|
// Check base type validity. Element types will be checked later on.
|
||||||
if t.getType().Kind() != value.Kind() {
|
if t.GetType().Kind() != value.Kind() {
|
||||||
return typeErr(t.getType().Kind(), value.Kind())
|
return typeErr(t.GetType().Kind(), value.Kind())
|
||||||
} else if t.T == FixedBytesTy && t.Size != value.Len() {
|
} else if t.T == FixedBytesTy && t.Size != value.Len() {
|
||||||
return typeErr(t.getType(), value.Type())
|
return typeErr(t.GetType(), value.Type())
|
||||||
} else {
|
} else {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -176,7 +176,7 @@ func NewType(t string, internalType string, components []ArgumentMarshaling) (ty
|
|||||||
overloadedNames[fieldName] = fieldName
|
overloadedNames[fieldName] = fieldName
|
||||||
fields = append(fields, reflect.StructField{
|
fields = append(fields, reflect.StructField{
|
||||||
Name: fieldName, // reflect.StructOf will panic for any exported field.
|
Name: fieldName, // reflect.StructOf will panic for any exported field.
|
||||||
Type: cType.getType(),
|
Type: cType.GetType(),
|
||||||
Tag: reflect.StructTag("json:\"" + c.Name + "\""),
|
Tag: reflect.StructTag("json:\"" + c.Name + "\""),
|
||||||
})
|
})
|
||||||
elems = append(elems, &cType)
|
elems = append(elems, &cType)
|
||||||
@ -214,7 +214,8 @@ func NewType(t string, internalType string, components []ArgumentMarshaling) (ty
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t Type) getType() reflect.Type {
|
// GetType returns the reflection type of the ABI type.
|
||||||
|
func (t Type) GetType() reflect.Type {
|
||||||
switch t.T {
|
switch t.T {
|
||||||
case IntTy:
|
case IntTy:
|
||||||
return reflectIntType(false, t.Size)
|
return reflectIntType(false, t.Size)
|
||||||
@ -225,9 +226,9 @@ func (t Type) getType() reflect.Type {
|
|||||||
case StringTy:
|
case StringTy:
|
||||||
return reflect.TypeOf("")
|
return reflect.TypeOf("")
|
||||||
case SliceTy:
|
case SliceTy:
|
||||||
return reflect.SliceOf(t.Elem.getType())
|
return reflect.SliceOf(t.Elem.GetType())
|
||||||
case ArrayTy:
|
case ArrayTy:
|
||||||
return reflect.ArrayOf(t.Size, t.Elem.getType())
|
return reflect.ArrayOf(t.Size, t.Elem.GetType())
|
||||||
case TupleTy:
|
case TupleTy:
|
||||||
return t.TupleType
|
return t.TupleType
|
||||||
case AddressTy:
|
case AddressTy:
|
||||||
|
@ -110,7 +110,7 @@ func ReadFixedBytes(t Type, word []byte) (interface{}, error) {
|
|||||||
return nil, fmt.Errorf("abi: invalid type in call to make fixed byte array")
|
return nil, fmt.Errorf("abi: invalid type in call to make fixed byte array")
|
||||||
}
|
}
|
||||||
// convert
|
// convert
|
||||||
array := reflect.New(t.getType()).Elem()
|
array := reflect.New(t.GetType()).Elem()
|
||||||
|
|
||||||
reflect.Copy(array, reflect.ValueOf(word[0:t.Size]))
|
reflect.Copy(array, reflect.ValueOf(word[0:t.Size]))
|
||||||
return array.Interface(), nil
|
return array.Interface(), nil
|
||||||
@ -131,10 +131,10 @@ func forEachUnpack(t Type, output []byte, start, size int) (interface{}, error)
|
|||||||
|
|
||||||
if t.T == SliceTy {
|
if t.T == SliceTy {
|
||||||
// declare our slice
|
// declare our slice
|
||||||
refSlice = reflect.MakeSlice(t.getType(), size, size)
|
refSlice = reflect.MakeSlice(t.GetType(), size, size)
|
||||||
} else if t.T == ArrayTy {
|
} else if t.T == ArrayTy {
|
||||||
// declare our array
|
// declare our array
|
||||||
refSlice = reflect.New(t.getType()).Elem()
|
refSlice = reflect.New(t.GetType()).Elem()
|
||||||
} else {
|
} else {
|
||||||
return nil, fmt.Errorf("abi: invalid type in array/slice unpacking stage")
|
return nil, fmt.Errorf("abi: invalid type in array/slice unpacking stage")
|
||||||
}
|
}
|
||||||
@ -158,7 +158,7 @@ func forEachUnpack(t Type, output []byte, start, size int) (interface{}, error)
|
|||||||
}
|
}
|
||||||
|
|
||||||
func forTupleUnpack(t Type, output []byte) (interface{}, error) {
|
func forTupleUnpack(t Type, output []byte) (interface{}, error) {
|
||||||
retval := reflect.New(t.getType()).Elem()
|
retval := reflect.New(t.GetType()).Elem()
|
||||||
virtualArgs := 0
|
virtualArgs := 0
|
||||||
for index, elem := range t.TupleElems {
|
for index, elem := range t.TupleElems {
|
||||||
marshalledValue, err := toGoType((index+virtualArgs)*32, *elem, output)
|
marshalledValue, err := toGoType((index+virtualArgs)*32, *elem, output)
|
||||||
|
Loading…
Reference in New Issue
Block a user