Idris2/support/refc/prim.h

46 lines
1.2 KiB
C
Raw Normal View History

#pragma once
#include "cBackend.h"
2020-10-12 00:28:26 +03:00
// IORef
Value *newIORef(Value *, Value *, Value *);
Value *readIORef(Value *, Value *, Value *);
Value *writeIORef(Value *, Value *, Value *, Value *);
// Sys
Value *sysOS(void);
Value *sysCodegen(void);
RefC backend improvements (#2425) * 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>
2022-04-27 15:59:32 +03:00
Value *idris2_crash(Value *msg);
// Array
Value *newArray(Value *, Value *, Value *, Value *);
Value *arrayGet(Value *, Value *, Value *, Value *);
Value *arraySet(Value *, Value *, Value *, Value *, Value *);
// Pointer
Value *onCollect(Value *, Value *, Value *, Value *);
RefC backend improvements (#2425) * 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>
2022-04-27 15:59:32 +03:00
Value *onCollectAny(Value *, Value *, Value *);
Value *voidElim(Value *, Value *);
// Threads
Value *System_Concurrency_Raw_prim__mutexRelease(Value *, Value *);
Value *System_Concurrency_Raw_prim__mutexAcquire(Value *, Value *);
Value *System_Concurrency_Raw_prim__makeMutex(Value *);
Value *System_Concurrency_Raw_prim__makeCondition(Value *);
Value *System_Concurrency_Raw_prim__conditionWait(Value *, Value *, Value *);
RefC backend improvements (#2425) * 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>
2022-04-27 15:59:32 +03:00
Value *System_Concurrency_Raw_prim__conditionWaitTimeout(Value *, Value *,
Value *, Value *);
Value *System_Concurrency_Raw_prim__conditionSignal(Value *, Value *);
Value *System_Concurrency_Raw_prim__conditionBroadcast(Value *, Value *);