43 lines
884 B
V
43 lines
884 B
V
module codemodel
|
|
|
|
pub struct Const {
|
|
name string
|
|
value string
|
|
}
|
|
|
|
pub fn parse_const(code_ string) !Const {
|
|
code := code_.trim_space().all_before('\n')
|
|
if !code.contains('=') {
|
|
return error('code <${code_}> is not of const')
|
|
}
|
|
return Const{
|
|
name: code.split('=')[0].trim_space()
|
|
value: code.split('=')[1].trim_space()
|
|
}
|
|
}
|
|
|
|
pub fn parse_consts(code_ string) ![]Const {
|
|
mut code := code_.trim_space()
|
|
code = code.replace('const (', 'const(')
|
|
|
|
const_codes := code.split('\n').filter(it.trim_space().starts_with('const '))
|
|
|
|
mut consts := const_codes.map(parse_const(it)!)
|
|
|
|
const_blocks := code.split('const(')
|
|
|
|
if const_blocks.len == 1 {
|
|
return consts
|
|
}
|
|
|
|
for i, block in const_blocks {
|
|
if i == 0 {
|
|
continue
|
|
}
|
|
stmts := block.trim_string_left('const(').all_before('\n)').trim_space().split('\n')
|
|
consts << stmts.map(parse_const(it)!)
|
|
}
|
|
|
|
return consts
|
|
}
|