mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
compiler: implement error_with_code(s string, code int)
Make available the integer code as errcode to callers/unwrappers
This commit is contained in:
parent
9c5a359de3
commit
8364130a1f
@ -7,6 +7,7 @@ module builtin
|
||||
struct Option {
|
||||
data [255]byte
|
||||
error string
|
||||
ecode int
|
||||
ok bool
|
||||
is_none bool
|
||||
}
|
||||
@ -34,4 +35,12 @@ pub fn error(s string) Option {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn error_with_code(s string, code int) Option {
|
||||
return Option {
|
||||
error: s
|
||||
ecode: code
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@ -42,7 +42,14 @@ fn (p mut Parser) gen_var_decl(name string, is_static bool) string {
|
||||
is_mut: false
|
||||
is_used: true
|
||||
})
|
||||
p.register_var(Var {
|
||||
name: 'errcode'
|
||||
typ: 'int'
|
||||
is_mut: false
|
||||
is_used: true
|
||||
})
|
||||
p.genln('string err = $tmp . error;')
|
||||
p.genln('int errcode = $tmp . ecode;')
|
||||
p.statements()
|
||||
p.genln('$typ $name = *($typ*) $tmp . data;')
|
||||
if !p.returns && p.prev_tok2 != .key_continue && p.prev_tok2 != .key_break {
|
||||
@ -114,7 +121,14 @@ fn (p mut Parser) gen_blank_identifier_assign() {
|
||||
is_mut: false
|
||||
is_used: true
|
||||
})
|
||||
p.register_var(Var {
|
||||
name: 'errcode'
|
||||
typ: 'int'
|
||||
is_mut: false
|
||||
is_used: true
|
||||
})
|
||||
p.genln('string err = $tmp . error;')
|
||||
p.genln('int errcode = $tmp . ecode;')
|
||||
p.statements()
|
||||
p.returns = false
|
||||
} else {
|
||||
|
@ -1,3 +1,15 @@
|
||||
|
||||
fn opt_err_with_code() ?string {return error_with_code('hi',137)}
|
||||
fn test_err_with_code(){
|
||||
v := opt_err_with_code() or {
|
||||
assert err == 'hi'
|
||||
assert errcode == 137
|
||||
return
|
||||
}
|
||||
assert false
|
||||
println(v) // suppress not used error
|
||||
}
|
||||
|
||||
fn opt_err() ?string {return error('hi')}
|
||||
|
||||
fn test_err(){
|
||||
|
Loading…
Reference in New Issue
Block a user