mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
cgen: optionals fixes
This commit is contained in:
parent
e667e72685
commit
973b5c226a
@ -626,11 +626,11 @@ pub fn dir(path string) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn base_dir(path string) string {
|
pub fn base_dir(path string) string {
|
||||||
pos := path.last_index(path_separator) or {
|
posx := path.last_index(path_separator) or {
|
||||||
return path
|
return path
|
||||||
}
|
}
|
||||||
// NB: *without* terminating /
|
// NB: *without* terminating /
|
||||||
return path[..pos]
|
return path[..posx]
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn filename(path string) string {
|
pub fn filename(path string) string {
|
||||||
|
@ -61,9 +61,9 @@ pub fn (g mut Gen) typ(t table.Type) string {
|
|||||||
if styp.starts_with('C__') {
|
if styp.starts_with('C__') {
|
||||||
styp = styp[3..]
|
styp = styp[3..]
|
||||||
}
|
}
|
||||||
if styp == 'stat' {
|
if styp in ['stat', 'dirent*'] {
|
||||||
// TODO perf and other C structs
|
// TODO perf and other C structs
|
||||||
styp = 'struct stat'
|
styp = 'struct $styp'
|
||||||
}
|
}
|
||||||
if table.type_is_optional(t) {
|
if table.type_is_optional(t) {
|
||||||
styp = 'Option_' + styp
|
styp = 'Option_' + styp
|
||||||
@ -264,7 +264,7 @@ fn (g mut Gen) stmt(node ast.Stmt) {
|
|||||||
}
|
}
|
||||||
ast.HashStmt {
|
ast.HashStmt {
|
||||||
// #include etc
|
// #include etc
|
||||||
g.writeln('#$it.val')
|
g.definitions.writeln('#$it.val')
|
||||||
}
|
}
|
||||||
ast.Import {}
|
ast.Import {}
|
||||||
ast.Return {
|
ast.Return {
|
||||||
@ -954,6 +954,7 @@ fn (g mut Gen) ident(node ast.Ident) {
|
|||||||
match node.info {
|
match node.info {
|
||||||
ast.IdentVar {
|
ast.IdentVar {
|
||||||
if it.is_optional {
|
if it.is_optional {
|
||||||
|
g.write('/*opt*/')
|
||||||
styp := g.typ(it.typ)[7..] // Option_int => int TODO perf?
|
styp := g.typ(it.typ)[7..] // Option_int => int TODO perf?
|
||||||
g.write('(*($styp*)${name}.data)')
|
g.write('(*($styp*)${name}.data)')
|
||||||
return
|
return
|
||||||
@ -1073,10 +1074,10 @@ fn (g mut Gen) return_statement(it ast.Return) {
|
|||||||
else {}
|
else {}
|
||||||
}
|
}
|
||||||
if !is_none && !is_error {
|
if !is_none && !is_error {
|
||||||
g.write('opt_ok(')
|
|
||||||
g.expr(it.exprs[0])
|
|
||||||
styp := g.typ(g.fn_decl.return_type)[7..] // remove 'Option_'
|
styp := g.typ(g.fn_decl.return_type)[7..] // remove 'Option_'
|
||||||
g.writeln(', sizeof($styp));')
|
g.write('opt_ok(& ($styp []) { ')
|
||||||
|
g.expr(it.exprs[0])
|
||||||
|
g.writeln(' }, sizeof($styp));')
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
// g.write('/*OPTIONAL*/')
|
// g.write('/*OPTIONAL*/')
|
||||||
|
Loading…
Reference in New Issue
Block a user