From f7d7f81c49953ff5d1579115751c2177f0685646 Mon Sep 17 00:00:00 2001 From: xushiwei Date: Thu, 20 Jun 2024 11:05:43 +0800 Subject: [PATCH] library: strconv --- README.md | 1 + _demo/strconv/strconv.go | 7 +++++++ cl/import.go | 9 +++++++-- internal/build/build.go | 24 ++++++++++++++---------- internal/lib/internal/bytealg/bytealg.go | 22 ++++++++++++++++++++++ 5 files changed, 51 insertions(+), 12 deletions(-) create mode 100644 _demo/strconv/strconv.go create mode 100644 internal/lib/internal/bytealg/bytealg.go diff --git a/README.md b/README.md index eb52c41ed..9628e7979 100644 --- a/README.md +++ b/README.md @@ -209,6 +209,7 @@ Here are the Go packages that can be imported correctly: * [math](https://pkg.go.dev/math) * [math/bits](https://pkg.go.dev/math/bits) * [math/cmplx](https://pkg.go.dev/math/cmplx) +* [strconv](https://pkg.go.dev/strconv) * [syscall](https://pkg.go.dev/syscall) (partially) * [sync](https://pkg.go.dev/sync) (partially) * [sync/atomic](https://pkg.go.dev/sync/atomic) (partially) diff --git a/_demo/strconv/strconv.go b/_demo/strconv/strconv.go new file mode 100644 index 000000000..461598c13 --- /dev/null +++ b/_demo/strconv/strconv.go @@ -0,0 +1,7 @@ +package main + +import "strconv" + +func main() { + println(strconv.Itoa(-123)) +} diff --git a/cl/import.go b/cl/import.go index ae85ed511..e780e5e59 100644 --- a/cl/import.go +++ b/cl/import.go @@ -518,10 +518,15 @@ func ignoreName(name string) bool { return true } */ - return strings.HasPrefix(name, "internal/") || strings.HasPrefix(name, "crypto/") || + return (strings.HasPrefix(name, "internal/") && !supportedInternal(name)) || + strings.HasPrefix(name, "crypto/") || strings.HasPrefix(name, "reflect.") || strings.HasPrefix(name, "arena.") || strings.HasPrefix(name, "maps.") || strings.HasPrefix(name, "time.") || strings.HasPrefix(name, "runtime/") || - strings.HasPrefix(name, "plugin.") || strings.HasPrefix(name, "reflect.") + strings.HasPrefix(name, "plugin.") +} + +func supportedInternal(name string) bool { + return strings.HasPrefix(name, "internal/bytealg.") } // ----------------------------------------------------------------------------- diff --git a/internal/build/build.go b/internal/build/build.go index ad28295b3..7e73151b8 100644 --- a/internal/build/build.go +++ b/internal/build/build.go @@ -706,6 +706,9 @@ func decodeFile(outFile string, zipf *zip.File) (err error) { } func canSkipToBuild(pkgPath string) bool { + if _, ok := hasAltPkg[pkgPath]; ok { + return false + } switch pkgPath { case "unsafe": return true @@ -718,16 +721,17 @@ func canSkipToBuild(pkgPath string) bool { type none struct{} var hasAltPkg = map[string]none{ - "errors": {}, - "io": {}, - "io/fs": {}, - "math": {}, - "math/cmplx": {}, - "sync": {}, - "sync/atomic": {}, - "syscall": {}, - "os": {}, - "runtime": {}, + "errors": {}, + "internal/bytealg": {}, + "io": {}, + "io/fs": {}, + "math": {}, + "math/cmplx": {}, + "sync": {}, + "sync/atomic": {}, + "syscall": {}, + "os": {}, + "runtime": {}, } func check(err error) { diff --git a/internal/lib/internal/bytealg/bytealg.go b/internal/lib/internal/bytealg/bytealg.go new file mode 100644 index 000000000..466b7271b --- /dev/null +++ b/internal/lib/internal/bytealg/bytealg.go @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2024 The GoPlus Authors (goplus.org). All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package bytealg + +// llgo:skip init +import ( + _ "unsafe" +)