Compare commits

..

969 Commits

Author SHA1 Message Date
xushiwei
aa4f518262 Merge pull request #673 from cpunion/libuv-async
Add libuv async
2024-08-07 21:43:50 +08:00
xushiwei
f76fa879fc Merge pull request #676 from luoliwoshang/xtool/ast/funcproto
castdump:funcproto type & computed enum value
2024-08-07 21:42:47 +08:00
luoliwoshang
8d70aba1f5 castdump:funcproto type & enum value 2024-08-07 20:33:35 +08:00
Li Jie
a44bb35aec libuv: add async 2024-08-07 20:24:43 +08:00
xushiwei
4fda2b656f Merge pull request #672 from luoliwoshang/c/clang/type-tree
castdump:array,typedef,pointer,funcproto,enum & builtin type
2024-08-07 19:15:37 +08:00
xushiwei
e626d00fdf Merge pull request #674 from hackerchai/feature/c-calloc
feat(c): Add Calloc func
2024-08-07 18:39:35 +08:00
hackerchai
753dcd3301 feat(c): Add Calloc func 2024-08-07 16:45:17 +08:00
Li Jie
8b5dee510e libuv: add uv_stop 2024-08-07 16:21:12 +08:00
luoliwoshang
9cb73fbf78 castdump:array,typedef,pointer & builtin type 2024-08-07 15:52:26 +08:00
xushiwei
e6b4deb5c4 Merge pull request #657 from hackerchai/fix/c-libuv-missing-func
feat(c/libuv): Add libuv missing funcs & refactor go func style
2024-08-07 15:04:52 +08:00
hackerchai
8848222728 feat(c/libuv): Add GetIoWatcherFd func using LLGoFiles 2024-08-07 14:49:21 +08:00
hackerchai
3cd62994c7 Revert "refactor(c/libuv): Use cgo alias replace struct assertion in fs"
This reverts commit 45ba5b8dc50a13223e05ad673f4e57d7277d3f24.

# Conflicts:
#	c/libuv/net.go
2024-08-07 14:49:20 +08:00
hackerchai
dd93a97790 Revert "feat(c/libuv): Add GetIoWatcherFd func"
This reverts commit 1ce16727b1195a65c8f2c9de07a864ed5e3902ef.

Signed-off-by: hackerchai <i@hackerchai.com>
2024-08-07 14:49:19 +08:00
hackerchai
e40e2d2d14 style(c/libuv): Use go type funcs & update demo(syanc_fs, echo_server) 2024-08-07 14:49:18 +08:00
hackerchai
26f8ce7b5a refactor(c/libuv): Use cgo alias replace struct assertion in fs
refactro(c/libuv): Use cgo alias avoid implicit struct member declaration
2024-08-07 14:49:17 +08:00
hackerchai
9a61e374b5 refactor(c/libuv): Move some func due to libuv doc
doc: https://docs.libuv.org/en/v1.x/
2024-08-07 14:49:16 +08:00
hackerchai
9b12e9819c fix(c/libuv/demo): Fix echo_server stream convert 2024-08-07 14:49:15 +08:00
hackerchai
5d0a91239c feat(c/libuv): Add GetIoWatcherFd func 2024-08-07 14:49:14 +08:00
hackerchai
c848278690 feat(c/libuv): Add uv_close & uv_signal func
Signed-off-by: hackerchai <i@hackerchai.com>

feat(c/libuv): Add uv_signal_stop func

Signed-off-by: hackerchai <i@hackerchai.com>

feat(c/libuv): Add GetIoWatcher, GetFd func & add Io srtuct

Signed-off-by: hackerchai <i@hackerchai.com>

refactor(c/libuv):  Rename some func

refactor(c/libuv): Remove net go wrapper

refactor(c/libuv):  Add GetIoWatcherFd func
2024-08-07 14:49:13 +08:00
luoliwoshang
2ebb929e2c castdump:accessMap 2024-08-07 10:59:27 +08:00
xushiwei
b34334ba93 Merge pull request #669 from visualfc/abimap
ssa: fix abi map init
2024-08-07 07:54:27 +08:00
visualfc
05a01cd803 ssa: fix abi map init 2024-08-06 22:24:21 +08:00
xushiwei
9ac0c06f26 Merge pull request #667 from luoliwoshang/c/clang/type
c/clang:cursor enum & type kind
2024-08-06 22:00:27 +08:00
xushiwei
52af22b0e8 Merge pull request #660 from luoliwoshang/c/clang/fullast
c/clang:full ast dump
2024-08-06 21:56:06 +08:00
luoliwoshang
81cfc73b48 castdump:full ast dump 2024-08-06 21:37:00 +08:00
xushiwei
f892bfccdf Merge pull request #665 from xushiwei/hmac
library: crypto/hmac, internal/fmtsort
2024-08-06 18:56:37 +08:00
xushiwei
dbed8fefac library: crypto/hmac 2024-08-06 18:49:24 +08:00
luoliwoshang
ca14637909 c/clang:type kind 2024-08-06 18:23:31 +08:00
luoliwoshang
7db618fba5 c/clang:cursor enum & access pecifier 2024-08-06 18:23:19 +08:00
xushiwei
29c74c09ce library/README: crypto/hmac, crypto/subtle 2024-08-06 17:19:31 +08:00
xushiwei
a2b5b9f97e library (todo): crypto/hmac, internal/fmtsort 2024-08-06 17:03:22 +08:00
tsingbx
6a05aa4e53 llgo support crypto hmac (#663)
* llgo support crypto/hmac
2024-08-06 16:47:51 +08:00
xushiwei
43fd5d233a Merge pull request #662 from xushiwei/cast
TypedefDecl
2024-08-06 15:10:15 +08:00
xushiwei
0bd39ed035 TypedefDecl 2024-08-06 15:09:39 +08:00
xushiwei
1db8aad039 Merge pull request #661 from xushiwei/cast
llcppg: c/c++ ast
2024-08-06 11:00:51 +08:00
xushiwei
fb2d4267f5 llcppg: c/c++ ast 2024-08-06 11:00:13 +08:00
xushiwei
d7b203ae08 Merge pull request #655 from tsingbx/hmac2
add openssl hmac
2024-08-05 23:21:19 +08:00
xushiwei
3e07f2e3bc Merge pull request #656 from spongehah/golib/net-url
library: net/url
2024-08-05 20:11:31 +08:00
xushiwei
94cf6f6640 Merge pull request #658 from luoliwoshang/c/clang/marco
c/clang:marco content
2024-08-05 20:10:10 +08:00
luoliwoshang
6da5fe4317 c/clang:marco content 2024-08-05 19:38:29 +08:00
赵英杰
3a68dee850 library: net/url 2024-08-05 18:00:27 +08:00
tsingbx
2ccfa6a2e8 add EVP_sha1, EVP_sha224.... 2024-08-05 17:38:01 +08:00
tsingbx
f7bf671050 add openssl hmac
delete GetMD and HMAC function

delete macro

tidy code

add hmac
2024-08-05 16:57:47 +08:00
xushiwei
4bff9cc3df Merge pull request #653 from luoliwoshang/c/clang/marco
[wip] c/clang:marco info
2024-08-05 12:53:23 +08:00
xushiwei
13c68a0184 Merge pull request #654 from visualfc/fixstd
cpp/std: fix std::string def
2024-08-05 12:48:33 +08:00
visualfc
6d92949715 cpp/std: fix std::string def 2024-08-05 11:17:42 +08:00
luoliwoshang
5cf31bd3f3 c/clang:marco info 2024-08-04 17:35:15 +08:00
xushiwei
929d4c8d61 Merge pull request #647 from aofei/ssa-llgolink
ssa: add `llgo:link` support to `Builder.abiMthd`
2024-08-04 12:08:52 +08:00
Aofei Sheng
482f796bad ssa: add llgo:link support to Builder.abiMthd 2024-08-04 11:00:31 +08:00
xushiwei
d85f532ab1 Merge pull request #652 from xushiwei/q
c/os: llgoClearenv
2024-08-04 10:55:03 +08:00
xushiwei
b1654f7807 c/os: llgoClearenv 2024-08-04 10:54:41 +08:00
xushiwei
4f8526e527 Merge pull request #649 from aofei/clearenv
fix(c/os): add missing `clearenv` for macOS
2024-08-04 10:50:18 +08:00
Aofei Sheng
4b568fc469 fix(c/os): add missing clearenv for macOS 2024-08-04 09:58:01 +08:00
xushiwei
d06146ed97 Merge pull request #645 from spongehah/refactor/c-libuv-remove-go-wrapper
refactor(c-libuv): Added TODO(uid) comment & adjusted the position of Handle, Stream, Req, Write, Connect
2024-08-04 07:35:21 +08:00
xushiwei
8e0e809733 Merge pull request #648 from aofei/sync
perf(lib/sync): avoid using `defer`
2024-08-04 07:31:49 +08:00
Aofei Sheng
d1f33a6c4c perf(lib/sync): avoid using defer 2024-08-03 09:05:43 +08:00
赵英杰
b3e1b6fdbf refactor(c-libuv): Added TODO(uid) comment & adjusted the position of Handle, Stream, Req, Write, Connect 2024-08-03 00:25:14 +08:00
xushiwei
0bd259403c Merge pull request #644 from xushiwei/q
library: io/ioutil
2024-08-02 14:35:23 +08:00
xushiwei
c186846463 README: io/ioutil 2024-08-02 14:27:10 +08:00
xushiwei
5f92c3b3fc library: io/ioutil 2024-08-02 14:26:13 +08:00
xushiwei
0665091cef Merge pull request #641 from xushiwei/q
c/openssl: bio, pem, rsa
2024-08-01 23:03:48 +08:00
xushiwei
688d153427 c/openssl: bio, pem, rsa 2024-08-01 22:55:17 +08:00
xushiwei
bec5ba7a73 Merge pull request #638 from luoliwoshang/doc/c/visibile
doc/c:refine symbol visibility desc
2024-08-01 17:17:39 +08:00
xushiwei
acedf4d6a3 Merge pull request #613 from hackerchai/fix/c-libuv-struct
fix(c/libuv): Add libuv fs struct new func & fix async_fs demo
2024-08-01 17:13:51 +08:00
hackerchai
5dd5494f93 refactor(c/libuv): Adapt libuv.Fs struct 2024-08-01 10:57:59 +08:00
hackerchai
f253e4fabe Revert "fix(c/libuv): Add libuv fs struct new func"
This reverts commit 5fdb0a9634b5ecc29ddd50b6e5cce9938bcb7934.

# Conflicts:
#	c/libuv/_wrap/fs.c
#	c/libuv/fs.go
2024-08-01 10:57:58 +08:00
hackerchai
acd09d24d5 fix(c/libuv): Fix async_fs demo return 255 error & pointer not allocated error
Signed-off-by: hackerchai <i@hackerchai.com>

fix(c/libuv): Mv LLGoFiles declaration

Signed-off-by: hackerchai <i@hackerchai.com>

fix(c/libuv/demo): Fix return 255 error & pointer not allocated error

Signed-off-by: hackerchai <i@hackerchai.com>

refactor(c/libuv): Rewrite FsNew() logic

Signed-off-by: hackerchai <i@hackerchai.com>
2024-08-01 10:57:57 +08:00
hackerchai
ceac95c81a fix(c/libuv): Add libuv fs struct new func
Signed-off-by: hackerchai <i@hackerchai.com>
2024-08-01 10:54:01 +08:00
luoliwoshang
47a05d0ea2 doc/c:refine symbol visibility description 2024-08-01 09:54:48 +08:00
xushiwei
d2975479f2 Merge pull request #637 from xushiwei/q
README: math/big
2024-08-01 08:52:27 +08:00
xushiwei
3c238ffae7 Merge pull request #629 from luoliwoshang/doc/c
doc/c: fix incorrect Constructor and Destructor usage in bindings
2024-08-01 08:51:38 +08:00
xushiwei
69f8d1b717 README: math/big 2024-08-01 08:46:37 +08:00
xushiwei
45cd9e65d3 Merge pull request #634 from xushiwei/q
library: math/big.Int (mini-impl for _cmptest/bigintdemo)
2024-08-01 00:38:24 +08:00
xushiwei
2e4b1d8c2b library: math/big.Int (mini-impl for _cmptest/bigintdemo) 2024-08-01 00:32:21 +08:00
luoliwoshang
4e3b65188d doc/c:update implicit destructors description 2024-08-01 00:10:03 +08:00
xushiwei
0ab32e066b Merge pull request #633 from xushiwei/q
c/openssl: bignum, rsa
2024-07-31 23:21:25 +08:00
xushiwei
79d8b00b27 c/openssl: bignum, rsa 2024-07-31 22:34:13 +08:00
xushiwei
eb02c5a451 Merge pull request #631 from xushiwei/q
library: crypto, crypto/{sha1, sha256, sha512}
2024-07-31 19:04:24 +08:00
xushiwei
85509c777d library: crypto 2024-07-31 18:59:25 +08:00
xushiwei
27677f86e4 library: crypto/{sha1, sha256, sha512} 2024-07-31 18:55:46 +08:00
xushiwei
16174ca874 Merge pull request #627 from tsingbx/main
add crypto sha1,sha256,sha512
2024-07-31 18:39:54 +08:00
luoliwoshang
a4e9233231 doc/c:fix incorrect usage in construtors 2024-07-31 15:24:31 +08:00
luoliwoshang
4fdfafa17f doc/c:update destructor usage 2024-07-31 15:10:50 +08:00
tsingbx
c9a7dab419 delete sum 2024-07-31 14:56:03 +08:00
tsingbx
8882d75132 fix test error 2024-07-31 14:36:42 +08:00
tsingbx
f67b15b926 fix test fail 2024-07-31 14:28:15 +08:00
tsingbx
2d7958f726 add crypto sha1, sha256, sha512 2024-07-31 13:56:42 +08:00
xushiwei
36072584d0 Merge pull request #626 from aofei/goreleaser
fix(.goreleaser.yaml): correct ldflags for build version and time
2024-07-31 13:38:40 +08:00
Aofei Sheng
2119e52f55 fix(.goreleaser.yaml): correct ldflags for build version and time 2024-07-31 13:27:54 +08:00
xushiwei
ca1aa6b663 Merge pull request #625 from aofei/opt-deps
ci: install further optional dependencies for demos
2024-07-31 13:00:34 +08:00
xushiwei
10af671b76 Merge pull request #624 from xushiwei/q
library: go/parser (todo)
2024-07-31 13:00:09 +08:00
Aofei Sheng
a4ec6cce96 ci: install further optional dependencies for demos
Achieved 100% pass rate for demo tests, at least on macOS.
2024-07-31 12:34:51 +08:00
xushiwei
5082ba7102 library: go/parser (todo) 2024-07-31 12:29:09 +08:00
xushiwei
7405e7001b Merge pull request #623 from xushiwei/q
library: encoding, go/{token, scanner}
2024-07-31 11:56:09 +08:00
xushiwei
4c70651b81 library: go/{token, scanner} 2024-07-31 11:33:15 +08:00
xushiwei
21b5b60278 Merge pull request #622 from xushiwei/q
library: crypto/rand
2024-07-31 10:30:20 +08:00
xushiwei
0abc5ec452 README: crypto/rand 2024-07-31 10:30:04 +08:00
xushiwei
b1d2d620fa Merge pull request #621 from aofei/deps
deps: require zlib 1.2+
2024-07-31 10:27:47 +08:00
xushiwei
af6e4abe84 library: crypto/rand 2024-07-31 10:26:18 +08:00
Aofei Sheng
45b4315842 deps: require zlib 1.2+ 2024-07-31 09:52:48 +08:00
xushiwei
d2cb96a9e5 Merge pull request #620 from xushiwei/q
c/openssl: rand
2024-07-31 01:33:10 +08:00
xushiwei
a3ff845a14 c/openssl: rand 2024-07-31 01:27:08 +08:00
xushiwei
621f05c687 Merge pull request #566 from luoliwoshang/llcppg/symg/header
[wip] llcppg/symg
2024-07-30 22:11:31 +08:00
xushiwei
daf97eabab Merge pull request #618 from xushiwei/q
README: c/openssl
2024-07-30 22:01:20 +08:00
xushiwei
ee3d11cb53 README: c/openssl 2024-07-30 21:56:19 +08:00
xushiwei
1bc7e5e0a5 Merge pull request #617 from xushiwei/q
library: math/rand
2024-07-30 21:50:22 +08:00
xushiwei
9280d23b1a Merge pull request #616 from tsingbx/main
add openssl sha1,sha256,sha512
2024-07-30 21:46:21 +08:00
xushiwei
cacd52f81d library: math/rand 2024-07-30 21:41:26 +08:00
tsingbx
95f64761ca add SHA224_CTX, SHA384_CTX 2024-07-30 21:24:03 +08:00
tsingbx
6e24792b9b Remove redundant code and add examples 2024-07-30 21:06:17 +08:00
luoliwoshang
9afe26f1d6 c/clang/symg:keep user edit symbol 2024-07-30 20:50:22 +08:00
xushiwei
e7d959da90 Merge pull request #614 from aofei/min-max
ssa: add support for `min` and `max` built-in functions
2024-07-30 19:59:33 +08:00
xushiwei
c3f0867d2c Merge pull request #615 from xushiwei/q
library: hash, hash/{adler32, crc32, crc64}; c/zlib: crc32/adler32
2024-07-30 19:44:17 +08:00
xushiwei
1eaf124d4e library: hash/{crc32, adler32} 2024-07-30 19:36:36 +08:00
tsingbx
03076bdc76 Merge branch 'main' of https://github.com/tsingbx/tsingbx-llgo 2024-07-30 19:20:54 +08:00
tsingbx
cd32d6debe add openssl sha1,sha256,sha512 2024-07-30 19:20:15 +08:00
xushiwei
3212f059ff c/zlib: crc32/adler32 2024-07-30 18:53:55 +08:00
tsingbx
9ae4b93083 add openssl sha1,sha256,sha512 2024-07-30 18:32:27 +08:00
xushiwei
aae7af2194 library: hash, hash/crc64 2024-07-30 18:26:33 +08:00
luoliwoshang
63f4c73ef0 c/clang/symg:remove example config file 2024-07-30 17:25:33 +08:00
luoliwoshang
f93d3381e0 c/clang/symg:move get conf func 2024-07-30 17:25:33 +08:00
luoliwoshang
099c80e04b c/clang/symg: use xtool/nm to parse symbol 2024-07-30 17:25:33 +08:00
luoliwoshang
14face336e c/clang/symg:remove JSONPath 2024-07-30 17:25:33 +08:00
luoliwoshang
67b10d8d38 c/clang/symg:refine config usage 2024-07-30 17:25:33 +08:00
luoliwoshang
1219230168 c/clang/symg:genSymbolTableFile 2024-07-30 17:25:33 +08:00
luoliwoshang
8d840e694d c/clang/symg:remove unuse comment 2024-07-30 17:25:33 +08:00
luoliwoshang
87382aad4d c/clang/symg:use unsafe.String to avoid memory copy 2024-07-30 17:25:33 +08:00
luoliwoshang
aca3a05222 c/clang/symg:abstract json item fetch 2024-07-30 17:25:33 +08:00
luoliwoshang
84ca145663 c/clang/symg:merge llcppinfofetch to llcppsymg 2024-07-30 17:25:33 +08:00
luoliwoshang
01d0338851 c/clang/symg:use llvm to demangle name 2024-07-30 17:25:33 +08:00
luoliwoshang
f427c0532d c/clang/symg:use cjson get conf 2024-07-30 17:25:33 +08:00
luoliwoshang
c8532a548c c/clang/symg:abstract common type 2024-07-30 17:25:33 +08:00
luoliwoshang
1e3aef5b94 c/clang/symg:remove chinese 2024-07-30 17:25:33 +08:00
morpingsss
0d3180271b feat(llgo/chore/llcppg): add JSONPath 2024-07-30 17:25:33 +08:00
luoliwoshang
f0d17b13f2 c/clang/symg:multiple header file 2024-07-30 17:25:33 +08:00
morpingsss
9a46301d46 feat(llgo/xtools): delete chinese 2024-07-30 17:25:33 +08:00
luoliwoshang
3bd609ee41 c/clang/symg:filter unuse file 2024-07-30 17:25:33 +08:00
luoliwoshang
2c7f0e8583 c/clang/symg:get constructor & destructor 2024-07-30 17:25:33 +08:00
morpingsss
ce36a25ba3 feat(llgo/xtools): add TrimPrefix 2024-07-30 17:25:33 +08:00
luoliwoshang
c53484f92e c/clang/symg:normal gen json 2024-07-30 17:25:33 +08:00
luoliwoshang
f391ccb8e8 c/clang/symg/header:get func info 2024-07-30 17:25:33 +08:00
morpingsss
a96d6a8148 feat(llgo/xtools): add llcppsymg.go 2024-07-30 17:25:33 +08:00
xushiwei
bdca09007d Merge pull request #612 from xushiwei/q
library: os.ReadFile
2024-07-30 17:18:28 +08:00
xushiwei
c0e84043c9 library: os.ReadFile 2024-07-30 17:14:59 +08:00
Aofei Sheng
0a884df74f ssa: add support for min and max built-in functions 2024-07-30 17:09:41 +08:00
xushiwei
519b14d506 Merge pull request #611 from aofei/openssl
deps: require OpenSSL 3.0+
2024-07-30 15:35:08 +08:00
Aofei Sheng
f008a65d91 deps: require OpenSSL 3.0+ 2024-07-30 14:17:45 +08:00
xushiwei
61bb70cd30 Merge pull request #610 from aofei/build
build: replicate macOS `-dead_strip` optimization on Linux
2024-07-30 10:18:27 +08:00
Aofei Sheng
68fa3dadb0 build: replicate macOS -dead_strip optimization on Linux
Added `-fdata-sections` and `-ffunction-sections` compiler flags to work
with `--gc-sections` on Linux. This combination achieves similar dead
code elimination as macOS's `-dead_strip`, reducing binary size and
resolving undefined symbol issues. Ensures consistent optimization
across macOS and Linux builds.
2024-07-30 08:52:29 +08:00
xushiwei
eb38d03976 Merge pull request #608 from xushiwei/q
library: crypto/md5
2024-07-30 02:11:38 +08:00
xushiwei
d480bb3ecd library: crypto/md5 2024-07-30 02:07:19 +08:00
xushiwei
dfdb6fa1a6 Merge pull request #607 from xushiwei/q
library: c/openssl
2024-07-30 01:40:46 +08:00
xushiwei
42352d9f57 library: c/openssl 2024-07-30 01:35:49 +08:00
xushiwei
eae1c5db70 Merge pull request #606 from xushiwei/q
library: bufio, encoding/csv
2024-07-30 00:48:05 +08:00
xushiwei
cc37097164 library: bufio, encoding/csv 2024-07-30 00:44:03 +08:00
xushiwei
6597cc9ce8 Merge pull request #605 from aisk/py-dict
feat(py): add some basic dict methods
2024-07-30 00:40:06 +08:00
xushiwei
b3f752d46c Merge pull request #604 from xushiwei/q
library: encoding/{binary, hex, base32, base64}
2024-07-30 00:38:12 +08:00
xushiwei
679e2d0f6b library: encoding/hex 2024-07-30 00:33:44 +08:00
AN Long
4607079ca9 feat(python): Add some basic dict methods 2024-07-30 00:33:21 +08:00
xushiwei
ad1a42d6a5 library: encoding/base32 2024-07-30 00:30:58 +08:00
xushiwei
afdf31a66c library: encoding/{binary, base64} 2024-07-30 00:28:04 +08:00
xushiwei
37956e2f05 Merge pull request #600 from visualfc/closureconv
ssa: closure changeType check convert
2024-07-30 00:17:35 +08:00
visualfc
dc6aa66f9a ssa: closure changeType check convert 2024-07-29 20:53:13 +08:00
xushiwei
f16f16c15e Update How-to-support-a-C&C++-Library.md 2024-07-29 19:50:23 +08:00
xushiwei
3b95cbd960 Merge pull request #599 from aofei/sigsetjmp
ssa: fix `Builder.Sigsetjmp` for Linux
2024-07-29 17:54:19 +08:00
Aofei Sheng
3b5e8edd37 ssa: fix Builder.Sigsetjmp for Linux
This follows up on #597.
2024-07-29 16:52:24 +08:00
xushiwei
5f4571e895 Merge pull request #602 from xushiwei/q
library: bytes, regexp, regexp/syntax
2024-07-29 16:37:42 +08:00
xushiwei
2d5e991eaf library: bytes, regexp, regexp/syntax 2024-07-29 16:31:59 +08:00
xushiwei
7ba8bb4405 Merge pull request #601 from aofei/python3.12
installation: require Python 3.12
2024-07-29 15:22:34 +08:00
Aofei Sheng
82aa181540 installation: require Python 3.12 2024-07-29 14:34:40 +08:00
xushiwei
1a3e17bae8 Merge pull request #598 from xushiwei/q
cmptest: regexdemo (todo)
2024-07-29 11:49:47 +08:00
xushiwei
e0e3664fdb cmptest: regexdemo (todo) 2024-07-29 11:44:49 +08:00
xushiwei
23bfaf1ba2 Merge pull request #597 from aofei/build
build: fix `sigsetjmp` issues and ensure required libs on Linux
2024-07-29 11:26:03 +08:00
Aofei Sheng
e7d72b6f53 build: fix sigsetjmp issues and ensure required libs on Linux
1. Handle `sigsetjmp` platform differences:
   - Separate `sigsetjmp` linkage to platform-specific files.
   - Use `__sigsetjmp` on Linux to handle `sigsetjmp` being a macro.
   - Maintain original implementation for Darwin.

2. Ensure linking of required libs:
   - Explicitly link against fundamental libs (e.g., libm, libatomic).
   - Address the fact that typical Linux linkers don't link these by
     default.
2024-07-29 11:16:04 +08:00
xushiwei
eab26deab9 Merge pull request #572 from hackerchai/fix/general-fix-libuv
fix(c/libuv): Fix return type FsType & struct rename
2024-07-29 11:12:49 +08:00
xushiwei
49540dbe5e Merge pull request #596 from xushiwei/q
library: os.Expand
2024-07-29 11:10:16 +08:00
xushiwei
cbd891785e library: os.Expand 2024-07-29 11:06:33 +08:00
hackerchai
b1cc732cb2 refactor(c/libuv): Rename UvPipe & remove unused structs
Signed-off-by: hackerchai <i@hackerchai.com>
2024-07-29 09:59:46 +08:00
xushiwei
b3b4f55c68 Merge pull request #594 from xushiwei/q
cpp/std: support nogc
2024-07-29 09:01:30 +08:00
xushiwei
8b6b039c13 cpp/std: support nogc 2024-07-29 08:55:27 +08:00
xushiwei
9dca62ff8b Merge pull request #593 from xushiwei/q
library: path, path/filepath
2024-07-29 08:39:28 +08:00
xushiwei
e0892fcebb library: path, path/filepath 2024-07-29 08:38:56 +08:00
xushiwei
adf1443105 Merge pull request #592 from xushiwei/q
cmptest: jsondemo (todo)
2024-07-29 02:04:43 +08:00
xushiwei
53c2558d26 cmptest: jsondemo (todo) 2024-07-29 01:56:39 +08:00
xushiwei
a5ea240793 Merge pull request #591 from xushiwei/q
reflect.Value: Uint fix
2024-07-29 01:31:28 +08:00
xushiwei
4cd1629118 reflect.Value: Uint fix 2024-07-29 01:26:56 +08:00
xushiwei
ce32a73e86 Merge pull request #590 from xushiwei/q
osexec: llvm bindir
2024-07-29 00:23:43 +08:00
xushiwei
8a13fc7cd9 osexec: llvm bindir 2024-07-29 00:17:53 +08:00
xushiwei
708de50887 syscall.forkAndExecInChild fix: os.Fcntl/Dup2 retval 2024-07-29 00:14:01 +08:00
xushiwei
4df478316c library: fmt.(*pp).doPrint; syscall.forkAndExecInChild 2024-07-29 00:02:30 +08:00
xushiwei
a5dff9fb15 library: os.ProcessState.String 2024-07-28 23:53:22 +08:00
xushiwei
b51f4d53b6 Merge pull request #589 from xushiwei/q
os.Pipe, syscall.CloseOnExec
2024-07-28 23:31:01 +08:00
xushiwei
7d045842dd library: syscall.CloseOnExec 2024-07-28 23:15:20 +08:00
xushiwei
a9ece9e49d library: os.Pipe 2024-07-28 23:09:21 +08:00
xushiwei
e6da067cf8 Merge pull request #588 from xushiwei/q
llgo/xtool/nm/nmindex
2024-07-28 22:55:38 +08:00
xushiwei
bae40c82b9 llgo/xtool/nm/nmindex 2024-07-28 22:51:35 +08:00
xushiwei
651edf5bc0 Merge pull request #587 from xushiwei/q
osexec demo
2024-07-28 22:32:05 +08:00
xushiwei
3a8642b1e0 syscall: forkAndExecInChild 2024-07-28 22:27:26 +08:00
xushiwei
09b6b9259c library: exec.Cmd.environ 2024-07-28 22:22:28 +08:00
xushiwei
907f326788 library: os.File.Close 2024-07-28 22:19:40 +08:00
xushiwei
4a350d8ad9 Merge pull request #586 from xushiwei/q
compileFuncDecl todo: change ssa.If to ssa.Jump for func init
2024-07-28 21:58:07 +08:00
xushiwei
3881db0b4e compileFuncDecl todo: change ssa.If to ssa.Jump for func init 2024-07-28 21:57:32 +08:00
xushiwei
9edae3e877 Merge pull request #582 from visualfc/init.patch
fix pkg init hasPatch && patch io.pipe
2024-07-28 21:13:50 +08:00
xushiwei
236208e393 Merge pull request #585 from xushiwei/q
runtime.Panic: mv error/Stringer to printany
2024-07-28 20:41:20 +08:00
xushiwei
4ff98de707 Merge pull request #584 from luoliwoshang/c/lua
c/lua:metatable & coroutine
2024-07-28 20:40:23 +08:00
xushiwei
54964629fe runtime.Panic: mv error/Stringer to printany 2024-07-28 20:31:48 +08:00
luoliwoshang
072f606784 c/lua:coroutine 2024-07-28 20:28:28 +08:00
xushiwei
21d2338ec1 Merge pull request #583 from xushiwei/q
fix panic in defer
2024-07-28 20:07:30 +08:00
xushiwei
0d468e0df4 cl/_testgo: defer5 2024-07-28 20:00:53 +08:00
xushiwei
5007d49c83 ssa: endDefer 2024-07-28 19:53:04 +08:00
luoliwoshang
35ba69a175 c/lua:metatable 2024-07-28 19:32:19 +08:00
xushiwei
fa0ce2a14c ssa: panicBlk use IndirectJump 2024-07-28 18:57:46 +08:00
xushiwei
389750d7d8 ssa: panicBlk (todo) 2024-07-28 18:51:07 +08:00
visualfc
6c7db7ad23 build: patch io.pipe 2024-07-28 17:01:34 +08:00
visualfc
2986426251 cl: fix pkg init hasPatch 2024-07-28 16:52:03 +08:00
xushiwei
56444ebcaf Merge pull request #581 from visualfc/init
cl: afterInit skip pkgHasPatch
2024-07-28 11:33:57 +08:00
visualfc
c63a1978cb cl: afterInit skip pkgHasPatch 2024-07-28 11:29:22 +08:00
xushiwei
9d9e998d49 Update README.md 2024-07-28 09:29:08 +08:00
xushiwei
f7c991fa9a Merge pull request #580 from visualfc/afterinit
cl: after init check hasPatch
2024-07-28 09:17:59 +08:00
visualfc
4d14fbb1e7 cl: after init check hasPatch 2024-07-27 21:20:06 +08:00
xushiwei
5428730e7a Merge pull request #579 from xushiwei/q
_cmptest: pipedemo
2024-07-27 16:03:58 +08:00
xushiwei
bf773df099 _cmptest: pipedemo 2024-07-27 16:03:22 +08:00
xushiwei
6dea5100b1 Merge pull request #578 from visualfc/overlay
internal/build: add io.pipe for overlay
2024-07-27 15:56:57 +08:00
visualfc
aa55f4dceb internal/build: add io.pipe for overlay 2024-07-27 12:32:33 +08:00
xushiwei
516e92926a Merge pull request #576 from xushiwei/q
c/pthread/sync: use go:linkname for internal func
2024-07-27 09:32:31 +08:00
xushiwei
2cd9994321 C.wrap_pthread_mutex_lock 2024-07-27 09:28:09 +08:00
xushiwei
e69306a2ba c/pthread/sync: use go:linkname for internal func 2024-07-27 09:11:38 +08:00
xushiwei
93ecd031bd Merge pull request #573 from visualfc/selectop
internal/runtime: fix endSelect
2024-07-27 08:20:52 +08:00
visualfc
4eaf69dfa7 internal/runtime: fix endSelect 2024-07-27 07:19:45 +08:00
hackerchai
bc93bda1b7 fix(c/libuv): rename UvFile into File & remove unused File struct
Signed-off-by: hackerchai <i@hackerchai.com>
2024-07-26 19:04:49 +08:00
hackerchai
6923f0df2a fix(c/libuv): fix return type FsType
Signed-off-by: hackerchai <i@hackerchai.com>
2024-07-26 19:01:53 +08:00
xushiwei
bc584aa56e Update README.md 2024-07-26 18:01:55 +08:00
xushiwei
ec95d06f6c Merge pull request #571 from xushiwei/x
pipedemo: todo
2024-07-26 16:57:17 +08:00
xushiwei
c5d18d9046 pipedemo: todo 2024-07-26 16:49:23 +08:00
xushiwei
af06983c60 Merge pull request #570 from xushiwei/x
cjson.ParseString demo
2024-07-26 16:44:13 +08:00
xushiwei
e027872f50 cjson.ParseString demo 2024-07-26 16:43:51 +08:00
xushiwei
e98e4fde8d Merge pull request #569 from xushiwei/x
cjson: FreeCStr
2024-07-26 16:35:39 +08:00
xushiwei
2daf9de890 Merge pull request #568 from morpingsss/morpingsss/doc2
docs(llgo/doc): Correct the file syntax and content.
2024-07-26 16:33:45 +08:00
xushiwei
ae50511135 cjson: FreeCStr 2024-07-26 16:31:53 +08:00
morpingsss
2227f83b1d docs(llgo/chore/llcppg): Modify the name of the json generated by llcppsigfetch 2024-07-26 16:18:39 +08:00
morpingsss
e764a2298d docs(llgo/doc): documents fix 2024-07-26 16:14:41 +08:00
xushiwei
ed4a8c2a36 Merge pull request #567 from fuxiaohei/main
fix describe mismatch in pthread.h
2024-07-26 15:14:38 +08:00
xushiwei
8cc3e571e3 Merge pull request #565 from xushiwei/x
library: os, syscall
2024-07-26 14:59:03 +08:00
xushiwei
66a89a7d54 c/libuv: disable EFTYPE 2024-07-26 14:55:36 +08:00
fuxiaohei
666be94a71 fix describe mismatch in pthread.h 2024-07-26 14:53:27 +08:00
xushiwei
49fabf23a8 x 2024-07-26 14:51:17 +08:00
xushiwei
a3b23e348a library syscall (linux): Wait4 2024-07-26 14:49:21 +08:00
xushiwei
384e887fdb syscall (linux): waitid, pipe2 2024-07-26 14:35:58 +08:00
xushiwei
d3e84cbc4c ci 2024-07-26 13:47:22 +08:00
xushiwei
1b06948fb0 library: os, syscall 2024-07-26 13:46:21 +08:00
xushiwei
98d075728f Merge pull request #564 from spongehah/refactor/c-libuv-remove-go-wrapper
refactor(c-libuv): Separate third-party libraries from standard libraries
2024-07-26 10:04:31 +08:00
赵英杰
1a7ecda67c refactor(c-libuv): Separate third-party libraries from standard libraries 2024-07-26 09:38:45 +08:00
xushiwei
067078db86 Merge pull request #563 from spongehah/refactor/c-libuv-remove-go-wrapper
refactor(c-libuv): Adjust the style of Errno definitions
2024-07-26 09:26:57 +08:00
赵英杰
37650fae75 refactor(c-libuv): Adjust the style of Errno definitions 2024-07-26 09:23:02 +08:00
xushiwei
13be3e3216 Merge pull request #562 from xushiwei/x
library os: ReadFile
2024-07-26 07:48:32 +08:00
xushiwei
87a7809104 library os: ReadFile 2024-07-26 07:42:26 +08:00
xushiwei
e82c33716a Update and rename Rust-to-LLGO-Migration-Guide.md to How-to-support-a-Rust-Library.md 2024-07-25 20:37:09 +08:00
xushiwei
9ebdddad1f Delete rust/.gitkeep 2024-07-25 19:55:13 +08:00
xushiwei
90f85bb9c3 Merge pull request #554 from luoliwoshang/c/clang/symbol
c/clang:symbol dump demo
2024-07-25 19:26:11 +08:00
xushiwei
002d04a3a1 Merge pull request #550 from luoliwoshang/env/correct-parse
env:fix incorrect extra line breaks & subcmd match
2024-07-25 19:24:31 +08:00
xushiwei
88a0b12e73 Merge pull request #559 from visualfc/mapnext
ssa: fix map next for named
2024-07-25 19:19:43 +08:00
xushiwei
5828e7f576 Update llcppg.go 2024-07-25 19:18:26 +08:00
xushiwei
a11da90d10 Merge pull request #560 from xushiwei/x
llcppg
2024-07-25 19:12:18 +08:00
xushiwei
d8026833dc llcppg 2024-07-25 18:46:40 +08:00
visualfc
8029bb6142 ssa: fix map next for named 2024-07-25 18:08:25 +08:00
luoliwoshang
baaddd395c c/clang:file location
c/clang/demo:filename

c/clang:fix undefined filename

c/clang:file use uintptr

c/clang:change cpp format
2024-07-25 18:00:03 +08:00
xushiwei
8bcbe7b3c6 Merge pull request #558 from xushiwei/x
llcppg design
2024-07-25 17:24:15 +08:00
xushiwei
4297320886 llcppg design 2024-07-25 17:23:34 +08:00
xushiwei
614994d8c7 Merge pull request #555 from hackerchai/refactor/c-libuv-remove-go-wrapper
feat(c/libuv): implement libuv to support async io
2024-07-25 17:12:03 +08:00
赵英杰
65e1f261c0 refactor(c-libuv): Ajust Errno 2024-07-25 15:40:02 +08:00
xushiwei
aa4caa6938 Merge pull request #557 from spongehah/rust/to-readme
doc:Rust-to-LLGO-Migration-Guide.md
2024-07-25 14:31:07 +08:00
赵英杰
9741574516 llgo/rust/readme: Some modifications 2024-07-25 12:07:05 +08:00
hackerchai
c27c654180 refactor(c/libuv): general fixes & optimize code
Signed-off-by: hackerchai <i@hackerchai.com>

refactor(c/libuv): optimize functions

Signed-off-by: hackerchai <i@hackerchai.com>

refactor(c/libuv): mv name

Signed-off-by: hackerchai <i@hackerchai.com>

refactor(c/libuv): modify libs

Signed-off-by: hackerchai <i@hackerchai.com>

refactor(c/libuv): use new buffer arg

Signed-off-by: hackerchai <i@hackerchai.com>

refactor(c/libuv/demo): optimize code style with go style

Signed-off-by: hackerchai <i@hackerchai.com>

refactor(c/libuv): optimize code and add comment

Signed-off-by: hackerchai <i@hackerchai.com>

fix(c/libuv): fix TranslateSysError

Signed-off-by: hackerchai <i@hackerchai.com>

refactor(c/libuv): remove go wrapper

Signed-off-by: hackerchai <i@hackerchai.com>

refactor(c/libuv/demo): refactor c style

Signed-off-by: hackerchai <i@hackerchai.com>

refactor(c/liobuv/demo): Some adjustments after removing go wrapper

refactor(c/libuv/demo): add print in echo_server

Signed-off-by: hackerchai <i@hackerchai.com>

doc(c/libuv): add README.md for c/libuv

Signed-off-by: hackerchai <i@hackerchai.com>

feat(c/libuv): implement poll_init_socket

Signed-off-by: hackerchai <i@hackerchai.com>

refactor(c/libuv): mv poll_init_socket function

Signed-off-by: hackerchai <i@hackerchai.com>

refactor(demo): remove libuv demo

Signed-off-by: hackerchai <i@hackerchai.com>
2024-07-25 11:04:06 +08:00
赵英杰
c63580ee38 feat(c/libuv/demo): Add libuv demo echo_server
refactor(c/libuv): Adjust comments and file names to accommodate merge
2024-07-25 11:00:57 +08:00
赵英杰
e9d4328fad feat(c/libuv): Add tcp, udp, poll, core, stream, err features
feat(c/io): add libuv async io with io, tcp, udp, timer, dns, loop

feat(c/io): add libuv async io with stream, req, handle

feat(c/libuv): rename c/io to c/libuv, and improve errro, net, handle, stream

feat(c/libuv): Add a libuv demo: echo_server

refactor(c/libuv): Adjust comments and file names to accommodate merge
2024-07-25 11:00:57 +08:00
hackerchai
545f9f2cca feat(c/libuv/demo): Add libuv async_fs demo
Signed-off-by: hackerchai <i@hackerchai.com>

fix(c/libuv): fix fs demo

Signed-off-by: hackerchai <i@hackerchai.com>

refactor(c/libuv): neat comment and adapt merge

Signed-off-by: hackerchai <i@hackerchai.com>
2024-07-25 11:00:56 +08:00
hackerchai
db6930d9e4 feat(c/libuv): Add io, fs, signal, core, poll features
Signed-off-by: hackerchai <i@hackerchai.com>

feat(c/libuv): Add io, fs, signal features

Signed-off-by: hackerchai <i@hackerchai.com>

refactor(c/libuv): rename io into libuv

Signed-off-by: hackerchai <i@hackerchai.com>

fix(c/libuv): fix some compile errors

Signed-off-by: hackerchai <i@hackerchai.com>
2024-07-25 11:00:55 +08:00
赵英杰
9379a41b37 llgo/rust/readme: improve Rust-to-LLGO-Migration-Guide 2024-07-25 09:07:33 +08:00
赵英杰
c0eeedc71a llgo/rust/readme: update readme 2024-07-25 09:04:55 +08:00
luoliwoshang
400197def8 doc:Rust-to-LLGO-Migration-Guide.md 2024-07-25 09:04:55 +08:00
luoliwoshang
0f8b202531 c/clang:symbol dump demo 2024-07-24 15:58:50 +08:00
xushiwei
1eb9775f34 Merge pull request #552 from cpunion/async-functions
Async functions design
2024-07-24 12:04:18 +08:00
Li Jie
89bdb315d5 WIP 2024-07-24 01:04:18 +08:00
Li Jie
ab1afd68b7 asyncio: instead io.Await(call) with call.Await() in demo 2024-07-23 17:33:01 +08:00
Li Jie
e1109e9e51 asyncio: doc update 2024-07-23 17:25:42 +08:00
Li Jie
7230e19166 asyncio: redesign 2024-07-23 17:02:40 +08:00
Li Jie
eb7a94bb55 *io.Promise 2024-07-23 15:59:26 +08:00
luoliwoshang
18de4e57eb env:fix incorrect extra line breaks & subcmd match 2024-07-23 14:32:44 +08:00
xushiwei
74cc12133e Update and rename x/async.md to x/io/README.md 2024-07-23 10:52:52 +08:00
xushiwei
7583354f44 Merge pull request #549 from cpunion/async-functions
Async functions design
2024-07-23 10:52:09 +08:00
xushiwei
14c49dd681 Merge pull request #551 from xushiwei/x
llcppg design
2024-07-23 09:41:37 +08:00
xushiwei
e060208417 llcppg design 2024-07-23 09:41:03 +08:00
morpingsss
635eea7acb docs(llgo/doc) add cpp-auto-tool-architecture-documentation (#547)
* docs(llgo/doc) add cpp-auto-tool-architecture-documentation
2024-07-23 08:27:01 +08:00
Li Jie
2c47f4a23d async design: return string 2024-07-22 22:35:02 +08:00
Li Jie
2223577302 async functions design 2024-07-22 22:17:02 +08:00
xushiwei
f42d235dec Merge pull request #548 from xushiwei/x
llgo/x/io: Promise: Async/Await
2024-07-22 19:37:02 +08:00
xushiwei
06a3e278ff llgo/x/io: Promise: Async/Await 2024-07-22 19:34:49 +08:00
xushiwei
17c30b5fdc Merge pull request #546 from visualfc/abi_named
ssa: fix abiNamed for llc verified
2024-07-22 17:12:37 +08:00
visualfc
024b30d0b7 ssa: fix abiNamed for llc verified 2024-07-22 12:38:07 +08:00
xushiwei
a108610a67 Merge pull request #543 from xushiwei/x
os/exec.Cmd.childStdin
2024-07-19 23:27:36 +08:00
xushiwei
12b6abe6a3 cmptest/_osexec 2024-07-19 23:20:55 +08:00
xushiwei
6f82b36962 library os: openFileNolog 2024-07-19 23:19:59 +08:00
xushiwei
ea6b397526 library: os/exec.Cmd.childStdin 2024-07-19 22:23:12 +08:00
xushiwei
118bb3f3ba Merge pull request #541 from xushiwei/x
demo: select, netdbd
2024-07-19 11:31:38 +08:00
xushiwei
bd68075f4d Merge pull request #539 from visualfc/bineq
ssa: fix binop closure/funcdecl
2024-07-19 11:29:15 +08:00
xushiwei
5fa68f8cdd demo: select 2024-07-19 11:27:49 +08:00
xushiwei
199aaf2d05 netdbdemo 2024-07-19 11:22:31 +08:00
xushiwei
892efcc166 Merge pull request #540 from xushiwei/x
c/sys: select
2024-07-19 11:18:58 +08:00
xushiwei
bc90c6b82f c/sys: select 2024-07-19 11:18:13 +08:00
visualfc
82d3d1f0f3 ssa: fix binop closure/funcdecl 2024-07-19 09:58:38 +08:00
xushiwei
576b3198f1 Merge pull request #537 from kindy/fix-expand-env
limit expand env to cmd pkg-config & llvm-config
2024-07-19 09:39:42 +08:00
xushiwei
f55cad8f1c Update README.md 2024-07-19 09:37:50 +08:00
xushiwei
d98654b50d Merge pull request #538 from xushiwei/x
use syscall.Timeval
2024-07-19 08:32:00 +08:00
xushiwei
675d9d8c09 use syscall.Timeval 2024-07-19 08:30:41 +08:00
xushiwei
bab0bb349f Merge pull request #523 from spongehah/c/hyper_related
[feat] llgo/c/hyper-related c lib
2024-07-19 08:20:12 +08:00
Kindy Lin
65d3ed8ce8 limit expand env to cmd pkg-config & llvm-config 2024-07-19 08:14:39 +08:00
xushiwei
8fc4000b63 Update README.md 2024-07-19 07:13:51 +08:00
xushiwei
5b35f781cb Create README.md 2024-07-19 06:43:37 +08:00
xushiwei
2cd11b7da7 Update README.md 2024-07-19 06:33:53 +08:00
xushiwei
cf30d2923c Update and rename How-to-migrate-a-C&C++-Library.md to How-to-support-a-C&C++-Library.md 2024-07-19 06:31:25 +08:00
xushiwei
8fc97794e8 Merge pull request #536 from xushiwei/x
doc How-to-migrate-a-C&C++-Library
2024-07-18 23:36:18 +08:00
xushiwei
df2ba37687 doc How-to-migrate-a-C&C++-Library 2024-07-18 23:35:39 +08:00
xushiwei
85b16b2a54 Merge pull request #532 from morpingsss/morpingsss/LLGO-Migration-for-C-C++-Third-Party-Libraries
docs(llgo/doc) : Add a document named "LLGO Migration for C/C++ Third-Party Libraries"
2024-07-18 23:24:24 +08:00
xushiwei
eeabc6b61a Merge pull request #534 from xushiwei/q
demo: osexec - todo
2024-07-18 23:01:27 +08:00
xushiwei
2b3dafed61 demo: osexec - todo 2024-07-18 23:00:57 +08:00
xushiwei
7232fc36ab Merge pull request #533 from xushiwei/q
library os: StartProcess/Wait/Sysctl/environ; syscall.Wait4; c/syscall: zerrors; c/os: Setrlimit/Getrlimit;
2024-07-18 22:52:39 +08:00
xushiwei
a8e1fd1054 library os: StartProcess/Wait 2024-07-18 22:27:00 +08:00
xushiwei
c248a50338 forkAndExecInChild 2024-07-18 20:50:49 +08:00
xushiwei
fa0ca23798 syscall: forkAndExecInChild 2024-07-18 20:09:07 +08:00
xushiwei
ed224cf912 os.Sysctl 2024-07-18 19:31:25 +08:00
xushiwei
b51df25371 c/os: Setrlimit/Getrlimit 2024-07-18 17:56:49 +08:00
xushiwei
db8cc8eb7b syscall.Wait4 2024-07-18 17:08:24 +08:00
morpingsss
a027e9fe14 fix(llgo/doc) : fix bug 2024-07-18 17:02:30 +08:00
morpingsss
b882ca809a fix(llgo/cpp/tinyxml) : fix -> 2024-07-18 16:27:49 +08:00
xushiwei
daf0a9dc9a syscall: forkExec - todo 2024-07-18 15:58:44 +08:00
xushiwei
f2dafa7544 c/syscall: zerrors 2024-07-18 15:45:54 +08:00
morpingsss
7fe22875a6 docs(llgo/doc) : Add a document :"LLGO Migration for C/C++ Third-Party Libraries". 2024-07-18 14:52:29 +08:00
xushiwei
3da3c8ecd8 library patch: syscall, os environ 2024-07-18 14:30:49 +08:00
赵英杰
254acbbbe2 llgo/c/hyper_related 2024-07-18 10:34:11 +08:00
赵英杰
519c850f17 llgo/c/hyper-related c lib 2024-07-18 09:57:08 +08:00
xushiwei
1cf57508b0 Update go.yml 2024-07-18 07:25:02 +08:00
xushiwei
f8bacfcc67 Merge pull request #524 from visualfc/sizes
build: fix unsafe.Sizeof for llgo:type C
2024-07-18 06:58:33 +08:00
xushiwei
9daa77c1a4 Merge pull request #531 from xushiwei/q
c/neco; neco demo: gen
2024-07-18 00:59:13 +08:00
xushiwei
c4775dd313 c/neco; neco demo: gen 2024-07-18 00:54:31 +08:00
xushiwei
ae87cb031e Merge pull request #522 from aofei/build
build(macOS): change full library paths to @rpath
2024-07-18 00:16:28 +08:00
xushiwei
3c049f25ee Merge pull request #530 from xushiwei/q
mv flagdemo => _cmptest
2024-07-18 00:10:31 +08:00
xushiwei
85a90b62b7 mv flagdemo => _cmptest 2024-07-18 00:09:21 +08:00
xushiwei
10b0124951 Merge pull request #525 from kindy/neco
[wip] c/neco: init and demo
2024-07-18 00:04:24 +08:00
Kindy Lin
c0d7ff9543 neco: fix 2024-07-17 22:41:35 +08:00
Aofei Sheng
74012d4869 build(macOS): change full library paths to @rpath 2024-07-17 18:50:13 +08:00
visualfc
830c40440f build: fix unsafe.Sizeof for llgo:type C 2024-07-17 18:49:18 +08:00
xushiwei
21a2f71ad9 Merge pull request #529 from visualfc/named
ssa: abiNamed set underlying size
2024-07-17 17:58:26 +08:00
visualfc
cf75e3e664 ssa: abiNamed set underlying size 2024-07-17 10:42:04 +08:00
xushiwei
ffc307323a Merge pull request #528 from xushiwei/q
cmd: dylibdeps
2024-07-17 09:18:58 +08:00
xushiwei
ff0aec28c5 cmd: dylibdeps 2024-07-17 09:16:55 +08:00
xushiwei
31394b03ae Merge pull request #527 from xushiwei/q
ssa: BinOp (map equal) fix; time.ParseDuration; fmt.Errorf; pkg: flag, strings; flagdemo: to fix bug
2024-07-17 07:45:06 +08:00
xushiwei
2ab93cb385 x 2024-07-17 07:41:14 +08:00
xushiwei
172b396dc9 pkg: flag, strings 2024-07-16 22:36:38 +08:00
xushiwei
9b82d08087 flagdemo: to fix bug 2024-07-16 22:26:23 +08:00
xushiwei
410617f73b reflect.valueInterface 2024-07-16 22:20:20 +08:00
xushiwei
ade0d38a7c patch library: todo message 2024-07-16 22:16:33 +08:00
xushiwei
3ce55a2ac4 ssa: BinOp (map equal) fix 2024-07-16 22:03:23 +08:00
xushiwei
cc6e4dbec0 time.ParseDuration; fmt.Errorf 2024-07-16 21:17:31 +08:00
xushiwei
2935ae7bf1 Merge pull request #521 from xushiwei/q
xtool/llvm/install_name_tool: Exec
2024-07-16 07:42:03 +08:00
xushiwei
96e418e63b xtool/llvm/install_name_tool: Exec 2024-07-16 07:32:18 +08:00
xushiwei
e4a84dcfe9 Merge pull request #520 from aofei/cleanup
chore: remove _demo/hello/hello
2024-07-16 07:02:57 +08:00
Aofei Sheng
9ea91cfce3 chore: remove _demo/hello/hello
Accidentally introduced in #519.
2024-07-15 23:39:20 +08:00
xushiwei
8c7f0cf988 Merge pull request #519 from aofei/rpath
build: fix rpath support on Linux
2024-07-15 23:08:46 +08:00
Aofei Sheng
afa9a00259 build: fix rpath support on Linux 2024-07-15 23:04:07 +08:00
Kindy Lin
a0ee11c300 neco: init 2024-07-15 21:52:45 +08:00
xushiwei
6e02dace18 Merge pull request #517 from xushiwei/q
xtool: llvm InstallNameTool
2024-07-15 15:12:05 +08:00
xushiwei
93bac6f26f install_name_tool: ChangeToRpath 2024-07-15 15:02:29 +08:00
xushiwei
8657fbd810 xtool: llvm InstallNameTool 2024-07-15 14:55:00 +08:00
xushiwei
68203be004 Merge pull request #502 from spongehah/c/fcntl
feat(c/os): add fcntl
2024-07-15 14:12:24 +08:00
xushiwei
b2323ef2e7 Merge pull request #516 from visualfc/clang_wrap
c/clang: wrap cursor
2024-07-15 13:33:49 +08:00
visualfc
70b017fb72 c/clang: wrap cursor 2024-07-15 13:28:34 +08:00
xushiwei
607e3bbc11 Merge pull request #515 from xushiwei/q
build: support rpath
2024-07-15 11:14:13 +08:00
spongehah
315c9285de fix: fcntl output error
Co-authored-by: 张之阳 <51194195+luoliwoshang@users.noreply.github.com>
2024-07-15 11:10:40 +08:00
赵英杰
c22427b8fd llgo/c/fcntl 2024-07-15 10:24:29 +08:00
xushiwei
2fcfac9e84 build: support rpath 2024-07-15 10:13:01 +08:00
赵英杰
7cc857233f llgo/c/fcntl:demo 2024-07-15 09:45:14 +08:00
xushiwei
f85aa09784 Merge pull request #514 from xushiwei/q
c/clang: castdump
2024-07-15 01:16:01 +08:00
xushiwei
0b0cecc2a9 c/clang: castdump 2024-07-15 01:07:26 +08:00
xushiwei
3b5b9c9587 Merge pull request #513 from xushiwei/q
cpp/llvm; os.Args; build: add llvm.BinDir to PATH
2024-07-15 00:31:11 +08:00
xushiwei
cbe190fa70 cpp/llvm; os.Args; build: add llvm.BinDir to PATH 2024-07-15 00:22:10 +08:00
xushiwei
9156466351 Update test_demo.sh 2024-07-14 11:03:45 +08:00
xushiwei
f79caf095d Update README.md 2024-07-14 11:01:08 +08:00
xushiwei
d31dcd13fc Update README.md 2024-07-14 10:57:21 +08:00
xushiwei
552224bbfe Merge pull request #510 from xushiwei/q
README: How support C and Python
2024-07-14 10:56:44 +08:00
xushiwei
5ba01674fb README: How support C and Python 2024-07-14 10:56:19 +08:00
xushiwei
7390afc5e1 Update README.md 2024-07-14 01:54:29 +08:00
xushiwei
85ec23d552 Merge pull request #509 from xushiwei/q
cpp/inih: small fix
2024-07-14 01:42:18 +08:00
xushiwei
007064c0ac cpp/inih: small fix 2024-07-14 01:41:31 +08:00
xushiwei
fd53756170 Merge pull request #508 from xushiwei/q
README: libraries
2024-07-14 01:38:59 +08:00
xushiwei
9e6dd9f23d README: libraries 2024-07-14 01:38:31 +08:00
xushiwei
ef8be6c7c2 Merge pull request #507 from luoliwoshang/c/lua
llgo/c/lua:link style
2024-07-13 23:30:07 +08:00
luoliwoshang
de4b5b70da llgo/c/lua:link style 2024-07-13 23:19:47 +08:00
xushiwei
9edeee4b3f Merge pull request #506 from xushiwei/q
_wrap: llgo_check (to be continued)
2024-07-13 19:58:07 +08:00
xushiwei
767a0cc1fd _wrap: llgo_check (to be continued) 2024-07-13 19:53:55 +08:00
xushiwei
ae09247e34 Merge pull request #505 from xushiwei/q
library: cpp/std (and more c++ mechanism, eg. build: clFiles support cflags)
2024-07-13 19:02:39 +08:00
xushiwei
a3ea4798bc build: clFiles support cflags, reuse llvm.Env; cpp/inih: _wrap/reader.cpp 2024-07-13 18:55:09 +08:00
xushiwei
af54a22d16 inih: INIReaderDispose 2024-07-13 18:11:34 +08:00
xushiwei
b026bfc71b inih.Reader: InitFromFile 2024-07-13 17:57:46 +08:00
xushiwei
80d80ad8aa library: cpp/std; cpp/inih demo: inihreader 2024-07-13 17:51:06 +08:00
xushiwei
dbecf33924 Merge pull request #504 from xushiwei/q
c.AllocaCStrs; ssa: AllocaU/ArrayAlloca/Times/AllocaCStrs; cl/_testlibc: allocacstrs; demo: sysexec
2024-07-13 12:51:33 +08:00
xushiwei
2b08e3604d TestConstBool; Test allocaCStrs 2024-07-13 12:47:29 +08:00
xushiwei
7d3a672c2b mv _demo/chandemo 2024-07-13 12:33:37 +08:00
xushiwei
022e46ae38 c.AllocaCStrs; cl/_testlibc: allocacstrs 2024-07-13 12:24:06 +08:00
xushiwei
3f930d228e Merge pull request #503 from luoliwoshang/c/socket/client
llgo/c/socket:client demo
2024-07-13 00:05:39 +08:00
luoliwoshang
5eba370f7b llgo/c/socket:client demo 2024-07-12 23:37:55 +08:00
xushiwei
e138951e9e c.AllocaCStrs; ssa: AllocaU/ArrayAlloca/Times/AllocaCStrs 2024-07-12 21:40:13 +08:00
xushiwei
5cd18d7275 Merge pull request #498 from morpingsss/morpingsss/add_inih
feat(cpp/inih): add inih parser_1
2024-07-12 20:56:50 +08:00
xushiwei
d7ff5a53a7 Merge pull request #499 from hackerchai/refactor/remove-rust-sled
refactor(rust/sled): remove sled due to move
2024-07-12 20:56:04 +08:00
xushiwei
aa14bb6fdf Merge pull request #501 from luoliwoshang/socket
llgo/c/socket:server demo
2024-07-12 20:54:27 +08:00
luoliwoshang
c275f682a9 llgo/c/socket:server demo 2024-07-12 17:39:13 +08:00
morpingsss
08894025bc fix(cpp/inih) : Use unsafe.Point to replace stirringHead 2024-07-12 14:48:17 +08:00
hackerchai
b063a48520 refactor(rust/sled): remove sled due to move
Signed-off-by: hackerchai <i@hackerchai.com>
2024-07-12 14:45:23 +08:00
xushiwei
858d38d314 Merge pull request #497 from luoliwoshang/c/perror
llgo/c:perror
2024-07-12 14:04:21 +08:00
morpingsss
f5875d09e9 feat(cpp/inih): add inih parser_4 2024-07-12 13:54:28 +08:00
morpingsss
34db181686 feat(cpp/inih): add inih parser_3 2024-07-12 13:53:01 +08:00
morpingsss
be55ea2b0b feat(cpp/inih): add inih parser_2 2024-07-12 12:03:15 +08:00
luoliwoshang
aa0dd4d10d llgo/c:perror 2024-07-12 11:18:35 +08:00
morpingsss
39533e4209 feat(cpp/inih): add inih parser_1 2024-07-12 11:13:15 +08:00
xushiwei
4bba3bf1d2 Merge pull request #496 from xushiwei/q
c/syscall/unix: remove deps of syscall
2024-07-12 01:33:54 +08:00
xushiwei
2d29d1549a c/syscall/unix: remove deps of syscall 2024-07-12 01:29:01 +08:00
xushiwei
c7a078f17f Merge pull request #495 from xushiwei/q
patch library: syscall, os, os/exec; demo: cexec; oslookpath
2024-07-12 01:20:03 +08:00
xushiwei
2cf92037e9 go1.21 2024-07-12 01:17:00 +08:00
xushiwei
452ee7a103 syscall: exec linux 2024-07-12 01:07:12 +08:00
xushiwei
68f70af2f3 c/syscall/unix 2024-07-12 00:59:32 +08:00
xushiwei
11682e487e c/os: fork/exec 2024-07-12 00:39:16 +08:00
xushiwei
4d006230f9 Merge pull request #493 from luoliwoshang/structsize
fix:correct `Sizeof` to align size properly
2024-07-11 23:39:39 +08:00
xushiwei
a32f4bb05c Merge pull request #494 from aofei/release-build.yml
ci: implement release-build.yml workflow with GoReleaser
2024-07-11 23:37:41 +08:00
luoliwoshang
6d4e260127 test:add struct size test 2024-07-11 23:04:50 +08:00
Aofei Sheng
45404b5bcf ci: implement release-build.yml workflow with GoReleaser 2024-07-11 22:59:20 +08:00
luoliwoshang
861551b2ba update:extra alignment for structs only 2024-07-11 21:16:50 +08:00
xushiwei
aac820a8d5 demo: oslookpath; syscall.Lstat/Stat 2024-07-11 19:21:04 +08:00
xushiwei
a5ff25b0fe library: c/syscall 2024-07-11 19:11:54 +08:00
xushiwei
b81638794f patch library: os/exec 2024-07-11 18:44:06 +08:00
luoliwoshang
88cfeb2791 fix:correct Sizeof to align size properly 2024-07-11 18:21:41 +08:00
xushiwei
d0b57535ed support: internal/oserror, io, io/fs 2024-07-11 18:20:12 +08:00
xushiwei
528add4702 patch library: syscall, os/exec 2024-07-11 18:00:20 +08:00
xushiwei
dd47971877 patch os: File 2024-07-11 14:47:03 +08:00
xushiwei
d51a99c8e2 Merge pull request #490 from visualfc/buildpkg
build: fix buildpkg
2024-07-11 13:40:36 +08:00
visualfc
e192f01dc3 build: fix buildpkg 2024-07-11 11:47:11 +08:00
xushiwei
aedaf57249 Update Type-Mapping-between-C-and-Go.md 2024-07-11 07:39:56 +08:00
xushiwei
222e58e76e Create Type-Mapping-between-C-and-Go.md 2024-07-10 17:31:03 +08:00
xushiwei
c8fc80f4a0 Merge pull request #489 from aofei/llgo-version
cmd: add "llgo version" command
2024-07-10 15:46:29 +08:00
Aofei Sheng
1ed180887d cmd: add "llgo version" command 2024-07-10 15:36:17 +08:00
xushiwei
d6a38a567f Merge pull request #481 from aofei/readme
readme: simplify installation instructions
2024-07-09 18:48:49 +08:00
Aofei Sheng
ae9c3276bc readme: simplify installation instructions
This also cleans up the remaining mentioned LLGOROOT.
2024-07-09 16:18:30 +08:00
xushiwei
35d34cd4e8 Update sled.go 2024-07-09 15:34:05 +08:00
xushiwei
4f45824632 Merge pull request #480 from xushiwei/q
refactor rust/sled
2024-07-09 15:27:18 +08:00
xushiwei
532da174dd refactor rust/sled 2024-07-09 15:25:21 +08:00
xushiwei
dbe13feba2 Merge pull request #450 from hackerchai/feature/rust-sled
feat(rust): implement rust sled demo
2024-07-09 14:42:19 +08:00
xushiwei
1c93061a7f Merge pull request #478 from xushiwei/q
patch time: Duration, Timer
2024-07-09 14:34:55 +08:00
xushiwei
0e371930e6 cmptest: ctxcancel 2024-07-09 14:26:02 +08:00
xushiwei
06bd748bd6 patch time: Duration, Timer 2024-07-09 14:24:48 +08:00
xushiwei
b64775772b Merge pull request #477 from visualfc/rets
ssa: fix multi result
2024-07-09 13:31:02 +08:00
visualfc
5f76314085 ssa: fix multi result 2024-07-09 13:10:02 +08:00
xushiwei
57588ea936 Merge pull request #476 from xushiwei/q
cl handleTypeDecl: typeBackground
2024-07-09 13:02:27 +08:00
xushiwei
3f344b55bb TestToBackground 2024-07-09 12:58:51 +08:00
xushiwei
e4ae0980b4 x 2024-07-09 12:42:20 +08:00
xushiwei
e41da0d697 cl handleTypeDecl: typeBackground 2024-07-09 12:38:34 +08:00
xushiwei
ce3955d393 Merge pull request #454 from visualfc/typec
cl: parser llgo:type C
2024-07-09 12:18:44 +08:00
visualfc
22a2cc564f cl: parser llgo:type C 2024-07-09 10:00:31 +08:00
Eason Chai
2b19513a05 Merge pull request #3 from luoliwoshang/feature/rust-sled
llgo:rust:sled:a working demo
2024-07-09 09:42:39 +08:00
luoliwoshang
60f8fe6f41 llgo/rust/sled:rename struct 2024-07-09 09:39:44 +08:00
luoliwoshang
a2fd010521 llgo:rust:sled:a working demo 2024-07-09 09:30:10 +08:00
hackerchai
a36d5b6302 fix(rust/sled): fix sled errors 2024-07-09 09:27:24 +08:00
hackerchai
2c14dc16dd feat(rust): implement sled support
Signed-off-by: hackerchai <i@hackerchai.com>
2024-07-09 09:27:23 +08:00
hackerchai
4c7f3f7972 feat(rust): implement rust sled demo
Signed-off-by: hackerchai <i@hackerchai.com>
2024-07-09 09:27:22 +08:00
xushiwei
794df59265 Merge pull request #475 from xushiwei/q
mv xtool/clang/parser, ar => chore/_deprecated
2024-07-09 01:36:50 +08:00
xushiwei
3dd71713c2 mv _test => c/bdwgc/_test 2024-07-09 01:33:48 +08:00
xushiwei
c0777d1a0a mv xtool/clang/parser, ar => chore/_deprecated 2024-07-09 01:29:26 +08:00
xushiwei
55392cb047 Merge pull request #474 from xushiwei/q
README: c libraries
2024-07-09 00:47:50 +08:00
xushiwei
070eedda18 README: c libraries 2024-07-09 00:43:45 +08:00
xushiwei
ae6ec78dc3 Merge pull request #430 from luoliwoshang/lua
[WIP] llgo/c/lua
2024-07-08 23:16:17 +08:00
xushiwei
9fe1b2a565 Update README.md 2024-07-08 23:11:25 +08:00
xushiwei
f374419be3 Merge pull request #472 from luoliwoshang/readme/zlib
[wip] README:zlib
2024-07-08 23:10:48 +08:00
xushiwei
0ff25cb116 Update README.md 2024-07-08 23:07:47 +08:00
xushiwei
d7e50f352a Merge pull request #473 from luoliwoshang/readme/raylib
[wip] README:raylib
2024-07-08 23:00:07 +08:00
luoliwoshang
aa9254eeb0 README:raylib 2024-07-08 22:24:41 +08:00
luoliwoshang
c1eba336a8 README:zlib 2024-07-08 21:48:40 +08:00
luoliwoshang
a5d7fc484a llgo/c/lua:table & coroutine 2024-07-08 21:31:11 +08:00
luoliwoshang
7a294e6d4e llgo/c/lua 2024-07-08 21:22:01 +08:00
xushiwei
2f79417d0d Merge pull request #470 from visualfc/fixiface
ssa: fix setDirectIface
2024-07-08 20:30:55 +08:00
visualfc
73b42f924d ssa: fix setDirectIface 2024-07-08 20:19:25 +08:00
xushiwei
ccf915e798 Update inih.go 2024-07-08 18:33:29 +08:00
morpingsss
62ffa14f10 feat(llgo/c):Add an INI parser (#466)
* feat(llgo/c):Add an INI parser
2024-07-08 18:28:18 +08:00
xushiwei
5d7840a34c Merge pull request #469 from aofei/ci
ci: update go.yml workflow to trigger on pushes and PRs to any branches
2024-07-08 17:41:29 +08:00
Aofei Sheng
fd14f6ff73 ci: update go.yml workflow to trigger on pushes and PRs to any branches
This update enables GitHub Actions in forks, streamlining development
and testing.
2024-07-08 17:32:13 +08:00
xushiwei
88962f9358 Merge pull request #462 from aofei/build-lla
build: replace precompiled *.lla with local compilation
2024-07-08 17:19:49 +08:00
Aofei Sheng
5bec1729f1 build: replace precompiled *.lla with local compilation
Switching from using precompiled *.lla files to compiling locally during
the build process for better flexibility and maintainability.

Fixes #411
2024-07-08 17:14:43 +08:00
xushiwei
f3662fc152 Merge pull request #468 from xushiwei/q
demo: ctxcancel
2024-07-08 16:05:25 +08:00
xushiwei
c5047186dd demo: ctxcancel 2024-07-08 15:50:16 +08:00
xushiwei
1e39bd8336 Program.Zero: support types.Signature/Chan 2024-07-08 15:37:20 +08:00
xushiwei
e58de234ac Merge pull request #460 from visualfc/funceq
ssa: fix func binop eq
2024-07-08 15:27:05 +08:00
visualfc
903cc181c4 cl/cltest: program init types.sizes 2024-07-08 15:21:03 +08:00
xushiwei
2183a098c3 Merge pull request #467 from xushiwei/q
library/demo: log
2024-07-08 15:20:41 +08:00
xushiwei
1d4cba9180 library/demo: log 2024-07-08 15:17:08 +08:00
xushiwei
ed724c5280 Merge pull request #464 from aofei/GOBIN
build: ensure GOBIN directory exists before use
2024-07-08 12:23:01 +08:00
xushiwei
fbd13ac42c Merge pull request #465 from morpingsss/morpingsss/add_Fopen
feat(llgo/c):Add two functions : Fopen &  Fclose
2024-07-08 12:20:03 +08:00
morpingsss
ea6eab557b feat(llgo/c):Add two functions Fopen and Fclose 2024-07-08 12:01:22 +08:00
Aofei Sheng
a1cb2a0589 build: ensure GOBIN directory exists before use 2024-07-08 08:57:18 +08:00
xushiwei
5de5a8ca94 Merge pull request #461 from goplus/dependabot/go_modules/github.com/goplus/mod-0.13.12
build(deps): bump github.com/goplus/mod from 0.13.10 to 0.13.12
2024-07-08 00:15:15 +08:00
dependabot[bot]
274026d338 build(deps): bump github.com/goplus/mod from 0.13.10 to 0.13.12
Bumps [github.com/goplus/mod](https://github.com/goplus/mod) from 0.13.10 to 0.13.12.
- [Release notes](https://github.com/goplus/mod/releases)
- [Commits](https://github.com/goplus/mod/compare/v0.13.10...v0.13.12)

---
updated-dependencies:
- dependency-name: github.com/goplus/mod
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-07 16:10:49 +00:00
visualfc
3875bc34bd ssa: fix func binop eq 2024-07-07 20:37:29 +08:00
xushiwei
8db3ccce2e Merge pull request #459 from xushiwei/ll
README: run _pydemo
2024-07-07 19:04:52 +08:00
xushiwei
34bb6fd851 README: run _pydemo 2024-07-07 19:04:10 +08:00
xushiwei
ffa74db136 Merge pull request #458 from xushiwei/ll
runtime chan fix: ChanTryRecv
2024-07-07 17:36:53 +08:00
xushiwei
66f2cbb91f runtime chan fix: ChanTryRecv 2024-07-07 17:23:21 +08:00
xushiwei
a57d49b057 Merge pull request #457 from xushiwei/q
fix #453 (select recv))
2024-07-07 16:21:45 +08:00
xushiwei
7b41a0ff16 fix #453 (select recv)) 2024-07-07 16:03:41 +08:00
xushiwei
4ca50f8973 Merge pull request #456 from aofei/llvm-18
llvm: default to LLVM 18
2024-07-07 15:44:20 +08:00
Aofei Sheng
abe2c6870b llvm: default to LLVM 18 2024-07-07 15:20:11 +08:00
xushiwei
c0ae681d69 Update README.md 2024-07-07 15:14:05 +08:00
xushiwei
b4745c0134 Merge pull request #455 from xushiwei/q
README
2024-07-07 15:12:55 +08:00
xushiwei
d369a6429e README 2024-07-07 15:12:20 +08:00
xushiwei
af3e326178 Merge pull request #453 from visualfc/select
[wip] ssa: select
2024-07-07 13:02:04 +08:00
visualfc
8e256a2d5d ssa: select 2024-07-07 11:26:22 +08:00
xushiwei
bdcbd9008d Merge pull request #452 from xushiwei/q
runtime: Select/TrySelect
2024-07-06 22:05:57 +08:00
xushiwei
453faa6a76 runtime: Select/TrySelect 2024-07-06 21:59:28 +08:00
xushiwei
b0941faf88 Merge pull request #431 from visualfc/map
ssa: support runtime.map
2024-07-04 19:17:10 +08:00
visualfc
91ba215568 internal/runtime: check abi.KindDirectIface 2024-07-04 18:59:41 +08:00
visualfc
be32f4072e internal/runtime: check abi.TFlagRegularMemory 2024-07-04 18:50:37 +08:00
visualfc
bcb217c1da ssa: set pointer directiface 2024-07-04 18:50:37 +08:00
visualfc
490a16a8df ssa: index check take address 2024-07-04 18:50:36 +08:00
visualfc
28d8c56534 ssa: index take addr 2024-07-04 18:50:36 +08:00
visualfc
46423ed166 internal/runtime: impl type.equal 2024-07-04 18:50:36 +08:00
visualfc
4286a510b4 runtime: stubs init hashkey 2024-07-04 18:50:36 +08:00
visualfc
8d193ab39f runtime: map hasher 2024-07-04 18:50:36 +08:00
visualfc
439e377111 ssa: map delete, map eql nil 2024-07-04 18:50:36 +08:00
visualfc
28ebce6b65 ssa: map range/next 2024-07-04 18:50:36 +08:00
visualfc
2ccd1625e7 ssa: support runtime.map 2024-07-04 18:50:36 +08:00
xushiwei
e05e61a59b Merge pull request #448 from xushiwei/q
patch fmt: printArg; py.Str; py.FromCStr/FromCStrAndLen/FromGoString
2024-07-04 18:44:33 +08:00
xushiwei
4660eae8c7 cl: _testpy/callpy 2024-07-04 18:39:31 +08:00
xushiwei
e55e90db1a py.Str; py.FromCStr/FromCStrAndLen/FromGoString 2024-07-04 18:34:00 +08:00
xushiwei
23da63767c patch fmt: printArg 2024-07-04 17:39:02 +08:00
xushiwei
13b19c35c6 Merge pull request #447 from xushiwei/q
patch fmt: fmt.Printf
2024-07-04 17:33:48 +08:00
xushiwei
7e25ec1ac3 patch reflect 2024-07-04 17:29:40 +08:00
xushiwei
ab1d05642e patch fmt: fmt.Printf 2024-07-04 17:05:26 +08:00
xushiwei
079b28fddf Merge pull request #445 from visualfc/namedfunc
ssa: fix named func call
2024-07-04 15:14:12 +08:00
visualfc
d52d62badb ssa: fix named func call 2024-07-04 11:28:40 +08:00
xushiwei
fa53135c8a Merge pull request #443 from xushiwei/q
README: libraries
2024-07-02 23:10:57 +08:00
xushiwei
d6a3f9fd8f README: libraries 2024-07-02 23:08:57 +08:00
xushiwei
75ca4af74e Merge pull request #442 from xushiwei/q
README: chan
2024-07-02 21:05:04 +08:00
xushiwei
dc5fc6bdc2 README: chan 2024-07-02 21:04:34 +08:00
xushiwei
67f8ee61a4 Merge pull request #440 from visualfc/chan
ssa: chan send/recv
2024-07-02 21:00:09 +08:00
visualfc
2153cf39b5 ssa: chan send/recv 2024-07-02 20:52:25 +08:00
xushiwei
0ead82ae21 Merge pull request #441 from xushiwei/q
runtime: close(chan)
2024-07-02 20:27:11 +08:00
xushiwei
98d4cf7585 runtime: close(chan) 2024-07-02 20:23:48 +08:00
xushiwei
3259536411 Merge pull request #439 from xushiwei/q
demo: cchan
2024-07-02 19:49:21 +08:00
xushiwei
f3a79cc779 demo: cchan 2024-07-02 19:49:00 +08:00
xushiwei
c45c6dbe67 Merge pull request #436 from luoliwoshang/link/warning
link:not exist method warning
2024-07-02 19:43:37 +08:00
xushiwei
a1518c33af Merge pull request #438 from visualfc/build_link
build: fix link runtime
2024-07-02 19:43:11 +08:00
visualfc
a9f7cdb630 build: fix link runtime 2024-07-02 18:40:20 +08:00
luoliwoshang
6f678294a0 link:not exist method warning 2024-07-02 17:37:32 +08:00
xushiwei
de07abee98 Merge pull request #437 from xushiwei/q
runtime: chan; cmptest: iodemo, fmtdemo
2024-07-02 16:05:14 +08:00
xushiwei
437edefa0c runtime: chan 2024-07-02 16:00:43 +08:00
xushiwei
f5b36ecbac Merge pull request #434 from visualfc/abi_patch
ssa: fix abi patch types.pointer
2024-07-02 12:14:54 +08:00
visualfc
8772c85964 ssa: fix abi patch types.pointer 2024-07-02 08:40:44 +08:00
xushiwei
a31454327a Update README.md 2024-07-02 07:39:53 +08:00
xushiwei
9e55cb114c Merge pull request #433 from xushiwei/q
abitype: support Patch (Clone + Merge); patch: os.File
2024-07-01 19:09:32 +08:00
xushiwei
04416a67d3 cl: SetPatch fix 2024-07-01 19:05:12 +08:00
xushiwei
dd2cdaf49a Merge pull request #425 from visualfc/makeslice
ssa: makeSlice fit int size and check
2024-07-01 16:59:27 +08:00
xushiwei
8c45eb7524 abitype: support Patch 2024-06-30 11:53:12 +08:00
xushiwei
c20bea50e3 Merge remote-tracking branch 'gop/main' into q 2024-06-30 11:16:53 +08:00
xushiwei
fe18c35dab patch: Clone/Merge 2024-06-28 15:14:30 +08:00
xushiwei
f6ef6abdf1 Merge pull request #424 from aofei/llvm
xtool: utilize llvm-config to find LLVM executables
2024-06-28 13:17:09 +08:00
Aofei Sheng
43a6837e81 xtool: utilize llvm-config to find LLVM executables 2024-06-27 20:27:42 +08:00
visualfc
dc4b933000 ssa: makeSlice both len/cap be non-nil 2024-06-27 20:01:27 +08:00
visualfc
c90703dc13 ssa: makeSlice fit int size and check 2024-06-27 19:57:44 +08:00
xushiwei
2165941026 patch: os.File 2024-06-27 02:28:18 +08:00
xushiwei
4a28893171 Merge pull request #429 from xushiwei/q
patch: fmt, os, runtime, syscall, time
2024-06-27 01:05:13 +08:00
xushiwei
369581976a c/time fix 2024-06-27 01:00:58 +08:00
xushiwei
7fef683980 c.Long as int64 2024-06-27 00:55:33 +08:00
xushiwei
8358f68086 Merge pull request #428 from visualfc/bytealg
ssa fix slice high, update bytealg for pkg bytes/strings
2024-06-27 00:53:42 +08:00
xushiwei
0aa6b03c2a patch time: Now 2024-06-27 00:51:21 +08:00
xushiwei
44f8c98660 demo: c ClockGettime (CLOCK_REALTIME/MONOTONIC) 2024-06-26 21:20:47 +08:00
xushiwei
188ec6ea1d patch time: time.Format 2024-06-26 20:41:34 +08:00
visualfc
8169d8509f cl/_testlibgo: bytes strings 2024-06-26 20:41:29 +08:00
visualfc
e217d39882 internal/lib/internal/bytealg: count index 2024-06-26 20:13:43 +08:00
visualfc
887ee0fd41 ssa: fix slice high 2024-06-26 20:09:38 +08:00
xushiwei
137e93319e c/time; patch: time 2024-06-26 19:36:39 +08:00
xushiwei
48a1384197 patch: fmt, os, runtime, syscall, time 2024-06-26 17:17:10 +08:00
xushiwei
8aed4d634b Merge pull request #427 from xushiwei/q
raylib demo: tetris
2024-06-26 00:52:16 +08:00
xushiwei
fd0cb4c458 raylib demo: tetris 2024-06-26 00:49:20 +08:00
xushiwei
82735f0fab Merge pull request #426 from xushiwei/q
patch os: File.Write
2024-06-26 00:31:33 +08:00
xushiwei
1d3710afd8 toSyscallErr => syscall.Errno 2024-06-26 00:28:21 +08:00
xushiwei
e8ae92f4d4 Merge pull request #423 from luoliwoshang/raylibdemo
llgo/c/raylib:tetris demo
2024-06-26 00:03:51 +08:00
luoliwoshang
b2e54a0590 llgo/c/raylib:tetris demo 2024-06-25 20:54:07 +08:00
xushiwei
d64d220b49 patch os: File.Write 2024-06-25 18:07:58 +08:00
xushiwei
2523a95a9a Merge pull request #422 from xushiwei/q
patch os, syscall, io/fs: Errno, Stdin/out/err
2024-06-25 16:14:25 +08:00
xushiwei
207c41581c patch syscall: errors for linux 2024-06-25 16:11:29 +08:00
xushiwei
6fc4a3ed04 patch os, syscall, io/fs: Errno, Stdin/out/err 2024-06-25 16:02:54 +08:00
xushiwei
2fabb6951e Merge pull request #421 from visualfc/abibasic
runtime: global abi basic
2024-06-25 15:46:00 +08:00
xushiwei
8c2f5f91d5 Merge pull request #420 from xushiwei/q
patch os: UserHomeDir/UserConfigDir/UserCacheDir
2024-06-25 15:45:29 +08:00
visualfc
7443d41444 runtime: global abi basic 2024-06-25 14:41:32 +08:00
xushiwei
4421734da1 patch os: UserHomeDir/UserConfigDir/UserCacheDir 2024-06-25 14:29:37 +08:00
xushiwei
4385ca0966 patch: internal/abi 2024-06-25 14:02:25 +08:00
xushiwei
57fa592a13 Merge pull request #419 from xushiwei/q
phi.AddIncoming fix: use checkExpr
2024-06-25 13:35:42 +08:00
xushiwei
1298118b59 phi.AddIncoming fix: use checkExpr 2024-06-25 13:31:44 +08:00
xushiwei
3f2cb40cc1 Merge pull request #418 from xushiwei/q
cmptest: sortdemo
2024-06-25 12:40:55 +08:00
xushiwei
5448abb304 cmptest: sortdemo 2024-06-25 12:40:28 +08:00
xushiwei
892fab5455 Merge pull request #417 from visualfc/abinamed
ssa: fix abiType & abiNamedOf
2024-06-25 12:34:23 +08:00
visualfc
ef3619350d ssa: fix abiType & abiNamedOf 2024-06-25 12:17:03 +08:00
xushiwei
846fb3e7f3 Merge pull request #416 from xushiwei/q
c/clang: use llvm-config
2024-06-25 12:05:05 +08:00
xushiwei
e00e9ba5aa c/clang: use llvm-config 2024-06-25 12:00:48 +08:00
xushiwei
f41511047e Merge pull request #392 from visualfc/rlite
ssa: fix abiType && abiMethoOf
2024-06-25 10:45:00 +08:00
visualfc
16352df5b1 ssa: fix abiType && abiMethoOf 2024-06-25 10:22:32 +08:00
xushiwei
5238c2457d Merge pull request #415 from xushiwei/q
c/raylib
2024-06-25 08:42:57 +08:00
xushiwei
4d57f414f5 c/raylib 2024-06-25 08:40:23 +08:00
xushiwei
6305088cb0 Merge pull request #414 from xushiwei/q
c/math (float32); c/math/rand
2024-06-25 01:32:58 +08:00
xushiwei
e2db1cd425 c/math (float32); c/math/rand 2024-06-25 01:30:13 +08:00
xushiwei
16561a8e84 Merge pull request #413 from xushiwei/q
c/zlib: Z_OK => OK
2024-06-25 01:24:42 +08:00
xushiwei
cae1b3ebd4 c/zlib: Z_OK => OK 2024-06-25 01:02:03 +08:00
xushiwei
e68737dcfb Merge pull request #404 from luoliwoshang/zlib
llgo/c/zlib
2024-06-25 00:45:19 +08:00
xushiwei
00448d23c0 Merge pull request #408 from aofei/llama2-libm
fix(c/llama2): explicitly link libm to ensure compatibility with Linux
2024-06-25 00:43:28 +08:00
xushiwei
272ae547ef Merge pull request #410 from xushiwei/q
c/clang; c/raylib demo
2024-06-25 00:43:07 +08:00
xushiwei
3fd688191c c/clang 2024-06-25 00:33:48 +08:00
luoliwoshang
5c0b6f2225 llgo/c/zlib 2024-06-24 23:03:18 +08:00
xushiwei
cc530e3446 c/raylib demo 2024-06-24 22:37:53 +08:00
xushiwei
fdc1d46b89 Merge pull request #409 from xushiwei/q
c/raylib
2024-06-24 22:03:54 +08:00
xushiwei
5dce677091 c/raylib 2024-06-24 21:56:53 +08:00
Aofei Sheng
d0fb5a4b04 fix(c/llama2): explicitly link libm to ensure compatibility with Linux 2024-06-24 17:50:05 +08:00
xushiwei
e27daed0ec c/llama2: rm precompiled *.ll files (#407) 2024-06-24 17:31:59 +08:00
xushiwei
d2183a8b32 c/llama2: rm precompiled *.ll files 2024-06-24 17:27:12 +08:00
七叶
0b2d6407dd runtime: type align (#405) 2024-06-24 17:15:45 +08:00
tsingbx
ec1b1ffe16 add math/rand (#403)
c/math/rand
2024-06-24 15:53:26 +08:00
xushiwei
32a66be555 Merge pull request #399 from visualfc/panicany
runtime: panic any custometype
2024-06-23 23:01:17 +08:00
visualfc
c090c34491 runtime: panic any custometype 2024-06-23 21:51:00 +08:00
xushiwei
4f7d3ad76c Merge pull request #398 from xushiwei/q
cppmintf: implements multiple intefaces in c++
2024-06-23 16:19:52 +08:00
xushiwei
ce81872686 cppintf: fix int type 2024-06-23 16:14:42 +08:00
xushiwei
2314c41103 cppmintf: implements multiple intefaces in c++ 2024-06-23 16:12:01 +08:00
xushiwei
df39b66e11 Merge pull request #394 from xushiwei/q
mv cases to _cmptest
2024-06-23 01:00:28 +08:00
xushiwei
adeb5de19f mv cases to _cmptest 2024-06-23 01:00:02 +08:00
xushiwei
26312e0c0e Merge pull request #393 from xushiwei/q
llgo cmptest (#391)
2024-06-23 00:53:41 +08:00
xushiwei
cd6d4021b1 llgo cmptest (#391) 2024-06-23 00:48:38 +08:00
xushiwei
24d345a970 Merge pull request #389 from xushiwei/q
cppintf: c++ name
2024-06-22 09:15:08 +08:00
xushiwei
b4fd4a0c38 cppintf: c++ name 2024-06-22 09:14:10 +08:00
xushiwei
451e695006 Merge pull request #388 from xushiwei/q
cppintf: with param
2024-06-22 08:42:35 +08:00
xushiwei
26b771f9f9 cppintf: with param 2024-06-22 02:39:29 +08:00
xushiwei
0679aedb7e Merge pull request #387 from xushiwei/q
cl: c.Func (llgo.funcAddr); demo: cppintf (how to use c++ interface)
2024-06-21 23:50:13 +08:00
xushiwei
bfa4e08a4e cl: c.Func (llgo.funcAddr); demo: cppintf (how to use c++ interface) 2024-06-21 23:44:56 +08:00
xushiwei
c1185a34aa Merge pull request #386 from xushiwei/q
build: disable verbose info for deps
2024-06-21 15:47:52 +08:00
xushiwei
be0ce57375 build: disable debug info for deps 2024-06-21 15:45:29 +08:00
xushiwei
b204b90ffc build: remove context.verbose 2024-06-21 15:31:18 +08:00
xushiwei
364b6938a5 Merge pull request #385 from xushiwei/q
patch: internal/reflectlite; demo: sort
2024-06-21 13:47:16 +08:00
xushiwei
e188925d2b patch: internal/reflectlite; demo: sort 2024-06-21 13:21:16 +08:00
xushiwei
10a47cdbbb build: use unsafe.Slice to reduce memory usage of overlayFiles 2024-06-21 12:43:17 +08:00
xushiwei
67014ae4f8 Merge pull request #384 from xushiwei/q
patch internal/reflectlite; demo: sort.Ints
2024-06-21 11:23:13 +08:00
xushiwei
b93fc3f028 patch internal/reflectlite; demo: sort.Ints 2024-06-21 11:02:28 +08:00
xushiwei
b6e5980510 Merge pull request #383 from visualfc/skipfiles
x/build: overlayFiles for fix math on amd64
2024-06-21 10:46:38 +08:00
visualfc
79e8921f76 x/build: overlayFiles for fix math on amd64 2024-06-21 07:55:17 +08:00
xushiwei
34fe3ca4fc Merge pull request #382 from xushiwei/q
patch reflect: Append/Index; Int fix
2024-06-21 03:33:44 +08:00
xushiwei
f26311c60e patch reflect: Append/Index; Int fix 2024-06-21 03:29:24 +08:00
xushiwei
43f9907af7 Merge pull request #381 from xushiwei/q
patch reflect: ValueOf/Int
2024-06-21 00:42:12 +08:00
xushiwei
0e6f5d154e patch reflect: ValueOf/Int 2024-06-21 00:31:36 +08:00
xushiwei
7042dd8447 Merge pull request #380 from xushiwei/q
patch reflect: Zero/Len
2024-06-20 23:44:51 +08:00
xushiwei
05031e0979 patch reflect: Zero/Len 2024-06-20 23:40:35 +08:00
xushiwei
28b3f6780c Merge pull request #379 from xushiwei/ll
README: reflect (partially)
2024-06-20 22:30:44 +08:00
xushiwei
f8335c6df9 README: reflect (partially) 2024-06-20 22:24:03 +08:00
xushiwei
9dcdc1f8f3 Merge pull request #378 from visualfc/abikind
ssa: abiTypeInit kind
2024-06-20 22:22:47 +08:00
visualfc
9ae7d4f2bf ssa: abiTypeInit kind 2024-06-20 22:09:26 +08:00
xushiwei
c158169bdf Merge pull request #373 from visualfc/complex
ssa: complex op and print/panic
2024-06-20 22:05:04 +08:00
visualfc
e4c1285eaf ssa: complex binop 2024-06-20 20:44:07 +08:00
visualfc
02a5375503 runtime: print/panic complex 2024-06-20 20:44:07 +08:00
xushiwei
32883b4e18 Merge pull request #377 from cpunion/fix-abi-init
Fix reentrant of ABI initialization
2024-06-20 20:36:41 +08:00
Li Jie
6d585e88a4 cl: output export file path of package in verbose 2024-06-20 20:13:53 +08:00
Li Jie
73570b5628 cl: re-generate tests 2024-06-20 20:13:53 +08:00
Li Jie
e7fcb068d9 ssa: fix reentrant of ABI initialization 2024-06-20 20:07:59 +08:00
xushiwei
a137a70278 Merge pull request #376 from xushiwei/ll
README: os (partially)
2024-06-20 19:56:40 +08:00
xushiwei
72113991a8 README: os (partially) 2024-06-20 19:55:37 +08:00
xushiwei
a04fb8e7de Merge pull request #371 from xushiwei/q
patch: reflect (reflect.Type)
2024-06-20 17:51:31 +08:00
xushiwei
ca2f30cd61 Merge pull request #375 from aofei/build-gopath
build: remove check for default GOPATH and GOROOT being identical
2024-06-20 17:47:44 +08:00
Aofei Sheng
ebfad05e3f build: remove check for default GOPATH and GOROOT being identical 2024-06-20 17:42:01 +08:00
xushiwei
f54ea9d978 Merge pull request #374 from xushiwei/check
complex testcase
2024-06-20 16:07:14 +08:00
xushiwei
d4c84cee19 complex demo 2024-06-20 16:00:11 +08:00
xushiwei
4da59cdc97 Merge pull request #363 from visualfc/panic
runtime: tracePanic
2024-06-20 15:42:51 +08:00
xushiwei
d4e7eb5888 bytealg.IndexByteString 2024-06-20 14:31:05 +08:00
xushiwei
f8b0a7105b patch: reflect (type) 2024-06-20 14:17:37 +08:00
visualfc
aecde91d33 runtime: tracePanic 2024-06-20 13:05:43 +08:00
xushiwei
870dde232a Merge pull request #369 from xushiwei/q
library: strconv
2024-06-20 11:09:43 +08:00
xushiwei
f7d7f81c49 library: strconv 2024-06-20 11:05:43 +08:00
xushiwei
1f04c61482 Merge pull request #368 from xushiwei/q
builtin: real/imag/complex; c/math/cmplx; patch: math/cmplx
2024-06-20 10:31:24 +08:00
xushiwei
5d957a6b7c libc complex64 support 2024-06-20 10:22:35 +08:00
xushiwei
94f61b0a0c TestFromTestlibgo 2024-06-20 10:07:10 +08:00
xushiwei
de6535b722 builtin: real/imag/complex; c/math/cmplx; patch: math/cmplx 2024-06-20 10:00:47 +08:00
xushiwei
6dd18e4328 Merge pull request #362 from aofei/build
build: set $GOPATH/bin as default GOBIN for Config.BinPath
2024-06-20 08:20:21 +08:00
Aofei Sheng
c46e4453c7 build: set $GOPATH/bin as default GOBIN for Config.BinPath
We should avoid making any changes to GOROOT whenever possible.

Fixes #361

Update internal/build/build.go

Co-authored-by: 张之阳 <51194195+luoliwoshang@users.noreply.github.com>
2024-06-20 08:14:05 +08:00
xushiwei
2e6312ec03 Merge pull request #366 from xushiwei/q
patch: syscall
2024-06-20 03:05:20 +08:00
xushiwei
1566a834e1 x 2024-06-20 03:00:12 +08:00
xushiwei
607deaa3c4 patch: syscall 2024-06-20 02:55:26 +08:00
xushiwei
686186d5ba Merge pull request #365 from xushiwei/q
cjson/sqlite README: remove install from source
2024-06-20 00:47:37 +08:00
xushiwei
0c1ef72285 cjson/sqlite README: remove install from source 2024-06-20 00:44:15 +08:00
xushiwei
d6bd12cfcd Merge pull request #364 from xushiwei/q
patch: io, io/fs, os; llgo.string; c string library; demo: getcwd; abi.TypeName fix: error interface is public
2024-06-20 00:35:10 +08:00
xushiwei
4a1712f4cd llgo.string (llgo/ssa.MakeString) fix 2024-06-20 00:30:36 +08:00
xushiwei
b4e298230d x 2024-06-20 00:13:41 +08:00
xushiwei
6cb42a4251 demo: getcwd; abi.TypeName fix: error interface is public 2024-06-19 23:58:20 +08:00
xushiwei
3ead4b4d4b llgo.string; c string library 2024-06-19 23:40:05 +08:00
xushiwei
3c0e321538 patch: io, io/fs, os 2024-06-19 22:21:44 +08:00
xushiwei
1f67434c8c Merge pull request #360 from xushiwei/q
llgo/ssa/abi: PathOf fix - support trim PatchPathPrefix; typepatch fix: don't change patch pkg
2024-06-19 17:13:12 +08:00
xushiwei
6058b9851c llgo/ssa/abi: PathOf fix - support trim PatchPathPrefix 2024-06-19 17:06:56 +08:00
xushiwei
c586319978 typepatch fix: don't change patch pkg 2024-06-19 12:30:38 +08:00
xushiwei
0591fe0e8b Merge pull request #357 from luoliwoshang/readme/tips
README:update python &  install instructions
2024-06-19 11:25:51 +08:00
luoliwoshang
dabe3b17e6 README:update python & git install instructions 2024-06-18 23:18:25 +08:00
xushiwei
fbf50d45cb Merge pull request #351 from visualfc/instance
build: instantiate generics
2024-06-18 21:59:27 +08:00
visualfc
d59075e897 build: instantiate generics 2024-06-18 19:26:52 +08:00
xushiwei
2b491179f7 Merge pull request #346 from visualfc/checkindex
ssa: index/indexAddr check range
2024-06-18 18:52:19 +08:00
xushiwei
a62d17b1b1 Merge pull request #356 from luoliwoshang/readme/install
README:update install instruction of LLGOROOT
2024-06-18 18:50:37 +08:00
xushiwei
2431758218 Merge pull request #355 from xushiwei/q
cl: initFnNameOfHasPatch fix (should rename before funcOf)
2024-06-18 18:47:41 +08:00
luoliwoshang
b94586fdf4 README:update install instruction of LLGOROOT 2024-06-18 18:47:00 +08:00
xushiwei
a6b83d77bd cl: initFnNameOfHasPatch fix (should rename before funcOf) 2024-06-18 18:44:07 +08:00
xushiwei
43c55b36c8 Merge pull request #352 from xushiwei/q
cl: fn.SetRecover; patch library: call init
2024-06-18 18:35:33 +08:00
xushiwei
24c7928c4b cl: pkgFNoOldInit flag if no initFnNameOld 2024-06-18 18:32:29 +08:00
xushiwei
8c876c302a patch library: call init 2024-06-18 18:23:16 +08:00
xushiwei
778a4373ae cl: fn.SetRecover; inPatch/hasPatch 2024-06-18 17:33:37 +08:00
xushiwei
7a15cf1157 patch: errors (todo) 2024-06-18 13:50:55 +08:00
xushiwei
54e3210d7e Merge pull request #350 from xushiwei/q
c/pthread/sync: RWLock/Cond; sync: RWMutex/Cond/WaitGroup
2024-06-18 10:19:53 +08:00
xushiwei
a3197c12a8 testllgo: waitgroup 2024-06-18 10:17:05 +08:00
xushiwei
e7de841939 c/pthread/sync: RWLock/Cond; sync: RWMutex/Cond/WaitGroup 2024-06-18 10:14:29 +08:00
visualfc
29ba00f370 ssa: index/indexAddr check max 2024-06-18 07:13:57 +08:00
xushiwei
e35d70f338 Merge pull request #349 from xushiwei/q
c: c.Int/Uint not alias C.int/uint
2024-06-18 01:30:25 +08:00
xushiwei
0271c65ca2 c: c.Int/Uint not alias C.int/uint 2024-06-18 01:25:57 +08:00
xushiwei
e604524301 Merge pull request #348 from xushiwei/q
c/pthread/sync.Mutex; sync.Mutex/Once; globalType: support typepatch
2024-06-18 00:15:19 +08:00
xushiwei
298831d987 README: sync (partially) 2024-06-18 00:10:21 +08:00
xushiwei
3b2e97a729 globalType: support typepatch 2024-06-18 00:06:40 +08:00
xushiwei
edaba44c87 c/pthread/sync.Mutex; sync.Mutex/Once; typepatch.IsPatched 2024-06-17 23:51:40 +08:00
xushiwei
dc2dc910e8 Merge pull request #347 from visualfc/cfunc
cl: check context.inCFunc
2024-06-17 22:27:33 +08:00
visualfc
96bf260ce9 cl: check context.inCFunc 2024-06-17 21:41:49 +08:00
xushiwei
115ea4ccbb Merge pull request #343 from xushiwei/q
cl: compileFuncDecl/funcName fix; patch library: sync; build: patch library fix (link dependencies)
2024-06-17 19:39:44 +08:00
xushiwei
3fb400beb4 merge upstream 2024-06-17 19:33:27 +08:00
xushiwei
6442279a44 testlibgo: sync (to do) 2024-06-17 19:30:59 +08:00
xushiwei
592500cb0c build: patch library fix (link dependencies) 2024-06-17 18:58:01 +08:00
xushiwei
98f3e45c0a cl: compileFuncDecl/funcName fix; patch library: sync 2024-06-17 18:32:58 +08:00
xushiwei
e365196ee3 Merge pull request #342 from aofei/dependencies
README,ci: add Dependencies section and update install instructions accordingly
2024-06-17 18:17:32 +08:00
xushiwei
f656499c23 Merge pull request #334 from aofei/build
build: explicitly link libpthread for compatibility with glibc versions before 2.34
2024-06-17 18:15:41 +08:00
Aofei Sheng
180c019d2e README,ci: add Dependencies section and update install instructions accordingly
Fixes #340
2024-06-17 18:15:08 +08:00
Aofei Sheng
7db50921bc build: explicitly link libpthread for compatibility with glibc versions before 2.34
Fixes #329
2024-06-17 14:07:51 +08:00
xushiwei
257b3f3ee6 Merge pull request #330 from visualfc/ssa.index
ssa: fix ssa.Index and indexType
2024-06-17 12:53:07 +08:00
xushiwei
f7c69b6baf Merge pull request #338 from aofei/install
ci,README: improve install instructions
2024-06-17 12:48:51 +08:00
xushiwei
89a3b84ea1 Merge pull request #339 from xushiwei/q
c/pthread/sync.Once
2024-06-17 12:47:36 +08:00
xushiwei
bec29f99e6 x 2024-06-17 12:39:54 +08:00
xushiwei
72274bda82 c/pthread/sync.Once 2024-06-17 12:14:24 +08:00
Aofei Sheng
04b62a62cb ci,README: improve install instructions 2024-06-17 12:03:09 +08:00
xushiwei
ab7329d3eb Merge pull request #335 from xushiwei/q
build: LLGoFiles (support to compile c files)
2024-06-17 11:06:43 +08:00
xushiwei
a819796ce2 build: LLGoFiles (support to compile c files) 2024-06-17 11:02:52 +08:00
xushiwei
8c6cdcc97e pkgPath 2024-06-17 05:35:05 +08:00
xushiwei
bf0148e047 canSkipToBuild 2024-06-17 05:33:07 +08:00
xushiwei
bcf44b8ab2 Merge pull request #333 from xushiwei/q
patch sync/atomic; typepatch fix (don't change types)
2024-06-17 04:16:33 +08:00
xushiwei
ebc9711309 TestErrImport 2024-06-17 04:11:31 +08:00
xushiwei
4097f90938 testlibgo: atomic 2024-06-17 03:53:31 +08:00
xushiwei
d73f77affc README: sync/atomic 2024-06-17 03:52:05 +08:00
xushiwei
b4794dc541 patch sync/atomic; typepatch fix (don't change types) 2024-06-17 03:38:01 +08:00
xushiwei
5ee156057e Merge pull request #332 from xushiwei/q
llgo:skipall; patch runtime, sync, sync/atomic
2024-06-16 23:15:04 +08:00
xushiwei
68a63bb280 TestIgnoreName 2024-06-16 23:11:28 +08:00
xushiwei
815677863f Merge pull request #331 from aofei/build
build: force use of LLVM Linker (lld) and fix usage of -dead_strip on Linux
2024-06-16 23:09:49 +08:00
xushiwei
df2f13c9b6 patch runtime, sync (use llgo:skipall) 2024-06-16 23:07:42 +08:00
Aofei Sheng
3984037c98 build: force use of LLVM Linker (lld) and fix usage of -dead_strip on Linux 2024-06-16 23:04:14 +08:00
xushiwei
9c8570b37d buildAllPkgs fix 2024-06-16 22:47:57 +08:00
visualfc
f7cddb81df ssa: fix ssa.Index and indexType 2024-06-16 22:18:02 +08:00
xushiwei
dc1fbbf796 llgo:skipall 2024-06-16 21:32:11 +08:00
xushiwei
7b7b4e5f22 patch sync/atomic 2024-06-16 20:49:31 +08:00
xushiwei
8c9b0285e4 testrt: gotypes 2024-06-16 17:12:08 +08:00
xushiwei
3ff5caef94 Merge pull request #328 from xushiwei/q
llgo/ssa: AtomicCmpXchg fix
2024-06-16 17:07:20 +08:00
xushiwei
4a3446a0a5 llgo/ssa: AtomicCmpXchg fix 2024-06-16 17:03:41 +08:00
xushiwei
6f6d9b39ba Merge pull request #327 from xushiwei/q
atomic Load/Store
2024-06-16 16:47:19 +08:00
xushiwei
7d2f68c5e4 TestErrBuiltin 2024-06-16 16:44:22 +08:00
xushiwei
5416e92dbf atomic demo 2024-06-16 16:39:55 +08:00
xushiwei
340b5bd165 atomic Load/Store 2024-06-16 16:35:46 +08:00
xushiwei
fbd15a81b4 Merge pull request #322 from luoliwoshang/cjson-linux
【WIP】README:cjson/sqlite download for linux
2024-06-16 15:26:51 +08:00
xushiwei
039d0abce2 Merge pull request #326 from xushiwei/q
atomic, atomicCmpXchg
2024-06-16 15:25:58 +08:00
xushiwei
aefb65b1b8 x 2024-06-16 15:23:38 +08:00
xushiwei
f7c322c311 demo: c atomic 2024-06-16 15:20:29 +08:00
xushiwei
b5507f79e4 atomic, atomicCmpXchg 2024-06-16 03:49:09 +08:00
luoliwoshang
a2703ce51b README:cjson sqlite download 2024-06-16 00:56:06 +08:00
xushiwei
d48b12aa09 Merge pull request #325 from xushiwei/q
build: use -dead_strip to reduce app size
2024-06-16 00:34:13 +08:00
xushiwei
452c1fbfd4 build: use -dead_strip to reduce app size 2024-06-16 00:31:25 +08:00
xushiwei
f77fd2a944 Merge pull request #324 from xushiwei/q
packages.LoadEx: support Deduper
2024-06-15 23:32:20 +08:00
xushiwei
2b1da5b231 loadPackageEx: dedup 2024-06-15 23:27:41 +08:00
xushiwei
1b48b98e22 refineEx: Deduper 2024-06-15 23:03:38 +08:00
xushiwei
4af872ddd5 loadPackageEx 2024-06-15 22:56:17 +08:00
xushiwei
6614107192 refineEx 2024-06-15 22:34:31 +08:00
xushiwei
09e1f9addf rm defaultDriverEx 2024-06-15 21:12:43 +08:00
xushiwei
baf282ecb2 packages.LoadEx: support Deduper 2024-06-15 20:46:29 +08:00
xushiwei
6022b32227 Merge pull request #323 from xushiwei/q
cl.NewPackageEx: don't skip alt(patch) package
2024-06-15 19:27:24 +08:00
xushiwei
9e9b08a5a3 cl.NewPackageEx: don't skip alt(patch) package 2024-06-15 19:18:21 +08:00
xushiwei
8147b974aa Merge pull request #321 from xushiwei/q
patches of a standard library; testlibgo: math
2024-06-15 18:49:03 +08:00
xushiwei
0a5a0ef319 cl/ssa.SetDebug 2024-06-15 18:41:45 +08:00
xushiwei
00c73b8388 ci 2024-06-15 18:28:39 +08:00
xushiwei
dcb8eb7d6d TestCollectSkipNames 2024-06-15 18:22:26 +08:00
xushiwei
7f11651311 TestGoLibMath: mac only (temp) 2024-06-15 18:08:08 +08:00
xushiwei
71518b025d TestGoLibMath: set LLGOROOT 2024-06-15 18:02:51 +08:00
xushiwei
287722b1d2 setPkgSSA 2024-06-15 17:56:45 +08:00
xushiwei
3a6f5dd4ee createAltSSAPkg 2024-06-15 17:40:05 +08:00
xushiwei
4aa3d321fa cltest.InitDebug 2024-06-15 16:26:37 +08:00
xushiwei
abb04b177c Merge remote-tracking branch 'gop/main' into q 2024-06-15 16:12:02 +08:00
xushiwei
764e0f0e7f TestGoLibMath 2024-06-15 16:08:10 +08:00
xushiwei
b668175c62 go package demo: math 2024-06-15 15:58:22 +08:00
xushiwei
5011c394d7 build: use typepatch.Pkg merge patches of a standard library 2024-06-15 15:52:44 +08:00
xushiwei
994502077a cl: collectSkipNames; processPkg bugfix 2024-06-15 14:56:03 +08:00
xushiwei
7d8bed16b0 createAltSSAPkg 2024-06-15 13:08:11 +08:00
xushiwei
a45be62b68 cl.NewPackageEx 2024-06-15 12:43:05 +08:00
xushiwei
e0a25b5098 NewPackage: altSSA 2024-06-15 12:10:08 +08:00
xushiwei
fa712aa3a0 build: aPackage.AltPkg/AltSSA 2024-06-15 11:44:52 +08:00
xushiwei
1599ba0294 private closureCtx/closureStub 2024-06-15 10:41:28 +08:00
xushiwei
94d567bf8f testlibgo: math 2024-06-15 10:24:10 +08:00
xushiwei
17f17bcc9e Merge pull request #320 from xushiwei/q
c/math; internal/lib/math
2024-06-15 10:05:23 +08:00
xushiwei
12c262621e c/sqlite: use pkg-config 2024-06-15 10:02:54 +08:00
xushiwei
dd35f2c14d c/math; internal/lib/math 2024-06-15 09:58:32 +08:00
xushiwei
66a9fd928a Merge pull request #319 from xushiwei/q
rm internal/runtime/c; mv internal/runtime/bdwgc => c/bdwgc
2024-06-15 08:50:34 +08:00
xushiwei
da82e5dd04 c/bdwgc 2024-06-15 08:47:13 +08:00
xushiwei
98498c9180 rm internal/runtime/c; mv internal/runtime/bdwgc => c/bdwgc 2024-06-15 08:43:48 +08:00
xushiwei
7b0ed42d3b Merge pull request #318 from xushiwei/q
internal/abi.Map: IndirectKey/IndirectElem
2024-06-15 08:28:20 +08:00
xushiwei
3e4fbde0b4 llgo/ssa: mv Range/Next => datastruct.go 2024-06-15 08:25:50 +08:00
xushiwei
7b0d23f91f internal/abi.Map: IndirectKey/IndirectElem 2024-06-15 08:21:27 +08:00
xushiwei
08d00fa234 Merge pull request #313 from visualfc/globals
ssa: global use elem type
2024-06-15 06:59:06 +08:00
xushiwei
2e32d9806f Merge pull request #315 from visualfc/abi
runtime: expand abi array
2024-06-15 06:55:41 +08:00
visualfc
6e73fbf65e runtime: expand abi array 2024-06-15 06:48:16 +08:00
xushiwei
b9f74d349c Merge pull request #317 from goplus/revert-316-q
Revert "runtime: map; llgo/ssa: MapUpdate"
2024-06-14 22:52:56 +08:00
xushiwei
5e45e38481 Revert "runtime: map; llgo/ssa: MapUpdate" 2024-06-14 22:50:23 +08:00
xushiwei
78b8455bba Merge pull request #316 from xushiwei/q
runtime: map; llgo/ssa: MapUpdate
2024-06-14 22:41:38 +08:00
xushiwei
6f71885aa2 TestMapUpdate 2024-06-14 22:37:46 +08:00
xushiwei
e107567997 llgo/ssa: MapUpdate fix 2024-06-14 22:33:40 +08:00
xushiwei
8d42acec16 disable llgo test temp 2024-06-14 22:14:18 +08:00
xushiwei
33d73eaecd llgo/ssa: abiMapOf 2024-06-14 22:07:48 +08:00
xushiwei
47b20b01d0 runtime: map; llgo/ssa: MapUpdate 2024-06-14 21:57:34 +08:00
xushiwei
b94cf700b4 Merge pull request #314 from luoliwoshang/link-cjson
llgo/x/cjson:link cjson by pkg-config
2024-06-14 19:11:01 +08:00
luoliwoshang
a26d30be3c llgo/x/cjson:link cjson by pkg-config 2024-06-14 11:36:48 +08:00
visualfc
ec1cca7ca4 ssa: global use elem type 2024-06-14 10:09:46 +08:00
visualfc
0c321c8c98 ssa: binop equal(func,slice,array,struct) and buildConstStr 2024-06-14 10:04:01 +08:00
xushiwei
7a54967bee runtime: map 2024-06-13 22:58:04 +08:00
xushiwei
f3b6d25aaa Merge pull request #309 from xushiwei/q
README: recover
2024-06-13 17:12:33 +08:00
xushiwei
419133d3e1 README: recover 2024-06-13 17:11:58 +08:00
xushiwei
1402ff371e Merge pull request #308 from aofei/README.md
README: fix LLGO_LIB_PYTHON instruction
2024-06-13 16:51:54 +08:00
Aofei Sheng
ee2d67c151 README: fix LLGO_LIB_PYTHON instruction 2024-06-13 15:40:35 +08:00
xushiwei
a8f1db0db1 Merge pull request #307 from xushiwei/q
recover
2024-06-13 13:55:07 +08:00
xushiwei
4abcbb9b51 recover 2024-06-13 13:51:36 +08:00
xushiwei
e33dd8acc3 Merge pull request #304 from xushiwei/q
testlibgo: math => mathbits
2024-06-13 07:33:46 +08:00
xushiwei
64e96cc101 testlibgo: math => mathbits 2024-06-13 07:30:08 +08:00
xushiwei
1aaa737dd6 Merge pull request #303 from xushiwei/q
llgo/ssa: float Const fix; cl: replace runtime => llgo/internal/runtime
2024-06-13 03:10:40 +08:00
xushiwei
31e3fc9060 x 2024-06-13 03:04:18 +08:00
xushiwei
b70b868552 TestReplaceGoName 2024-06-13 03:00:55 +08:00
xushiwei
7235357ef5 runtime: TODO - error var; cl: link goVar 2024-06-13 02:53:54 +08:00
xushiwei
18eecbe9f4 llgo/ssa: float Const fix; cl: replaceGoName runtime => llgo/internal/runtime 2024-06-13 00:56:18 +08:00
xushiwei
505525134f Merge pull request #302 from xushiwei/q
README: panic/defer
2024-06-12 23:28:30 +08:00
xushiwei
7dd740f51a README: panic/defer 2024-06-12 23:27:54 +08:00
xushiwei
3d590f8eb6 Merge pull request #301 from xushiwei/q
llgo/ssa: defer support panic; IndirectJump; runtime.Rethrow
2024-06-12 23:19:52 +08:00
xushiwei
42a5c6a19f c.GoDeferData; llgo/ssa: rm excepKey 2024-06-12 23:17:10 +08:00
xushiwei
2c4f6063a6 disable LLGO tests on ubuntu 2024-06-12 22:56:36 +08:00
xushiwei
845767b1d7 x 2024-06-12 21:13:47 +08:00
xushiwei
3e144af127 skip defer 2024-06-12 21:09:30 +08:00
xushiwei
45f470e3a7 merge upstream 2024-06-12 21:02:26 +08:00
xushiwei
42a5c60af6 runtime.Rethrow fix; llgo/ssa: IndirectJump fix 2024-06-12 20:53:30 +08:00
xushiwei
29cebd1e1f Merge pull request #300 from xushiwei/t
fix #294
2024-06-12 20:35:17 +08:00
xushiwei
4450f5a084 fix #294 2024-06-12 20:31:42 +08:00
xushiwei
b8230e144a Merge pull request #298 from visualfc/eface
ssa: interface equal
2024-06-12 20:29:15 +08:00
xushiwei
d500902eff TODO: noreturn 2024-06-12 17:38:29 +08:00
xushiwei
b787de0163 runtime: rethrow/panic; llgo/ssa: DeferData; Null => Nil 2024-06-12 17:26:07 +08:00
visualfc
2f0d525c2e ssa: binop EfaceEqual 2024-06-12 07:25:20 +08:00
visualfc
3f0c65ebb2 ssa: fix typeAssert for Nil 2024-06-11 20:50:01 +08:00
visualfc
f33796797d cl: _testgo/reader 2024-06-11 12:15:18 +08:00
xushiwei
68a09b9804 Merge pull request #299 from xushiwei/t
cl: isVargs support defer/go
2024-06-11 10:39:40 +08:00
xushiwei
5e5d149ca5 cl: isVargs support defer/go 2024-06-11 10:35:27 +08:00
visualfc
bdf1c275c4 ssa: interface equal 2024-06-11 10:24:30 +08:00
visualfc
439a69f413 ssa: fix cvtNamed 2024-06-11 10:23:36 +08:00
visualfc
a14974fbf2 cl: compile ssa.Field 2024-06-11 10:23:00 +08:00
xushiwei
1ecd9af2e1 Merge pull request #297 from cpunion/decl-test
cl: test decl only pkg kind
2024-06-11 08:28:41 +08:00
Li Jie
c8cc2dac04 cl: test decl only pkg kind 2024-06-09 19:23:22 +08:00
xushiwei
60dd33b48f llgo/ssa: defer support panic; IndirectJump/Switch 2024-06-09 09:08:22 +08:00
xushiwei
8b7d8b7786 Merge pull request #292 from xushiwei/q
disable gc: llgo -tags nogc
2024-06-08 23:12:34 +08:00
xushiwei
fb7ea7810e disable gc: llgo -tags nogc 2024-06-08 23:06:55 +08:00
xushiwei
508e16aa80 Merge pull request #291 from xushiwei/q
README: gc
2024-06-08 22:35:25 +08:00
xushiwei
a057db8756 README: gc 2024-06-08 22:30:06 +08:00
xushiwei
a1c588bde8 Merge pull request #284 from cpunion/bdwgc
Add bdwgc
2024-06-08 22:12:57 +08:00
xushiwei
9b17fdeae2 Merge pull request #290 from xushiwei/q
llgo/ssa: deferInitBuilder
2024-06-08 21:46:47 +08:00
xushiwei
29c0c737ed llgo/ssa: deferInitBuilder 2024-06-08 21:39:45 +08:00
xushiwei
be6986a7f6 Merge pull request #289 from xushiwei/q
llgo/ssa: getDefer fix
2024-06-08 20:15:07 +08:00
xushiwei
63c03bb28c llgo/ssa: getDefer fix 2024-06-08 20:09:56 +08:00
xushiwei
758f5b27c3 Merge pull request #288 from xushiwei/q
runtime.Defer: remove proc
2024-06-08 16:34:48 +08:00
xushiwei
32bfb3d57e runtime.Defer: remove proc 2024-06-08 16:31:52 +08:00
xushiwei
6bd8822a90 Merge pull request #287 from xushiwei/q
builtin: sigjmpbuf/sigsetjmp/siglongjmp
2024-06-08 15:19:56 +08:00
xushiwei
abf461a049 TestErrBuiltin 2024-06-08 15:17:49 +08:00
xushiwei
4e98055b9c TestFromTestlibc 2024-06-08 15:09:24 +08:00
xushiwei
e6ab5bd86d testFrom: expected == ';' means skipping out.ll 2024-06-08 15:04:35 +08:00
xushiwei
02e0651eab ignore setjmp/out.ll (os deps) 2024-06-08 14:59:26 +08:00
xushiwei
93be634673 builtin: sigjmpbuf/sigsetjmp/siglongjmp 2024-06-08 14:49:48 +08:00
xushiwei
a1978f661b Merge pull request #286 from xushiwei/t
llgo/ssa: eh.go (exception handling)
2024-06-08 13:34:30 +08:00
xushiwei
9bda864fed Merge remote-tracking branch 'gop/main' into q 2024-06-08 13:31:41 +08:00
xushiwei
b6903c6b99 llgo/ssa: eh.go (exception handling) 2024-06-08 13:31:11 +08:00
xushiwei
1e7394135d Merge pull request #285 from xushiwei/q
_demo: setjmp
2024-06-08 13:25:33 +08:00
Li Jie
61ccaab55b ci: show test result 2024-06-08 13:20:53 +08:00
xushiwei
f17c3c52c4 gitignore demo.ll 2024-06-08 13:12:32 +08:00
Li Jie
f16e721d01 ci: comment test result on PR 2024-06-08 13:11:24 +08:00
xushiwei
6dfdca2d19 _demo: setjmp 2024-06-08 13:10:59 +08:00
Li Jie
ee848e66ac test: run _demo/* and _pydemo/* 2024-06-08 13:10:20 +08:00
Li Jie
91e1fa6aff test: simple llgo tests 2024-06-08 10:15:28 +08:00
Li Jie
6049cf9047 runtime: add bdwgc 2024-06-08 10:15:28 +08:00
xushiwei
e91366c328 Merge pull request #282 from visualfc/runtime
build: check runtime link file
2024-06-08 07:54:00 +08:00
xushiwei
d6a5aaf4ad Merge pull request #283 from xushiwei/q
setjmp/trycatch
2024-06-08 00:13:06 +08:00
xushiwei
fcf3f2abc7 setjmp/trycatch 2024-06-08 00:08:29 +08:00
visualfc
ae77622026 build: build runtime check skip 2024-06-07 21:02:01 +08:00
visualfc
878b395e20 build: check runtime link file 2024-06-07 20:33:31 +08:00
xushiwei
92aee9b69c Merge pull request #281 from visualfc/build
build: build runtime local
2024-06-07 17:07:15 +08:00
visualfc
fe10ddc720 build: build runtime local 2024-06-07 15:25:35 +08:00
xushiwei
46899f042f Merge pull request #280 from xushiwei/q
demo: try..catch
2024-06-07 14:29:59 +08:00
xushiwei
d4249da131 demo: try..catch 2024-06-07 14:29:16 +08:00
xushiwei
6cae018066 Merge pull request #279 from xushiwei/q
c/setjmp/demo
2024-06-07 14:13:18 +08:00
xushiwei
95c1886df5 c/setjmp/demo 2024-06-07 14:12:35 +08:00
xushiwei
fbd8cb07ea Merge pull request #278 from xushiwei/q
c/setjmp
2024-06-07 13:51:10 +08:00
xushiwei
4868903844 c/setjmp 2024-06-07 13:48:36 +08:00
xushiwei
62e721b1c8 Merge pull request #276 from cpunion/libc
runtime: fix alias no effects on linux
2024-06-06 22:33:19 +08:00
Li Jie
1ceaf1df22 runtime: fix libc linking 2024-06-06 19:46:21 +08:00
xushiwei
21c9f7b7fb Merge pull request #275 from cpunion/libc
runtime: libc compatible
2024-06-06 17:24:06 +08:00
Li Jie
f5526f73c7 runtime: compatible difference of stdio symbols between linux and others 2024-06-06 17:17:26 +08:00
Li Jie
15fad2e841 cl: supports decl: <param> 2024-06-06 17:14:31 +08:00
xushiwei
3ecb43072d Merge pull request #272 from visualfc/typeassert
ssa: typeAssert support interface
2024-06-06 10:26:31 +08:00
visualfc
2fce2318ed ssa: set method.name to pkg.name if private 2024-06-06 07:30:59 +08:00
xushiwei
226fd29af8 Merge pull request #274 from xushiwei/q
ssa/python.go
2024-06-05 16:33:19 +08:00
xushiwei
c48b39baab ssa/python.go 2024-06-05 16:29:58 +08:00
xushiwei
ed19a6960e Merge pull request #273 from xushiwei/q
cl/blocks
2024-06-05 15:20:08 +08:00
xushiwei
11b4de63ee llgo_autogen.lla 2024-06-05 15:14:34 +08:00
xushiwei
b9d1d52ab3 gentests 2024-06-05 15:10:35 +08:00
xushiwei
fe548e580d use cl/blocks 2024-06-05 15:08:05 +08:00
xushiwei
fd7d2765c8 findLoop: reach 2024-06-05 15:02:11 +08:00
xushiwei
a226a70383 findLoop: mark fdel 2024-06-05 14:14:12 +08:00
xushiwei
519e69a7f8 cl/blocks 2024-06-05 13:48:11 +08:00
xushiwei
3d599f8044 Merge pull request #271 from goplus/dependabot/go_modules/golang.org/x/tools-0.22.0
build(deps): bump golang.org/x/tools from 0.21.0 to 0.22.0
2024-06-05 10:05:43 +08:00
dependabot[bot]
bbf0393008 build(deps): bump golang.org/x/tools from 0.21.0 to 0.22.0
Bumps [golang.org/x/tools](https://github.com/golang/tools) from 0.21.0 to 0.22.0.
- [Release notes](https://github.com/golang/tools/releases)
- [Commits](https://github.com/golang/tools/compare/v0.21.0...v0.22.0)

---
updated-dependencies:
- dependency-name: golang.org/x/tools
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-05 00:52:06 +00:00
xushiwei
f1a4af013a Merge pull request #270 from xushiwei/q
llgo/ssa: NoArgsNoRet
2024-06-04 20:03:49 +08:00
xushiwei
05af9f9810 llgo/ssa: NoArgsNoRet 2024-06-04 20:02:45 +08:00
xushiwei
f68aada9f8 Merge pull request #269 from cpunion/link-args
build: support pkg-config and link args
2024-06-04 19:22:48 +08:00
Li Jie
52d60d9623 build: support pkg-config and link args 2024-06-04 16:35:17 +08:00
xushiwei
2ddf8a44bc Merge pull request #268 from visualfc/cast
cl: fix cl/_testrt/cast
2024-06-04 15:43:53 +08:00
visualfc
281fbc2bee cl: fix cl/_testrt/cast 2024-06-04 15:27:49 +08:00
xushiwei
c174568081 Merge pull request #266 from xushiwei/q
c/sqlite
2024-06-04 12:55:30 +08:00
xushiwei
f4a519c824 c/sqlite 2024-06-04 12:48:49 +08:00
xushiwei
62e4e2f716 Merge pull request #258 from visualfc/invoke
ssa: MakeInterface check abi.KindDirectIface
2024-06-04 10:35:38 +08:00
visualfc
193e6dfc93 ssa: ChangeInterface 2024-06-03 16:03:05 +08:00
visualfc
7596658e6c ssa: MakeInterface check abi.KindDirectIface 2024-06-03 11:47:16 +08:00
xushiwei
73d6bd8400 Merge pull request #264 from xushiwei/q
llgo/ssa getDefer fix: move to function start
2024-06-03 09:58:55 +08:00
xushiwei
922fabd935 llgo/ssa getDefer fix: move to function start 2024-06-03 09:56:39 +08:00
xushiwei
2f3d267439 Merge pull request #263 from xushiwei/q
llgo/ssa: DeferAlways/DeferInCond/DeferInLoop
2024-06-03 08:46:24 +08:00
xushiwei
bdaf7ff30b Merge remote-tracking branch 'gop/main' into q 2024-06-03 08:43:34 +08:00
xushiwei
cfca98512a llgo/ssa: DeferAlways/DeferInCond/DeferInLoop 2024-06-03 02:43:04 +08:00
xushiwei
23d9e86c46 Merge pull request #262 from xushiwei/q
README: defer
2024-06-03 01:43:43 +08:00
xushiwei
6ac6fb0192 README: defer 2024-06-03 01:43:17 +08:00
xushiwei
aaa36b9d3b Merge pull request #261 from xushiwei/q
defer support; llgo/ssa: IfThen/RunDefers/EndBuild
2024-06-03 01:35:33 +08:00
xushiwei
2c799a8ccf deferInit bugfix 2024-06-03 01:32:25 +08:00
xushiwei
56a5a7d72e defer refactor 2024-06-03 01:06:01 +08:00
xushiwei
410f9dd759 llgo/ssa: EndBuild 2024-06-02 21:54:51 +08:00
xushiwei
ba45217756 llgo/ssa: RunDefers 2024-06-02 15:24:42 +08:00
xushiwei
5a5929048d defer support; llgo/ssa: IfThen 2024-06-02 14:29:35 +08:00
xushiwei
bfc3c7fbf9 Merge pull request #257 from xushiwei/q
llgo/ssa: Builtin
2024-06-01 17:33:01 +08:00
xushiwei
e151bd4cd1 TestUserdefExpr 2024-06-01 17:30:37 +08:00
xushiwei
bfe68520f4 logCall: ignore vkBuiltin 2024-06-01 17:26:42 +08:00
xushiwei
45734c0b5c llgo/ssa: Builtin 2024-06-01 17:18:17 +08:00
xushiwei
d689062fc3 Merge pull request #256 from xushiwei/q
README: goroutine
2024-06-01 16:17:24 +08:00
xushiwei
881574ed39 README: goroutine 2024-06-01 16:14:26 +08:00
xushiwei
0bd5aa873b Merge pull request #255 from xushiwei/q
goroutine support; llgo/ssa: memory (malloc/free)
2024-06-01 16:09:31 +08:00
xushiwei
51f3ac2376 _testgo: goroutine 2024-06-01 16:04:35 +08:00
xushiwei
e5802853c0 goroutine support; llgo/ssa: memory (malloc/free) 2024-06-01 15:52:54 +08:00
xushiwei
edb5e36916 Merge pull request #254 from xushiwei/q
c/pthread
2024-05-31 20:07:00 +08:00
xushiwei
33ba94e784 c/pthread 2024-05-31 20:02:59 +08:00
xushiwei
9c969e0026 Merge pull request #252 from visualfc/fnnamed
ssa: fix llvm named in func
2024-05-31 16:26:25 +08:00
visualfc
858622a98d move eface demo to cl/_testrt 2024-05-31 15:53:52 +08:00
visualfc
c673489461 ssa: fix llvm named in func 2024-05-31 14:22:17 +08:00
xushiwei
53a39b6947 Merge pull request #251 from xushiwei/q
llgo/ssa: Do Call/Go/Defer
2024-05-31 12:06:09 +08:00
xushiwei
8f82d86a5d llgo/ssa: Do Call/Go/Defer 2024-05-31 12:01:11 +08:00
758 changed files with 152963 additions and 4434 deletions

View File

@@ -5,26 +5,74 @@ name: Go
on:
push:
branches: [ "main" ]
branches: [ "*" ]
pull_request:
branches: [ "main" ]
branches: [ "*" ]
jobs:
test-macos:
runs-on: macos-latest
test:
strategy:
matrix:
llvm: [17]
os:
- macos-latest
- ubuntu-24.04
llvm: [18]
runs-on: ${{matrix.os}}
steps:
- uses: actions/checkout@v4
- name: Update Homebrew
if: matrix.llvm == 17 # needed as long as LLVM 17 is still fresh
run: brew update
- name: Install LLVM ${{ matrix.llvm }}
run: HOMEBREW_NO_AUTO_UPDATE=1 brew install llvm@${{ matrix.llvm }}
- name: Install dependencies
if: startsWith(matrix.os, 'macos')
run: |
brew update
brew install llvm@${{matrix.llvm}} pkg-config bdw-gc openssl
echo "$(brew --prefix llvm@${{matrix.llvm}})/bin" >> $GITHUB_PATH
# Install optional deps for demos.
#
# NOTE: Keep this list updated as new deps are introduced.
opt_deps=(
cjson # for github.com/goplus/llgo/c/cjson
sqlite # for github.com/goplus/llgo/c/sqlite
python@3.12 # for github.com/goplus/llgo/py
)
brew install "${opt_deps[@]}"
- name: Install dependencies
if: startsWith(matrix.os, 'ubuntu')
run: |
echo "deb http://apt.llvm.org/$(lsb_release -cs)/ llvm-toolchain-$(lsb_release -cs)-${{matrix.llvm}} main" | sudo tee /etc/apt/sources.list.d/llvm.list
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
sudo apt-get update
sudo apt-get install -y llvm-${{matrix.llvm}}-dev clang-${{matrix.llvm}} lld-${{matrix.llvm}} pkg-config libgc-dev libssl-dev zlib1g-dev
echo "/usr/lib/llvm-${{matrix.llvm}}/bin" >> $GITHUB_PATH
# Install optional deps for demos.
#
# NOTE: Keep this list updated as new deps are introduced.
opt_deps=(
libcjson-dev # for github.com/goplus/llgo/c/cjson
libsqlite3-dev # for github.com/goplus/llgo/c/sqlite
python3.12-dev # for github.com/goplus/llgo/py
)
sudo apt-get install -y "${opt_deps[@]}"
- name: Install further optional dependencies for demos
run: |
wget -P ./_demo/llama2-c https://huggingface.co/karpathy/tinyllamas/resolve/main/stories15M.bin
py_deps=(
numpy # for github.com/goplus/llgo/py/numpy
torch # for github.com/goplus/llgo/py/torch
)
pip3 install --break-system-packages "${py_deps[@]}"
- name: Clang information
run: |
echo $PATH
which clang
clang --version
- name: Set up Go
uses: actions/setup-go@v5
with:
@@ -34,36 +82,38 @@ jobs:
run: go build -v ./...
- name: Test
if: ${{!startsWith(matrix.os, 'macos')}}
run: go test -v ./...
test-linux:
runs-on: ubuntu-20.04
strategy:
matrix:
llvm: [17]
steps:
- uses: actions/checkout@v4
- name: Test with coverage
if: startsWith(matrix.os, 'macos')
run: go test -v -coverprofile="coverage.txt" -covermode=atomic ./...
- name: Install LLVM ${{ matrix.llvm }}
run: |
echo 'deb http://apt.llvm.org/focal/ llvm-toolchain-focal-${{ matrix.llvm }} main' | sudo tee /etc/apt/sources.list.d/llvm.list
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
sudo apt-get update
sudo apt-get install --no-install-recommends llvm-${{ matrix.llvm }}-dev
- name: Install
run: go install ./...
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: '1.20'
- name: LLGO tests
if: ${{!startsWith(matrix.os, 'ubuntu')}}
run: |
echo "Test result on ${{matrix.os}} with LLVM ${{matrix.llvm}}" > result.md
bash .github/workflows/test_llgo.sh
- name: Build
run: go build -v ./...
- name: Test demos
continue-on-error: true
run: bash .github/workflows/test_demo.sh
- name: Test
run: go test -v -coverprofile="coverage.txt" -covermode=atomic ./...
- name: Show test result
run: cat result.md
- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@v4
with:
token: ${{ secrets.CODECOV_TOKEN }}
slug: goplus/llgo
- name: PR comment with test result
uses: thollander/actions-comment-pull-request@v2
if: false
with:
filePath: result.md
comment_tag: test-result-on-${{matrix.os}}-with-llvm-${{matrix.llvm}}
- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@v4
with:
token: ${{secrets.CODECOV_TOKEN}}
slug: goplus/llgo

40
.github/workflows/populate_darwin_sysroot.sh vendored Executable file
View File

@@ -0,0 +1,40 @@
#!/bin/bash
set -e
TMPDIR="$(mktemp -d)"
export TMPDIR
trap 'rm -rf "${TMPDIR}"' EXIT
DARWIN_AMD64_LLVM_PREFIX=.sysroot/darwin/amd64/usr/local/opt/llvm@18
DARWIN_ARM64_LLVM_PREFIX=.sysroot/darwin/arm64/opt/homebrew/opt/llvm@18
mkdir -p "${DARWIN_AMD64_LLVM_PREFIX}" "${DARWIN_ARM64_LLVM_PREFIX}"
BREW_LLVM_FORMULA_JSON="$(mktemp)"
curl -fsSL https://formulae.brew.sh/api/formula/llvm.json > "${BREW_LLVM_FORMULA_JSON}"
BREW_LLVM_AMD64_BOTTLE_URL=$(jq -r '.bottle.stable.files.sonoma.url' "${BREW_LLVM_FORMULA_JSON}")
BREW_LLVM_ARM64_BOTTLE_URL=$(jq -r '.bottle.stable.files.arm64_sonoma.url' "${BREW_LLVM_FORMULA_JSON}")
curl -fsSL -H "Authorization: Bearer QQ==" "${BREW_LLVM_AMD64_BOTTLE_URL}" | tar -xzf - --strip-components=2 -C "${DARWIN_AMD64_LLVM_PREFIX}"
curl -fsSL -H "Authorization: Bearer QQ==" "${BREW_LLVM_ARM64_BOTTLE_URL}" | tar -xzf - --strip-components=2 -C "${DARWIN_ARM64_LLVM_PREFIX}"
patch_homebrew_lib_dir() {
local LIB_DIR="$1"
local HOMEBREW_PREFIX="$2"
for DYLIB_FILE in "${LIB_DIR}"/*.dylib; do
if [[ -f "${DYLIB_FILE}" ]]; then
ID=$(otool -D "${DYLIB_FILE}" | grep '@@HOMEBREW_PREFIX@@' | awk '{print $1}')
if [[ -n "${ID}" ]]; then
NEW_ID=${ID/'@@HOMEBREW_PREFIX@@'/${HOMEBREW_PREFIX}}
install_name_tool -id "${NEW_ID}" "${DYLIB_FILE}"
fi
DEPS=$(otool -L "${DYLIB_FILE}" | grep '@@HOMEBREW_PREFIX@@' | awk '{print $1}')
for DEP in ${DEPS}; do
NEW_DEP=${DEP/'@@HOMEBREW_PREFIX@@'/${HOMEBREW_PREFIX}}
install_name_tool -change "${DEP}" "${NEW_DEP}" "${DYLIB_FILE}"
done
fi
done
}
patch_homebrew_lib_dir "${DARWIN_AMD64_LLVM_PREFIX}/lib" /usr/lib
patch_homebrew_lib_dir "${DARWIN_ARM64_LLVM_PREFIX}/lib" /opt/homebrew

143
.github/workflows/populate_linux_sysroot.sh vendored Executable file
View File

@@ -0,0 +1,143 @@
#!/bin/bash
set -e
TMPDIR="$(mktemp -d)"
export TMPDIR
trap 'rm -rf "${TMPDIR}"' EXIT
LINUX_AMD64_PREFIX=.sysroot/linux/amd64
LINUX_ARM64_PREFIX=.sysroot/linux/arm64
mkdir -p "${LINUX_AMD64_PREFIX}" "${LINUX_ARM64_PREFIX}"
POPULATE_LINUX_SYSROOT_SCRIPT="$(mktemp)"
cat > "${POPULATE_LINUX_SYSROOT_SCRIPT}" << EOF
#!/bin/bash
export DEBIAN_FRONTEND=noninteractive
apt-get update
apt-get install -y lsb-release gnupg2 wget rsync
echo "deb http://apt.llvm.org/\$(lsb_release -cs)/ llvm-toolchain-\$(lsb_release -cs)-18 main" | tee /etc/apt/sources.list.d/llvm.list
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add -
apt-get update
apt-get install -y llvm-18-dev
error() {
echo -e "\$1" >&2
exit 1
}
exclude_list=()
include_list=()
exclude_list+=(--exclude "/bin")
exclude_list+=(--exclude "/boot")
exclude_list+=(--exclude "/boot*")
exclude_list+=(--exclude "/dev")
exclude_list+=(--exclude "/etc")
exclude_list+=(--exclude "/home")
exclude_list+=(--exclude "/lib/dhcpd")
exclude_list+=(--exclude "/lib/firmware")
exclude_list+=(--exclude "/lib/hdparm")
exclude_list+=(--exclude "/lib/ifupdown")
exclude_list+=(--exclude "/lib/modules")
exclude_list+=(--exclude "/lib/modprobe.d")
exclude_list+=(--exclude "/lib/modules-load.d")
exclude_list+=(--exclude "/lib/resolvconf")
exclude_list+=(--exclude "/lib/startpar")
exclude_list+=(--exclude "/lib/systemd")
exclude_list+=(--exclude "/lib/terminfo")
exclude_list+=(--exclude "/lib/udev")
exclude_list+=(--exclude "/lib/xtables")
exclude_list+=(--exclude "/lib/ssl/private")
exclude_list+=(--exclude "/lost+found")
exclude_list+=(--exclude "/media")
exclude_list+=(--exclude "/mnt")
exclude_list+=(--exclude "/proc")
exclude_list+=(--exclude "/root")
exclude_list+=(--exclude "/run")
exclude_list+=(--exclude "/sbin")
exclude_list+=(--exclude "/srv")
exclude_list+=(--exclude "/sys")
exclude_list+=(--exclude "/tmp")
exclude_list+=(--exclude "/usr/bin")
exclude_list+=(--exclude "/usr/games")
exclude_list+=(--exclude "/usr/sbin")
exclude_list+=(--exclude "/usr/share")
exclude_list+=(--exclude "/usr/src")
exclude_list+=(--exclude "/usr/local/bin")
exclude_list+=(--exclude "/usr/local/etc")
exclude_list+=(--exclude "/usr/local/games")
exclude_list+=(--exclude "/usr/local/man")
exclude_list+=(--exclude "/usr/local/sbin")
exclude_list+=(--exclude "/usr/local/share")
exclude_list+=(--exclude "/usr/local/src")
exclude_list+=(--exclude "/usr/lib/ssl/private")
exclude_list+=(--exclude "/var")
exclude_list+=(--exclude "/snap")
exclude_list+=(--exclude "*python*")
include_list+=(--include "*.a")
include_list+=(--include "*.so")
include_list+=(--include "*.so.*")
include_list+=(--include "*.h")
include_list+=(--include "*.hh")
include_list+=(--include "*.hpp")
include_list+=(--include "*.hxx")
include_list+=(--include "*.pc")
include_list+=(--include "*.def")
include_list+=(--include "*.inc")
include_list+=(--include "/lib")
include_list+=(--include "/lib32")
include_list+=(--include "/lib64")
include_list+=(--include "/libx32")
include_list+=(--include "*/")
do-sync() {
from=\$1
to=\$2
args=()
args+=(-a)
args+=(-z)
args+=(-m)
args+=(-d)
args+=(-h)
args+=(--keep-dirlinks)
args+=("--info=progress2")
args+=(--delete)
args+=(--prune-empty-dirs)
args+=(--sparse)
args+=(--links)
args+=(--copy-unsafe-links)
args+=("\${exclude_list[@]}")
args+=("\${include_list[@]}")
args+=(--exclude "*")
args+=("\${from}")
args+=("\${to}")
echo "\${args[@]}"
rsync "\${args[@]}"
exit \$?
}
do-sync / /sysroot/
EOF
chmod +x "${POPULATE_LINUX_SYSROOT_SCRIPT}"
populate_linux_sysroot() {
local ARCH="$1"
local PREFIX="$2"
docker run \
--rm \
--platform "linux/${ARCH}" \
-v "$(pwd)/${PREFIX}":/sysroot \
-v "${POPULATE_LINUX_SYSROOT_SCRIPT}":/populate_linux_sysroot.sh \
debian:bullseye \
/populate_linux_sysroot.sh
}
populate_linux_sysroot amd64 "${LINUX_AMD64_PREFIX}"
populate_linux_sysroot arm64 "${LINUX_ARM64_PREFIX}"

58
.github/workflows/release-build.yml vendored Normal file
View File

@@ -0,0 +1,58 @@
name: Release Build
on:
push:
tags:
- "*"
jobs:
populate-darwin-sysroot:
runs-on: macos-latest
steps:
- name: Check out code
uses: actions/checkout@v4
- name: Populate Darwin sysroot
run: bash .github/workflows/populate_darwin_sysroot.sh
- name: Create Darwin sysroot tarball
run: tar -czvf .sysroot/darwin.tar.gz -C .sysroot darwin
- name: Upload Darwin sysroot tarball
uses: actions/upload-artifact@v4
with:
name: darwin-sysroot-tarball
path: .sysroot/darwin.tar.gz
compression-level: 0
build:
runs-on: ubuntu-latest
needs: populate-darwin-sysroot
steps:
- name: Check out code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: 1.20.x
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Download Darwin sysroot tarball
uses: actions/download-artifact@v4
with:
name: darwin-sysroot-tarball
path: .sysroot
- name: Populate Darwin sysroot
run: tar -xzvf .sysroot/darwin.tar.gz -C .sysroot
- name: Populate Linux sysroot
run: bash .github/workflows/populate_linux_sysroot.sh
- name: Run GoReleaser
env:
GITHUB_TOKEN: ${{github.token}}
run: |
docker run \
--rm \
-e GITHUB_TOKEN=${GITHUB_TOKEN} \
-v /var/run/docker.sock:/var/run/docker.sock \
-v $(pwd):/go/src/llgo \
-w /go/src/llgo \
ghcr.io/goreleaser/goreleaser-cross:v1.22 \
release --clean --skip nfpm,snapcraft

30
.github/workflows/test_demo.sh vendored Normal file
View File

@@ -0,0 +1,30 @@
#!/bin/bash
set -e
# llgo run subdirectories under _demo and _pydemo
total=0
failed=0
failed_cases=""
for d in ./_demo/* ./_pydemo/*; do
total=$((total+1))
if [ -d "$d" ]; then
echo "Testing $d"
if ! (cd "$d" && llgo run .); then
echo "FAIL"
failed=$((failed+1))
failed_cases="$failed_cases\n* :x: $d"
else
echo "PASS"
fi
fi
done
echo "=== Done"
echo "$((total-failed))/$total tests passed"
if [ "$failed" -ne 0 ]; then
echo ":bangbang: Failed demo cases:" | tee -a result.md
echo -e "$failed_cases" | tee -a result.md
exit 1
else
echo ":white_check_mark: All demo tests passed" | tee -a result.md
fi

36
.github/workflows/test_llgo.sh vendored Normal file
View File

@@ -0,0 +1,36 @@
#!/bin/bash
set -e
testcmd=/tmp/test
llgo build -o $testcmd ./c/bdwgc/_test
cases=$($testcmd)
total=$(echo "$cases" | wc -l | tr -d ' ')
failed=0
failed_cases=""
for idx in $(seq 1 $((total))); do
case=$(echo "$cases" | sed -n "${idx}p")
case_name=$(echo "$case" | cut -d',' -f2)
echo "=== Test case: $case_name"
set +e
out=$("$testcmd" "$((idx-1))" 2>&1)
exit_code=$?
set -e
if [ "${exit_code:-0}" -ne 0 ]; then
echo "failed: $out"
failed=$((failed+1))
failed_cases="$failed_cases\n* :x: $case_name"
else
echo "passed"
fi
done
echo "=== Done"
echo "$((total-failed))/$total tests passed"
if [ "$failed" -ne 0 ]; then
echo ":bangbang: Failed llgo cases:" | tee -a result.md
echo -e "$failed_cases" | tee -a result.md
exit 1
else
echo ":white_check_mark: All llgo tests passed" | tee -a result.md
fi

8
.gitignore vendored
View File

@@ -9,7 +9,8 @@
*.dylib
test.db
llgo_autogen.ll
demo.ll
llgo_autogen*.ll
stories*.bin
.DS_Store
err.log
@@ -18,6 +19,7 @@ numpy.txt
_go/
_runtime/
_tinygo/
_output/
build.dir/
.vscode/
@@ -33,3 +35,7 @@ build.dir/
# Go workspace file
go.work*
# GoReleaser
.dist/
.sysroot/

145
.goreleaser.yaml Normal file
View File

@@ -0,0 +1,145 @@
version: 2
dist: .dist
env:
- SYSROOT_DARWIN_AMD64={{.Env.PWD}}/.sysroot/darwin/amd64
- SYSROOT_DARWIN_ARM64={{.Env.PWD}}/.sysroot/darwin/arm64
- SYSROOT_LINUX_AMD64={{.Env.PWD}}/.sysroot/linux/amd64
- SYSROOT_LINUX_ARM64={{.Env.PWD}}/.sysroot/linux/arm64
- CGO_ENABLED=1
- CGO_CXXFLAGS=-std=c++17
before:
hooks:
- go mod download
builds:
- id: llgo-darwin-amd64
main: ./cmd/llgo
flags:
- -tags=darwin,amd64,byollvm
ldflags:
- -X github.com/goplus/llgo/x/env.buildVersion=v{{.Version}}
- -X github.com/goplus/llgo/x/env.buildTime={{.Date}}
- -X github.com/goplus/llgo/xtool/env/llvm.ldLLVMConfigBin=/usr/local/opt/llvm@18/bin/llvm-config
env:
- CC=o64-clang
- CXX=o64-clang++
- CGO_CPPFLAGS=-I{{.Env.SYSROOT_DARWIN_AMD64}}/usr/local/opt/llvm@18/include -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS
- CGO_LDFLAGS=-L{{.Env.SYSROOT_DARWIN_AMD64}}/usr/local/opt/llvm@18/lib -Wl,-search_paths_first -Wl,-headerpad_max_install_names -lLLVM-18 -lz -lm
targets:
- darwin_amd64
mod_timestamp: "{{.CommitTimestamp}}"
- id: llgo-darwin-arm64
main: ./cmd/llgo
flags:
- -tags=darwin,arm64,byollvm
ldflags:
- -X github.com/goplus/llgo/x/env.buildVersion=v{{.Version}}
- -X github.com/goplus/llgo/x/env.buildTime={{.Date}}
- -X github.com/goplus/llgo/xtool/env/llvm.ldLLVMConfigBin=/opt/homebrew/opt/llvm@18/bin/llvm-config
env:
- CC=oa64-clang
- CXX=oa64-clang++
- CGO_CPPFLAGS=-I{{.Env.SYSROOT_DARWIN_ARM64}}/opt/homebrew/opt/llvm@18/include -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS
- CGO_LDFLAGS=-L{{.Env.SYSROOT_DARWIN_ARM64}}/opt/homebrew/opt/llvm@18/lib -Wl,-search_paths_first -Wl,-headerpad_max_install_names -lLLVM-18 -lz -lm
targets:
- darwin_arm64
mod_timestamp: "{{.CommitTimestamp}}"
- id: llgo-linux-amd64
main: ./cmd/llgo
flags:
- -tags=linux,amd64,byollvm
ldflags:
- -X github.com/goplus/llgo/x/env.buildVersion=v{{.Version}}
- -X github.com/goplus/llgo/x/env.buildTime={{.Date}}
- -X github.com/goplus/llgo/xtool/env/llvm.ldLLVMConfigBin=/usr/lib/llvm-18/bin/llvm-config
env:
- CC=x86_64-linux-gnu-gcc
- CXX=x86_64-linux-gnu-g++
- CGO_CPPFLAGS=--sysroot={{.Env.SYSROOT_LINUX_AMD64}} -I{{.Env.SYSROOT_LINUX_AMD64}}/usr/include/llvm-18 -I{{.Env.SYSROOT_LINUX_AMD64}}/usr/include/llvm-c-18 -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS
- CGO_LDFLAGS=--sysroot={{.Env.SYSROOT_LINUX_AMD64}} -L{{.Env.SYSROOT_LINUX_AMD64}}/usr/lib/llvm-18/lib -lLLVM-18
targets:
- linux_amd64
mod_timestamp: "{{.CommitTimestamp}}"
- id: llgo-linux-arm64
main: ./cmd/llgo
flags:
- -tags=linux,arm64,byollvm
ldflags:
- -X github.com/goplus/llgo/x/env.buildVersion=v{{.Version}}
- -X github.com/goplus/llgo/x/env.buildTime={{.Date}}
- -X github.com/goplus/llgo/xtool/env/llvm.ldLLVMConfigBin=/usr/lib/llvm-18/bin/llvm-config
env:
- CC=aarch64-linux-gnu-gcc
- CXX=aarch64-linux-gnu-g++
- CGO_CPPFLAGS=--sysroot={{.Env.SYSROOT_LINUX_ARM64}} -I{{.Env.SYSROOT_LINUX_ARM64}}/usr/include/llvm-18 -I{{.Env.SYSROOT_LINUX_ARM64}}/usr/include/llvm-c-18 -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS
- CGO_LDFLAGS=--sysroot={{.Env.SYSROOT_LINUX_ARM64}} -L{{.Env.SYSROOT_LINUX_ARM64}}/usr/lib/llvm-18/lib -lLLVM-18
targets:
- linux_arm64
mod_timestamp: "{{.CommitTimestamp}}"
archives:
- format: tar.gz
name_template: >-
{{.ProjectName}}{{.Version}}.{{.Os}}-{{.Arch}}
{{- if .Arm}}v{{.Arm}}{{end}}
files:
- LICENSE
- README.md
checksum:
name_template: "{{.ProjectName}}{{.Version}}.checksums.txt"
nfpms:
- package_name: llgo
vendor: goplus
homepage: https://github.com/goplus/llgo
maintainer: Aofei Sheng <aofei@aofeisheng.com>
description: |
LLGo is a Go compiler based on LLVM in order to better integrate Go with the C ecosystem including Python. It's a
subproject of the Go+ project.
LLGo aims to expand the boundaries of Go/Go+, providing limitless possibilities such as:
- Game development
- AI and data science
- WebAssembly
- Embedded development
- ...
license: Apache-2.0
formats:
- deb
- rpm
file_name_template: >-
{{.ProjectName}}{{.Version}}.{{.Os}}-{{.Arch}}
{{- if .Arm}}v{{.Arm}}{{end}}
bindir: /usr/local/bin
snapcrafts:
- name: llgo
title: A Go compiler based on LLVM
summary: A Go compiler based on LLVM
description: |
LLGo is a Go compiler based on LLVM in order to better integrate Go with the C ecosystem including Python. It's a
subproject of the Go+ project.
LLGo aims to expand the boundaries of Go/Go+, providing limitless possibilities such as:
- Game development
- AI and data science
- WebAssembly
- Embedded development
- ...
license: Apache-2.0
confinement: classic
name_template: >-
{{.ProjectName}}{{.Version}}.{{.Os}}-{{.Arch}}
{{- if .Arm}}v{{.Arm}}{{end}}
snapshot:
name_template: '{{trimprefix .Summary "v"}}'
release:
prerelease: auto

286
README.md
View File

@@ -10,8 +10,42 @@ llgo - A Go compiler based on LLVM
LLGo is a Go compiler based on LLVM in order to better integrate Go with the C ecosystem including Python. It's a subproject of [the Go+ project](https://github.com/goplus/gop).
LLGo aims to expand the boundaries of Go/Go+, providing limitless possibilities such as:
## C standard libary support
* Game development
* AI and data science
* WebAssembly
* Embedded development
* ...
How can these be achieved?
```
LLGo := Go + C + Python
```
LLGo is compatible with C and Python through the language's **Application Binary Interface (ABI)**, while LLGo is compatible with Go through its **syntax (source code)**.
## C/C++ standard libary support
You can import a C/C++ standard library in LLGo!
* [c](https://pkg.go.dev/github.com/goplus/llgo/c)
* [c/syscall](https://pkg.go.dev/github.com/goplus/llgo/c/syscall)
* [c/sys](https://pkg.go.dev/github.com/goplus/llgo/c/sys)
* [c/os](https://pkg.go.dev/github.com/goplus/llgo/c/os)
* [c/math](https://pkg.go.dev/github.com/goplus/llgo/c/math)
* [c/math/cmplx](https://pkg.go.dev/github.com/goplus/llgo/c/math/cmplx)
* [c/math/rand](https://pkg.go.dev/github.com/goplus/llgo/c/math/rand)
* [c/pthread](https://pkg.go.dev/github.com/goplus/llgo/c/pthread)
* [c/pthread/sync](https://pkg.go.dev/github.com/goplus/llgo/c/pthread/sync)
* [c/sync/atomic](https://pkg.go.dev/github.com/goplus/llgo/c/sync/atomic)
* [c/time](https://pkg.go.dev/github.com/goplus/llgo/c/time)
* [c/net](https://pkg.go.dev/github.com/goplus/llgo/c/net)
* [cpp/std](https://pkg.go.dev/github.com/goplus/llgo/cpp/std)
Here is a simple example:
```go
package main
@@ -34,12 +68,48 @@ The `_demo` directory contains some C standard libary related demos (it start wi
To run these demos (If you haven't installed `llgo` yet, please refer to [How to install](#how-to-install)):
```sh
export LLGOROOT=`pwd`
cd <demo-directory> # eg. cd _demo/hello
llgo run .
```
See [github.com/goplus/llgo/c](https://pkg.go.dev/github.com/goplus/llgo/c) for more detials.
## How support C/C++ and Python
LLGo use `go:linkname` to link an extern symbol througth its ABI:
```go
import _ "unsafe" // for go:linkname
//go:linkname Sqrt C.sqrt
func Sqrt(x float64) float64
```
You can directly integrate it into [your own code](_demo/linkname/linkname.go):
```go
package main
import _ "unsafe" // for go:linkname
//go:linkname Sqrt C.sqrt
func Sqrt(x float64) float64
func main() {
println("sqrt(2) =", Sqrt(2))
}
```
Or put it into a package (see [c/math](c/math/math.go)):
```go
package main
import "github.com/goplus/llgo/c/math"
func main() {
println("sqrt(2) =", math.Sqrt(2))
}
```
## Python support
@@ -48,36 +118,48 @@ You can import a Python library in LLGo!
And you can import any Python library into `llgo` through a program called `llpyg` (see [Development tools](#development-tools)). The following libraries have been included in `llgo`:
* [builtins](https://pkg.go.dev/github.com/goplus/llgo/py/std)
* [sys](https://pkg.go.dev/github.com/goplus/llgo/py/sys)
* [os](https://pkg.go.dev/github.com/goplus/llgo/py/os)
* [math](https://pkg.go.dev/github.com/goplus/llgo/py/math)
* [json](https://pkg.go.dev/github.com/goplus/llgo/py/json)
* [inspect](https://pkg.go.dev/github.com/goplus/llgo/py/inspect)
* [statistics](https://pkg.go.dev/github.com/goplus/llgo/py/statistics)
* [numpy](https://pkg.go.dev/github.com/goplus/llgo/py/numpy)
* [pandas](https://pkg.go.dev/github.com/goplus/llgo/py/pandas)
* [pytorch](https://pkg.go.dev/github.com/goplus/llgo/py/torch)
* [matplotlib](https://pkg.go.dev/github.com/goplus/llgo/py/matplotlib)
* [py](https://pkg.go.dev/github.com/goplus/llgo/py) (abi)
* [py/std](https://pkg.go.dev/github.com/goplus/llgo/py/std) (builtins)
* [py/sys](https://pkg.go.dev/github.com/goplus/llgo/py/sys)
* [py/os](https://pkg.go.dev/github.com/goplus/llgo/py/os)
* [py/math](https://pkg.go.dev/github.com/goplus/llgo/py/math)
* [py/json](https://pkg.go.dev/github.com/goplus/llgo/py/json)
* [py/inspect](https://pkg.go.dev/github.com/goplus/llgo/py/inspect)
* [py/statistics](https://pkg.go.dev/github.com/goplus/llgo/py/statistics)
* [py/numpy](https://pkg.go.dev/github.com/goplus/llgo/py/numpy)
* [py/pandas](https://pkg.go.dev/github.com/goplus/llgo/py/pandas)
* [py/torch](https://pkg.go.dev/github.com/goplus/llgo/py/torch)
* [py/matplotlib](https://pkg.go.dev/github.com/goplus/llgo/py/matplotlib)
Here is an example using the Python `math` library:
Note: For third-party libraries (such as pandas and pytorch), you still need to install the library files.
Here is an example:
```go
package main
import (
"github.com/goplus/llgo/c"
"github.com/goplus/llgo/py"
"github.com/goplus/llgo/py/math"
"github.com/goplus/llgo/py/std"
)
func main() {
x := math.Sqrt(py.Float(2))
c.Printf(c.Str("sqrt(2) = %f\n"), x.Float64())
x := math.Sqrt(py.Float(2)) // x = sqrt(2)
std.Print(py.Str("sqrt(2) ="), x) // print("sqrt(2) =", x)
}
```
Here, We call `py.Float(2)` to create a Python number 2, and pass it to Pythons `math.sqrt` to get `x`. Then use `x.Float64()` to convert x to Go's `float64` type, and print the value through the C `printf` function.
It is equivalent to the following Python code:
```py
import math
x = math.sqrt(2)
print("sqrt =", x)
```
Here, We call `py.Float(2)` to create a Python number 2, and pass it to Pythons `math.sqrt` to get `x`. Then we call `std.Print` to print the result.
Let's look at a slightly more complex example. For example, we use `numpy` to calculate:
@@ -85,9 +167,9 @@ Let's look at a slightly more complex example. For example, we use `numpy` to ca
package main
import (
"github.com/goplus/llgo/c"
"github.com/goplus/llgo/py"
"github.com/goplus/llgo/py/numpy"
"github.com/goplus/llgo/py/std"
)
func main() {
@@ -102,7 +184,7 @@ func main() {
py.List(3.0, 2.0, 1.0),
)
x := numpy.Add(a, b)
c.Printf(c.Str("a+b = %s\n"), x.Str().CStr())
std.Print(py.Str("a+b ="), x)
}
```
@@ -115,38 +197,13 @@ The `_pydemo` directory contains some python related demos:
* [statistics](_pydemo/statistics/statistics.go): define a python list and call `statistics.mean` to get the mean
* [matrix](_pydemo/matrix/matrix.go): a basic `numpy` demo
To run these demos, you need to set the `LLGO_LIB_PYTHON` environment variable first.
If Python is in the search path for `clang` linking, then `LLGO_LIB_PYTHON` only needs to be set to the name of the Python library. For example:
To run these demos (If you haven't installed `llgo` yet, please refer to [How to install](#how-to-install)):
```sh
export LLGO_LIB_PYTHON=python3.12
```
You can also specify the path to tell `llgo` where the Python library is located:
```sh
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 library 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
```
Note that the file name must be written in a platform-independent format, using `python3.12` instead of `libpython3.12.dylib`.
Then you can run the demos:
```sh
export LLGOROOT=`pwd`
cd <demo-directory> # eg. cd _pydemo/callpy
llgo run .
```
See [github.com/goplus/llgo/py](https://pkg.go.dev/github.com/goplus/llgo/py) for more detials.
## Other frequently used libraries
@@ -154,35 +211,53 @@ LLGo can easily import any libraries from the C ecosystem. Currently, this impor
The currently supported libraries include:
* [llama2.c](https://pkg.go.dev/github.com/goplus/llgo/c/llama2)
* [cjson](https://pkg.go.dev/github.com/goplus/llgo/c/cjson)
* [sqlite](https://pkg.go.dev/github.com/goplus/llgo/c/sqlite)
* [c/bdwgc](https://pkg.go.dev/github.com/goplus/llgo/c/bdwgc)
* [c/cjson](https://pkg.go.dev/github.com/goplus/llgo/c/cjson)
* [c/clang](https://pkg.go.dev/github.com/goplus/llgo/c/clang)
* [c/libuv](https://pkg.go.dev/github.com/goplus/llgo/c/libuv)
* [c/llama2](https://pkg.go.dev/github.com/goplus/llgo/c/llama2)
* [c/lua](https://pkg.go.dev/github.com/goplus/llgo/c/lua)
* [c/neco](https://pkg.go.dev/github.com/goplus/llgo/c/neco)
* [c/openssl](https://pkg.go.dev/github.com/goplus/llgo/c/openssl)
* [c/raylib](https://pkg.go.dev/github.com/goplus/llgo/c/raylib)
* [c/sqlite](https://pkg.go.dev/github.com/goplus/llgo/c/sqlite)
* [c/zlib](https://pkg.go.dev/github.com/goplus/llgo/c/zlib)
* [cpp/inih](https://pkg.go.dev/github.com/goplus/llgo/cpp/inih)
* [cpp/llvm](https://pkg.go.dev/github.com/goplus/llgo/cpp/llvm)
Here are some examples related to them:
* [llama2-c](_demo/llama2-c): inference Llama 2 (It's the first llgo AI example)
* [mkjson](c/cjson/_demo/mkjson/mkjson.go): create a json object and print it
* [sqlitedemo](c/sqlite/_demo/sqlitedemo/demo.go): a basic sqlite demo
* [tetris](c/raylib/_demo/tetris/tetris.go): a tetris game based on raylib
## Go syntax support
Common Go syntax is already supported. Except for the following, which needs to be improved:
* map (Very limited support)
* panic (Limited support)
* recover (Not supported yet)
* defer (Not supported yet)
* gc (Not supported yet)
* chan (Not supported yet)
* goroutine (Not supported yet)
* generics (Not supported yet)
Here are some examples related to Go syntax:
All Go syntax (not including `cgo`) is already supported. Here are some examples:
* [concat](_demo/concat/concat.go): define a variadic function
* [genints](_demo/genints/genints.go): various forms of closure usage (including C function, recv.method and anonymous function)
* [errors](_demo/errors/errors.go): demo to implement error interface
* [errors](_cmptest/errors/errors.go): demo to implement error interface
* [defer](_cmptest/defer/defer.go): defer demo
* [goroutine](_demo/goroutine/goroutine.go): goroutine demo
### Defer
LLGo `defer` does not support usage in loops. This is not a bug but a feature, because we think that using `defer` in a loop is a very unrecommended practice.
### Garbage Collection (GC)
By default, LLGo implements `gc` based on [bdwgc](https://www.hboehm.info/gc/) (also known as [libgc](https://www.hboehm.info/gc/)).
However, you can disable gc by specifying the `nogc` tag. For example:
```sh
llgo run -tags nogc .
```
## Go packages support
@@ -193,8 +268,71 @@ Here are the Go packages that can be imported correctly:
* [unicode](https://pkg.go.dev/unicode)
* [unicode/utf8](https://pkg.go.dev/unicode/utf8)
* [unicode/utf16](https://pkg.go.dev/unicode/utf16)
* [math](https://pkg.go.dev/math)
* [math/big](https://pkg.go.dev/math/big) (partially)
* [math/bits](https://pkg.go.dev/math/bits)
* [math/cmplx](https://pkg.go.dev/math/cmplx)
* [math/rand](https://pkg.go.dev/math/rand)
* [net/url](https://pkg.go.dev/net/url)
* [errors](https://pkg.go.dev/errors)
* [context](https://pkg.go.dev/context)
* [io](https://pkg.go.dev/io)
* [io/fs](https://pkg.go.dev/io/fs)
* [io/ioutil](https://pkg.go.dev/io/ioutil)
* [log](https://pkg.go.dev/log)
* [flag](https://pkg.go.dev/flag)
* [sort](https://pkg.go.dev/sort)
* [bytes](https://pkg.go.dev/bytes)
* [bufio](https://pkg.go.dev/bufio)
* [strings](https://pkg.go.dev/strings)
* [strconv](https://pkg.go.dev/strconv)
* [path](https://pkg.go.dev/path)
* [path/filepath](https://pkg.go.dev/path/filepath)
* [sync/atomic](https://pkg.go.dev/sync/atomic)
* [sync](https://pkg.go.dev/sync) (partially)
* [syscall](https://pkg.go.dev/syscall) (partially)
* [runtime](https://pkg.go.dev/runtime) (partially)
* [os](https://pkg.go.dev/os) (partially)
* [os/exec](https://pkg.go.dev/os/exec) (partially)
* [fmt](https://pkg.go.dev/fmt) (partially)
* [reflect](https://pkg.go.dev/reflect) (partially)
* [time](https://pkg.go.dev/time) (partially)
* [encoding](https://pkg.go.dev/encoding)
* [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)
* [encoding/csv](https://pkg.go.dev/encoding/csv)
* [hash](https://pkg.go.dev/hash)
* [hash/adler32](https://pkg.go.dev/hash/adler32)
* [hash/crc32](https://pkg.go.dev/hash/crc32) (partially)
* [hash/crc64](https://pkg.go.dev/hash/crc64)
* [crypto](https://pkg.go.dev/crypto)
* [crypto/md5](https://pkg.go.dev/crypto/md5)
* [crypto/sha1](https://pkg.go.dev/crypto/sha1)
* [crypto/sha256](https://pkg.go.dev/crypto/sha256)
* [crypto/sha512](https://pkg.go.dev/crypto/sha512) (partially)
* [crypto/hmac](https://pkg.go.dev/crypto/hmac) (partially)
* [crypto/rand](https://pkg.go.dev/crypto/rand) (partially)
* [crypto/subtle](https://pkg.go.dev/crypto/subtle) (partially)
* [regexp](https://pkg.go.dev/regexp)
* [regexp/syntax](https://pkg.go.dev/regexp/syntax)
* [go/token](https://pkg.go.dev/go/token)
* [go/scanner](https://pkg.go.dev/go/scanner)
## Dependencies
- [Go 1.20+](https://go.dev)
- [LLVM 18](https://llvm.org)
- [LLD 18](https://lld.llvm.org)
- [Clang 18](https://clang.llvm.org)
- [pkg-config 0.29+](https://www.freedesktop.org/wiki/Software/pkg-config/)
- [bdwgc/libgc 8.0+](https://www.hboehm.info/gc/)
- [OpenSSL 3.0+](https://www.openssl.org/)
- [zlib 1.2+](https://www.zlib.net)
- [Python 3.12+](https://www.python.org) (optional, for [github.com/goplus/llgo/py](https://pkg.go.dev/github.com/goplus/llgo/py))
## How to install
Follow these steps to generate the `llgo` command (its usage is the same as the `go` command):
@@ -202,19 +340,21 @@ Follow these steps to generate the `llgo` command (its usage is the same as the
### on macOS
```sh
brew update # execute if needed
brew install llvm@17
go install -v ./...
brew update
brew install llvm@18 pkg-config bdw-gc openssl
brew install python@3.12 # optional
go install -v github.com/goplus/llgo/cmd/llgo@latest
```
### on Linux
### on Linux (Debian/Ubuntu)
```sh
echo 'deb http://apt.llvm.org/focal/ llvm-toolchain-focal-17 main' | sudo tee /etc/apt/sources.list.d/llvm.list
echo "deb http://apt.llvm.org/$(lsb_release -cs)/ llvm-toolchain-$(lsb_release -cs)-18 main" | sudo tee /etc/apt/sources.list.d/llvm.list
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
sudo apt-get update # execute if needed
sudo apt-get install --no-install-recommends llvm-17-dev
go install -v ./...
sudo apt-get update
sudo apt-get install -y llvm-18-dev clang-18 lld-18 pkg-config libgc-dev libssl-dev zlib1g-dev
sudo apt-get install -y python3.12-dev # optional
go install -v github.com/goplus/llgo/cmd/llgo@latest
```
### on Windows
@@ -233,7 +373,9 @@ TODO
How do I generate these tools?
```sh
go install -v ./... # compile all tools except pydump
git clone https://github.com/goplus/llgo.git
cd llgo
go install -v ./chore/... # compile all tools except pydump
cd chore/_xtool
llgo install ./... # compile pydump
go install github.com/goplus/hdq/chore/pysigfetch@v0.8.1 # compile pysigfetch

View File

@@ -0,0 +1,47 @@
package main
import (
"fmt"
"math"
"math/big"
)
func main() {
// We'll do computations with 200 bits of precision in the mantissa.
const prec = 200
// Compute the square root of 2 using Newton's Method. We start with
// an initial estimate for sqrt(2), and then iterate:
// x_{n+1} = 1/2 * ( x_n + (2.0 / x_n) )
// Since Newton's Method doubles the number of correct digits at each
// iteration, we need at least log_2(prec) steps.
steps := int(math.Log2(prec))
// Initialize values we need for the computation.
two := new(big.Float).SetPrec(prec).SetInt64(2)
half := new(big.Float).SetPrec(prec).SetFloat64(0.5)
// Use 1 as the initial estimate.
x := new(big.Float).SetPrec(prec).SetInt64(1)
// We use t as a temporary variable. There's no need to set its precision
// since big.Float values with unset (== 0) precision automatically assume
// the largest precision of the arguments when used as the result (receiver)
// of a big.Float operation.
t := new(big.Float)
// Iterate.
for i := 0; i <= steps; i++ {
t.Quo(two, x) // t = 2.0 / x_n
t.Add(x, t) // t = x_n + (2.0 / x_n)
x.Mul(half, t) // x_{n+1} = 0.5 * t
}
// We can use the usual fmt.Printf verbs since big.Float implements fmt.Formatter
fmt.Printf("sqrt(2) = %.50f\n", x)
// Print the error between 2 and x*x.
t.Mul(x, x) // t = x*x
fmt.Printf("error = %e\n", t.Sub(two, t))
}

View File

@@ -0,0 +1,21 @@
package main
func main() {
c1 := make(chan string)
c2 := make(chan string, 1)
go func() {
c1 <- "ch1"
}()
go func() {
c2 <- "ch2"
}()
for i := 0; i < 2; i++ {
select {
case msg1 := <-c1:
println(msg1)
case msg2 := <-c2:
println(msg2)
}
}
}

View File

@@ -0,0 +1,34 @@
package main
import (
"fmt"
"go/parser"
"go/token"
)
func main() {
fset := token.NewFileSet() // positions are relative to fset
src := `package foo
import (
"fmt"
"time"
)
func bar() {
fmt.Println(time.Now())
}`
// Parse src but stop after processing the imports.
f, err := parser.ParseFile(fset, "", src, parser.ImportsOnly)
if err != nil {
fmt.Println(err)
return
}
// Print the imports from the file's AST.
for _, s := range f.Imports {
fmt.Println(s.Path.Value)
}
}

View File

@@ -0,0 +1,16 @@
package main
import (
"encoding/json"
"fmt"
"unsafe"
)
func main() {
s := `{"name":"math","items":[{"name":"sqrt","sig":"(x, /)"},{"name":"pi"}]}`
data := unsafe.Slice(unsafe.StringData(s), len(s))
var v any
json.Unmarshal(data, &v)
b, _ := json.MarshalIndent(v, "", " ")
fmt.Println(string(b))
}

View File

@@ -0,0 +1,19 @@
package main
import (
"fmt"
"time"
)
var c chan int
func handle(int) {}
func main() {
select {
case m := <-c:
handle(m)
case <-time.After(time.Second / 10):
fmt.Println("timed out")
}
}

View File

@@ -0,0 +1,48 @@
package main
import (
"encoding/base32"
"encoding/base64"
"encoding/hex"
"fmt"
"log"
)
func base64Demo() {
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))
}
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 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()
}

View File

@@ -0,0 +1,25 @@
package main
import (
"fmt"
"math/big"
)
func main() {
// Initialize two big ints with the first two numbers in the sequence.
a := big.NewInt(0)
b := big.NewInt(1)
// Initialize limit as 10^99, the smallest integer with 100 digits.
var limit big.Int
limit.Exp(big.NewInt(10), big.NewInt(99), nil)
// Loop while a is smaller than 1e100.
for a.Cmp(&limit) < 0 {
// Compute the next Fibonacci number, storing it in a.
a.Add(a, b)
// Swap a and b so that b is the next number in the sequence.
a, b = b, a
}
fmt.Println(a) // 100-digit Fibonacci number
}

11
_cmptest/chan/chan.go Normal file
View File

@@ -0,0 +1,11 @@
package main
func main() {
ch := make(chan int, 10)
println(len(ch), cap(ch))
go func() {
ch <- 100
}()
n, ok := <-ch
println(n, ok)
}

View File

@@ -0,0 +1,26 @@
package main
func fibonacci(c, quit chan int) {
x, y := 0, 1
for {
select {
case c <- x:
x, y = y, x+y
case <-quit:
println("quit")
return
}
}
}
func main() {
c := make(chan int)
quit := make(chan int)
go func() {
for i := 0; i < 10; i++ {
println(<-c)
}
close(quit)
}()
fibonacci(c, quit)
}

28
_cmptest/crcdemo/crc.go Normal file
View File

@@ -0,0 +1,28 @@
package main
import (
"fmt"
"hash/adler32"
"hash/crc32"
"hash/crc64"
)
func crc64Demo() {
crc := crc64.MakeTable(crc64.ECMA)
fmt.Printf("%016x\n", crc64.Checksum([]byte("Hello world"), crc))
}
func crc32Demo() {
crc32q := crc32.MakeTable(crc32.IEEE)
fmt.Printf("%08x\n", crc32.Checksum([]byte("Hello world"), crc32q))
}
func adler32Demo() {
fmt.Printf("%08x\n", adler32.Checksum([]byte("Hello world")))
}
func main() {
adler32Demo()
crc32Demo()
crc64Demo()
}

30
_cmptest/csvdemo/csv.go Normal file
View File

@@ -0,0 +1,30 @@
package main
import (
"encoding/csv"
"fmt"
"io"
"log"
"strings"
)
func main() {
in := `first_name,last_name,username
"Rob","Pike",rob
Ken,Thompson,ken
"Robert","Griesemer","gri"
`
r := csv.NewReader(strings.NewReader(in))
for {
record, err := r.Read()
if err == io.EOF {
break
}
if err != nil {
log.Fatal(err)
}
fmt.Println(record)
}
}

39
_cmptest/ctxcancel/ctx.go Normal file
View File

@@ -0,0 +1,39 @@
package main
import (
"context"
"fmt"
)
func main() {
// gen generates integers in a separate goroutine and
// sends them to the returned channel.
// The callers of gen need to cancel the context once
// they are done consuming generated integers not to leak
// the internal goroutine started by gen.
gen := func(ctx context.Context) <-chan int {
dst := make(chan int)
n := 1
go func() {
for {
select {
case <-ctx.Done():
return // returning not to leak the goroutine
case dst <- n:
n++
}
}
}()
return dst
}
ctx, cancel := context.WithCancel(context.Background())
defer cancel() // cancel when we are finished consuming integers
for n := range gen(ctx) {
fmt.Println(n)
if n == 5 {
break
}
}
}

17
_cmptest/defer/defer.go Normal file
View File

@@ -0,0 +1,17 @@
package main
func f(s string) bool {
return len(s) > 2
}
func main() {
defer func() {
println("hi")
}()
if s := "hello"; f(s) {
defer println(s)
} else {
defer println("world")
}
defer println("bye")
}

View File

@@ -0,0 +1,20 @@
package main
import (
"fmt"
"os"
)
func main() {
mapper := func(placeholderName string) string {
switch placeholderName {
case "DAY_PART":
return "morning"
case "NAME":
return "Gopher"
}
return ""
}
fmt.Println(os.Expand("Good ${DAY_PART}, $NAME!", mapper))
}

View File

@@ -17,6 +17,5 @@ func (e *errorString) Error() string {
func main() {
err := New("an error")
println(err)
println(err.Error())
}

View File

@@ -0,0 +1,21 @@
package main
import (
"flag"
"fmt"
"os"
)
func main() {
fmt.Println("args:", os.Args[1:])
if len(os.Args) == 1 {
os.Args = []string{"flagdemo", "-cpu", "100"}
}
verbose := flag.Bool("v", false, "verbose")
cpu := flag.Int("cpu", 1, "cpu number")
host := flag.String("host", ":8888", "host")
flag.Parse()
fmt.Println("host:", *host, "cpu:", *cpu, "verbose:", *verbose)
}

12
_cmptest/fmtdemo/fmt.go Normal file
View File

@@ -0,0 +1,12 @@
package main
import (
"errors"
"fmt"
)
func main() {
fmt.Println("Hello, world")
fmt.Printf("%f\n", 3.14)
fmt.Printf("%v\n", errors.New("error message"))
}

View File

@@ -0,0 +1,27 @@
package main
import (
"fmt"
"go/scanner"
"go/token"
)
func main() {
// src is the input that we want to tokenize.
src := []byte("cos(x) + 1i*sin(x) // Euler")
// Initialize the scanner.
var s scanner.Scanner
fset := token.NewFileSet() // positions are relative to fset
file := fset.AddFile("", fset.Base(), len(src)) // register input "file"
s.Init(file, src, nil /* no error handler */, scanner.ScanComments)
// Repeated calls to Scan yield the token sequence found in the input.
for {
pos, tok, lit := s.Scan()
if tok == token.EOF {
break
}
fmt.Printf("%s\t%s\t%q\n", fset.Position(pos), tok, lit)
}
}

15
_cmptest/hmacdemo/hmac.go Normal file
View File

@@ -0,0 +1,15 @@
package main
import (
"crypto/hmac"
"crypto/sha1"
"fmt"
"io"
)
func main() {
h := hmac.New(sha1.New, []byte("<key>"))
io.WriteString(h, "The fog is getting thicker!")
io.WriteString(h, "And Leon's getting laaarger!")
fmt.Printf("%x", h.Sum(nil))
}

View File

@@ -1,7 +1,7 @@
package main
import (
"github.com/goplus/llgo/_demo/interf/foo"
"github.com/goplus/llgo/_cmptest/interf/foo"
)
func Foo() any {

14
_cmptest/iodemo/io.go Normal file
View File

@@ -0,0 +1,14 @@
package main
import (
"io"
"os"
)
func f(w io.Writer) {
w.Write([]byte("Hello, world\n"))
}
func main() {
f(os.Stdout)
}

View File

@@ -0,0 +1,19 @@
package main
import (
"fmt"
"io/ioutil"
"log"
"strings"
)
func main() {
r := strings.NewReader("Go is a general-purpose language designed with systems programming in mind.")
b, err := ioutil.ReadAll(r)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", b)
}

20
_cmptest/md5demo/md5.go Normal file
View File

@@ -0,0 +1,20 @@
package main
import (
"crypto"
"crypto/md5"
"fmt"
"io"
)
func main() {
h := md5.New()
io.WriteString(h, "The fog is getting thicker!")
io.WriteString(h, "And Leon's getting laaarger!")
fmt.Printf("%x\n", h.Sum(nil))
h = crypto.MD5.New()
io.WriteString(h, "The fog is getting thicker!")
io.WriteString(h, "And Leon's getting laaarger!")
fmt.Printf("%x\n", h.Sum(nil))
}

18
_cmptest/osdemo/osd.go Normal file
View File

@@ -0,0 +1,18 @@
package main
import (
"os"
)
func main() {
home, _ := os.UserHomeDir()
println("home:", home)
cfgdir, _ := os.UserConfigDir()
println("cfgdir:", cfgdir)
cache, _ := os.UserCacheDir()
println("cachedir:", cache)
os.Stdout.Write([]byte("Hello, World\n"))
}

24
_cmptest/osexec/exec.go Normal file
View File

@@ -0,0 +1,24 @@
package main
import (
"fmt"
"os"
"os/exec"
"runtime"
"github.com/goplus/llgo/xtool/env/llvm"
)
func main() {
ls := "ls"
if runtime.GOOS == "windows" {
ls = "dir"
}
cmd := exec.Command(ls)
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
cmd.Run()
dir := llvm.New("").BinDir()
fmt.Println(dir)
}

30
_cmptest/osproc/exec.go Normal file
View File

@@ -0,0 +1,30 @@
package main
import (
"fmt"
"os"
"os/exec"
"runtime"
)
func main() {
ls := "ls"
args := []string{ls, "-l"}
if runtime.GOOS == "windows" {
ls = "dir"
args = []string{ls}
}
lspath, _ := exec.LookPath(ls)
if lspath != "" {
ls = lspath
}
proc, err := os.StartProcess(ls, args, &os.ProcAttr{
Files: []*os.File{nil, os.Stdout, os.Stderr},
})
if err != nil {
fmt.Println("os.StartProcess error:", err)
return
}
proc.Wait()
fmt.Println("proc.Wait done")
}

26
_cmptest/pipedemo/pipe.go Normal file
View File

@@ -0,0 +1,26 @@
package main
import (
"fmt"
"io"
)
func main() {
data := []byte("This is some data that needs to be stored in Body.")
pr, pw := io.Pipe()
go func() {
defer pw.Close()
if _, err := pw.Write(data); err != nil {
fmt.Println("Error writing to pipe:", err)
return
}
}()
defer pr.Close()
readData, err := io.ReadAll(pr)
if err != nil {
fmt.Println("Error reading from Body:", err)
return
}
fmt.Println("Body:", string(readData))
}

View File

@@ -0,0 +1,12 @@
package main
import (
"fmt"
"github.com/goplus/llgo/xtool/nm"
)
func main() {
sym := nm.Symbol{Name: "abc", Type: nm.Text}
fmt.Printf("%016x %c %s\n", sym.Addr, sym.Type, sym.Name)
}

View File

@@ -0,0 +1,25 @@
package main
import (
"fmt"
"os"
)
func main() {
fileName := "err.log"
os.WriteFile(fileName, []byte("123"), 0644)
_, err := os.Stat(fileName)
if os.IsNotExist(err) {
fmt.Fprintf(os.Stderr, "File %s not found\n", fileName)
return
}
data, err := os.ReadFile(fileName)
if err != nil {
fmt.Fprintf(os.Stderr, "ReadFile: %v\n", err)
return
}
fmt.Printf("%s\n", data)
}

View File

@@ -0,0 +1,13 @@
package main
import "reflect"
func main() {
tyIntSlice := reflect.SliceOf(reflect.TypeOf(0))
v := reflect.Zero(tyIntSlice)
v = reflect.Append(v, reflect.ValueOf(1), reflect.ValueOf(2), reflect.ValueOf(3))
for i, n := 0, v.Len(); i < n; i++ {
item := v.Index(i)
println(item.Int())
}
}

View File

@@ -0,0 +1,11 @@
package main
import (
"fmt"
"github.com/goplus/llgo/xtool/env"
)
func main() {
fmt.Println(env.ExpandEnv("$(pkg-config --libs bdw-gc)"))
}

14
_cmptest/rtype/rtype.go Normal file
View File

@@ -0,0 +1,14 @@
package main
import "reflect"
func main() {
tyIntSlice := reflect.SliceOf(reflect.TypeOf(0))
println(tyIntSlice.String())
v := reflect.Zero(tyIntSlice)
println(v.Len())
v = reflect.ValueOf(100)
println(v.Int())
}

14
_cmptest/sha1demo/sha1.go Normal file
View File

@@ -0,0 +1,14 @@
package main
import (
"crypto/sha1"
"fmt"
"io"
)
func main() {
h := sha1.New()
io.WriteString(h, "The fog is getting thicker!")
io.WriteString(h, "And Leon's getting laaarger!")
fmt.Printf("%x", h.Sum(nil))
}

View File

@@ -0,0 +1,14 @@
package main
import (
"crypto/sha256"
"fmt"
"io"
)
func main() {
h := sha256.New()
io.WriteString(h, "The fog is getting thicker!")
io.WriteString(h, "And Leon's getting laaarger!")
fmt.Printf("%x", h.Sum(nil))
}

View File

@@ -0,0 +1,14 @@
package main
import (
"crypto/sha512"
"fmt"
"io"
)
func main() {
h := sha512.New()
io.WriteString(h, "The fog is getting thicker!")
io.WriteString(h, "And Leon's getting laaarger!")
fmt.Printf("%x", h.Sum(nil))
}

23
_cmptest/sortdemo/sort.go Normal file
View File

@@ -0,0 +1,23 @@
package main
import "sort"
func main() {
vals := []int{32, 58, 25, 92, 45, 78}
sort.Ints(vals)
for _, v := range vals {
println(v)
}
texts := []string{"apple", "banana", "cherry", "date", "elderberry", "fig"}
sort.Slice(texts, func(i, j int) bool {
leni, lenj := len(texts[i]), len(texts[j])
if leni != lenj {
return leni < lenj
}
return texts[i] < texts[j]
})
for _, v := range texts {
println(v)
}
}

View File

@@ -0,0 +1,12 @@
package main
import (
"fmt"
"strconv"
"strings"
)
func main() {
fmt.Println(strconv.Itoa(-123))
fmt.Println(strings.Split("abc,def,123", ","))
}

View File

@@ -0,0 +1,11 @@
package main
import "syscall"
func main() {
wd, err := syscall.Getwd()
if err != nil {
panic(err)
}
println("cwd:", wd)
}

View File

@@ -0,0 +1,8 @@
package main
import "time"
func main() {
t := time.Date(2018, time.January, 1, 2, 3, 4, 5, time.UTC)
println(t.String())
}

20
_cmptest/urldemo/url.go Normal file
View File

@@ -0,0 +1,20 @@
package main
import (
"fmt"
"log"
"net/url"
)
func main() {
u, err := url.Parse("http://foo.example.com/foo?bar=1")
if err != nil {
log.Fatal(err)
}
u.Scheme = "https"
u.Host = "bar.example.com"
q := u.Query()
q.Set("bar", "2")
u.RawQuery = q.Encode()
fmt.Println(u)
}

24
_demo/catomic/atomic.go Normal file
View File

@@ -0,0 +1,24 @@
package main
import (
"github.com/goplus/llgo/c/sync/atomic"
)
func main() {
var v int64
atomic.Store(&v, 100)
println("store:", atomic.Load(&v))
ret := atomic.Add(&v, 1)
println("ret:", ret, "v:", v)
ret, _ = atomic.CompareAndExchange(&v, 100, 102)
println("ret:", ret, "vs 100, v:", v)
ret, _ = atomic.CompareAndExchange(&v, 101, 102)
println("ret:", ret, "vs 101, v:", v)
ret = atomic.Sub(&v, 1)
println("ret:", ret, "v:", v)
}

50
_demo/cchan/cchan.go Normal file
View File

@@ -0,0 +1,50 @@
package main
import (
"unsafe"
"github.com/goplus/llgo/internal/runtime"
)
const (
eltSize = int(unsafe.Sizeof(0))
)
func doChan(cap int) {
c := runtime.NewChan(eltSize, cap)
go func() {
v := 100
runtime.ChanSend(c, unsafe.Pointer(&v), eltSize)
}()
var ret int
runtime.ChanRecv(c, unsafe.Pointer(&ret), eltSize)
println(ret)
}
func main() {
doChan(10)
doChan(0)
c := runtime.NewChan(eltSize, 3)
v := 1
runtime.ChanSend(c, unsafe.Pointer(&v), eltSize)
v = 2
runtime.ChanSend(c, unsafe.Pointer(&v), eltSize)
v = 3
runtime.ChanSend(c, unsafe.Pointer(&v), eltSize)
runtime.ChanClose(c)
v = 10
if runtime.ChanTrySend(c, unsafe.Pointer(&v), eltSize) {
println("error: chan send to closed chan")
}
for {
if ok := runtime.ChanRecv(c, unsafe.Pointer(&v), eltSize); !ok {
break
}
println(v)
}
}

View File

@@ -0,0 +1,41 @@
package main
import (
"unsafe"
"github.com/goplus/llgo/internal/runtime"
)
const (
eltSize = int(unsafe.Sizeof(0))
)
func fibonacci(c, quit *runtime.Chan) {
x, y := 0, 1
for {
isel, _ := runtime.Select(
runtime.ChanOp{C: c, Send: true, Val: unsafe.Pointer(&x), Size: int32(eltSize)},
runtime.ChanOp{C: quit},
)
if isel == 0 {
x, y = y, x+y
} else {
println("quit")
return
}
}
}
func main() {
c := runtime.NewChan(eltSize, 0)
quit := runtime.NewChan(eltSize, 0)
go func() {
for i := 0; i < 10; i++ {
val := 0
runtime.ChanRecv(c, unsafe.Pointer(&val), eltSize)
println(val)
}
runtime.ChanClose(quit)
}()
fibonacci(c, quit)
}

11
_demo/cexec/exec.go Normal file
View File

@@ -0,0 +1,11 @@
package main
import (
"github.com/goplus/llgo/c"
"github.com/goplus/llgo/c/os"
)
func main() {
ls := c.Str("ls")
os.Execlp(ls, ls, c.Str("-l"), nil)
}

9
_demo/complex/cmplx.go Normal file
View File

@@ -0,0 +1,9 @@
package main
import (
"math/cmplx"
)
func main() {
println("abs(3+4i):", cmplx.Abs(3+4i))
}

38
_demo/cppintf/cppintf.go Normal file
View File

@@ -0,0 +1,38 @@
package main
import (
"github.com/goplus/llgo/_demo/cppintf/foo"
"github.com/goplus/llgo/c"
"github.com/goplus/llgo/c/math"
)
type Bar struct {
foo.Callback
a c.Int
}
func NewBar(a c.Int) *Bar {
return &Bar{
Callback: foo.Callback{
Vptr: &foo.CallbackVtbl{
Val: c.Func((*Bar).getA),
Calc: c.Func((*Bar).sqrt),
},
},
a: a,
}
}
func (p *Bar) getA() c.Int {
return p.a
}
func (p *Bar) sqrt(v float64) float64 {
return math.Sqrt(v)
}
func main() {
bar := NewBar(1)
foo.F(&bar.Callback)
foo.G(&bar.Callback)
}

View File

@@ -0,0 +1,15 @@
#include <stdio.h>
#define interface struct
interface ICallback {
virtual int val() = 0;
virtual double calc(double v) = 0;
};
extern "C" void f(ICallback* cb) {
printf("val: %d\ncalc(2): %lf\n", cb->val(), cb->calc(2));
}
void g(ICallback* cb) {
f(cb);
}

25
_demo/cppintf/foo/foo.go Normal file
View File

@@ -0,0 +1,25 @@
package foo
import (
"unsafe"
)
const (
LLGoFiles = "bar/bar.cpp"
LLGoPackage = "link"
)
type Callback struct {
Vptr *CallbackVtbl
}
type CallbackVtbl struct {
Val unsafe.Pointer
Calc unsafe.Pointer
}
//go:linkname F C.f
func F(cb *Callback)
//go:linkname G C._Z1gP9ICallback
func G(cb *Callback)

View File

@@ -0,0 +1,50 @@
package main
import (
"unsafe"
"github.com/goplus/llgo/_demo/cppmintf/foo"
"github.com/goplus/llgo/c"
"github.com/goplus/llgo/c/math"
)
type Bar struct {
foo.Callback
a c.Int
}
func NewBar(a c.Int) *Bar {
return &Bar{
Callback: foo.Callback{
ICalc: foo.ICalc{
Vptr: &foo.ICalcVtbl{
Calc: c.Func((*Bar).sqrt),
},
},
IVal: foo.IVal{
Vptr: &foo.IValVtbl{
Val: c.Func(bar_IVal_getA),
},
},
},
a: a,
}
}
func (p *Bar) getA() c.Int {
return p.a
}
func bar_IVal_getA(this c.Pointer) c.Int {
const delta = -int(unsafe.Offsetof(foo.Callback{}.IVal))
return (*Bar)(c.Advance(this, delta)).getA()
}
func (p *Bar) sqrt(v float64) float64 {
return math.Sqrt(v)
}
func main() {
bar := NewBar(1)
foo.F(&bar.Callback)
}

View File

@@ -0,0 +1,17 @@
#include <stdio.h>
#define interface struct
interface ICalc {
virtual double calc(double v) = 0;
};
interface IVal {
virtual int val() = 0;
};
class Callback : public ICalc, public IVal {
};
extern "C" void f(Callback* cb) {
printf("val: %d\ncalc(2): %lf\n", cb->val(), cb->calc(2));
}

42
_demo/cppmintf/foo/foo.go Normal file
View File

@@ -0,0 +1,42 @@
package foo
import (
"unsafe"
)
const (
LLGoFiles = "bar/bar.cpp"
LLGoPackage = "link"
)
// -----------------------------------------------------------------------------
type ICalc struct {
Vptr *ICalcVtbl
}
type ICalcVtbl struct {
Calc unsafe.Pointer
}
// -----------------------------------------------------------------------------
type IVal struct {
Vptr *IValVtbl
}
type IValVtbl struct {
Val unsafe.Pointer
}
// -----------------------------------------------------------------------------
type Callback struct {
ICalc
IVal
}
//go:linkname F C.f
func F(cb *Callback)
// -----------------------------------------------------------------------------

26
_demo/crand/rand.go Normal file
View File

@@ -0,0 +1,26 @@
package main
import (
"fmt"
"github.com/goplus/llgo/c"
"github.com/goplus/llgo/c/math/rand"
"github.com/goplus/llgo/c/time"
)
func fastrand64() uint64 {
v1 := uint64(rand.Random())
v2 := uint64(rand.Random())
return v1 ^ (v2 << 32)
}
func main() {
rand.Srand(c.Uint(time.Time(nil)))
fmt.Printf("%x\n", rand.Rand())
fmt.Printf("%x\n", rand.Rand())
rand.Srandom(c.Uint(time.Time(nil)))
fmt.Printf("%x\n", rand.Random())
fmt.Printf("%x\n", rand.Random())
fmt.Printf("%x\n", fastrand64())
}

12
_demo/ctime/time.go Normal file
View File

@@ -0,0 +1,12 @@
package main
import "github.com/goplus/llgo/c/time"
func main() {
var tv time.Timespec
time.ClockGettime(time.CLOCK_REALTIME, &tv)
println("REALTIME sec:", tv.Sec, "nsec:", tv.Nsec)
time.ClockGettime(time.CLOCK_MONOTONIC, &tv)
println("MONOTONIC sec:", tv.Sec, "nsec:", tv.Nsec)
}

77
_demo/fcntl/fcntl.go Normal file
View File

@@ -0,0 +1,77 @@
package main
import (
"github.com/goplus/llgo/c"
"github.com/goplus/llgo/c/os"
"unsafe"
)
func main() {
filename := c.Str("testfile.txt")
data := c.Str("Hello, os!")
var buffer [20]c.Char
// Open a file, O_CREAT|O_WRONLY|O_TRUNC means create, write only, or clear the file
fd := os.Open(filename, os.O_CREAT|os.O_WRONLY|os.O_TRUNC, 0644)
if fd == -1 {
c.Printf(c.Str("open error\n"))
return
}
// Writing data to a file
bytesWritten := os.Write(fd, c.Pointer(data), c.Strlen(data))
if bytesWritten == -1 {
c.Printf(c.Str("write error\n"))
os.Close(fd)
return
}
c.Printf(c.Str("Written %ld bytes to %s\n"), bytesWritten, filename)
// Get file status flags
flags := os.Fcntl(fd, os.F_GETFL)
if flags == -1 {
c.Printf(c.Str("os error\n"))
os.Close(fd)
return
}
c.Printf(c.Str("File flags: %d\n"), flags)
// Set the file status flag to non-blocking mode
if os.Fcntl(fd, os.F_SETFL, flags|os.O_NONBLOCK) == -1 {
c.Printf(c.Str("os error\n"))
os.Close(fd)
return
}
c.Printf(c.Str("set file status successfully\n"))
c.Printf(c.Str("111"))
// Close file
os.Close(fd)
// Reopen the file, O_RDONLY means read-only
fd = os.Open(filename, os.O_RDONLY)
if fd == -1 {
c.Printf(c.Str("open error\n"))
return
}
// Reading data from a file
// &buffer[:][0]
// unsafe.SliceData(buffer[:])
bytesRead := os.Read(fd, c.Pointer(unsafe.SliceData(buffer[:])), unsafe.Sizeof(buffer)-1)
if bytesRead == -1 {
c.Printf(c.Str("read error\n"))
os.Close(fd)
return
}
// Ensure that the buffer is null-terminated
buffer[bytesRead] = c.Char(0)
c.Printf(c.Str("Read %ld bytes: %s\n"), bytesRead, &buffer[0])
// Close file
os.Close(fd)
}

11
_demo/getcwd/getcwd.go Normal file
View File

@@ -0,0 +1,11 @@
package main
import (
"github.com/goplus/llgo/c"
"github.com/goplus/llgo/c/os"
)
func main() {
wd := os.Getcwd(c.Alloca(os.PATH_MAX), os.PATH_MAX)
c.Printf(c.Str("cwd: %s\n"), wd)
}

View File

@@ -0,0 +1,12 @@
package main
func main() {
done := false
go func() {
println("Hello, goroutine")
done = true
}()
for !done {
print(".")
}
}

7
_demo/gotime/time.go Normal file
View File

@@ -0,0 +1,7 @@
package main
import "time"
func main() {
println(time.Now().String())
}

View File

@@ -9,5 +9,5 @@ func main() {
}
/* Expected output:
Hello World
Hello world
*/

View File

@@ -0,0 +1,10 @@
package main
import _ "unsafe" // for go:linkname
//go:linkname Sqrt C.sqrt
func Sqrt(x float64) float64
func main() {
println("sqrt(2) =", Sqrt(2))
}

View File

@@ -3,6 +3,7 @@ package main
import (
"github.com/goplus/llgo/c"
"github.com/goplus/llgo/c/llama2"
"github.com/goplus/llgo/c/time"
)
func main() {
@@ -11,7 +12,7 @@ func main() {
var tokenizerPath *c.Char = c.Str("tokenizer.bin")
var temperature, topp c.Float = 1.0, 0.9
var steps c.Int = 256
var rngSeed uint64 = uint64(c.Time(nil))
var rngSeed uint64 = uint64(time.Time(nil))
loop: // parse command line arguments
for {

9
_demo/logdemo/log.go Normal file
View File

@@ -0,0 +1,9 @@
package main
import (
"log"
)
func main() {
log.Println("Hello")
}

11
_demo/math/math.go Normal file
View File

@@ -0,0 +1,11 @@
package main
import (
"math"
)
func main() {
println(math.Sqrt(2))
println(math.Abs(-1.2))
println(math.Ldexp(1.2, 3))
}

20
_demo/netdbdemo/netdb.go Normal file
View File

@@ -0,0 +1,20 @@
package main
import (
"github.com/goplus/llgo/c"
"github.com/goplus/llgo/c/net"
)
func main() {
var hints net.AddrInfo
hints.Family = net.AF_UNSPEC
hints.SockType = net.SOCK_STREAM
host := "httpbin.org"
port := "80"
var result *net.AddrInfo
c.Printf(c.Str("%d\n"), net.Getaddrinfo(c.Str(host), c.Str(port), &hints, &result))
c.Printf(c.Str("%d\n"), net.Freeaddrinfo(result))
}

View File

@@ -0,0 +1,19 @@
package main
import (
"fmt"
"os/exec"
"runtime"
)
func main() {
ls := "ls"
if runtime.GOOS == "windows" {
ls = "dir"
}
lspath, _ := exec.LookPath(ls)
if lspath != "" {
ls = lspath
}
fmt.Println(ls)
}

18
_demo/randcrypt/rand.go Normal file
View File

@@ -0,0 +1,18 @@
package main
import (
"crypto/rand"
"fmt"
)
func main() {
c := 10
b := make([]byte, c)
_, err := rand.Read(b)
if err != nil {
fmt.Println("error:", err)
return
}
// The slice should now contain random bytes instead of only zeroes.
fmt.Printf("%x\n", b)
}

12
_demo/randdemo/rand.go Normal file
View File

@@ -0,0 +1,12 @@
package main
import (
"fmt"
"math/rand"
)
func main() {
fmt.Println(rand.Intn(100))
fmt.Println(rand.Intn(100))
fmt.Println(rand.Intn(100))
}

16
_demo/setjmp/setjmp.go Normal file
View File

@@ -0,0 +1,16 @@
package main
import (
"github.com/goplus/llgo/c/setjmp"
)
func main() {
var jb setjmp.SigjmpBuf
switch ret := setjmp.Sigsetjmp(&jb, 0); ret {
case 0:
println("Hello, setjmp!")
setjmp.Siglongjmp(&jb, 1)
default:
println("exception:", ret)
}
}

View File

@@ -0,0 +1,32 @@
package main
import (
"unsafe"
"github.com/goplus/llgo/c"
"github.com/goplus/llgo/c/net"
"github.com/goplus/llgo/c/os"
)
func main() {
sockfd := net.Socket(net.AF_INET, net.SOCK_STREAM, 0)
msg := c.Str("Hello, World!")
defer os.Close(sockfd)
server := net.GetHostByName(c.Str("localhost"))
if server == nil {
c.Perror(c.Str("hostname get error"))
return
}
servAddr := &net.SockaddrIn{}
servAddr.Family = net.AF_INET
servAddr.Port = net.Htons(uint16(1234))
c.Memcpy(unsafe.Pointer(&servAddr.Addr.Addr), unsafe.Pointer(*server.AddrList), uintptr(server.Length))
if res := net.Connect(sockfd, (*net.SockAddr)(unsafe.Pointer(servAddr)), c.Uint(16)); res < 0 {
c.Perror(c.Str("connect error"))
return
}
os.Write(sockfd, unsafe.Pointer(msg), c.Strlen(msg))
}

View File

@@ -0,0 +1,43 @@
package main
import (
"unsafe"
"github.com/goplus/llgo/c"
"github.com/goplus/llgo/c/net"
"github.com/goplus/llgo/c/os"
)
func main() {
var buffer [256]c.Char
sockfd := net.Socket(net.AF_INET, net.SOCK_STREAM, 0)
defer os.Close(sockfd)
servAddr := &net.SockaddrIn{
Family: net.AF_INET,
Port: net.Htons(uint16(1234)),
Addr: net.InAddr{Addr: 0x00000000},
Zero: [8]c.Char{0, 0, 0, 0, 0, 0, 0, 0},
}
if res := net.Bind(sockfd, servAddr, c.Uint(unsafe.Sizeof(*servAddr))); res < 0 {
c.Perror(c.Str("bind error"))
return
}
if net.Listen(sockfd, 5) < 0 {
c.Printf(c.Str("listen error"))
return
}
c.Printf(c.Str("Listening on port 1234...\n"))
cliAddr, clilen := &net.SockaddrIn{}, c.Uint(unsafe.Sizeof(servAddr))
newsockfd := net.Accept(sockfd, cliAddr, &clilen)
defer os.Close(newsockfd)
c.Printf(c.Str("Connection accepted."))
os.Read(newsockfd, unsafe.Pointer(unsafe.SliceData(buffer[:])), 256)
c.Printf(c.Str("Received: %s"), &buffer[0])
}

26
_demo/sysexec/exec.go Normal file
View File

@@ -0,0 +1,26 @@
package main
import (
"fmt"
"os/exec"
"runtime"
"syscall"
)
func main() {
ls := "ls"
args := []string{ls, "-l"}
if runtime.GOOS == "windows" {
ls = "dir"
args = []string{ls}
}
lspath, _ := exec.LookPath(ls)
if lspath != "" {
ls = lspath
}
err := syscall.Exec(ls, args, nil)
if err != nil {
fmt.Println("syscall.Exec error:", err)
return
}
}

25
_demo/thread/thd.go Normal file
View File

@@ -0,0 +1,25 @@
package main
import (
"github.com/goplus/llgo/c"
"github.com/goplus/llgo/c/pthread"
)
var key pthread.Key
func main() {
key.Create(nil)
key.Set(c.Pointer(c.Str("main value\n")))
var thd pthread.Thread
pthread.Create(&thd, nil, func(arg c.Pointer) c.Pointer {
key.Set(c.Pointer(c.Str("thread value\n")))
c.Printf(c.Str("Hello, thread\nTLS: %s"), key.Get())
return c.Pointer(c.Str("Back to main\n"))
}, nil)
var retval c.Pointer
pthread.Join(thd, &retval)
c.Printf(c.Str("%sTLS: %s"), retval, key.Get())
}

11
_demo/timedur/timedur.go Normal file
View File

@@ -0,0 +1,11 @@
package main
import (
"fmt"
"time"
)
func main() {
t := time.Now().Add(time.Second * 5)
fmt.Println(time.Until(t))
}

View File

@@ -1,12 +1,12 @@
package main
import (
"github.com/goplus/llgo/c"
"github.com/goplus/llgo/py"
"github.com/goplus/llgo/py/math"
"github.com/goplus/llgo/py/std"
)
func main() {
x := math.Sqrt(py.Float(2))
c.Printf(c.Str("sqrt(2) = %f\n"), x.Float64())
x := math.Sqrt(py.Float(2)) // x = sqrt(2)
std.Print(py.Str("sqrt(2) ="), x) // print("sqrt(2) =", x)
}

View File

@@ -1,9 +1,9 @@
package main
import (
"github.com/goplus/llgo/c"
"github.com/goplus/llgo/py"
"github.com/goplus/llgo/py/numpy"
"github.com/goplus/llgo/py/std"
)
func main() {
@@ -18,5 +18,5 @@ func main() {
py.List(3.0, 2.0, 1.0),
)
x := numpy.Add(a, b)
c.Printf(c.Str("a+b = %s\n"), x.Str().CStr())
std.Print(py.Str("a+b ="), x)
}

101
c/bdwgc/_test/bdwgc.go Normal file
View File

@@ -0,0 +1,101 @@
package main
import (
"unsafe"
"github.com/goplus/llgo/c"
"github.com/goplus/llgo/c/bdwgc"
"github.com/goplus/llgo/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<<i), c.Str("finalizer should not be called"))
for j := 0; j < i; j++ {
check(isCalled(1<<j), c.Str("finalizers of previous objects should be called"))
}
}
}
// Clear stack to avoid reference
func clearStack() {
p := c.Alloca(128)
c.Memset(p, 0, 128)
}
func check(b bool, msg *c.Char) {
if !b {
c.Printf(c.Str("check failed: %s\n"), msg)
panic("check failed")
}
}
func TestFinalizer(t *testing.T) {
bdwgc.Init()
callFunc()
clearStack()
bdwgc.Gcollect()
check(isCalled(RETURN_VALUE_FREED), c.Str("finalizer should be called"))
loop()
}

31
c/bdwgc/_test/main.go Normal file
View File

@@ -0,0 +1,31 @@
package main
import (
"github.com/goplus/llgo/c"
"github.com/goplus/llgo/c/bdwgc/_test/testing"
)
type TestCase struct {
Name string
F func(*testing.T)
}
func main() {
tests := []TestCase{
{"TestMalloc", TestMalloc},
{"TestFinalizer", TestFinalizer},
}
if c.Argc == 1 {
for _, test := range tests {
c.Printf(c.Str("%s\n"), c.AllocaCStr(test.Name))
}
return
}
c.Fprintf(c.Stderr, c.Str("arg: %s\n"), c.Index(c.Argv, 1))
idx := int(c.Atoi(c.Index(c.Argv, 1)))
if idx < 0 || idx >= len(tests) {
c.Printf(c.Str("invalid test index %d"), idx)
panic("invalid test index")
}
tests[idx].F(nil)
}

View File

@@ -0,0 +1,4 @@
package testing
type T struct {
}

103
c/bdwgc/bdwgc.go Normal file
View File

@@ -0,0 +1,103 @@
/*
* 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 bdwgc
import (
_ "unsafe"
"github.com/goplus/llgo/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()
// -----------------------------------------------------------------------------

17
c/bitcast/_cast/cast.c Normal file
View File

@@ -0,0 +1,17 @@
typedef union {
double d;
float f;
long v;
} castUnion;
double llgoToFloat64(long v) {
castUnion k;
k.v = v;
return k.d;
}
float llgoToFloat32(long v) {
castUnion k;
k.v = v;
return k.f;
}

30
c/bitcast/bitcast.go Normal file
View File

@@ -0,0 +1,30 @@
/*
* 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 bitcast
import _ "unsafe"
const (
LLGoFiles = "_cast/cast.c"
LLGoPackage = "link"
)
//go:linkname ToFloat64 C.llgoToFloat64
func ToFloat64(v uintptr) float64
//go:linkname ToFloat32 C.llgoToFloat32
func ToFloat32(v uintptr) float32

163
c/c.go
View File

@@ -17,6 +17,9 @@
package c
// typedef unsigned int uint;
// typedef unsigned long ulong;
// typedef unsigned long long ulonglong;
// typedef long long longlong;
import "C"
import "unsafe"
@@ -25,17 +28,23 @@ const (
)
type (
Char = int8
Int = C.int
Uint = C.uint
Long = int32
Ulong = uint32
LongLong = int64
UlongLong = uint64
Float = float32
Double = float64
Pointer = unsafe.Pointer
FilePtr = unsafe.Pointer
Void = [0]byte
Char = int8
Float = float32
Double = float64
Pointer = unsafe.Pointer
FilePtr = unsafe.Pointer
)
type (
Int C.int
Uint C.uint
Long C.long
Ulong C.ulong
LongLong C.longlong
UlongLong C.ulonglong
)
type integer interface {
@@ -45,8 +54,11 @@ type integer interface {
//go:linkname Str llgo.cstr
func Str(string) *Char
//go:linkname Func llgo.funcAddr
func Func(any) Pointer
// 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 }
@@ -57,27 +69,117 @@ func Alloca(size uintptr) Pointer
//go:linkname AllocaCStr llgo.allocaCStr
func AllocaCStr(s string) *Char
//go:linkname Unreachable llgo.unreachable
func Unreachable()
//go:linkname AllocaCStrs llgo.allocaCStrs
func AllocaCStrs(strs []string, endWithNil bool) **Char
// TODO(xsw):
// llgo:link AllocaNew llgo.allocaNew
func AllocaNew[T any]() *T { return nil }
//go:linkname Malloc C.malloc
func Malloc(size uintptr) Pointer
//go:linkname Calloc C.calloc
func Calloc(num uintptr, size uintptr) Pointer
//go:linkname Free C.free
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
//go:linkname Memchr C.memchr
func Memchr(s Pointer, c Int, n uintptr) Pointer
//go:linkname Memcmp C.memcmp
func Memcmp(s1, s2 Pointer, n uintptr) Int
// -----------------------------------------------------------------------------
//go:linkname Strlen C.strlen
func Strlen(s *Char) uintptr
//go:linkname Strcpy C.strcpy
func Strcpy(dst, src *Char) *Char
//go:linkname Strncpy C.strncpy
func Strncpy(dst, src *Char, n uintptr) *Char
//go:linkname Strcat C.strcat
func Strcat(dst, src *Char) *Char
//go:linkname Strncat C.strncat
func Strncat(dst, src *Char, n uintptr) *Char
//go:linkname Strcmp C.strcmp
func Strcmp(s1, s2 *Char) Int
//go:linkname Strncmp C.strncmp
func Strncmp(s1, s2 *Char, n uintptr) Int
//go:linkname Strchr C.strchr
func Strchr(s *Char, c Int) *Char
//go:linkname Strrchr C.strrchr
func Strrchr(s *Char, c Int) *Char
//go:linkname Strstr C.strstr
func Strstr(s1, s2 *Char) *Char
//go:linkname Strdup C.strdup
func Strdup(s *Char) *Char
//go:linkname Strndup C.strndup
func Strndup(s *Char, n uintptr) *Char
//go:linkname Strtok C.strtok
func Strtok(s, delim *Char) *Char
//go:linkname Strerror C.strerror
func Strerror(errnum Int) *Char
//go:linkname Sprintf C.sprintf
func Sprintf(s *Char, format *Char, __llgo_va_list ...any) Int
//go:linkname Snprintf C.snprintf
func Snprintf(s *Char, n uintptr, format *Char, __llgo_va_list ...any) Int
//go:linkname Vsnprintf C.vsnprintf
func Vsnprintf(s *Char, n uintptr, format *Char, ap Pointer) Int
// -----------------------------------------------------------------------------
// GoString converts a C string to a Go string.
// TODO(xsw): any => int
//
//go:linkname GoString llgo.string
func GoString(cstr *Char, __llgo_va_list /* n */ ...any) string
//go:linkname GoStringData llgo.stringData
func GoStringData(string) *Char
//go:linkname GoDeferData llgo.deferData
func GoDeferData() Pointer
// -----------------------------------------------------------------------------
//go:linkname Remove C.remove
func Remove(path *Char) Int
//go:linkname AllocaSigjmpBuf llgo.sigjmpbuf
func AllocaSigjmpBuf() Pointer
//go:linkname Sigsetjmp llgo.sigsetjmp
func Sigsetjmp(jb Pointer, savemask Int) Int
//go:linkname Siglongjmp llgo.siglongjmp
func Siglongjmp(jb Pointer, retval Int)
//go:linkname Unreachable llgo.unreachable
func Unreachable()
// -----------------------------------------------------------------------------
@@ -94,14 +196,10 @@ func Qsort(base Pointer, count, elem uintptr, compar func(a, b Pointer) Int)
// -----------------------------------------------------------------------------
//go:linkname Stdin __stdinp
var Stdin FilePtr
//go:linkname Atoi C.atoi
func Atoi(s *Char) Int
//go:linkname Stdout __stdoutp
var Stdout FilePtr
//go:linkname Stderr __stderrp
var Stderr FilePtr
// -----------------------------------------------------------------------------
//go:linkname Printf C.printf
func Printf(format *Char, __llgo_va_list ...any) Int
@@ -115,10 +213,25 @@ func Fwrite(data Pointer, size, count uintptr, fp FilePtr) uintptr
//go:linkname Fputc C.fputc
func Fputc(c Int, fp FilePtr) Int
//go:linkname Fputs C.fputs
func Fputs(s *Char, fp FilePtr) Int
//go:linkname Fflush C.fflush
func Fflush(fp FilePtr) Int
//go:linkname Fopen C.fopen
func Fopen(c *Char, mod *Char) FilePtr
//go:linkname Fclose C.fclose
func Fclose(fp FilePtr) Int
//go:linkname Perror C.perror
func Perror(s *Char)
// -----------------------------------------------------------------------------
//go:linkname Time C.time
func Time(*int32) int32
//go:linkname Usleep C.usleep
func Usleep(useconds Uint) Int
// -----------------------------------------------------------------------------

31
c/c_default.go Normal file
View File

@@ -0,0 +1,31 @@
//go:build !linux
// +build !linux
/*
* 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 c
import _ "unsafe"
//go:linkname Stdin __stdinp
var Stdin FilePtr
//go:linkname Stdout __stdoutp
var Stdout FilePtr
//go:linkname Stderr __stderrp
var Stderr FilePtr

31
c/c_linux.go Normal file
View File

@@ -0,0 +1,31 @@
//go:build linux
// +build linux
/*
* 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 c
import _ "unsafe"
//go:linkname Stdin stdin
var Stdin FilePtr
//go:linkname Stdout stdout
var Stdout FilePtr
//go:linkname Stderr stderr
var Stderr FilePtr

View File

@@ -1,22 +1,18 @@
LLGo wrapper of DaveGamble/cJSON
=====
[![Build Status](https://github.com/goplus/cjson/actions/workflows/go.yml/badge.svg)](https://github.com/goplus/cjson/actions/workflows/go.yml)
[![GitHub release](https://img.shields.io/github/v/tag/goplus/cjson.svg?label=release)](https://github.com/goplus/cjson/releases)
[![GoDoc](https://pkg.go.dev/badge/github.com/goplus/cjson.svg)](https://pkg.go.dev/github.com/goplus/cjson)
[![Compiler](https://img.shields.io/badge/compiler-llgo-darkgreen.svg)](https://github.com/goplus/llgo)
[![Language](https://img.shields.io/badge/language-Go+-blue.svg)](https://github.com/goplus/gop)
## How to install
### on macOS (Homebrew)
```sh
git clone https://github.com/goplus/cjson.git
cd cjson
git submodule init
git submodule update
mkdir build.dir
cd build.dir
cmake ../cJSON
sudo make install
brew install cjson
```
### on Linux (Debian/Ubuntu)
```sh
apt-get install -y libcjson-dev
```
## Demos

View File

@@ -22,6 +22,22 @@ func main() {
mod.SetItem(c.Str("items"), syms)
c.Printf(c.Str("%s\n"), mod.CStr())
cstr := mod.CStr()
str := c.GoString(cstr)
c.Printf(c.Str("%s\n"), cstr)
cjson.FreeCStr(cstr)
mod.Delete()
cjsonLoad(str)
}
func cjsonLoad(str string) {
mod := cjson.ParseString(str)
cstr := mod.Print()
c.Printf(c.Str("%s\n"), cstr)
cjson.FreeCStr(cstr)
mod.Delete()
}

View File

@@ -17,13 +17,13 @@
package cjson
import (
_ "unsafe"
"unsafe"
"github.com/goplus/llgo/c"
)
const (
LLGoPackage = "link: cjson"
LLGoPackage = "link: $(pkg-config --libs libcjson); -lcjson"
)
// llgo:type C
@@ -31,6 +31,20 @@ type JSON struct {
Unused [0]byte
}
//go:linkname Parse C.cJSON_Parse
func Parse(value *c.Char) *JSON
//go:linkname ParseWithLength C.cJSON_ParseWithLength
func ParseWithLength(value *byte, valueLength uintptr) *JSON
func ParseBytes(value []byte) *JSON {
return ParseWithLength(unsafe.SliceData(value), uintptr(len(value)))
}
func ParseString(value string) *JSON {
return ParseWithLength(unsafe.StringData(value), uintptr(len(value)))
}
//go:linkname Null C.cJSON_CreateNull
func Null() *JSON
@@ -119,3 +133,21 @@ func (o *JSON) PrintUnformatted() *c.Char { return nil }
//
// llgo:link (*JSON).PrintBuffered C.cJSON_PrintBuffered
func (o *JSON) PrintBuffered(prebuffer c.Int, fmt c.Int) *c.Char { return nil }
// llgo:link (*JSON).GetObjectItemCaseSensitive C.cJSON_GetObjectItemCaseSensitive
func (o *JSON) GetObjectItemCaseSensitive(key *c.Char) *JSON { return nil }
// llgo:link (*JSON).GetArraySize C.cJSON_GetArraySize
func (o *JSON) GetArraySize() c.Int { return 0 }
// llgo:link (*JSON).GetArrayItem C.cJSON_GetArrayItem
func (o *JSON) GetArrayItem(index c.Int) *JSON { return nil }
// llgo:link (*JSON).GetStringValue C.cJSON_GetStringValue
func (o *JSON) GetStringValue() *c.Char { return nil }
//go:linkname Free C.cJSON_free
func Free(ptr unsafe.Pointer)
//go:linkname FreeCStr C.cJSON_free
func FreeCStr(*c.Char)

Binary file not shown.

View File

@@ -0,0 +1,163 @@
package main
import (
"fmt"
"os"
"unsafe"
"github.com/goplus/llgo/c"
"github.com/goplus/llgo/c/clang"
)
type Context struct {
namespaceName string
className string
unit *clang.TranslationUnit
}
func newContext() *Context {
return &Context{}
}
func (c *Context) setNamespaceName(name string) {
c.namespaceName = name
}
func (c *Context) setClassName(name string) {
c.className = name
}
func (c *Context) setUnit(unit *clang.TranslationUnit) {
c.unit = unit
}
var context = newContext()
func printCursorLocation(cursor clang.Cursor) {
loc := cursor.Location()
var file clang.File
var line, column c.Uint
loc.SpellingLocation(&file, &line, &column, nil)
filename := file.FileName()
defer filename.Dispose()
c.Printf(c.Str("%s:%d:%d\n"), filename.CStr(), line, column)
}
func printMarcoInfo(cursor clang.Cursor) {
printCursorLocation(cursor)
name := cursor.String()
c.Printf(c.Str("Marco Name: %s\n"), name.CStr())
ran := cursor.Extent()
var numTokens c.Uint
var tokens *clang.Token
context.unit.Tokenize(ran, &tokens, &numTokens)
c.Printf(c.Str("Content: "))
tokensSlice := unsafe.Slice(tokens, int(numTokens))
for _, tok := range tokensSlice {
tokStr := context.unit.Token(tok)
c.Printf(c.Str("%s "), tokStr.CStr())
tokStr.Dispose()
}
c.Printf(c.Str("\n"))
println("--------------------------------")
}
func printFuncInfo(cursor clang.Cursor) {
printCursorLocation(cursor)
cursorStr := cursor.String()
symbol := cursor.Mangling()
defer symbol.Dispose()
defer cursorStr.Dispose()
if context.namespaceName != "" && context.className != "" {
fmt.Printf("%s:%s:", context.namespaceName, context.className)
} else if context.namespaceName != "" {
fmt.Printf("%s:", context.namespaceName)
}
c.Printf(c.Str("%s\n"), cursorStr.CStr())
if cursor.Kind == clang.CursorCXXMethod || cursor.Kind == clang.CursorFunctionDecl {
c.Printf(c.Str("symbol:%s\n"), symbol.CStr())
typeStr := cursor.ResultType().String()
defer typeStr.Dispose()
c.Printf(c.Str("Return Type: %s\n"), typeStr.CStr())
c.Printf(c.Str("Parameters(%d): ( "), cursor.NumArguments())
for i := 0; i < int(cursor.NumArguments()); i++ {
argCurSor := cursor.Argument(c.Uint(i))
argType := argCurSor.Type().String()
argName := argCurSor.String()
c.Printf(c.Str("%s %s"), argType.CStr(), argName.CStr())
if i < int(cursor.NumArguments())-1 {
c.Printf(c.Str(", "))
}
argType.Dispose()
argName.Dispose()
}
c.Printf(c.Str(" )\n"))
println("--------------------------------")
}
}
func visit(cursor, parent clang.Cursor, clientData c.Pointer) clang.ChildVisitResult {
if cursor.Kind == clang.CursorMacroDefinition {
printMarcoInfo(cursor)
} else if cursor.Kind == clang.CursorNamespace {
nameStr := cursor.String()
context.setNamespaceName(c.GoString(nameStr.CStr()))
clang.VisitChildren(cursor, visit, nil)
context.setNamespaceName("")
} else if cursor.Kind == clang.CursorClassDecl {
nameStr := cursor.String()
context.setClassName(c.GoString(nameStr.CStr()))
clang.VisitChildren(cursor, visit, nil)
context.setClassName("")
} else if cursor.Kind == clang.CursorCXXMethod || cursor.Kind == clang.CursorFunctionDecl {
printFuncInfo(cursor)
}
return clang.ChildVisit_Continue
}
func parse(filename *c.Char) {
index := clang.CreateIndex(0, 0)
args := make([]*c.Char, 3)
args[0] = c.Str("-x")
args[1] = c.Str("c++")
args[2] = c.Str("-std=c++11")
unit := index.ParseTranslationUnit(
filename,
unsafe.SliceData(args), 3,
nil, 0,
clang.DetailedPreprocessingRecord,
)
if unit == nil {
println("Unable to parse translation unit. Quitting.")
c.Exit(1)
}
context.setUnit(unit)
cursor := unit.Cursor()
clang.VisitChildren(cursor, visit, nil)
unit.Dispose()
index.Dispose()
}
func main() {
if c.Argc != 2 {
fmt.Fprintln(os.Stderr, "Usage: <C++ header file>\n")
return
} else {
sourceFile := *c.Advance(c.Argv, 1)
parse(sourceFile)
}
}

82
c/clang/_wrap/cursor.cpp Normal file
View File

@@ -0,0 +1,82 @@
#include <clang-c/Index.h>
#include <stdio.h>
typedef enum CXChildVisitResult (*wrap_CXCursorVisitor)(CXCursor *cursor, CXCursor *parent, CXClientData client_data);
typedef struct {
CXClientData data;
wrap_CXCursorVisitor visitor;
} wrap_data;
CXChildVisitResult wrap_visitor(CXCursor cursor, CXCursor parent, CXClientData data) {
wrap_data *d = (wrap_data *)(data);
return d->visitor(&cursor, &parent, d->data);
}
extern "C" {
CXString wrap_clang_getCursorSpelling(CXCursor *cur) { return clang_getCursorSpelling(*cur); }
CXString wrap_clang_Cursor_getMangling(CXCursor *cur) { return clang_Cursor_getMangling(*cur); }
int wrap_clang_Cursor_getNumArguments(CXCursor *cur) { return clang_Cursor_getNumArguments(*cur); }
void wrap_clang_Cursor_getArgument(CXCursor *C, unsigned i, CXCursor *argCur) {
*argCur = clang_Cursor_getArgument(*C, i);
}
void wrap_clang_getTranslationUnitCursor(CXTranslationUnit uint, CXCursor *cur) {
*cur = clang_getTranslationUnitCursor(uint);
}
void wrap_clang_getCursorType(CXCursor *cur, CXType *typ) { *typ = clang_getCursorType(*cur); }
void wrap_clang_getCursorResultType(CXCursor *cur, CXType *typ) { *typ = clang_getCursorResultType(*cur); }
void wrap_clang_getResultType(CXType *typ, CXType *resultTyp) { *resultTyp = clang_getResultType(*typ); }
int wrap_clang_getNumArgTypes(CXType *typ) { return clang_getNumArgTypes(*typ); }
void wrap_clang_getArgType(CXType *typ, unsigned i, CXType *argTyp) { *argTyp = clang_getArgType(*typ, i); }
long long wrap_clang_getEnumConstantDeclValue(CXCursor *cur) { return clang_getEnumConstantDeclValue(*cur); }
void wrap_clang_getPointeeType(CXType *pointerTyp, CXType *pointeeTyp) {
*pointeeTyp = clang_getPointeeType(*pointerTyp);
}
void wrap_clang_getArrayElementType(CXType *arrayTyp, CXType *elemTyp) {
*elemTyp = clang_getArrayElementType(*arrayTyp);
}
void wrap_clang_getCanonicalType(CXType *typ, CXType *canonicalType) { *canonicalType = clang_getCanonicalType(*typ); }
CXString wrap_clang_getTypeSpelling(CXType *typ) { return clang_getTypeSpelling(*typ); }
CXString wrap_clang_getTokenSpelling(CXTranslationUnit unit, CXToken *token) {
return clang_getTokenSpelling(unit, *token);
}
void wrap_clang_getCursorLocation(CXCursor *cur, CXSourceLocation *loc) { *loc = clang_getCursorLocation(*cur); }
void wrap_clang_getSpellingLocation(CXSourceLocation *loc, CXFile *file, unsigned *line, unsigned *column,
unsigned *offset) {
clang_getSpellingLocation(*loc, file, line, column, offset);
}
enum CX_CXXAccessSpecifier wrap_clang_getCXXAccessSpecifier(CXCursor *cursor) {
return clang_getCXXAccessSpecifier(*cursor);
}
void wrap_clang_getCursorExtent(CXCursor *cur, CXSourceRange *range) { *range = clang_getCursorExtent(*cur); }
void wrap_clang_tokenize(CXTranslationUnit unit, CXSourceRange *Range, CXToken **Tokens, unsigned *NumTokens) {
clang_tokenize(unit, *Range, Tokens, NumTokens);
}
unsigned wrap_clang_visitChildren(CXCursor *parent, wrap_CXCursorVisitor visitor, CXClientData client_data) {
wrap_data data = {client_data, visitor};
return clang_visitChildren(*parent, wrap_visitor, CXClientData(&data));
}
} // extern "C"

Some files were not shown because too many files have changed in this diff Show More