toml: panic if access fails to a key that was checked (#12384)
parent
24cd619ff8
commit
9b00564d98
|
@ -262,28 +262,18 @@ pub fn (mut p Parser) find_in_table(mut table map[string]ast.Value, key string)
|
||||||
ks := key.split('.')
|
ks := key.split('.')
|
||||||
unsafe {
|
unsafe {
|
||||||
for k in ks {
|
for k in ks {
|
||||||
if k in t.keys() {
|
if val := t[k] {
|
||||||
util.printdbg(@MOD + '.' + @STRUCT + '.' + @FN, 'found key "$k" in $t.keys()')
|
util.printdbg(@MOD + '.' + @STRUCT + '.' + @FN, 'found key "$k" in $t.keys()')
|
||||||
if val := t[k] or {
|
if val is map[string]ast.Value {
|
||||||
return error(@MOD + '.' + @STRUCT + '.' + @FN +
|
t = &(val as map[string]ast.Value)
|
||||||
' this should never happen. Key "$k" was checked before access')
|
} else {
|
||||||
}
|
return error(@MOD + '.' + @STRUCT + '.' + @FN + ' "$k" is not a map')
|
||||||
{
|
|
||||||
if val is map[string]ast.Value {
|
|
||||||
// unsafe {
|
|
||||||
t = &(t[k] as map[string]ast.Value)
|
|
||||||
//}
|
|
||||||
} else {
|
|
||||||
return error(@MOD + '.' + @STRUCT + '.' + @FN + ' "$k" is not a map')
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
util.printdbg(@MOD + '.' + @STRUCT + '.' + @FN, 'no key "$k" found, allocating new map "$k" in map ${ptr_str(t)}"')
|
util.printdbg(@MOD + '.' + @STRUCT + '.' + @FN, 'no key "$k" found, allocating new map "$k" in map ${ptr_str(t)}"')
|
||||||
// unsafe {
|
|
||||||
t[k] = map[string]ast.Value{}
|
t[k] = map[string]ast.Value{}
|
||||||
t = &(t[k] as map[string]ast.Value)
|
t = &(t[k] as map[string]ast.Value)
|
||||||
util.printdbg(@MOD + '.' + @STRUCT + '.' + @FN, 'allocated new map ${ptr_str(t)}"')
|
util.printdbg(@MOD + '.' + @STRUCT + '.' + @FN, 'allocated new map ${ptr_str(t)}"')
|
||||||
//}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -534,20 +524,14 @@ pub fn (mut p Parser) array_of_tables(mut table map[string]ast.Value) ? {
|
||||||
|
|
||||||
key_str := key.str()
|
key_str := key.str()
|
||||||
unsafe {
|
unsafe {
|
||||||
if key_str in table.keys() {
|
if val := table[key_str] {
|
||||||
if val := table[key_str] or {
|
if val is []ast.Value {
|
||||||
|
arr := &(table[key_str] as []ast.Value)
|
||||||
|
arr << p.array_of_tables_contents() ?
|
||||||
|
table[key_str] = arr
|
||||||
|
} else {
|
||||||
return error(@MOD + '.' + @STRUCT + '.' + @FN +
|
return error(@MOD + '.' + @STRUCT + '.' + @FN +
|
||||||
' this should never happen. Key "$key_str" was checked before access')
|
' table[$key_str] is not an array. (excerpt): "...${p.excerpt()}..."')
|
||||||
}
|
|
||||||
{
|
|
||||||
if val is []ast.Value {
|
|
||||||
arr := &(table[key_str] as []ast.Value)
|
|
||||||
arr << p.array_of_tables_contents() ?
|
|
||||||
table[key_str] = arr
|
|
||||||
} else {
|
|
||||||
return error(@MOD + '.' + @STRUCT + '.' + @FN +
|
|
||||||
' table[$key_str] is not an array. (excerpt): "...${p.excerpt()}..."')
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
table[key_str] = p.array_of_tables_contents() ?
|
table[key_str] = p.array_of_tables_contents() ?
|
||||||
|
@ -619,20 +603,14 @@ pub fn (mut p Parser) double_array_of_tables(mut table map[string]ast.Value) ? {
|
||||||
|
|
||||||
mut t := &(t_map as map[string]ast.Value)
|
mut t := &(t_map as map[string]ast.Value)
|
||||||
|
|
||||||
if last in t.keys() {
|
if val := t[last] {
|
||||||
if val := t[last] or {
|
if val is []ast.Value {
|
||||||
|
arr := &(val as []ast.Value)
|
||||||
|
arr << p.array_of_tables_contents() ?
|
||||||
|
t[last] = arr
|
||||||
|
} else {
|
||||||
return error(@MOD + '.' + @STRUCT + '.' + @FN +
|
return error(@MOD + '.' + @STRUCT + '.' + @FN +
|
||||||
' this should never happen. Key "$last" was checked before access')
|
' t[$last] is not an array. (excerpt): "...${p.excerpt()}..."')
|
||||||
}
|
|
||||||
{
|
|
||||||
if val is []ast.Value {
|
|
||||||
arr := &(val as []ast.Value)
|
|
||||||
arr << p.array_of_tables_contents() ?
|
|
||||||
t[last] = arr
|
|
||||||
} else {
|
|
||||||
return error(@MOD + '.' + @STRUCT + '.' + @FN +
|
|
||||||
' t[$last] is not an array. (excerpt): "...${p.excerpt()}..."')
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
t[last] = p.array_of_tables_contents() ?
|
t[last] = p.array_of_tables_contents() ?
|
||||||
|
|
Loading…
Reference in New Issue