Releases: c3lang/c3c
Releases Β· c3lang/c3c
latest
- Use `@pool_init()` to set up a temp pool on a thread. Only the mainβ¦
Version 0.6.8
Changes / improvements
- Increase precedence of
(Foo) { 1, 2 }
- Add
--enable-new-generics
to enableFoo{int}
generic syntax. {| |}
expression blocks deprecated.- c3c
--test-leak-report
flag for displaying full memory lead report if any - Output into /.build/obj/ by default.
- Output llvm/asm into llvm/ and asm/ by default.
- Add flag
--suppress-run
. For commands which may run executable after building, skip the run step. #1931 - Add
--build-env
for build environment information. - Deprecation of
@operator(construct)
.
Fixes
- Bug appearing when
??
was combined with boolean in some cases. - Test runner --test-disable-sort didn't work, c3c was expecting --test-nosort
- Test runner with tracking allocator assertion at failed test #1963
- Test runner with tracking allocator didn't properly handle teardown_fn
- Correctly give an error if a character literal contains a line break.
- Implicitly unwrapped optional value in defer incorrectly copied #1982.
- Crash when trying to define a method macro that isn't
@construct
but has no arguments. - Regression,
.gitkeep
files were generated incorrectly. - Aliases are now correctly handled as if they were variables/functions in regards to namespacing and accept
@builtin
. - Correctly handle in/out when interacting with inout.
- Don't delete .o files not produced by the compiler.
- Fix optional jumps in expression lists, #1942.
- Several fixes for .o files and -o output, improving handling and naming.
- Fix bug casting bool to int to other int #1995.
@if
declarations were missing from -P output #1973.- Check exe and lib output so -o works with directories.
- Swizzling an inline vector in a struct would cause a crash.
- Fixed error and poor error message when using an invalid target name.
Version 0.6.7
C3 version 0.6.7
Changes / improvements
- Contracts @require/@Ensure are no longer treated as conditionals, but must be explicitly bool.
- Add
win-debug
setting to be able to pick dwarf for output #1855. - Error on switch case fallthough if there is more than one newline #1849.
- Added flags to
c3c project view
to filter displayed properties - Compile time array assignment #1806.
- Allow
+++
to work on all types of arrays. - Allow
(int[*]) { 1, 2 }
cast style initialization. - Experimental change from
[*]
to[?]
- Warn on if-catch with just a
default
case. - Compile time array inc/dec.
- Improve error message when using ',' in struct declarations. #1920
- Compile time array assign ops, e.g.
$c[1] += 3
#1890. - Add
inline
to enums #1819. - Cleaner error message when missing comma in struct initializer #1941.
- Distinct inline void causes unexpected error if used in slice #1946.
- Allow
fn int test() => @pool() { return 1; }
short function syntax usage #1906. - Test runner will also check for leaks.
- Improve inference on
??
#1943. - Detect unaligned loads #1951.
Fixes
- Fix issue requiring prefix on a generic interface declaration.
- Fix bug in SHA1 for longer blocks #1854.
- Fix lack of location for reporting lambdas with missing return statement #1857.
- Compiler allows a generic module to be declared with different parameters #1856.
- Fix issue with
@const
where the statement$foo = 1;
was not considered constant. - Const strings and bytes were not properly converted to compile time bools.
- Concatenating a const empty slice with another array caused a null pointer access.
- Fix
linux-crt
andlinux-crtbegin
not getting recognized as a project paramater - Fix dues to crash when converting a const vector to another vector #1864.
- Filter
$exec
output from\r
, which otherwise would cause a compiler assert #1867. - Fixes to `"exec" use, including issue when compiling with MinGW.
- Correctly check jump table size and be generous when compiling it #1877.
- Fix bug where .min/.max would fail on a distinct int #1888.
- Fix issue where compile time declarations in expression list would not be handled properly.
- Issue where trailing body argument was allowed without type even though the definition specified it #1879.
- Fix issues with @jump on empty
default
or onlydefault
#1893 #1894 - Fixes miscompilation of nested
@jump
#1896. - Fixed STB_WEAK errors when using consts in macros in the stdlib #1871.
- Missing error when placing a single statement for-body on a new row #1892.
- Fix bug where in dead code, only the first statement would be turned into a nop.
- Remove unused $inline argument to mem::copy.
- Defer is broken when placed before a $foreach #1912.
- Usage of @NoReturn macro is type-checked as if it returns #1913.
- Bug when indexing into a constant array at compile time.
- Fixing various issues around shifts, like
z <<= { 1, 2 }
. return (any)&foo
would not be reported as an escaping variable iffoo
was a pointer or slice.- Incorrect error message when providing too many associated values for enum #1934.
- Allow function types to have a calling convention. #1938
- Issue with defer copying when triggered by break or continue #1936.
- Assert when using optional as init or inc part in a for loop #1942.
- Fix bigint hex parsing #1945.
bigint::from_int(0)
throws assertion #1944.write
of qoi would leak memory.- Issue when having an empty
Path
or just "." set_env
would leak memory.- Fix issue where aligned bitstructs did not store/load with the given alignment.
- Fix issue in GrowableBitSet with sanitizers.
- Fix issue in List with sanitizers.
- Circumvent Aarch64 miscompilations of atomics.
- Fixes to ByteBuffer allocation/free.
- Fix issue where compiling both for asm and object file would corrupt the obj file output.
- Fix
poll
andPOLL_FOREVER
. - Missing end padding when including a packed struct #1966.
- Issue when scalar expanding a boolean from a conditional to a bool vector #1954.
- Fix issue when parsing bitstructs, preventing them from implementing interfaces.
- Regression
String! a; char* b = a.ptr;
would incorrectly be allowed. - Fix issue where target was ignored for projects.
- Fix issue when dereferencing a constant string.
- Fix problem where a line break in a literal was allowed.
Stdlib changes
- Added '%h' and '%H' for printing out binary data in hexadecimal using the formatter.
- Added weakly linked
__powidf2
- Added channels for threads.
- New
std::core::test
module for unit testing machinery. - New unit test default runner.
- Added weakly linked
fmodf
. - Add
@select
to perform the equivalent ofa ? x : y
at compile time. HashMap
is nowPrintable
.- Add
allocator::wrap
to create an arena allocator on the stack from bytes.
Version 0.6.6
0.6.6 Change list
Changes / improvements
- Split help into normal and "full" help, #1703
- Removed 'headers' command line option.
- Add
enum.from_ordinal
andfault.from_ordinal
- Deprecate cast-style conversion from integer <-> enum.
- Make deprecation an error in test mode.
- Add
--win-vs-dirs
to override VS detection dirs. - Add
"name"
project property to override the name of the resulting binary. #1719 - Improved
add-project
to take arguments. - Improve error reporting when using type names as the function argument #1750.
- Improve ordering of method registration to support adding methods to generic modules with method constraints #1746
- Support experimental
@operator(construct)
operator overload. - Allow using 'var' to declare lambdas in functions.
- Add 'validation' setting and make dead code a warning.
- Allow compile time
$foreach
iteration over constant Strings and bytes. - Improved error message when accessing
@private
from other modules #1769. - Include
@name
when searching for possible matches toname
in the error message. #1779 - Improve
@param
parse errors #1777 - Improved
#foo
resolution inside of the compiler. - Deprecated '&' macro arguments.
- Deprecate `fn void! main() type main functions.
- Deprecate old
void!
@benchmark and @test functions. - Allow test runners to take String[] arguments.
- Added
--lsp
output. - Improve the error message when running out of memory.
- Allowed passing arguments to @test / @benchmark runners via
c3c test[benchmark] -- -o --opt1 <arg1>
- Handle bytes and string literals the same way in terms of zero termination.
- Function comments are stored and displayed with -P.
- Prevent
#hash
arguments from taking code that modifies ct variables. #1794 - Make stringify to recursively enter
#hash
expressions #1834.
Fixes
- Fix case trying to initialize a
char[*]*
from a String. - Fix Map & HashMap
put_all_for_create
not copying all elements, causinginit_from_map
to create incomplete copy. - Fix bug when a macro calling an extern function was called in another module also declaring and calling the same function. #1690
static-lib
anddynamic-lib
options from the command line now produces headers.- Fix bug outputting exported functions without predefined extname.
- Fix problem where crt1 was linked for dynamic libraries on Linux and BSD. #1710
- Fix CRT detection on Arch Linux.
- Fix lexer allowing a trailing underscore (_) with hex and binary literals.
- Fix
--list-operators
CLI command printing underscore (_) and hash (#). - Fix bug in temp allocator when temp memory is exhausted and allocation needs overaligned mem. #1715
- Incorrectly handles distinct enums and pointers with '+=' and '-=' #1717.
- Prevent DString from being initialized with "".
- Fix bug in OnStackAllocator when freeing overallocated data. #1720
- Use
weak_odr
rather thanweak
on Windows which seems to prevent issues such as #1704. - Use
weak
on dyn-symbols on Linux. - Fix crash on project.json not having an empty set of targets.
- Miscompile when indexing an array with small unsigned types for enums.
- Change CBool to be 1 byte.
any_to_int
checks value to be int and no longer works with enum.- Add check in formatter printing "%c".
- Fix bug where
!!
and!
was not recognized to jump out of the current scope. - Fix bug when including compile time parameters in trailing body more than once.
- Fix issue with compiling a constant struct containing a string array in a local context.
- Fix error where panic would not properly stop the program when stacktrace couldn't be printed #1751.
- Macros with default arguments to
&
,#
and type parameters didn't work as expected. #1754. net::poll()
with negative timeout behaved incorrectly.- Return type inference bugs with macros #1757
$defined
in a global scope should accept testing normal macros.- Assert on add to uninitialized ct variable #1765.
- Dynamic function lookup fails after changing type without dummy anycast #1761
- $vasplat was allowed inside of a function when passed as an argument to a function.
- Prohibit raw vaargs in regular functions with a function body.
- Assert on certain slice to slice casts. #1768.
- Fix vector float -> bool conversion.
- Fix
+a = 1
erronously being accepted. - Fix not freeing a zero length String
- Macros with trailing bodys aren't allowed as the single statement after a while loop with no body #1772.
- Deref subscripts as needed for macro ref method arguments. #1789
- Change ordering to simplify adding methods to type in conditional modules.
#foo
style arguments were not type checked when given a type. #1790- Bug when using +++ on value build a slice or array: the rhs cast was not done.
- Fix bug preventing compile time slices from being iterated over with
$foreach
. - Fix bug with defer assignment in macro #1807.
- Fix regression with swizzle references for vectors #1810.
- Assert when partially initializing a constant struct containing a slice #1812.
- Assert concatenating constant slices #1805.
- Do not link "ld" on Linux with no libc.
- Fix bug when multiple
$else
clauses followed an$if
#1824. - Report the correct type as not having a method when access fails #1828.
- Prevent temp arena scribbling from causing an asan warning. #1825
- Fix bug where
&i[0] = null
was not detected to be an error #1833.
Stdlib changes
- Increase BitWriter.write_bits limit up to 32 bits.
- Updates to
Slice2d
, likeget_xy
and others. - Added
iter()
value_iter()
andkey_iter()
to HashMap. - Add "tokenizer" to String.
- Add "skip_empty" to split methods. Add split_to_buffer method.
- Add
@enum_from_value
. - Updated hash function.
- Added URL parser.
- Added convenience functions to
Maybe
. - Added
String.trim_left()
and.trim_right()
. - Deprecation of several
&
macros. - Format functions for timedates.
- Add
@assert_leak()
to assert on memory leaks in the scope. - Added
double.set_high_word()
,double.set_low_word()
, andfloat.set_word()
.
Version 0.6.5
0.6.5 Change list
Changes / improvements
- Allow splat in initializers.
- Init command will now add
test-sources
toproject.json
#1520 a++
may be discarded ifa
is optional and ++/-- works for overloaded operators.- Improve support for Windows cross compilation on targets with case sensitive file systems.
- Add "sources" support to library
manifest.json
, defaults to root folder if unspecified. - Add char_at method in DString and operators [], len, []= and &[].
- Add
-q
option, make--run-once
implicitly-q
. - Add
-v
,-vv
and-vvv
options for increasing verbosity, replacing debug-log and debug-stats options.
Fixes
- Fix bug where
a > 0 ? f() : g()
could cause a compiler crash if both returnedvoid!
. @builtin
was not respected for generic modules #1617.- Fix issue writing a single byte in the WriteBuffer
- A distinct inline pointer type can now participate in pointer arithmetics.
- Support &a[0] returning the distinct type when applying it to a distinct of a pointer.
- Fix error when calling
HashMap.remove
on uninitializedHashMap
. - Fix issue with resolved try-unwrap in defer.
- Fix issue with overloaded subscript and ++/-- and assign ops (e.g.
*=
) - Fix issue with properties in different targets not being respected #1633.
- Indexing an Optional slice would crash in codegen #1636.
- SimpleHeapAllocator bug when splitting blocks allowed memory overrun.
- Not possible to alias or take reference for extension methods on non-user defined types. #1637
- Prevent methods from using names of properties or fields. #1638
- b64 / hex data strings can now be used with ` as well.
- Contracts on generic modules would evaluate too late, sometimes not catching the error until it already occurred elsewhere.
- Fix bug preventing optionals from being used in ranges or as indices.
- Crash compiling for arm64 when returning 16 byte and smaller structs by value not a power of 2 #1649.
- Enforce single module compilation for static libraries to make constructors run properly.
- Crash when using --no-obj without compile-only. #1653
- Do not produce expression locations for windows.
- Issue where multiple methods were accepted for the same type.
- Issue where a method was linked to a type alias instead of the underlying type.
- Fix Fnv1a encoding.
- Fix issue with accessing arrays in access-overloaded types, e.g.
list[1][2]
#1665. - Cast removing arbitrary array indices and converting them to pointers should always be fine #1664
- Incorrect "no-libc" definition of
cos
, making it unavailable for wasm. - Fix issue with the adjoint and inverse calculations for
Matrix2x2
. - It was possible to create 0 length arrays using byte literals. #1678
- Crash when a constant null typeid is checked for properties. #1679
Stdlib changes
- Add
io::MultiReader
,io::MultiWriter
, andio::TeeReader
structs. - Updated Base32 API.
- Add
file::save
. - Add
memcpy
/memset
/memcmp
to nolibc. - Add
sort::quickselect
to find the k-th smallest element in an unordered list. - Add
sort::is_sorted
to determine if a list is sorted.
Version 0.6.4
0.6.4 Change list
Changes / improvements
- Const vector -> const slice implicit conversion.
- Slicing arrays, slices and bytes at compile time #1466.
- Better error for
int a[4] = ...
. #1518 - Better error for
int Foo(int a)
declarations #1516 - Improve error message in the case of
MyInterface x = foo;
#1522 - Deprecate
@adhoc
, allow non-nested ad hoc generic types. - Constant bytes <=> char[] conversion should work #1514.
- Infer now works across ternary.
- Interfaces now support .ptr and .type directly without casting to
any
. - Switch to
<* *>
docs. - Improve error messages on expressions like
var $type = int;
#1553. - Disallow casting a
void*
toany
or an interface, unless it isnull
. - Defer resolution of declarations when looked up in
def
aliased #1559. - Adding constants to the Json AST #1540
- Adding info to the globals inside Json AST #1541
- Null-check function pointer invocation #1573.
string::new_struct_to_str
andio::struct_to_format
to dump struct data.io::print
will now print structs.- Improve error message when using
void
aliases as variable storage type. - Add a target type: "prepare" which doesn't compile anything (but may run
exec
)
Fixes
Unsupported int[*] $x = { 1, 2, 3, 4 }
#1489.- Unexpected compile error using a typed constant with
copysign
#1517 - Incorrect subscript resolution #1519.
- Segfault with passing a program with
-
using stdin. - Using no module with
-
would reject the program. - Unintended deref of pointers with methods caused regression with hash function.
- Fix broken sincos function.
- Bug when a continue is copied in a defer.
- Compiler error when any/interface initialized using {} #1533.
- Bug when defers and $if were combined in a macro, which would cause miscompilation.
- Fixes to the CSV reader.
- Crash returning struct or vector from function using ternary expression #1537.
- Improved error message on invalid subscript index type #1535.
- Improved error message when declaring a variable
void!
. - Cannot use void as a generic parameter #1546
- Interfaces not correctly copied with generics #1545
- Memory leak in keys.new_list fixed.
- Standard library is now correctly weakly linked, fixing the use of C3 .so together with executable. #1549, #1107.
- Wrong error message for interface methods with body #1536.
- Empty expression block would crash compiler with debug on #1554.
- Improve infer conversions on constants, e.g.
ZString a = foo ? "a" : "b";
#1561 - Show error when declarations do not start with
fn
in interfaces. #1565 if (try foo)
was handled incorrectly inside a defer.&self
argument not implicitly null checked. #1556.(uptr)&((Foo*)null).a
incorrectly inserts a null check. #1544- Incorrect error message when
$eval
is provided an invalid string. #1570 HashMap.copy_keys
did not properly copy keys which needed to be allocated #1569- Named vector component access would not fold at compile time. #1574
$define
would occasionally not properly evaluate declarations it encountered.- Fixes with error handling recursive
@tag
#1583. - Sometimes generating introspection info would not be in the global scope causing a crash #1586.
- @tag on macros cannot be retrieved with tagof #1582
- Taking the $typeof of a wildcard optional returns
void!
.
Stdlib changes
- Remove unintended print of
char[]
as String - Add read/write to stream with big endian ints.
- Move accidently hidden "wrap_bytes".
- Added CBool #1530.
- Added encoding/base32 module.
Version 0.6.3
Changes / improvements
- Introduce
arg: x
named arguments instead of.arg = x
, deprecate old style. - Support splat for varargs #1352.
- Allow
var
in lambdas in macros. - Support
int[*] { 1, 2, 3 }
expressions. - Support inline struct designated init as if inline was anonymous.
- Introduce the
.paramsof
property. - Support environment variable 'C3C_LIB' to find the standard library.
- Support environment variable 'C3C_CC' to find the default C compiler.
- Support casting bitstructs to bool.
- Allow user-defined attributes to have typed parameters.
- Add
.gitkeep
files to project subfolders. - Add
env::COMPILER_BUILD_HASH
andenv::COMPILER_BUILD_DATE
- Support linking .o files in compilation command. #1417
- Slicing constant strings at compile time works.
- Add
project fetch
subcommand to fetch missing project dependencies (general and target specific) - Ability of
vendor-fetch
to download the dependencies in the first specified pathdependencies-search-path
- Ability of
vendor-fetch
to register the fetched dependencies in the project file. - Allow the "self" parameter to be $/# for macro methods.
- Support compile time slicing of untyped lists.
- Allow specifying an import module using
@wasm
#1305. - Deprecated inline generic types outside of struct definitions and macros unless marked
@adhoc
. - Improved method detection in earlier stages of checking.
- Allow
@norecurse
attribute for non-recursive imports #1480. - wasm32 / wasm64 targets are use-libc=no by default.
- Add hash/sha256 module
Fixes
- Issue where a lambda wasn't correctly registered as external. #1408
- Generic methods were incorrectly registered as functions, leading to naming collisions. #1402
- Deprecated tuple / triple types.
- Converting a slice to a vector/array would copy too little data.
- Crash when reading an empty 'manifest.json'.
- "optsize" did not work correctly in project.json.
l[0].a = 1
now supported for overloads due to better lvalue handling #1357.- Asserts are retained regardless of optimization when running tests.
- Limit object filename lengths. #1415
- Fix regression for
$include
. - Correct '.so' suffix on dynamic libraries on Linux.
- Fix bug where inline index access to array in a struct would crash the compiler.
- Asserts are now correctly included and traced in when running tests.
- Use atexit to fix finalizers on Windows #1361.
- Fix bugs in "trap-on-wrap" #1434.
- Bug with casting anyfault to error.
- Lambda / function type would accidentally be processed as a method.
- Fix error message when not finding a particular function.
- Crash invoking a
@body
argument with the wrong number of parameters. - Fix reordering semantics in struct assignment.
- Regression when passing types as
#expr
arguments. #1461 - Temp allocator overwrites data when doing reset on extra allocated pages. #1462
- User defined attributes could not have more than 1 parameter due to bug.
- Folding a constant array of structs at compile time would cause an assert.
- Enum attributes would be overwritten by enum value attributes.
- LLVM issue with try when bool is combined #1467.
- Segfault using ternary with no assignment #1468.
- Inner types make some errors misleading #1471.
- Fix bug when passing a type as a compile time value.
- Fix bug due to enum associated values not being checked for liveness.
- Regression when compile time accessing a union field not last assigned to.
- Safer seed of rand() for WASM without libc.
- Bad error message aliasing an ident with a path. #1481.
- Error when slicing a struct with an inline array #1488.
- Improved error messages on
Foo a = foo { 1 };
#1496 - Bug in json decoder escape handling.
- Fix bug when reading zip manifest, that would not return a zero terminated string. #1490
- Fix thread tests.
- Detect recursion errors on non-recursive mutexes in safe mode.
- Foreach over distinct pointer failed to be caught as error #1506.
- Foreach over distinct iterable would ignore operator(len).
- Compiler crash when compiling c code in a library without --obj-out #1503.
Stdlib changes
- Additional init functions for hashmap.
format
functions are now functions and work better with splat.- Add support for the QOI format.
- Add
io::read_new_fully
for reading to the end of a stream. - Add
io::wrap_bytes
for reading bytes withio
functions. - Add
rnd
andrand_in_range
default random functions. - Additional timezone related functions for
datetime
. - Added MD5 and crypto::safe_compare.
- Added generic HMAC.
- Added generic PBKDF2 implementation.
- DString
reverse
. DString.insert_at
now has variants for other types.
Version 0.6.2
Changes / improvements
- Updated LLVM passes
- Added
is_substruct
type property. - Scalar -> vector not implicit in call or assign.
- Added
--vector-conv
to enable the old scalar->vector conversion behaviour. - Added "weak" type aliases
def Foo = my_foo::Foo @weak;
*-add
keys in targets inmanifest.json
andproject.json
are deprecated.- Made "add" the default for things like
sources
,dependencies
and other keys in project and library files. - Give some symbol name suggestions when the path is matched.
- Don't generate .o files on
compile
andcompile-run
if there is nomain
. - c3c init-lib does not create the directory with the .c3l suffix #1253
- Permit foreach values to be optional.
- Add
--show-backtrace
option to disable backtrace for even smaller binary. - Untested Xtensa support.
- && doesn't work correctly with lambdas #1279.
- Fix incorrect override of optimization levels when using projects.
- Add experimental
@noalias
attribute. - Add a
--run-once
option to delete the output file after running it. - Add
@const
attribute for macros, for better error messages with constant macros. - Add
wincrt
setting to libraries. - Add
+++
&&&
|||
as replacement for$concat
,$and
and$or
. - Add
methodsof
to type info for struct, union and bitstruct. - Added
@tag
tagof
andhas_tagof
to user defined types and members. - Added
c-include-dirs
project/manifest setting. - The compiler now skips UTF8 BOM.
- Printable values passed to the Formatter as pointers, will print as if passed by value.
- Pointers are rendered with "0x" prefix when passed to '%s'.
- Add temp allocator scribble.
- Use PIC by default on Linux.
$exec
may now provide a stdin parameter.- Introduce
$vaarg[...]
syntax and deprecate the old$vaarg(...)
. - Similar change to
$vasplat
:$vasplat
and$vasplat[1..]
. - Add
$member.get(value)
to replacevalue.$eval($member.nameof)
- Improve the error message when the compilation does not produce any files #1390.
- Add
fmod
implementation for nolibc.
Fixes
- Broken WASM library code.
- Regression: Invalid is_random implementation due to changes in 0.6.
dbghelp.lib
was linked even on nolibc on Windows.- Fix incorrect linker selection on some platforms.
- Struct members declared in a single line declaration were not sharing attributes. #1266
opt
project setting now properly documented.- Incorrect justify formatting of integers.
- Assertion with duplicate function pointer signatures #1286
- Distinct func type would not accept direct function address assign. #1287
- Distinct inline would not implement protocol if the inlined implemented it. #1292
- Distinct inline can now be called if it is aliasing a function pointer.
- Bug in List add_array when reserving memory.
- Fix issue where a compile time parameter is followed by "...".
- Fix issue with some conversions to untyped list.
- Issue where a
if (catch e = ...)
in a defer would be incorrectly copied. Causing codegen error. - Variable in if-try / if-catch cannot be a reused variable name.
- Vararg interfaces were broken.
- LLVM codegen for constants in enums could fail.
- Fixes to the socket functions.
- Improved output when pointer is out of range.
- Better error when casting to a distinct fails.
- With single module, name the .o file after what
-o
provides. #1306 - Bitstruct members can now have attributes.
%
analysis was incorrect for int vectors.- When resolving inherited interfaces, the interface type wasn't always resolved.
- Fix issues when checking methods and interfaces hasn't been resolved yet.
- Fix Vec2.angle
- Update to libc::setjmp on Win32, to do no stack unwinding.
- Recursively follow interfaces when looking up method.
- Int128 alignment change in LLVM fixed on x64.
- Fix interface lazy resolution errors.
- Interface resolution when part of generics #1348.
- Assert not properly traced #1354.
- Ordering issues with
$include
/$exec
fixed #1302. - Issues with wincrt linking.
- Debug info with recursive canonical type usage could cause segfault.
- Missing check on optional left hand side for
s.x
. - Incorrect zero analysis on
foo["test"] = {}
#1360. - Bug converting untyped list #1360.
- Benchmark / test no longer suppresses debug info. #1364.
- Bug when compile time subtracting a distinct type.
insert_at
incorrectly prevented inserts at the end of a list.- Fix aligned alloc for Win32 targets.
- Compiler didn't detect when a module name was used both as a generic and regular module.
- Assigning a const zero to an aliased distinct caused an error.
--path
is now properly respected.--test
will now provide the full filename and the column.- Fix of bug in
defer (catch err)
with a direct return error. - Too restrictive compile time checks for @const.
- Fixes to wasm nolibc in the standard library.
- Fixed int128 div/mod.
- Fix WASM memory init priority.
- Fix bug with
defer (catch err)
when used together with regular defer. - Methods can now properly be aliased using
def
#1393. - Memory leak in Object when not using temp allocators.
- Tracking allocator would double the allocations in the report.
printf
will now show errors in the output when there are errors.- Bug where
if try
would work incorrectly in a macro. - Prevent loading / storing large structs with LLVM.
Stdlib changes
send
andrecv
added tolibc
for Posix / Win32.- Add support to destroy temp allocators.
- Deprecated
path.append
,path.tappend
,getcwd
,tgetcwd
,path.absolute
,ls
. - Deprecated
env::get_config_dir
, replaced byenv::new_get_config_dir
. - Added
path.has_extension
,path.new_append
,path.temp_append
,new_cwd
,temp_cwd
,path.new_absolute
,new_ls
,temp_ls
. - Added
dstring.replace
- New hashmap type,
Map
- Added
ElasticArray
. - Added
types::is_signed
,types::is_unsigned
andtypes::inner_type
.
Version 0.6.1
Changes / improvements
- Addition of $append and $concat functions.
- Added $$str_hash, $$str_upper, $$str_lower, $$str_find builtins.
- Improved error notes when call expressions have errors.
- Trailing body arguments may now be
&ref
,#hash
,$const
and$Type
arguments. - "panic-msg" setting to suppress panic message output.
- Require
@export
functions to have@export
types. - Disallow leading/trailing/duplicate '_' in module names.
- Updated mangling.
- Added
$$unaligned_load
and$$unaligned_store
. --no-headers
option to suppress creating headers when generating a library.- Support c-file compilation in libraries.
- Allow using $defined(&a[1]) to check if the operation is supported.
- Max number of members in a struct is limited to 65535.
- The maximum number of parameters in a call is now 255, up from 127.
- Array comparison now uses built-in memcmp on LLVM to enable optimizations.
- Prevent implicit array casts to pointers with higher alignment #1237.
- Macro
$case
statements now pick the first match and does not evaluate the rest. manifest.json
is now checked for incorrect keys.- Added
--list-manifest-properties
to list the available properties inmanifest.json
. - Indexing into a constant array / struct now works at compile time.
- Improved error message when trying user foreach with an untyped list.
Fixes
- Error with unsigned compare in
@ensure
when early returning 0 #1207. - Prevent Mach-O from removing
@init
and@dynamic
in a more reliable way #1200. - Fix of missing copy of parameterized custom attributes.
- Fixed crash on certain recursive function definitions #1209.
- Return the typekind "FUNC" for a function pointer.
- No longer possible to dereference a function pointer.
- Fix bug with @jump miscompile.
- Bit negate does implicit integer promotion.
- Bitstructs, unions and flexible arrays now correctly emitted in headers.
- Fix distinct inline conversions.
- Bit negating const zero flags would give an incorrect result.
- Fix to scalar -> vector conversions.
- Bug fix for rethrow + defer catch.
- Wrong size for structs containing overaligned structs #1219
- $typeof(*x) should be valid when x is an
[out]
parameter #1226 - Fix ABI lowering for 128 bit vectors on Linux.
- Bad error message when using a generic method without generic parameters #1228
- Private function called from nested macro not visible to linker #1232
- Bitstructs in structs would not be correctly be handled in some cases.
- Fix problem where a $$FUNC would return "" when evaluated for a static in a function #1236.
ordinal
is no longer a valid associated value name for enums.- Constants defined by indexing into another constant could fail codegen.
- Stdlib nolibc code bugs fixed.
- Regression: duplicate symbols with static variable declared in macro #1248.
- Unsplat with named parameters was accidentally disallowed.
- Reference parameter doesn't work with vector subscript #1250.
- The msvc_sdk script failed to work properly on windows when run in folders with spaces.
Stdlib changes
- Added
remove_first_item
remove_last_item
andremove_item
as aliases for thematch
functions. - Added @str_hash, @str_upper, @str_lower, @str_find compile time macros.
- Remove "panic" text from unreachable() when safe mode is turned off.
- Added
@unaligned_store
and@unaligned_load
. - Null ZString, DString or pointer prints "(null)" for printf.
- Updated sorting API.
- Insertion sort and counting sort added.
- Added missing
mem
andmem::allocator
functions for aligned allocations. - Added
new_init_with_array
andtemp_init_with_array
for List. - Fixed posix
NativeMutex.lock_timeout
. - Fixed
env::ARCH_32_BIT
andenv::ARCH_64_BIT
. - Added
time::us
.
Release 0.6.0
First release of 0.6
Changes / improvements
@default
implementations for interfaces removed.any*
=>any
, same for interfaces.- Private / local globals now have
internal
visibility in LLVM. - Updated enum syntax.
- 'rgba' also available for swizzling.
- The name "subarray" has been replaced by the more well known name "slice' across the codebase.
- Improved alignment handling.
- Add
--output-dir
to command line. #1155 - Allow making distinct types out of "void", "typeid", "anyfault" and faults.
- Removed
--system-linker
setting. - "Try" expressions may not be any binary or unary expressions. So for example
try foo() + 1
is disallowed. - Added
$$REGISTER_SIZE
for int register size. assert(false)
only allowed in unused branches or in tests. Compile time failed asserts is a compile time error.- Require expression blocks returning values to have the value used.
- Detect "unsigned >= 0" as errors.
- Improve callstack debug information #1184.
- Request jump table using @jump for switches.
- Improved inline debug information.
- Improved error messages on inlined macros.
- Introduce MSVC compatible SIMD ABI.
$foreach
doesn't create an implicit syntactic scope.- Error of
@if
depends on@if
- Support
defer (catch err)
- Added
print-input
command argument to print all files used for compilation - Allow recursive function definitions as long as they are pointers. #1182
- Default CPU to native if less than AVX, otherwise use AVX.
- Bounds checking on length for
foo[1:2]
slicing #1191. - Foreach uses non-wrapping add/dec.
Fixes
- Fixed issue in safe mode when converting enums.
- Better checking of operator methods.
- Bug when assigning an optional from an optional.
- Lambdas were not type checked thoroughly #1185.
- Fix problems using reflection on interface types #1203.
@param
with unnamed macro varargs could crash the compiler.- Compiler crash using enum nameof from different module #1205.
- Incorrect length passed to scratch buffer printf.
- Casting to a bitstruct would be allowed even if the type was the wrong size.
- Generic modules parameterized with constants would sometimes get the wrong parameterized module name causing conversion errors #1192.
- Duplicate emit of expressions on negation would incorrectly compile negated macros.
- Casting a slice address to its pointer type should not compile #1193.
- Union is not properly zero-initialized with designated initializer #1194.
- Compile time fmod evaluates to 0 #1195.
- Assertion failed when casting (unsigned) argument to enum #1196
- Correct debug info on parameters without storage.
- Fix location on foreach debug output.
- Compiler crash on designated initializer for structs with bitstruct.
Stdlib changes
- "init_new/init_temp" removed.
- LinkedList API rewritten.
- List "pop" and "remove" function now return Optionals.
- RingBuffer API rewritten. Allocator interface changed.
- Deprecated Allocator, DString and mem functions removed.
- "identity" functions are now constants for Matrix and Complex numbers.
- Removed 'append' from Object and List, replaced by 'push'.
GenericList
renamedAnyList
.- Proper handling of '.' and Win32 '//server' paths.
- Path normalization - fix possible null terminator out of bounds.
- Add 'zstr' variants for
string::new_format
/string::tformat
. - Fix mutex and wait signatures for Win32.