From b93fc3f02840143c9c8c06e42b27b1f685391826 Mon Sep 17 00:00:00 2001 From: xushiwei Date: Fri, 21 Jun 2024 11:02:28 +0800 Subject: [PATCH] patch internal/reflectlite; demo: sort.Ints --- README.md | 1 + _demo/sortdemo/sort.go | 11 ++++++++ cl/import.go | 5 ++-- internal/build/build.go | 25 ++++++++++--------- .../lib/internal/reflectlite/reflectlite.go | 22 ++++++++++++++++ internal/lib/reflect/makefunc.go | 16 ++++++++++++ internal/lib/reflect/value.go | 4 +++ 7 files changed, 70 insertions(+), 14 deletions(-) create mode 100644 _demo/sortdemo/sort.go create mode 100644 internal/lib/internal/reflectlite/reflectlite.go diff --git a/README.md b/README.md index 918d1cce9..d28db1103 100644 --- a/README.md +++ b/README.md @@ -208,6 +208,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) +* [sort](https://pkg.go.dev/sort) * [strconv](https://pkg.go.dev/strconv) * [sync/atomic](https://pkg.go.dev/sync/atomic) * [sync](https://pkg.go.dev/sync) (partially) diff --git a/_demo/sortdemo/sort.go b/_demo/sortdemo/sort.go new file mode 100644 index 000000000..c138cec93 --- /dev/null +++ b/_demo/sortdemo/sort.go @@ -0,0 +1,11 @@ +package main + +import "sort" + +func main() { + vals := []int{32, 58, 25, 92, 45, 78} + sort.Ints(vals) + for _, v := range vals { + println(v) + } +} diff --git a/cl/import.go b/cl/import.go index bb8f03f07..f5f6f5c76 100644 --- a/cl/import.go +++ b/cl/import.go @@ -518,14 +518,15 @@ func ignoreName(name string) bool { return true } */ - return (strings.HasPrefix(name, "internal/") && !supportedInternal(name)) || + const internal = "internal/" + return (strings.HasPrefix(name, internal) && !supportedInternal(name[len(internal):])) || strings.HasPrefix(name, "crypto/") || strings.HasPrefix(name, "runtime/") || strings.HasPrefix(name, "arena.") || strings.HasPrefix(name, "maps.") || strings.HasPrefix(name, "time.") || strings.HasPrefix(name, "plugin.") } func supportedInternal(name string) bool { - return strings.HasPrefix(name, "internal/bytealg.") + return strings.HasPrefix(name, "bytealg.") || strings.HasPrefix(name, "reflectlite.") } // ----------------------------------------------------------------------------- diff --git a/internal/build/build.go b/internal/build/build.go index 07257c8c3..18bf05139 100644 --- a/internal/build/build.go +++ b/internal/build/build.go @@ -739,18 +739,19 @@ func canSkipToBuild(pkgPath string) bool { type none struct{} var hasAltPkg = map[string]none{ - "errors": {}, - "internal/bytealg": {}, - "io": {}, - "io/fs": {}, - "math": {}, - "math/cmplx": {}, - "reflect": {}, - "sync": {}, - "sync/atomic": {}, - "syscall": {}, - "os": {}, - "runtime": {}, + "errors": {}, + "internal/bytealg": {}, + "internal/reflectlite": {}, + "io": {}, + "io/fs": {}, + "math": {}, + "math/cmplx": {}, + "reflect": {}, + "sync": {}, + "sync/atomic": {}, + "syscall": {}, + "os": {}, + "runtime": {}, } func check(err error) { diff --git a/internal/lib/internal/reflectlite/reflectlite.go b/internal/lib/internal/reflectlite/reflectlite.go new file mode 100644 index 000000000..354ac4da6 --- /dev/null +++ b/internal/lib/internal/reflectlite/reflectlite.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 reflectlite + +// llgo:skipall +import ( + _ "unsafe" +) diff --git a/internal/lib/reflect/makefunc.go b/internal/lib/reflect/makefunc.go index 06b0ae92d..2a0e62080 100644 --- a/internal/lib/reflect/makefunc.go +++ b/internal/lib/reflect/makefunc.go @@ -1,3 +1,19 @@ +/* + * 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. + */ + // Copyright 2012 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. diff --git a/internal/lib/reflect/value.go b/internal/lib/reflect/value.go index 1306ee20b..9636ae1b5 100644 --- a/internal/lib/reflect/value.go +++ b/internal/lib/reflect/value.go @@ -14,6 +14,10 @@ * limitations under the License. */ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + package reflect import (