From 7b0d23f91ff18cb022f5107a7c4527e4809c9a49 Mon Sep 17 00:00:00 2001 From: xushiwei Date: Sat, 15 Jun 2024 08:21:27 +0800 Subject: [PATCH] internal/abi.Map: IndirectKey/IndirectElem --- c/c.go | 5 ++++- internal/abi/type.go | 18 ++++++++++++++++++ py/README.md | 4 ++-- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/c/c.go b/c/c.go index 4c5f4e13..a38958ed 100644 --- a/c/c.go +++ b/c/c.go @@ -46,7 +46,7 @@ type integer interface { func Str(string) *Char // llgo:link Advance llgo.advance -func Advance[PtrT any](ptr PtrT, offset int) PtrT { return ptr } +func Advance[PtrT any, I integer](ptr PtrT, offset I) PtrT { return ptr } // llgo:link Index llgo.index func Index[T any, I integer](ptr *T, offset I) T { return *ptr } @@ -66,6 +66,9 @@ func Free(ptr Pointer) //go:linkname Memcpy C.memcpy func Memcpy(dst, src Pointer, n uintptr) Pointer +//go:linkname Memmove C.memmove +func Memmove(dst, src Pointer, n uintptr) Pointer + //go:linkname Memset C.memset func Memset(s Pointer, c Int, n uintptr) Pointer diff --git a/internal/abi/type.go b/internal/abi/type.go index c3f0f9ed..3e7250b9 100644 --- a/internal/abi/type.go +++ b/internal/abi/type.go @@ -170,6 +170,24 @@ type MapType struct { Flags uint32 } +// Note: flag values must match those used in the TMAP case +// in ../cmd/compile/internal/reflectdata/reflect.go:writeType. +func (mt *MapType) IndirectKey() bool { // store ptr to key instead of key itself + return mt.Flags&1 != 0 +} +func (mt *MapType) IndirectElem() bool { // store ptr to elem instead of elem itself + return mt.Flags&2 != 0 +} +func (mt *MapType) ReflexiveKey() bool { // true if k==k for all keys + return mt.Flags&4 != 0 +} +func (mt *MapType) NeedKeyUpdate() bool { // true if we need to update key on an overwrite + return mt.Flags&8 != 0 +} +func (mt *MapType) HashMightPanic() bool { // true if hash function might panic + return mt.Flags&16 != 0 +} + type PtrType struct { Type Elem *Type // pointer element (pointed at) type diff --git a/py/README.md b/py/README.md index 16d3bbc3..32479857 100644 --- a/py/README.md +++ b/py/README.md @@ -19,10 +19,10 @@ To run the demos in directory `_demo`, you need to set the `LLGO_LIB_PYTHON` env export LLGO_LIB_PYTHON=/foo/bar/python3.12 ``` -For example, `/opt/homebrew/Frameworks/Python.framework/Versions/3.12/libpython3.12.dylib` is a typical python lib location under macOS. So we should set it like this: +For example, `/opt/homebrew/Frameworks/Python.framework/Versions/3.12/lib/libpython3.12.dylib` is a typical python lib location under macOS. So we should set it like this: ```sh -export LLGO_LIB_PYTHON=/opt/homebrew/Frameworks/Python.framework/Versions/3.12/python3.12 +export LLGO_LIB_PYTHON=/opt/homebrew/Frameworks/Python.framework/Versions/3.12/lib/python3.12 ``` Then you can run the demos in directory `_demo`: