1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00

all: change optional to result of io (#16075)

This commit is contained in:
yuyi
2022-10-16 14:28:57 +08:00
committed by GitHub
parent 6e46933c55
commit f6844e9766
187 changed files with 1885 additions and 1874 deletions

View File

@@ -4,15 +4,15 @@ import toml.ast
// Visitor defines a visit method which is invoked by the walker on each Value node it encounters.
pub interface Visitor {
visit(value &ast.Value) ?
visit(value &ast.Value) !
}
// Modifier defines a modify method which is invoked by the walker on each Value node it encounters.
pub interface Modifier {
modify(mut value ast.Value) ?
modify(mut value ast.Value) !
}
pub type InspectorFn = fn (value &ast.Value, data voidptr) ?
pub type InspectorFn = fn (value &ast.Value, data voidptr) !
struct Inspector {
inspector_callback InspectorFn
@@ -20,48 +20,48 @@ mut:
data voidptr
}
pub fn (i &Inspector) visit(value &ast.Value) ? {
pub fn (i &Inspector) visit(value &ast.Value) ! {
i.inspector_callback(value, i.data) or { return err }
}
// inspect traverses and checks the AST Value node on a depth-first order and based on the data given
pub fn inspect(value &ast.Value, data voidptr, inspector_callback InspectorFn) ? {
walk(Inspector{inspector_callback, data}, value)?
pub fn inspect(value &ast.Value, data voidptr, inspector_callback InspectorFn) ! {
walk(Inspector{inspector_callback, data}, value)!
}
// walk traverses the AST using the given visitor
pub fn walk(visitor Visitor, value &ast.Value) ? {
pub fn walk(visitor Visitor, value &ast.Value) ! {
if value is map[string]ast.Value {
value_map := value as map[string]ast.Value
for _, val in value_map {
walk(visitor, &val)?
walk(visitor, &val)!
}
}
if value is []ast.Value {
value_array := value as []ast.Value
for val in value_array {
walk(visitor, &val)?
walk(visitor, &val)!
}
} else {
visitor.visit(value)?
visitor.visit(value)!
}
}
// walk_and_modify traverses the AST using the given modifier and lets the visitor
// modify the contents.
pub fn walk_and_modify(modifier Modifier, mut value ast.Value) ? {
pub fn walk_and_modify(modifier Modifier, mut value ast.Value) ! {
if value is map[string]ast.Value {
mut value_map := value as map[string]ast.Value
for _, mut val in value_map {
walk_and_modify(modifier, mut &val)?
walk_and_modify(modifier, mut &val)!
}
}
if value is []ast.Value {
mut value_array := value as []ast.Value
for mut val in value_array {
walk_and_modify(modifier, mut &val)?
walk_and_modify(modifier, mut &val)!
}
} else {
modifier.modify(mut value)?
modifier.modify(mut value)!
}
}