Skip to content

Commit 1f416d9

Browse files
authored
all: add comptime if is shared support (fix #25600) (#25602)
1 parent 79ee376 commit 1f416d9

File tree

7 files changed

+31
-2
lines changed

7 files changed

+31
-2
lines changed

vlib/v/ast/ast.v

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,7 @@ pub enum ComptimeTypeKind {
163163
alias
164164
function
165165
option
166+
shared
166167
string
167168
pointer
168169
voidptr
@@ -190,6 +191,7 @@ pub fn (cty ComptimeType) str() string {
190191
.alias { '\$alias' }
191192
.function { '\$function' }
192193
.option { '\$option' }
194+
.shared { '\$shared' }
193195
.string { '\$string' }
194196
.pointer { '\$pointer' }
195197
.voidptr { '\$voidptr' }

vlib/v/fmt/fmt.v

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -770,6 +770,7 @@ pub fn (mut f Fmt) expr(node_ ast.Expr) {
770770
.alias { f.write('\$alias') }
771771
.function { f.write('\$function') }
772772
.option { f.write('\$option') }
773+
.shared { f.write('\$shared') }
773774
.string { f.write('\$string') }
774775
.pointer { f.write('\$pointer') }
775776
.voidptr { f.write('\$voidptr') }

vlib/v/gen/golang/golang.v

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -676,6 +676,7 @@ pub fn (mut f Gen) expr(node_ ast.Expr) {
676676
.alias { f.write('\$alias') }
677677
.function { f.write('\$function') }
678678
.option { f.write('\$option') }
679+
.shared { f.write('\$shared') }
679680
.string { f.write('\$string') }
680681
.pointer { f.write('\$pointer') }
681682
.voidptr { f.write('\$voidptr') }

vlib/v/parser/comptime.v

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ import v.token
1010
const supported_comptime_calls = ['html', 'tmpl', 'env', 'embed_file', 'pkgconfig', 'compile_error',
1111
'compile_warn', 'd', 'res']
1212
const comptime_types = ['map', 'array', 'array_dynamic', 'array_fixed', 'int', 'float', 'struct',
13-
'interface', 'enum', 'sumtype', 'alias', 'function', 'option', 'string', 'pointer', 'voidptr']
13+
'interface', 'enum', 'sumtype', 'alias', 'function', 'option', 'shared', 'string', 'pointer',
14+
'voidptr']
1415

1516
fn (mut p Parser) parse_comptime_type() ast.ComptimeType {
1617
pos := p.tok.pos()
@@ -60,6 +61,9 @@ fn (mut p Parser) parse_comptime_type() ast.ComptimeType {
6061
'option' {
6162
.option
6263
}
64+
'shared' {
65+
.shared
66+
}
6367
'string' {
6468
.string
6569
}

vlib/v/parser/expr.v

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ fn (mut p Parser) check_expr(precedence int) !ast.Expr {
117117
}
118118
.dollar {
119119
match p.peek_tok.kind {
120-
.name, .key_struct, .key_enum, .key_interface {
120+
.name, .key_struct, .key_enum, .key_interface, .key_shared {
121121
if p.peek_tok.lit in comptime_types {
122122
node = p.parse_comptime_type()
123123
} else {
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
struct Test {
2+
a shared int
3+
b shared f64
4+
c shared string
5+
d int
6+
e f64
7+
f string
8+
}
9+
10+
fn test_shared_comptime() {
11+
mut shares := []string{}
12+
$for f in Test.fields {
13+
$if f.typ is $shared {
14+
shares << f.name
15+
}
16+
}
17+
assert shares == ['a', 'b', 'c']
18+
}

vlib/v/type_resolver/comptime_resolver.v

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,9 @@ pub fn (t &TypeResolver) is_comptime_type(x ast.Type, y ast.ComptimeType) bool {
294294
.option {
295295
return x.has_flag(.option)
296296
}
297+
.shared {
298+
return x.has_flag(.shared_f)
299+
}
297300
}
298301
}
299302

0 commit comments

Comments
 (0)