compiler: implement error_with_code(s string, code int)
Make available the integer code as errcode to callers/unwrapperspull/2356/head
parent
9c5a359de3
commit
8364130a1f
|
@ -7,6 +7,7 @@ module builtin
|
||||||
struct Option {
|
struct Option {
|
||||||
data [255]byte
|
data [255]byte
|
||||||
error string
|
error string
|
||||||
|
ecode int
|
||||||
ok bool
|
ok bool
|
||||||
is_none 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_mut: false
|
||||||
is_used: true
|
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('string err = $tmp . error;')
|
||||||
|
p.genln('int errcode = $tmp . ecode;')
|
||||||
p.statements()
|
p.statements()
|
||||||
p.genln('$typ $name = *($typ*) $tmp . data;')
|
p.genln('$typ $name = *($typ*) $tmp . data;')
|
||||||
if !p.returns && p.prev_tok2 != .key_continue && p.prev_tok2 != .key_break {
|
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_mut: false
|
||||||
is_used: true
|
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('string err = $tmp . error;')
|
||||||
|
p.genln('int errcode = $tmp . ecode;')
|
||||||
p.statements()
|
p.statements()
|
||||||
p.returns = false
|
p.returns = false
|
||||||
} else {
|
} 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 opt_err() ?string {return error('hi')}
|
||||||
|
|
||||||
fn test_err(){
|
fn test_err(){
|
||||||
|
|
Loading…
Reference in New Issue