Changes / improvements
- Updated LLVM passes
- Added
is_substructtype property. - Scalar -> vector not implicit in call or assign.
- Added
--vector-convto enable the old scalar->vector conversion behaviour. - Added "weak" type aliases
def Foo = my_foo::Foo @weak; *-addkeys in targets inmanifest.jsonandproject.jsonare deprecated.- Made "add" the default for things like
sources,dependenciesand other keys in project and library files. - Give some symbol name suggestions when the path is matched.
- Don't generate .o files on
compileandcompile-runif there is nomain. - c3c init-lib does not create the directory with the .c3l suffix #1253
- Permit foreach values to be optional.
- Add
--show-backtraceoption 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
@noaliasattribute. - Add a
--run-onceoption to delete the output file after running it. - Add
@constattribute for macros, for better error messages with constant macros. - Add
wincrtsetting to libraries. - Add
+++&&&|||as replacement for$concat,$andand$or. - Add
methodsofto type info for struct, union and bitstruct. - Added
@tagtagofandhas_tagofto user defined types and members. - Added
c-include-dirsproject/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.
$execmay now provide a stdin parameter.- Introduce
$vaarg[...]syntax and deprecate the old$vaarg(...). - Similar change to
$vasplat:$vasplatand$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
fmodimplementation for nolibc.
Fixes
- Broken WASM library code.
- Regression: Invalid is_random implementation due to changes in 0.6.
dbghelp.libwas 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
optproject 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
-oprovides. #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/$execfixed #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_atincorrectly 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.
--pathis now properly respected.--testwill 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.
printfwill now show errors in the output when there are errors.- Bug where
if trywould work incorrectly in a macro. - Prevent loading / storing large structs with LLVM.
Stdlib changes
sendandrecvadded tolibcfor 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_unsignedandtypes::inner_type.