diff --git a/c/bdwgc/_test/bdwgc.go b/c/bdwgc/_test/bdwgc.go deleted file mode 100644 index 4981a56f..00000000 --- a/c/bdwgc/_test/bdwgc.go +++ /dev/null @@ -1,101 +0,0 @@ -package main - -import ( - "unsafe" - - "github.com/goplus/lib/c" - "github.com/goplus/lib/c/bdwgc" - "github.com/goplus/lib/c/bdwgc/_test/testing" -) - -// ------ Test malloc ------ - -func TestMalloc(t *testing.T) { - pn := (*int)(bdwgc.Malloc(unsafe.Sizeof(int(0)))) - *pn = 1 << 30 - c.Printf(c.Str("value: %d, %x, %p, %p\n"), *pn, *pn, pn, &pn) - - pl := (*int64)(bdwgc.Realloc(c.Pointer(pn), unsafe.Sizeof(int64(0)))) - *pl = 1 << 60 - c.Printf(c.Str("value: %lld, %llx, %p, %p\n"), *pl, *pl, pl, &pl) - - bdwgc.Free(c.Pointer(pl)) -} - -// ------ Test finalizer ------ - -const ( - RETURN_VALUE_FREED = 1 << 31 -) - -var called uint = 0 - -func setReturnValueFreed(pobj c.Pointer, clientData c.Pointer) { - called |= RETURN_VALUE_FREED - c.Printf(c.Str("called: %x\n"), called) -} - -func setLoopValueFreed(pobj c.Pointer, clientData c.Pointer) { - pmask := (*uint)(clientData) - called |= *pmask - c.Printf(c.Str("called: %x\n"), called) -} - -func isCalled(mask uint) bool { - return called&mask != 0 -} - -func returnValue() *int { - pn := bdwgc.Malloc(unsafe.Sizeof(int(0))) - bdwgc.RegisterFinalizer(pn, setReturnValueFreed, nil, nil, nil) - return (*int)(pn) -} - -func callFunc() { - pn := returnValue() - *pn = 1 << 30 - c.Printf(c.Str("value: %d, %x, %p, %p\n"), *pn, *pn, pn, &pn) - bdwgc.Gcollect() - check(!isCalled(RETURN_VALUE_FREED), c.Str("finalizer should not be called")) -} - -func loop() { - for i := 0; i < 5; i++ { - p := bdwgc.Malloc(unsafe.Sizeof(int(0))) - pn := (*int)(p) - *pn = i - c.Printf(c.Str("value: %d, %x, %p, %p\n"), *pn, *pn, pn, &pn) - pflag := (*uint)(c.Malloc(unsafe.Sizeof(uint(0)))) - *pflag = 1 << i - bdwgc.RegisterFinalizer(p, setLoopValueFreed, c.Pointer(pflag), nil, nil) - bdwgc.Gcollect() - check(!isCalled(1<= len(tests) { - c.Printf(c.Str("invalid test index %d"), idx) - panic("invalid test index") - } - tests[idx].F(nil) -} diff --git a/c/bdwgc/_test/testing/testing.go b/c/bdwgc/_test/testing/testing.go deleted file mode 100644 index d4b6029b..00000000 --- a/c/bdwgc/_test/testing/testing.go +++ /dev/null @@ -1,4 +0,0 @@ -package testing - -type T struct { -} diff --git a/c/bdwgc/bdwgc.go b/c/bdwgc/bdwgc.go deleted file mode 100644 index f7b8f50e..00000000 --- a/c/bdwgc/bdwgc.go +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Copyright (c) 2024 The XGo Authors (xgo.dev). 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 bdwgc - -import ( - _ "unsafe" - - "github.com/goplus/lib/c" -) - -const ( - LLGoPackage = "link: $(pkg-config --libs bdw-gc); -lgc" -) - -// ----------------------------------------------------------------------------- - -//go:linkname Init C.GC_init -func Init() - -//go:linkname Malloc C.GC_malloc -func Malloc(size uintptr) c.Pointer - -//go:linkname Realloc C.GC_realloc -func Realloc(ptr c.Pointer, size uintptr) c.Pointer - -//go:linkname Free C.GC_free -func Free(ptr c.Pointer) - -// ----------------------------------------------------------------------------- - -//go:linkname RegisterFinalizer C.GC_register_finalizer -func RegisterFinalizer( - obj c.Pointer, - fn func(c.Pointer, c.Pointer), cd c.Pointer, - oldFn *func(c.Pointer, c.Pointer), oldCd *c.Pointer) - -//go:linkname RegisterFinalizerNoOrder C.GC_register_finalizer_no_order -func RegisterFinalizerNoOrder( - obj c.Pointer, - fn func(c.Pointer, c.Pointer), cd c.Pointer, - oldFn *func(c.Pointer, c.Pointer), oldCd *c.Pointer) - -//go:linkname RegisterFinalizerIgnoreSelf C.GC_register_finalizer_ignore_self -func RegisterFinalizerIgnoreSelf( - obj c.Pointer, - fn func(c.Pointer, c.Pointer), cd c.Pointer, - oldFn *func(c.Pointer, c.Pointer), oldCd *c.Pointer) - -//go:linkname RegisterFinalizerUnreachable C.GC_register_finalizer_unreachable -func RegisterFinalizerUnreachable( - obj c.Pointer, - fn func(c.Pointer, c.Pointer), cd c.Pointer, - oldFn *func(c.Pointer, c.Pointer), oldCd *c.Pointer) - -// ----------------------------------------------------------------------------- - -//go:linkname Enable C.GC_enable -func Enable() - -//go:linkname Disable C.GC_disable -func Disable() - -//go:linkname IsDisabled C.GC_is_disabled -func IsDisabled() c.Int - -//go:linkname Gcollect C.GC_gcollect -func Gcollect() - -//go:linkname GetMemoryUse C.GC_get_memory_use -func GetMemoryUse() uintptr - -// ----------------------------------------------------------------------------- - -//go:linkname EnableIncremental C.GC_enable_incremental -func EnableIncremental() - -//go:linkname IsIncrementalMode C.GC_is_incremental_mode -func IsIncrementalMode() c.Int - -//go:linkname IncrementalProtectionNeeds C.GC_incremental_protection_needs -func IncrementalProtectionNeeds() c.Int - -//go:linkname StartIncrementalCollection C.GC_start_incremental_collection -func StartIncrementalCollection() - -//go:linkname CollectALittle C.GC_collect_a_little -func CollectALittle() - -// -----------------------------------------------------------------------------