* [RefC] Suppress code generation for unnecessary arglist wrappers.
* [RefC] cleanup dead code of arglist.
* Removed Value_Arglist to reduce Closure's allocation overhead.
* fix linter error
* [RefC] make trampoline() safety.
* [RefC] cleanup cStatementsFromANF to keep code simple.
* fix linter error
* fix linter error
* In another time, another galaxy. THE LINTER INVADORS conquaer the all humanity and make them slaves. Under 2024, a only leaved job for every humans is adjusting spaces of source code, or just type gg0vG$== in vim.
* [ test ] update golden value
* added supports 32 params on closure.
* [RefC] [Cleanup] removing duplicate codes.
* [RefC] Switch calling conventions based on the number of arguments to avoid limits on the number of arguments and to reduce stack usage.
* [RefC] Argument that are too large are placed on the heap, as are closures.
* [RefC] use idris2_malloc instead of malloc.
* [RefC] [Cleanup] Keep pure things pure.
* [RefC] Mapped some special constructors to NULL. This reduces malloc cost and generates simpler code in ConCase. But not work yet.
* [RefC] fix merge failure.
* [RefC] stringOps.c replace NULL for NIL.
* [RefC] cleanup
* [RefC] ConstCase now generate simple if-then statements instead of using helpers. This reduces malloc/free costs.
* fix indentation
* fix whitespaces
* [RefC] The name field in Value_Constructor was restored for tycon. But changed to static const*. Hopefully the C compiler will remove the common string constants. The smartest thing to do would be to create a dummy global variable and use its address as a tag, but that would depend on the C compiler to resolve conflicts.
* [refc] a big changes of the space
* [RefC] Little tricks to reduce temporary variables
* spaces
* [RefC] fix compiler warnings
* [RefC] [test] Perform memory leak analysis, if valgrind is installed.
* [RefC] Fix invalid memory read. Fix C compiler warnings.
* [RefC] Fix invalid memory read of strSubstr. [test] Perform memory leak analysis, if valgrind is installed.
* [test] fix junk line
* linter
* linter
* linter
* linter
* [RefC] merge with erase_trivial_constuctors
* merge w/ erase_trivial_constructors
* Revert "merge w/ erase_trivial_constructors"
This reverts commit be593a3715.
* Revert "[RefC] merge with erase_trivial_constuctors"
This reverts commit 3c21eb45d8.
* merge w/ upstream/main
* fix merge failure
* rename
* fix renaming
* [RefC] fix merge fail
* [RefC] renamed C functions for safty.
* [RefC] cleanup
* [RefC] Fix constructor tag of UnconsResult.CHARACTER.
---------
Co-authored-by: Mathew Polzin <matt.polzin@gmail.com>
Co-authored-by: Guillaume Allais <guillaume.allais@ens-lyon.org>
* start implement drop spec
* [RefC] remove vars after prim function call
* [RefC] gc pointer processing changed
* [RefC] fix memory leak in stringIteratorToString
* [RefC] runtime.c refactoring
* Implement basic reuse analisis
* [RefC] do not delete reusable variables in value in let
* [RefC] Use names instead tags in reuse map
* [RefC] Don't set all fields to null in reuse constructor
* Use record syntax in RefC
* Add some utility functions to RefC
* Sort output in garbageCollect refc test
* Add memory leak test for RefC
* [RefC] Remove variable only from body in let
Co-authored-by: G. Allais <guillaume.allais@ens-lyon.org>
* [RefC] Remove borrowed set from env
* [RefC] Use Ref variable for Enviroment instead of passing as an argument
* [RefC] Use locally function as combinator
* [RefC] removing unnecessary dup and remove during pattern matching
* Update refcTests and refcMemoryLeakTests
* Remove some test files
* move CHANGELOG entry to CHANGELOG_NEXT
* Move refc-memory tests
* Change calling convention test
* [RefC] [Test] Reuse test
---------
Co-authored-by: G. Allais <guillaume.allais@ens-lyon.org>
Co-authored-by: Mathew Polzin <matt.polzin@gmail.com>
* - [RefC] delete unnecessary conversion to keep code simply.
- [RefC] rename some C functions to confliction safe.
* make the linter feels good.
* Get me a job as a linter slave.
* [RefC] Added hard fail for unsupported primitives.
* Fix typo.
* Fix symbom mangling
* Revert "Fix symbom mangling"
This reverts commit 6481e80155.
* Fix typo
* [RefC] Add missed prims of setBuffer* .
* [ fix ] formatting
* [ re #2609 ] Use 'UInt' instead of 'Word'
More descriptive/to the point / Less assumed knowledge.
There are no *LE suffixes for UInt8, since endianness is to do with
multiple bytes and UInt8 is a single one.
Co-authored-by: Guillaume Allais <guillaume.allais@ens-lyon.org>
Co-authored-by: Thomas E. Hansen <teh6@st-andrews.ac.uk>
* [ base ] Deprecate setByte in favour of setBits8
Deprecate getByte; fix Core.Binary.Prims
Along with `setByte`, the `getByte` function should similarly be
deprecated since it also assumes the value will have the given size,
rather than guaranteeing it in the type.
CI highlighted some required changes in `Core.Binary.Prims` thanks to
`-Werror`. The fix was to add some `cast` calls where the old `getByte`
and `setByte` used to be.
The RefC buffer test will need updating once we remove the functions
completely. Added a note for future peeps.
e79e4277 ("[ fix ] Make Bits types use int switch statement in RefC")
made the RefC backend generate code calling `extractInt` with Bits
types, bit did not add the extra cases to `extractInt`. This commit adds
the missing cases.
Fixes#2452
* RefC backend improvements
1. OnCollect had the wrong number of arguments. The code creator expects
3 arguments, but onCollect in prim.h expected 4 arguments. The first of which
was an erased arguments. That is now fixed.
2. OnCollect did not call `newReference` when creating a new reference to the pointer
and the freeing function
3. OnCollect and OnCollectAny still had a spurious printf statement
Those issues have been fixed, the test case can be found in
tests/refc/garbageCollect
4. The IORef mechanism expects that the %World token will be passed around
consistently. This is not the case. States in Control.App make use of
IORefs, but the function created from Control.App.prim_app_bind
had the world token erased to NULL.
Now, IORefs are managed using a global variable,
IORef_Storage * global_IORef_Storage;
referenced in cBackend.h, defined in the created .c file, and set to NULL
in main();
5. While multithreading and forking is still not supported, compiling a program
that makes use of Control.App demands a C implementation of prim_fork.
Files support/refc/threads.c and support/refc/threads.h provide a
dummy implementation for it, so that Control.App programs compile and run.
A test for these 2 issues is given in tests/refc/issue2424
* format changes
to make the linter happy
* format changes
to make the linter happy
* format changes
to make the linter happy
* spelling mistake braket -> bracket
Co-authored-by: Volkmar Frinken <volkmar@onutechnology.com>
While the discussion about how to refactor test framework is not
finished (#1654), make this change: move `rm -rf build` in the
beginning of the test. For these reasons:
* it is useful to inspect the contents of the `build` directory
especially after the test failure
* if build crashes mid-test (e.g. process killed), next run should
not be affected by the `build` directory from the previous run
* Add utility functions to treat All as a heterogeneous container
* Distinguish RefC Int and Bits types
* Change RefC Integers to be arbitrary precision
* Add RefC Bits maths operations
* Make RefC div and mod Euclidean
* Add RefC bit-ops tests
* Add RefC integer comparison tests
* Add RefC IntN support
- Fix off-by-one error in String reverse
- Correct order of arguments in strSubstr
- Actually use start index of strSubstr
- Reduce memory usage of strSubstr in case of overrunning string end
- Add fastPack/fastUnpack/fastConcat
- Use unsigned chars for character comparisons
- Fix generated C character encodings