checker: turn propagation warning into an error; sokol: make some structs public

This commit is contained in:
Alexander Medvednikov 2023-10-01 14:42:12 +03:00
parent a79c574cb9
commit f8693adfa2
9 changed files with 20 additions and 20 deletions

View file

@ -34,6 +34,7 @@
- parser: fix `;` support for `module x;` - parser: fix `;` support for `module x;`
- parser: fix fixed array of option values (`_ := [10]?int{}`) (#19392) - parser: fix fixed array of option values (`_ := [10]?int{}`) (#19392)
- parser: fix assigning with in another module sumtypes 2 (#19415) - parser: fix assigning with in another module sumtypes 2 (#19415)
- Support `;` statements, allowing for oneliners like `./v -e 'import os; println( os.ls(os.args[1])!.sorted(a > b) )' vlib/math` (#19345)
- v.ast: improve Stmt.str(), showing more details about ast.Block, ast.DeferStmt, ast.ForInStmt, ast.GlobalDecl - v.ast: improve Stmt.str(), showing more details about ast.Block, ast.DeferStmt, ast.ForInStmt, ast.GlobalDecl
#### Compiler internals #### Compiler internals
@ -51,7 +52,6 @@
- crypto.md5: change the Digest.write return type, from `?int` to `!int` (#19311) - crypto.md5: change the Digest.write return type, from `?int` to `!int` (#19311)
- v.help: use os.executable() instead of @VEXE as an anchor, so `v help` will work more robustly. - v.help: use os.executable() instead of @VEXE as an anchor, so `v help` will work more robustly.
- toml: fix custom `to_toml` for complex structs (#19338) - toml: fix custom `to_toml` for complex structs (#19338)
- all: support `;` statements, allowing for oneliners like `./v -e 'import os; println( os.ls(os.args[1])!.sorted(a > b) )' vlib/math` (#19345)
- vlib: add net.http.file, allowing for `v -e "import net.http.file; file.serve()"` (#19348) - vlib: add net.http.file, allowing for `v -e "import net.http.file; file.serve()"` (#19348)
- vlib: remove functions and fields, deprecated before 2023-03-20 - vlib: remove functions and fields, deprecated before 2023-03-20
- toml: fix toml encoding of complex types (#19408) - toml: fix toml encoding of complex types (#19408)

View file

@ -70,7 +70,7 @@ pub mut:
pub type ColorState = C.sg_color_state pub type ColorState = C.sg_color_state
struct C.sg_pipeline_desc { pub struct C.sg_pipeline_desc {
pub mut: pub mut:
_start_canary u32 _start_canary u32
shader Shader shader Shader
@ -97,7 +97,7 @@ struct C.sg_pipeline_info {
pub type PipelineInfo = C.sg_pipeline_info pub type PipelineInfo = C.sg_pipeline_info
struct C.sg_pipeline { pub struct C.sg_pipeline {
pub: pub:
id u32 id u32
} }
@ -304,7 +304,7 @@ pub mut:
pub type Color = C.sg_color pub type Color = C.sg_color
struct C.sg_shader { pub struct C.sg_shader {
pub: pub:
id u32 id u32
} }
@ -332,7 +332,7 @@ struct C.sg_pass_info {
pub type PassInfo = C.sg_pass_info pub type PassInfo = C.sg_pass_info
struct C.sg_pass_action { pub struct C.sg_pass_action {
pub mut: pub mut:
_start_canary u32 _start_canary u32
colors [4]ColorAttachmentAction colors [4]ColorAttachmentAction
@ -385,7 +385,7 @@ struct C.sg_buffer_info {
pub type BufferInfo = C.sg_buffer_info pub type BufferInfo = C.sg_buffer_info
struct C.sg_buffer { pub struct C.sg_buffer {
id u32 id u32
} }

View file

@ -1220,7 +1220,7 @@ fn (mut c Checker) check_or_expr(node ast.OrExpr, ret_type ast.Type, expr_return
} }
if expr !is ast.Ident && !expr_return_type.has_flag(.option) { if expr !is ast.Ident && !expr_return_type.has_flag(.option) {
if expr_return_type.has_flag(.result) { if expr_return_type.has_flag(.result) {
c.warn('propagating a Result like an Option is deprecated, use `foo()!` instead of `foo()?`', c.error('propagating a Result like an Option is deprecated, use `foo()!` instead of `foo()?`',
node.pos) node.pos)
} else { } else {
c.error('to propagate an Option, the call must also return an Option type', c.error('to propagate an Option, the call must also return an Option type',

View file

@ -1,4 +1,4 @@
vlib/v/checker/tests/propagate_option_with_result_err.vv:6:7: warning: propagating a Result like an Option is deprecated, use `foo()!` instead of `foo()?` vlib/v/checker/tests/propagate_option_with_result_err.vv:6:7: error: propagating a Result like an Option is deprecated, use `foo()!` instead of `foo()?`
4 | 4 |
5 | fn bar() ?string { 5 | fn bar() ?string {
6 | foo()? 6 | foo()?

View file

@ -2,8 +2,8 @@ import io { Reader }
type Decoder = Reader type Decoder = Reader
fn (mut d Decoder) decode(len int) ?[]u8 { fn (mut d Decoder) decode(len int) ![]u8 {
mut buf := []u8{len: len} mut buf := []u8{len: len}
d.read(mut buf)? d.read(mut buf)!
return buf return buf
} }

View file

@ -4,15 +4,15 @@ fn main() {
try_propagation() or { println('captured: ${err}') } try_propagation() or { println('captured: ${err}') }
} }
fn try_propagation() ? { fn try_propagation() ! {
try_numbers()? try_numbers()!
} }
fn try_numbers() ? { fn try_numbers() ! {
for x in 1 .. 10 { for x in 1 .. 10 {
y := error_if_even(x) or { x + 1 } y := error_if_even(x) or { x + 1 }
println('${x} rounded to ${y}') println('${x} rounded to ${y}')
error_if_prime(y)? error_if_prime(y)!
} }
} }

View file

@ -99,13 +99,13 @@ fn foo_str() ?string {
return 'something' return 'something'
} }
fn propagate_option(b bool) ?int { fn propagate_option(b bool) !int {
a := err_call(b)? a := err_call(b)!
return a return a
} }
fn propagate_different_type(b bool) ?bool { fn propagate_different_type(b bool) !bool {
err_call(b)? err_call(b)!
return true return true
} }

View file

@ -16,5 +16,5 @@ fn test_example() ! {
fn test_example_2() { fn test_example_2() {
assert true assert true
assert true assert true
example()? example()!
} }