mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 12:01:16 +00:00
New faults and syntax (#2034)
- Remove `[?]` syntax. - Change `int!` to `int?` syntax. - New `fault` declarations. - Enum associated values can reference the calling enum.
This commit is contained in:
committed by
GitHub
parent
fefce25081
commit
25bccf4883
@@ -19,8 +19,7 @@ def OnceFn = fn void();
|
||||
|
||||
def ThreadFn = fn int(void* arg);
|
||||
|
||||
fault ThreadFault
|
||||
{
|
||||
fault
|
||||
INIT_FAILED,
|
||||
DESTROY_FAILED,
|
||||
LOCK_FAILED,
|
||||
@@ -32,19 +31,18 @@ fault ThreadFault
|
||||
DETACH_FAILED,
|
||||
JOIN_FAILED,
|
||||
INTERRUPTED,
|
||||
CHANNEL_CLOSED,
|
||||
}
|
||||
CHANNEL_CLOSED;
|
||||
|
||||
macro void! Mutex.init(&mutex) => NativeMutex.init((NativeMutex*)mutex, MUTEX_PLAIN);
|
||||
macro void! TimedMutex.init(&mutex) => NativeMutex.init((NativeMutex*)mutex, MUTEX_TIMED);
|
||||
macro void! RecursiveMutex.init(&mutex) => NativeMutex.init((NativeMutex*)mutex, MUTEX_RECURSIVE);
|
||||
macro void! TimedRecursiveMutex.init(&mutex) => NativeMutex.init((NativeMutex*)mutex, MUTEX_TIMED | MUTEX_RECURSIVE);
|
||||
macro void! Mutex.destroy(&mutex) => NativeMutex.destroy((NativeMutex*)mutex);
|
||||
macro void! Mutex.lock(&mutex) => NativeMutex.lock((NativeMutex*)mutex);
|
||||
macro void! TimedMutex.lock_timeout(&mutex, ulong ms) => NativeMutex.lock_timeout((NativeMutex*)mutex, ms);
|
||||
macro void! TimedRecursiveMutex.lock_timeout(&mutex, ulong ms) => NativeMutex.lock_timeout((NativeMutex*)mutex, ms);
|
||||
macro void? Mutex.init(&mutex) => NativeMutex.init((NativeMutex*)mutex, MUTEX_PLAIN);
|
||||
macro void? TimedMutex.init(&mutex) => NativeMutex.init((NativeMutex*)mutex, MUTEX_TIMED);
|
||||
macro void? RecursiveMutex.init(&mutex) => NativeMutex.init((NativeMutex*)mutex, MUTEX_RECURSIVE);
|
||||
macro void? TimedRecursiveMutex.init(&mutex) => NativeMutex.init((NativeMutex*)mutex, MUTEX_TIMED | MUTEX_RECURSIVE);
|
||||
macro void? Mutex.destroy(&mutex) => NativeMutex.destroy((NativeMutex*)mutex);
|
||||
macro void? Mutex.lock(&mutex) => NativeMutex.lock((NativeMutex*)mutex);
|
||||
macro void? TimedMutex.lock_timeout(&mutex, ulong ms) => NativeMutex.lock_timeout((NativeMutex*)mutex, ms);
|
||||
macro void? TimedRecursiveMutex.lock_timeout(&mutex, ulong ms) => NativeMutex.lock_timeout((NativeMutex*)mutex, ms);
|
||||
macro bool Mutex.try_lock(&mutex) => NativeMutex.try_lock((NativeMutex*)mutex);
|
||||
macro void! Mutex.unlock(&mutex) => NativeMutex.unlock((NativeMutex*)mutex);
|
||||
macro void? Mutex.unlock(&mutex) => NativeMutex.unlock((NativeMutex*)mutex);
|
||||
macro void Mutex.@in_lock(&mutex; @body)
|
||||
{
|
||||
(void)mutex.lock();
|
||||
@@ -52,22 +50,22 @@ macro void Mutex.@in_lock(&mutex; @body)
|
||||
@body();
|
||||
}
|
||||
|
||||
macro void! ConditionVariable.init(&cond) => NativeConditionVariable.init((NativeConditionVariable*)cond);
|
||||
macro void! ConditionVariable.destroy(&cond) => NativeConditionVariable.destroy((NativeConditionVariable*)cond);
|
||||
macro void! ConditionVariable.signal(&cond) => NativeConditionVariable.signal((NativeConditionVariable*)cond);
|
||||
macro void! ConditionVariable.broadcast(&cond) => NativeConditionVariable.broadcast((NativeConditionVariable*)cond);
|
||||
macro void! ConditionVariable.wait(&cond, Mutex* mutex)
|
||||
macro void? ConditionVariable.init(&cond) => NativeConditionVariable.init((NativeConditionVariable*)cond);
|
||||
macro void? ConditionVariable.destroy(&cond) => NativeConditionVariable.destroy((NativeConditionVariable*)cond);
|
||||
macro void? ConditionVariable.signal(&cond) => NativeConditionVariable.signal((NativeConditionVariable*)cond);
|
||||
macro void? ConditionVariable.broadcast(&cond) => NativeConditionVariable.broadcast((NativeConditionVariable*)cond);
|
||||
macro void? ConditionVariable.wait(&cond, Mutex* mutex)
|
||||
{
|
||||
return NativeConditionVariable.wait((NativeConditionVariable*)cond, (NativeMutex*)mutex);
|
||||
}
|
||||
macro void! ConditionVariable.wait_timeout(&cond, Mutex* mutex, ulong ms)
|
||||
macro void? ConditionVariable.wait_timeout(&cond, Mutex* mutex, ulong ms)
|
||||
{
|
||||
return NativeConditionVariable.wait_timeout((NativeConditionVariable*)cond, (NativeMutex*)mutex, ms);
|
||||
}
|
||||
|
||||
macro void! Thread.create(&thread, ThreadFn thread_fn, void* arg) => NativeThread.create(thread, thread_fn, arg);
|
||||
macro void! Thread.detach(thread) => NativeThread.detach(thread);
|
||||
macro int! Thread.join(thread) => NativeThread.join(thread);
|
||||
macro void? Thread.create(&thread, ThreadFn thread_fn, void* arg) => NativeThread.create(thread, thread_fn, arg);
|
||||
macro void? Thread.detach(thread) => NativeThread.detach(thread);
|
||||
macro int? Thread.join(thread) => NativeThread.join(thread);
|
||||
macro bool Thread.equals(thread, Thread other) => NativeThread.equals(thread, other);
|
||||
|
||||
macro void OnceFlag.call(&flag, OnceFn func) => NativeOnceFlag.call_once((NativeOnceFlag*)flag, func);
|
||||
@@ -75,6 +73,6 @@ macro void OnceFlag.call(&flag, OnceFn func) => NativeOnceFlag.call_once((Native
|
||||
macro void yield() => os::native_thread_yield();
|
||||
macro Thread current() => (Thread)os::native_thread_current();
|
||||
macro void exit(int result) => os::native_thread_exit(result);
|
||||
macro void! sleep(Duration d) @maydiscard => os::native_sleep_nano(d.to_nano());
|
||||
macro void! sleep_ms(ulong ms) @maydiscard => sleep(time::ms(ms));
|
||||
macro void! sleep_ns(NanoDuration ns) @maydiscard => os::native_sleep_nano(ns);
|
||||
macro void? sleep(Duration d) @maydiscard => os::native_sleep_nano(d.to_nano());
|
||||
macro void? sleep_ms(ulong ms) @maydiscard => sleep(time::ms(ms));
|
||||
macro void? sleep_ns(NanoDuration ns) @maydiscard => os::native_sleep_nano(ns);
|
||||
|
||||
Reference in New Issue
Block a user