Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
Geth-Modification
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
张蕾
Geth-Modification
Commits
4f12f069
Commit
4f12f069
authored
Dec 09, 2014
by
Felix Lange
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
rlp: move decoder type switch to decode.go
parent
195b2d2e
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
36 additions
and
32 deletions
+36
-32
decode.go
rlp/decode.go
+33
-0
typecache.go
rlp/typecache.go
+3
-32
No files found.
rlp/decode.go
View file @
4f12f069
...
...
@@ -81,6 +81,39 @@ func (err decodeError) Error() string {
return
fmt
.
Sprintf
(
"rlp: %s for %v"
,
err
.
msg
,
err
.
typ
)
}
var
(
decoderInterface
=
reflect
.
TypeOf
(
new
(
Decoder
))
.
Elem
()
bigInt
=
reflect
.
TypeOf
(
big
.
Int
{})
)
func
makeDecoder
(
typ
reflect
.
Type
)
(
dec
decoder
,
err
error
)
{
kind
:=
typ
.
Kind
()
switch
{
case
typ
.
Implements
(
decoderInterface
)
:
return
decodeDecoder
,
nil
case
kind
!=
reflect
.
Ptr
&&
reflect
.
PtrTo
(
typ
)
.
Implements
(
decoderInterface
)
:
return
decodeDecoderNoPtr
,
nil
case
typ
.
AssignableTo
(
reflect
.
PtrTo
(
bigInt
))
:
return
decodeBigInt
,
nil
case
typ
.
AssignableTo
(
bigInt
)
:
return
decodeBigIntNoPtr
,
nil
case
isInteger
(
kind
)
:
return
makeNumDecoder
(
typ
),
nil
case
kind
==
reflect
.
String
:
return
decodeString
,
nil
case
kind
==
reflect
.
Slice
||
kind
==
reflect
.
Array
:
return
makeListDecoder
(
typ
)
case
kind
==
reflect
.
Struct
:
return
makeStructDecoder
(
typ
)
case
kind
==
reflect
.
Ptr
:
return
makePtrDecoder
(
typ
)
case
kind
==
reflect
.
Interface
&&
typ
.
NumMethod
()
==
0
:
return
decodeInterface
,
nil
default
:
return
nil
,
fmt
.
Errorf
(
"rlp: type %v is not RLP-serializable"
,
typ
)
}
}
func
makeNumDecoder
(
typ
reflect
.
Type
)
decoder
{
kind
:=
typ
.
Kind
()
switch
{
...
...
rlp/typecache.go
View file @
4f12f069
package
rlp
import
(
"fmt"
"math/big"
"reflect"
"sync"
)
...
...
@@ -51,39 +49,12 @@ func cachedTypeInfo1(typ reflect.Type) (*typeinfo, error) {
return
typeCache
[
typ
],
err
}
var
(
decoderInterface
=
reflect
.
TypeOf
(
new
(
Decoder
))
.
Elem
()
bigInt
=
reflect
.
TypeOf
(
big
.
Int
{})
)
func
genTypeInfo
(
typ
reflect
.
Type
)
(
info
*
typeinfo
,
err
error
)
{
info
=
new
(
typeinfo
)
kind
:=
typ
.
Kind
()
switch
{
case
typ
.
Implements
(
decoderInterface
)
:
info
.
decoder
=
decodeDecoder
case
kind
!=
reflect
.
Ptr
&&
reflect
.
PtrTo
(
typ
)
.
Implements
(
decoderInterface
)
:
info
.
decoder
=
decodeDecoderNoPtr
case
typ
.
AssignableTo
(
reflect
.
PtrTo
(
bigInt
))
:
info
.
decoder
=
decodeBigInt
case
typ
.
AssignableTo
(
bigInt
)
:
info
.
decoder
=
decodeBigIntNoPtr
case
isInteger
(
kind
)
:
info
.
decoder
=
makeNumDecoder
(
typ
)
case
kind
==
reflect
.
String
:
info
.
decoder
=
decodeString
case
kind
==
reflect
.
Slice
||
kind
==
reflect
.
Array
:
info
.
decoder
,
err
=
makeListDecoder
(
typ
)
case
kind
==
reflect
.
Struct
:
info
.
decoder
,
err
=
makeStructDecoder
(
typ
)
case
kind
==
reflect
.
Ptr
:
info
.
decoder
,
err
=
makePtrDecoder
(
typ
)
case
kind
==
reflect
.
Interface
&&
typ
.
NumMethod
()
==
0
:
info
.
decoder
=
decodeInterface
default
:
err
=
fmt
.
Errorf
(
"rlp: type %v is not RLP-serializable"
,
typ
)
if
info
.
decoder
,
err
=
makeDecoder
(
typ
);
err
!=
nil
{
return
nil
,
err
}
return
info
,
err
return
info
,
nil
}
func
isInteger
(
k
reflect
.
Kind
)
bool
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment