From afdf31a66c666870edcd407841451719e4a41df2 Mon Sep 17 00:00:00 2001 From: xushiwei Date: Tue, 30 Jul 2024 00:28:04 +0800 Subject: [PATCH 1/3] library: encoding/{binary, base64} --- README.md | 2 ++ _cmptest/base64demo/base64.go | 18 ++++++++++++++++++ ssa/expr.go | 1 + 3 files changed, 21 insertions(+) create mode 100644 _cmptest/base64demo/base64.go diff --git a/README.md b/README.md index fed235f6..a1432878 100644 --- a/README.md +++ b/README.md @@ -291,6 +291,8 @@ Here are the Go packages that can be imported correctly: * [fmt](https://pkg.go.dev/fmt) (partially) * [reflect](https://pkg.go.dev/reflect) (partially) * [time](https://pkg.go.dev/time) (partially) +* [encoding/binary](https://pkg.go.dev/encoding/binary) +* [encoding/base64](https://pkg.go.dev/encoding/base64) * [regexp](https://pkg.go.dev/regexp) * [regexp/syntax](https://pkg.go.dev/regexp/syntax) diff --git a/_cmptest/base64demo/base64.go b/_cmptest/base64demo/base64.go new file mode 100644 index 00000000..22728ba9 --- /dev/null +++ b/_cmptest/base64demo/base64.go @@ -0,0 +1,18 @@ +package main + +import ( + "encoding/base64" + "fmt" +) + +func main() { + msg := "Hello, 世界" + encoded := base64.StdEncoding.EncodeToString([]byte(msg)) + fmt.Println(encoded) + decoded, err := base64.StdEncoding.DecodeString(encoded) + if err != nil { + fmt.Println("decode error:", err) + return + } + fmt.Println(string(decoded)) +} diff --git a/ssa/expr.go b/ssa/expr.go index 9400958a..263ebb7a 100644 --- a/ssa/expr.go +++ b/ssa/expr.go @@ -699,6 +699,7 @@ func (b Builder) ChangeType(t Type, x Expr) (ret Expr) { case vkFuncDecl: ret.impl = checkExpr(x, t.raw.Type, b).impl case vkClosure: + // TODO(xsw): change type should be a noop instruction convType := func() Expr { r := Expr{llvm.CreateAlloca(b.impl, t.ll), b.Prog.Pointer(t)} b.Store(r, x) From ad1a42d6a5c3369b7eded41be6c2f6239b9440a2 Mon Sep 17 00:00:00 2001 From: xushiwei Date: Tue, 30 Jul 2024 00:30:58 +0800 Subject: [PATCH 2/3] library: encoding/base32 --- README.md | 1 + _cmptest/base64demo/base64.go | 20 +++++++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a1432878..a8ff2825 100644 --- a/README.md +++ b/README.md @@ -292,6 +292,7 @@ Here are the Go packages that can be imported correctly: * [reflect](https://pkg.go.dev/reflect) (partially) * [time](https://pkg.go.dev/time) (partially) * [encoding/binary](https://pkg.go.dev/encoding/binary) +* [encoding/base32](https://pkg.go.dev/encoding/base32) * [encoding/base64](https://pkg.go.dev/encoding/base64) * [regexp](https://pkg.go.dev/regexp) * [regexp/syntax](https://pkg.go.dev/regexp/syntax) diff --git a/_cmptest/base64demo/base64.go b/_cmptest/base64demo/base64.go index 22728ba9..e80a6f42 100644 --- a/_cmptest/base64demo/base64.go +++ b/_cmptest/base64demo/base64.go @@ -1,11 +1,12 @@ package main import ( + "encoding/base32" "encoding/base64" "fmt" ) -func main() { +func base64Demo() { msg := "Hello, 世界" encoded := base64.StdEncoding.EncodeToString([]byte(msg)) fmt.Println(encoded) @@ -16,3 +17,20 @@ func main() { } fmt.Println(string(decoded)) } + +func base32Demo() { + str := "JBSWY3DPFQQHO33SNRSCC===" + dst := make([]byte, base32.StdEncoding.DecodedLen(len(str))) + n, err := base32.StdEncoding.Decode(dst, []byte(str)) + if err != nil { + fmt.Println("decode error:", err) + return + } + dst = dst[:n] + fmt.Printf("%q\n", dst) +} + +func main() { + base64Demo() + base32Demo() +} From 679e2d0f6baa8b7bc8b6742e93810e7e4a92e5d1 Mon Sep 17 00:00:00 2001 From: xushiwei Date: Tue, 30 Jul 2024 00:33:44 +0800 Subject: [PATCH 3/3] library: encoding/hex --- README.md | 1 + _cmptest/base64demo/base64.go | 12 ++++++++++++ 2 files changed, 13 insertions(+) diff --git a/README.md b/README.md index a8ff2825..5762e3dd 100644 --- a/README.md +++ b/README.md @@ -292,6 +292,7 @@ Here are the Go packages that can be imported correctly: * [reflect](https://pkg.go.dev/reflect) (partially) * [time](https://pkg.go.dev/time) (partially) * [encoding/binary](https://pkg.go.dev/encoding/binary) +* [encoding/hex](https://pkg.go.dev/encoding/hex) * [encoding/base32](https://pkg.go.dev/encoding/base32) * [encoding/base64](https://pkg.go.dev/encoding/base64) * [regexp](https://pkg.go.dev/regexp) diff --git a/_cmptest/base64demo/base64.go b/_cmptest/base64demo/base64.go index e80a6f42..0fbd1fa4 100644 --- a/_cmptest/base64demo/base64.go +++ b/_cmptest/base64demo/base64.go @@ -3,7 +3,9 @@ package main import ( "encoding/base32" "encoding/base64" + "encoding/hex" "fmt" + "log" ) func base64Demo() { @@ -30,7 +32,17 @@ func base32Demo() { fmt.Printf("%q\n", dst) } +func hexDemo() { + const s = "48656c6c6f20476f7068657221" + decoded, err := hex.DecodeString(s) + if err != nil { + log.Fatal(err) + } + fmt.Printf("%s\n", decoded) + +} func main() { base64Demo() base32Demo() + hexDemo() }