c variadic calls
This commit is contained in:
@@ -45,6 +45,18 @@ pointers to opaque records. They never add linker inputs; implementations must
|
||||
still be supplied explicitly with the C-prefixed linking options. Set
|
||||
`BROLANG_LIBCLANG_PATH` when libclang is not installed in a standard location.
|
||||
|
||||
Bodyless manual and imported C functions may be variadic:
|
||||
|
||||
```bro
|
||||
log_values :: c_func(tag c_int, ...) c_int
|
||||
```
|
||||
|
||||
Arguments after `...` accept concrete scalars, pointers, and nullable pointers.
|
||||
Narrow integers are promoted to the target C `int` or `unsigned int`, and
|
||||
`f32`/`c_float` are promoted to `c_double`. Arrays, slices, structs, and other
|
||||
compound values must be converted to an explicit C-compatible representation
|
||||
before the call.
|
||||
|
||||
Compilation phases are isolated under `compiler/`:
|
||||
|
||||
```text
|
||||
@@ -83,6 +95,7 @@ Current prototype features:
|
||||
- Qualified imported globals and functions with package-aware symbol mangling
|
||||
- Demand-monomorphized Brolang and C-ABI functions
|
||||
- Bodyless concrete C function declarations with exact external symbol names
|
||||
- Bodyless manual and imported C variadic declarations with default argument promotions
|
||||
- Ordered linking of additional C sources, objects, archives, and libraries
|
||||
- Checked signed addition and unary negation
|
||||
- Static, eager runtime, and deferred problematic globals
|
||||
|
||||
Reference in New Issue
Block a user