Hi All, I've generated a new release of nyacc. Due to major change in the ffi-helper I'm calling this nyacc-2.00.0.
Thanks to @lechner on #guile for dicussions of pointers and functions. At the time of this discussion I was also working on extending gtk2+ in Guile to make a tkinter like module. I was running into issues with function pointers also. The result is that I went back and reworked the handling of pointers and especially function pointers. One can now pass scheme procedures to functions expecting function pointers, and one can set function pointers in structures to procedures. In addition, I reworked a lot of the processing in the ffi-helper translator. Previously, special cases were needed to handle several declarations from miscellaneous libraries. Those special cases are now gone. Folding in the another big change, I've been working on a C data handling module that provides an interface to C data structures. This is much the same function as (bytestructures guile) module, but it is more tuned to the ffi-helper and (for me) it can work on foreign machine architectures. NYACC, for Not Yet Another Compiler Compiler, is set of guile modules for generating parsers and lexical analyzers. It also provides sample parsers and pretty-printers using SXML trees as an intermediate representation. It provides a decent C parser and a `FFI Helper' tool to help create Guile Scheme bindings for C-based libraries. It provides (partially implemented) compilers based on above mentioned parsers to allow execution with Guile as extension languages. NEWS * added `cdata' module for handling type and data from C libraries + see doc/cdata.info + capable of dealing with foreign architectures * major ffi helper update: + includes two backends: - cdata: depends only on system/foreign/cdata module - bytestructures: depends on ffi-help-rt and bytestructures modules + by default, the ffi helper now uses the cdata backend - scheme bytestructures is not required - does not use ffi-help-rt - generates ~20% smaller .scm files - generates ~40% smaller .go files + ffi-help.scm(cnvt-udecl): complete re-write, using udecl->mdecl. This no longer has special cases for some include files. + handling of functions and function types is much cleaner and works better (at least for the author, so far) * updated system/ffi-help-rt (which is not used by cdata) + funtion pointers reworked + now depends on guile (system foreign-library) + definition of fh-cast changed to be a real cast + add fh-varg for use with procedures based on C va-args: (printf "ans=%d" (fh-varg ffi:int 3)) * scripts/compile-ffi: now accepts argument for backend: $ guild compile-ffi -b bytestructures mymodule.ffi $ FFI_HELP_BACKEND=bytestructures guild compile-ffi mymodule.ffi * scripts/compile-ffi: now computes dependencies correctly (I think) * moved some nx-language implementation code into examples/languages/ * Work to go: + Update READMEs and other documentation. + Complete ccode->sexp function to convert strings of C code to scheme expressions for small ffi interface code NYACC maturity is production/stable level. NYACC is free software; the full source distribution is available through * the tarball repository: https://download.savannah.gnu.org/releases/nyacc/ * the git repository: git://git.savannah.nongnu.org/nyacc.git home page, project page and user's guides: * https://www.nongnu.org/nyacc * https://savannah.nongnu.org/projects/nyacc * https://www.nongnu.org/nyacc/nyacc-ug.html * https://www.nongnu.org/nyacc/ffi-help.html Report bugs: * https://savannah.nongnu.org/bugs/?group=nyacc Get support: * https://savannah.nongnu.org/support/?group=nyacc Copyright (C) 2017-2024 Matthew Wette Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without any warranty. Matt