From 7312c10b9e7df6c1993421923f504c78cdbcd41b Mon Sep 17 00:00:00 2001 From: Christoffer Lerno Date: Wed, 27 Aug 2025 18:21:55 +0200 Subject: [PATCH] - `@is_const` is deprecated in favour of directly using `$defined`. - `@is_lvalue(#value)` is deprecated in favour of directly using `$defined`. --- lib/std/core/builtin.c3 | 2 +- lib/std/core/values.c3 | 9 ++++----- releasenotes.md | 4 +++- src/compiler/parse_expr.c | 1 - src/compiler/sema_expr.c | 1 + test/test_suite/statements/defer_hash.c3t | 2 +- 6 files changed, 10 insertions(+), 9 deletions(-) diff --git a/lib/std/core/builtin.c3 b/lib/std/core/builtin.c3 index 64c9269c7..8a6273fb2 100644 --- a/lib/std/core/builtin.c3 +++ b/lib/std/core/builtin.c3 @@ -69,7 +69,7 @@ alias VoidFn = fn void(); macro scope. @param #variable : `the variable to store and restore` - @require values::@is_lvalue(#variable) + @require $defined(#variable = #variable) : `Expected an actual variable` *> macro void @scope(#variable; @body) @builtin { diff --git a/lib/std/core/values.c3 b/lib/std/core/values.c3 index f0d53cc20..cef4abcc4 100644 --- a/lib/std/core/values.c3 +++ b/lib/std/core/values.c3 @@ -16,12 +16,11 @@ macro bool @is_promotable_to_floatlike(#value) @const => types::is_promotable_to macro bool @is_promotable_to_float(#value) @const => types::is_promotable_to_float($typeof(#value)); macro bool @is_vector(#value) @const => types::is_vector($typeof(#value)); macro bool @is_same_vector_type(#value1, #value2) @const => types::is_same_vector_type($typeof(#value1), $typeof(#value2)); -macro bool @assign_to(#value1, #value2) @const @deprecated("use '$define(#value1 = #value2)'") => @assignable_to(#value1, $typeof(#value2)); -macro bool @is_lvalue(#value) => $defined(#value = #value); -macro bool @is_const(#foo) @const @builtin +macro bool @assign_to(#value1, #value2) @const @deprecated("use '$defined(#value1 = #value2)'") => @assignable_to(#value1, $typeof(#value2)); +macro bool @is_lvalue(#value) @deprecated("use '$defined(#value = #value)'")=> $defined(#value = #value); +macro bool @is_const(#foo) @const @builtin @deprecated("use '$defined(var $v = expr)'") { - var $v; - return $defined($v = #foo); + return $defined(var $v = #foo); } macro promote_int(x) diff --git a/releasenotes.md b/releasenotes.md index 024612c6b..f6be6a44b 100644 --- a/releasenotes.md +++ b/releasenotes.md @@ -28,6 +28,8 @@ - If the `os-arch` linked library doesn't exist, try with `os` for c3l libs. - A file with an inferred module may not contain additional other modules. - Update error message for missing body after if/for/etc #2289. +- `@is_const` is deprecated in favour of directly using `$defined`. +- `@is_lvalue(#value)` is deprecated in favour of directly using `$defined`. ### Fixes - List.remove_at would incorrectly trigger ASAN. @@ -193,7 +195,7 @@ - Added Ed25519. - Added string::bformat. - Virtual memory library. -- New virtual emory arena allocator. +- New virtual memory arena allocator. - Added `WString.len`. - Added `@addr` macro. - Add `ConditionVariable.wait_until` and `ConditionVariable.wait_for` diff --git a/src/compiler/parse_expr.c b/src/compiler/parse_expr.c index a65f832aa..64c2a529b 100644 --- a/src/compiler/parse_expr.c +++ b/src/compiler/parse_expr.c @@ -1210,7 +1210,6 @@ static Expr *parse_ct_is_const(ParseContext *c, Expr *left, SourceSpan lhs_start ASSIGN_EXPR_OR_RET(checks->inner_expr, parse_expr(c), poisoned_expr); CONSUME_OR_RET(TOKEN_RPAREN, poisoned_expr); RANGE_EXTEND_PREV(checks); - SEMA_DEPRECATED(checks, "The $is_const macro is deprecated. Use @is_const(...) instead."); return checks; } diff --git a/src/compiler/sema_expr.c b/src/compiler/sema_expr.c index 55bfeb6ea..7c962401b 100644 --- a/src/compiler/sema_expr.c +++ b/src/compiler/sema_expr.c @@ -10268,6 +10268,7 @@ ERROR: static inline bool sema_expr_analyse_ct_is_const(SemaContext *context, Expr *expr) { + SEMA_DEPRECATED(expr, "$is_const is deprecated, use '$defined(var $e = expr)' instead."); ASSERT_SPAN(expr, expr->resolve_status == RESOLVE_RUNNING); Expr *inner = expr->inner_expr; if (!sema_analyse_expr(context, inner)) return false; diff --git a/test/test_suite/statements/defer_hash.c3t b/test/test_suite/statements/defer_hash.c3t index 7e689fe4e..470d8ef02 100644 --- a/test/test_suite/statements/defer_hash.c3t +++ b/test/test_suite/statements/defer_hash.c3t @@ -18,7 +18,7 @@ fn void main() } <* - @require values::@is_lvalue(#s) + @require $defined(#s = #s) *> macro int @read_int(String #s) {