mirror of
https://github.com/vlang/v.git
synced 2025-09-13 14:32:26 +03:00
This commit is contained in:
parent
c0eeb85eab
commit
e92d210bd0
8 changed files with 39 additions and 8 deletions
|
@ -556,7 +556,9 @@ fn ray_trace(w int, h int, samps int, file_name string, scene_id int) Image {
|
|||
d.mult_s(140.0), d.norm()}, 0, scene_id).mult_s(samps1)
|
||||
}
|
||||
tmp_vec := Vec{clamp(r.x), clamp(r.y), clamp(r.z)}.mult_s(.25)
|
||||
(*ivec) = *ivec + tmp_vec
|
||||
unsafe {
|
||||
(*ivec) = *ivec + tmp_vec
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -266,6 +266,9 @@ fn (mut c Checker) assign_stmt(mut node ast.AssignStmt) {
|
|||
}
|
||||
}
|
||||
node.left_types << left_type
|
||||
for left is ast.ParExpr {
|
||||
left = (left as ast.ParExpr).expr
|
||||
}
|
||||
match mut left {
|
||||
ast.Ident {
|
||||
if (is_decl || left.kind == .blank_ident) && left_type.is_ptr()
|
||||
|
|
|
@ -54,9 +54,9 @@ vlib/v/checker/tests/invalid_literal_assign_err.vv:11:2: error: non-name literal
|
|||
| ~~~~~
|
||||
12 | (3 + 3.5) = 4 + 6.4
|
||||
13 | }
|
||||
vlib/v/checker/tests/invalid_literal_assign_err.vv:12:2: error: non-name literal value `(3 + 3.5)` on left side of `=`
|
||||
vlib/v/checker/tests/invalid_literal_assign_err.vv:12:3: error: non-name literal value `3 + 3.5` on left side of `=`
|
||||
10 | true = false
|
||||
11 | 3 + 5 = 3 & 4
|
||||
12 | (3 + 3.5) = 4 + 6.4
|
||||
| ~~~~~~~~~
|
||||
| ~~~~~~~
|
||||
13 | }
|
||||
|
|
|
@ -10,9 +10,15 @@ vlib/v/checker/tests/prefix_expr_decl_assign_err.vv:2:5: error: non-name on the
|
|||
| ^
|
||||
3 | (*d) := 14
|
||||
4 | }
|
||||
vlib/v/checker/tests/prefix_expr_decl_assign_err.vv:3:5: error: non-name `(*d)` on left side of `:=`
|
||||
vlib/v/checker/tests/prefix_expr_decl_assign_err.vv:3:10: error: modifying variables via dereferencing can only be done in `unsafe` blocks
|
||||
1 | fn main() {
|
||||
2 | &a := 12
|
||||
3 | (*d) := 14
|
||||
| ~~~~
|
||||
| ~~
|
||||
4 | }
|
||||
vlib/v/checker/tests/prefix_expr_decl_assign_err.vv:3:6: error: non-name on the left side of `:=`
|
||||
1 | fn main() {
|
||||
2 | &a := 12
|
||||
3 | (*d) := 14
|
||||
| ^
|
||||
4 | }
|
||||
|
|
11
vlib/v/checker/tests/unsafe_deref_assign_err.out
Normal file
11
vlib/v/checker/tests/unsafe_deref_assign_err.out
Normal file
|
@ -0,0 +1,11 @@
|
|||
vlib/v/checker/tests/unsafe_deref_assign_err.vv:4:7: error: modifying variables via dereferencing can only be done in `unsafe` blocks
|
||||
2 | cref := &c
|
||||
3 |
|
||||
4 | *cref = 1
|
||||
| ^
|
||||
5 | (*cref) = 1
|
||||
vlib/v/checker/tests/unsafe_deref_assign_err.vv:5:9: error: modifying variables via dereferencing can only be done in `unsafe` blocks
|
||||
3 |
|
||||
4 | *cref = 1
|
||||
5 | (*cref) = 1
|
||||
| ^
|
5
vlib/v/checker/tests/unsafe_deref_assign_err.vv
Normal file
5
vlib/v/checker/tests/unsafe_deref_assign_err.vv
Normal file
|
@ -0,0 +1,5 @@
|
|||
c := 0
|
||||
cref := &c
|
||||
|
||||
*cref = 1
|
||||
(*cref) = 1
|
|
@ -7,8 +7,10 @@ const (
|
|||
type SteamId = u64
|
||||
|
||||
fn (mut s SteamId) set_id(i u32) {
|
||||
(*s) &= ~steamid_id_mask
|
||||
(*s) |= ((u64(i) << steamid_id_shift) & steamid_id_mask)
|
||||
unsafe {
|
||||
(*s) &= ~steamid_id_mask
|
||||
(*s) |= ((u64(i) << steamid_id_shift) & steamid_id_mask)
|
||||
}
|
||||
}
|
||||
|
||||
fn test_bitops_work_with_type_aliases() {
|
||||
|
|
|
@ -25,7 +25,9 @@ fn test_mut() {
|
|||
n := 1
|
||||
mut b := (&n)
|
||||
//
|
||||
(*b) = 10
|
||||
unsafe {
|
||||
(*b) = 10
|
||||
}
|
||||
// mut b := mut a
|
||||
// b = 10
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue