Skip to content

Commit 51ea135

Browse files
authored
feat: update base64x (#621)
1 parent bd821ee commit 51ea135

32 files changed

+518
-49
lines changed

.github/workflows/unit_test-linux-x64.yml

+5
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,11 @@ jobs:
3636
run: |
3737
cd ./external_jsonlib_test
3838
GOMAXPROCS=4 go test -v -race ./...
39+
40+
- name: external
41+
run: |
42+
cd ./loader
43+
GOMAXPROCS=4 go test -v -race ./...
3944
4045
- name: Codecov
4146
run: bash <(curl -s https://codecov.io/bash)

external_jsonlib_test/go.mod

+4-3
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ go 1.18
44

55
require (
66
github.com/buger/jsonparser v1.1.1
7-
github.com/bytedance/sonic v1.10.0-rc
7+
github.com/bytedance/sonic v1.11.5-alpha3
88
github.com/goccy/go-json v0.9.11
99
github.com/json-iterator/go v1.1.12
1010
github.com/stretchr/testify v1.8.1
@@ -13,8 +13,9 @@ require (
1313
)
1414

1515
require (
16-
github.com/cloudwego/base64x v0.1.0 // indirect
17-
github.com/cloudwego/iasm v0.0.9 // indirect
16+
github.com/bytedance/sonic/loader v0.1.0 // indirect
17+
github.com/cloudwego/base64x v0.1.3 // indirect
18+
github.com/cloudwego/iasm v0.2.0 // indirect
1819
github.com/davecgh/go-spew v1.1.1 // indirect
1920
github.com/klauspost/cpuid/v2 v2.0.9 // indirect
2021
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 // indirect

external_jsonlib_test/go.sum

+6-4
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
github.com/buger/jsonparser v1.1.1 h1:2PnMjfWD7wBILjqQbt530v576A/cAbQvEW9gGIpYMUs=
22
github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0=
3-
github.com/cloudwego/base64x v0.1.0 h1:Tg5q9tq1khq9Y9UwfoC6zkHK0FypN2GLDvhqFceOL8U=
4-
github.com/cloudwego/base64x v0.1.0/go.mod h1:lM8nFiNbg74QgesNo6EAtv8N9tlRjBWExmHoNDa3PkU=
5-
github.com/cloudwego/iasm v0.0.9 h1:DgNtfPjuz3YAQ0hmmiGg6DkDGj+foARFSwu7vKFPT1o=
6-
github.com/cloudwego/iasm v0.0.9/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY=
3+
github.com/bytedance/sonic/loader v0.1.0 h1:skjHJ2Bi9ibbq3Dwzh1w42MQ7wZJrXmEZr/uqUn3f0Q=
4+
github.com/bytedance/sonic/loader v0.1.0/go.mod h1:UmRT+IRTGKz/DAkzcEGzyVqQFJ7H9BqwBO3pm9H/+HY=
5+
github.com/cloudwego/base64x v0.1.3 h1:b5J/l8xolB7dyDTTmhJP2oTs5LdrjyrUFuNxdfq5hAg=
6+
github.com/cloudwego/base64x v0.1.3/go.mod h1:1+1K5BUHIQzyapgpF7LwvOGAEDicKtt1umPV+aN8pi8=
7+
github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg=
8+
github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY=
79
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
810
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
911
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=

fuzz/go.mod

+4-3
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,15 @@ go 1.18
44

55
require (
66
github.com/bytedance/gopkg v0.0.0-20221122125632-68358b8ecec6
7-
github.com/bytedance/sonic v1.10.0-rc
7+
github.com/bytedance/sonic v1.11.5-alpha3
88
github.com/davecgh/go-spew v1.1.1
99
github.com/stretchr/testify v1.8.1
1010
)
1111

1212
require (
13-
github.com/cloudwego/base64x v0.1.0 // indirect
14-
github.com/cloudwego/iasm v0.0.9 // indirect
13+
github.com/bytedance/sonic/loader v0.1.0 // indirect
14+
github.com/cloudwego/base64x v0.1.3 // indirect
15+
github.com/cloudwego/iasm v0.2.0 // indirect
1516
github.com/klauspost/cpuid/v2 v2.0.9 // indirect
1617
github.com/pmezard/go-difflib v1.0.0 // indirect
1718
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect

fuzz/go.sum

+6-4
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
github.com/bytedance/gopkg v0.0.0-20221122125632-68358b8ecec6 h1:FCLDGi1EmB7JzjVVYNZiqc/zAJj2BQ5M0lfkVOxbfs8=
22
github.com/bytedance/gopkg v0.0.0-20221122125632-68358b8ecec6/go.mod h1:5FoAH5xUHHCMDvQPy1rnj8moqLkLHFaDVBjHhcFwEi0=
3-
github.com/cloudwego/base64x v0.1.0 h1:Tg5q9tq1khq9Y9UwfoC6zkHK0FypN2GLDvhqFceOL8U=
4-
github.com/cloudwego/base64x v0.1.0/go.mod h1:lM8nFiNbg74QgesNo6EAtv8N9tlRjBWExmHoNDa3PkU=
5-
github.com/cloudwego/iasm v0.0.9 h1:DgNtfPjuz3YAQ0hmmiGg6DkDGj+foARFSwu7vKFPT1o=
6-
github.com/cloudwego/iasm v0.0.9/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY=
3+
github.com/bytedance/sonic/loader v0.1.0 h1:skjHJ2Bi9ibbq3Dwzh1w42MQ7wZJrXmEZr/uqUn3f0Q=
4+
github.com/bytedance/sonic/loader v0.1.0/go.mod h1:UmRT+IRTGKz/DAkzcEGzyVqQFJ7H9BqwBO3pm9H/+HY=
5+
github.com/cloudwego/base64x v0.1.3 h1:b5J/l8xolB7dyDTTmhJP2oTs5LdrjyrUFuNxdfq5hAg=
6+
github.com/cloudwego/base64x v0.1.3/go.mod h1:1+1K5BUHIQzyapgpF7LwvOGAEDicKtt1umPV+aN8pi8=
7+
github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg=
8+
github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY=
79
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
810
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
911
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=

generic_test/go.mod

+4-3
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,16 @@ module github.com/bytedance/sonic/generic_test
33
go 1.18
44

55
require (
6-
github.com/bytedance/sonic v1.10.0-rc
6+
github.com/bytedance/sonic v1.11.5-alpha3
77
github.com/go-json-experiment/json v0.0.0-20220603215908-554802c1e539
88
github.com/goccy/go-json v0.9.4
99
github.com/json-iterator/go v1.1.12
1010
)
1111

1212
require (
13-
github.com/cloudwego/base64x v0.1.0 // indirect
14-
github.com/cloudwego/iasm v0.0.9 // indirect
13+
github.com/bytedance/sonic/loader v0.1.0 // indirect
14+
github.com/cloudwego/base64x v0.1.3 // indirect
15+
github.com/cloudwego/iasm v0.2.0 // indirect
1516
github.com/klauspost/cpuid/v2 v2.0.9 // indirect
1617
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 // indirect
1718
github.com/modern-go/reflect2 v1.0.2 // indirect

generic_test/go.sum

+6-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1-
github.com/cloudwego/base64x v0.1.0 h1:Tg5q9tq1khq9Y9UwfoC6zkHK0FypN2GLDvhqFceOL8U=
2-
github.com/cloudwego/base64x v0.1.0/go.mod h1:lM8nFiNbg74QgesNo6EAtv8N9tlRjBWExmHoNDa3PkU=
3-
github.com/cloudwego/iasm v0.0.9 h1:DgNtfPjuz3YAQ0hmmiGg6DkDGj+foARFSwu7vKFPT1o=
4-
github.com/cloudwego/iasm v0.0.9/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY=
1+
github.com/bytedance/sonic/loader v0.1.0 h1:skjHJ2Bi9ibbq3Dwzh1w42MQ7wZJrXmEZr/uqUn3f0Q=
2+
github.com/bytedance/sonic/loader v0.1.0/go.mod h1:UmRT+IRTGKz/DAkzcEGzyVqQFJ7H9BqwBO3pm9H/+HY=
3+
github.com/cloudwego/base64x v0.1.3 h1:b5J/l8xolB7dyDTTmhJP2oTs5LdrjyrUFuNxdfq5hAg=
4+
github.com/cloudwego/base64x v0.1.3/go.mod h1:1+1K5BUHIQzyapgpF7LwvOGAEDicKtt1umPV+aN8pi8=
5+
github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg=
6+
github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY=
57
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
68
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
79
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=

go.mod

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ module github.com/bytedance/sonic
33
go 1.16
44

55
require (
6-
github.com/cloudwego/base64x v0.1.0
7-
github.com/cloudwego/iasm v0.0.9
6+
github.com/bytedance/sonic/loader v0.1.0
7+
github.com/cloudwego/base64x v0.1.3
88
github.com/davecgh/go-spew v1.1.1
99
github.com/klauspost/cpuid/v2 v2.0.9
1010
github.com/stretchr/testify v1.8.1

go.sum

+6-9
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,9 @@
1-
github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM=
2-
github.com/bytedance/sonic v1.10.0-rc/go.mod h1:ElCzW+ufi8qKqNW0FY314xriJhyJhuoJ3gFZdAHF7NM=
3-
github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY=
4-
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk=
5-
github.com/chenzhuoyu/iasm v0.9.0/go.mod h1:Xjy2NpN3h7aUqeqM+woSuuvxmIe6+DDsiNLIrkAmYog=
6-
github.com/cloudwego/base64x v0.1.0 h1:Tg5q9tq1khq9Y9UwfoC6zkHK0FypN2GLDvhqFceOL8U=
7-
github.com/cloudwego/base64x v0.1.0/go.mod h1:lM8nFiNbg74QgesNo6EAtv8N9tlRjBWExmHoNDa3PkU=
8-
github.com/cloudwego/iasm v0.0.9 h1:DgNtfPjuz3YAQ0hmmiGg6DkDGj+foARFSwu7vKFPT1o=
9-
github.com/cloudwego/iasm v0.0.9/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY=
1+
github.com/bytedance/sonic/loader v0.1.0 h1:skjHJ2Bi9ibbq3Dwzh1w42MQ7wZJrXmEZr/uqUn3f0Q=
2+
github.com/bytedance/sonic/loader v0.1.0/go.mod h1:UmRT+IRTGKz/DAkzcEGzyVqQFJ7H9BqwBO3pm9H/+HY=
3+
github.com/cloudwego/base64x v0.1.3 h1:b5J/l8xolB7dyDTTmhJP2oTs5LdrjyrUFuNxdfq5hAg=
4+
github.com/cloudwego/base64x v0.1.3/go.mod h1:1+1K5BUHIQzyapgpF7LwvOGAEDicKtt1umPV+aN8pi8=
5+
github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg=
6+
github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY=
107
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
118
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
129
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=

go.work

+3-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ go 1.18
22

33
use (
44
.
5-
./generic_test
6-
./fuzz
75
./external_jsonlib_test
6+
./fuzz
7+
./generic_test
8+
./loader
89
)

loader/funcdata_compat.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import (
2424
`unsafe`
2525
`sort`
2626

27-
`github.com/bytedance/sonic/internal/rt`
27+
`github.com/bytedance/sonic/loader/internal/rt`
2828
)
2929

3030
const (

loader/funcdata_go116.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import (
2424
`unsafe`
2525
`sort`
2626

27-
`github.com/bytedance/sonic/internal/rt`
27+
`github.com/bytedance/sonic/loader/internal/rt`
2828
)
2929

3030
const (

loader/funcdata_go118.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
package loader
2222

2323
import (
24-
`github.com/bytedance/sonic/internal/rt`
24+
`github.com/bytedance/sonic/loader/internal/rt`
2525
)
2626

2727
const (

loader/funcdata_go120.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
package loader
2121

2222
import (
23-
`github.com/bytedance/sonic/internal/rt`
23+
`github.com/bytedance/sonic/loader/internal/rt`
2424
)
2525

2626
const (

loader/funcdata_go121.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ package loader
2121

2222
import (
2323
`unsafe`
24-
`github.com/bytedance/sonic/internal/rt`
24+
`github.com/bytedance/sonic/loader/internal/rt`
2525
)
2626

2727
const (

loader/funcdata_latest.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import (
2424
`sort`
2525
`unsafe`
2626

27-
`github.com/bytedance/sonic/internal/rt`
27+
`github.com/bytedance/sonic/loader/internal/rt`
2828
)
2929

3030
type funcTab struct {

loader/go.mod

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
module github.com/bytedance/sonic/loader
2+
3+
go 1.16
4+
5+
require (
6+
github.com/cloudwego/iasm v0.2.0
7+
github.com/stretchr/testify v1.8.1
8+
)

loader/go.sum

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg=
2+
github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY=
3+
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
4+
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
5+
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
6+
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
7+
github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M=
8+
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
9+
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
10+
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
11+
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
12+
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
13+
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
14+
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
15+
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
16+
github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk=
17+
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
18+
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
19+
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
20+
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
21+
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
22+
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
23+
nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50=

internal/abi/abi.go renamed to loader/internal/abi/abi.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import (
2222
`sort`
2323
`strings`
2424

25-
`github.com/bytedance/sonic/internal/rt`
25+
`github.com/bytedance/sonic/loader/internal/rt`
2626
)
2727

2828
type FunctionLayout struct {
File renamed without changes.

internal/abi/stubs.go renamed to loader/internal/abi/stubs.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ package abi
1919
import (
2020
_ `unsafe`
2121

22-
`github.com/bytedance/sonic/internal/rt`
22+
`github.com/bytedance/sonic/loader/internal/rt`
2323
)
2424

2525
const (

loader/internal/rt/fastmem.go

+62
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
/*
2+
* Copyright 2021 ByteDance Inc.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package rt
18+
19+
import (
20+
`unsafe`
21+
`reflect`
22+
)
23+
24+
//go:nosplit
25+
func Mem2Str(v []byte) (s string) {
26+
(*GoString)(unsafe.Pointer(&s)).Len = (*GoSlice)(unsafe.Pointer(&v)).Len
27+
(*GoString)(unsafe.Pointer(&s)).Ptr = (*GoSlice)(unsafe.Pointer(&v)).Ptr
28+
return
29+
}
30+
31+
//go:nosplit
32+
func Str2Mem(s string) (v []byte) {
33+
(*GoSlice)(unsafe.Pointer(&v)).Cap = (*GoString)(unsafe.Pointer(&s)).Len
34+
(*GoSlice)(unsafe.Pointer(&v)).Len = (*GoString)(unsafe.Pointer(&s)).Len
35+
(*GoSlice)(unsafe.Pointer(&v)).Ptr = (*GoString)(unsafe.Pointer(&s)).Ptr
36+
return
37+
}
38+
39+
func BytesFrom(p unsafe.Pointer, n int, c int) (r []byte) {
40+
(*GoSlice)(unsafe.Pointer(&r)).Ptr = p
41+
(*GoSlice)(unsafe.Pointer(&r)).Len = n
42+
(*GoSlice)(unsafe.Pointer(&r)).Cap = c
43+
return
44+
}
45+
46+
func FuncAddr(f interface{}) unsafe.Pointer {
47+
if vv := UnpackEface(f); vv.Type.Kind() != reflect.Func {
48+
panic("f is not a function")
49+
} else {
50+
return *(*unsafe.Pointer)(vv.Value)
51+
}
52+
}
53+
54+
//go:nocheckptr
55+
func IndexChar(src string, index int) unsafe.Pointer {
56+
return unsafe.Pointer(uintptr((*GoString)(unsafe.Pointer(&src)).Ptr) + uintptr(index))
57+
}
58+
59+
//go:nocheckptr
60+
func IndexByte(ptr []byte, index int) unsafe.Pointer {
61+
return unsafe.Pointer(uintptr((*GoSlice)(unsafe.Pointer(&ptr)).Ptr) + uintptr(index))
62+
}

0 commit comments

Comments
 (0)