diff --git a/doc/docs.md b/doc/docs.md index b3c6aa1307..f0bb2ae461 100644 --- a/doc/docs.md +++ b/doc/docs.md @@ -6139,7 +6139,8 @@ that are substituted at compile time: - `@BUILD_TIME` => replaced with the build time, for example '12:32:07' . - `@BUILD_TIMESTAMP` => replaced with the build timestamp, for example '1726219885' . - `@OS` => replaced with the OS type, for example 'linux' . -- `@COMPILER` => replaced with the C compiler type, for example 'gcc' . +- `@CCOMPILER` => replaced with the C compiler type, for example 'gcc' . +- `@BACKEND` => replaced with current language backend, for example 'c' or 'golang' . - `@PLATFORM` => replaced with the platform type, for example 'amd64' . Note: `@BUILD_DATE`, `@BUILD_TIME`, `@BUILD_TIMESTAMP` represent times in the UTC timezone. By default, they are based on the current time of the compilation/build. They can be overridden diff --git a/vlib/v/checker/checker.v b/vlib/v/checker/checker.v index 060b5a9d13..3fccd9661b 100644 --- a/vlib/v/checker/checker.v +++ b/vlib/v/checker/checker.v @@ -4033,9 +4033,12 @@ fn (mut c Checker) at_expr(mut node ast.AtExpr) ast.Type { .os { node.val = pref.get_host_os().lower() } - .compiler { + .ccompiler { node.val = c.pref.ccompiler_type.str() } + .backend { + node.val = c.pref.backend.str() + } .platform { node.val = c.pref.arch.str() } diff --git a/vlib/v/parser/comptime.v b/vlib/v/parser/comptime.v index 4806f2d4c0..67ca8dfd4f 100644 --- a/vlib/v/parser/comptime.v +++ b/vlib/v/parser/comptime.v @@ -512,7 +512,8 @@ fn (mut p Parser) at() ast.AtExpr { '@BUILD_TIME' { token.AtKind.build_time } '@BUILD_TIMESTAMP' { token.AtKind.build_timestamp } '@OS' { token.AtKind.os } - '@COMPILER' { token.AtKind.compiler } + '@CCOMPILER' { token.AtKind.ccompiler } + '@BACKEND' { token.AtKind.backend } '@PLATFORM' { token.AtKind.platform } else { token.AtKind.unknown } } diff --git a/vlib/v/scanner/tests/unknown_comptime_var_err.out b/vlib/v/scanner/tests/unknown_comptime_var_err.out index c53fadd606..861ea2e093 100644 --- a/vlib/v/scanner/tests/unknown_comptime_var_err.out +++ b/vlib/v/scanner/tests/unknown_comptime_var_err.out @@ -5,5 +5,5 @@ vlib/v/scanner/tests/unknown_comptime_var_err.vv:2:9: error: @ must be used befo 3 | } Details: available compile time variables: @VROOT, @VMODROOT, @VEXEROOT, @FN, @METHOD, @MOD, @STRUCT, @VEXE, @FILE, @DIR, @LINE, @COLUMN, @VHASH, @VCURRENTHASH, @VMOD_FILE, @VMODHASH, -@FILE_LINE, @LOCATION, @BUILD_DATE, @BUILD_TIME, @BUILD_TIMESTAMP, @OS, @COMPILER, -@PLATFORM +@FILE_LINE, @LOCATION, @BUILD_DATE, @BUILD_TIME, @BUILD_TIMESTAMP, @OS, @CCOMPILER, +@BACKEND, @PLATFORM diff --git a/vlib/v/tests/comptime/comptime_at_test.v b/vlib/v/tests/comptime/comptime_at_test.v index 18de32a171..eb680717c8 100644 --- a/vlib/v/tests/comptime/comptime_at_test.v +++ b/vlib/v/tests/comptime/comptime_at_test.v @@ -206,9 +206,15 @@ fn test_at_os() { 'js_node', 'js_freestanding', 'js_browser'] } -fn test_at_compiler() { - println('Current Compiler is ${@COMPILER}') - assert @COMPILER in ['gcc', 'tinyc', 'clang', 'emcc', 'mingw', 'msvc', 'cplusplus'] +fn test_at_ccompiler() { + println('Current C Compiler is ${@CCOMPILER}') + assert @CCOMPILER in ['gcc', 'tinyc', 'clang', 'emcc', 'mingw', 'msvc', 'cplusplus'] +} + +fn test_at_backend() { + println('Current language backend is ${@BACKEND}') + assert @BACKEND in ['c', 'golang', 'interpret', 'js_node', 'js_browser', 'js_freestanding', + 'native', 'wasm'] } fn test_at_platform() { diff --git a/vlib/v/token/token.v b/vlib/v/token/token.v index b18abd7e12..f8fcad1c47 100644 --- a/vlib/v/token/token.v +++ b/vlib/v/token/token.v @@ -190,7 +190,8 @@ pub enum AtKind { build_time build_timestamp os - compiler + ccompiler + backend platform } @@ -201,7 +202,7 @@ pub const assign_tokens = [Kind.assign, .decl_assign, .plus_assign, .minus_assig pub const valid_at_tokens = ['@VROOT', '@VMODROOT', '@VEXEROOT', '@FN', '@METHOD', '@MOD', '@STRUCT', '@VEXE', '@FILE', '@DIR', '@LINE', '@COLUMN', '@VHASH', '@VCURRENTHASH', '@VMOD_FILE', '@VMODHASH', '@FILE_LINE', '@LOCATION', '@BUILD_DATE', '@BUILD_TIME', '@BUILD_TIMESTAMP', '@OS', - '@COMPILER', '@PLATFORM'] + '@CCOMPILER', '@BACKEND', '@PLATFORM'] pub const token_str = build_token_str()