This commit is contained in:
2025-11-23 05:03:32 +01:00
parent 0916ff07f8
commit 2998a6e806

View File

@@ -237,12 +237,21 @@ pub fn (t Type) empty_value() string {
// parse_type parses a type string into a Type struct // parse_type parses a type string into a Type struct
pub fn parse_type(type_str string) Type { pub fn parse_type(type_str string) Type {
println('Parsing type string: "${type_str}"') mut type_str_cleaned := type_str.trim_space()
mut type_str_trimmed := type_str.trim_space()
// Remove inline comments
if type_str_cleaned.contains('//') {
type_str_cleaned = type_str_cleaned.all_before('//').trim_space()
}
// Remove default values
if type_str_cleaned.contains('=') {
type_str_cleaned = type_str_cleaned.all_before('=').trim_space()
}
// Handle struct definitions by extracting just the struct name // Handle struct definitions by extracting just the struct name
if type_str_trimmed.contains('struct ') { if type_str_cleaned.contains('struct ') {
lines := type_str_trimmed.split_into_lines() lines := type_str_cleaned.split_into_lines()
for line in lines { for line in lines {
if line.contains('struct ') { if line.contains('struct ') {
mut struct_name := '' mut struct_name := ''
@@ -252,76 +261,74 @@ pub fn parse_type(type_str string) Type {
struct_name = line.all_after('struct ').all_before('{') struct_name = line.all_after('struct ').all_before('{')
} }
struct_name = struct_name.trim_space() struct_name = struct_name.trim_space()
println('Extracted struct name: "${struct_name}"')
return Object{struct_name} return Object{struct_name}
} }
} }
} }
// Check for simple types first // Check for simple types first
if type_str_trimmed == 'string' { if type_str_cleaned == 'string' {
return String{} return String{}
} else if type_str_trimmed == 'bool' || type_str_trimmed == 'boolean' { } else if type_str_cleaned == 'bool' || type_str_cleaned == 'boolean' {
return Boolean{} return Boolean{}
} else if type_str_trimmed == 'int' { } else if type_str_cleaned == 'int' {
return Integer{} return Integer{}
} else if type_str_trimmed == 'u8' { } else if type_str_cleaned == 'u8' {
return Integer{ return Integer{
bytes: 8 bytes: 8
signed: false signed: false
} }
} else if type_str_trimmed == 'u16' { } else if type_str_cleaned == 'u16' {
return Integer{ return Integer{
bytes: 16 bytes: 16
signed: false signed: false
} }
} else if type_str_trimmed == 'u32' { } else if type_str_cleaned == 'u32' {
return Integer{ return Integer{
bytes: 32 bytes: 32
signed: false signed: false
} }
} else if type_str_trimmed == 'u64' { } else if type_str_cleaned == 'u64' {
return Integer{ return Integer{
bytes: 64 bytes: 64
signed: false signed: false
} }
} else if type_str_trimmed == 'i8' { } else if type_str_cleaned == 'i8' {
return Integer{ return Integer{
bytes: 8 bytes: 8
} }
} else if type_str_trimmed == 'i16' { } else if type_str_cleaned == 'i16' {
return Integer{ return Integer{
bytes: 16 bytes: 16
} }
} else if type_str_trimmed == 'i32' { } else if type_str_cleaned == 'i32' {
return Integer{ return Integer{
bytes: 32 bytes: 32
} }
} else if type_str_trimmed == 'i64' { } else if type_str_cleaned == 'i64' {
return Integer{ return Integer{
bytes: 64 bytes: 64
} }
} }
// Check for array types // Check for array types
if type_str_trimmed.starts_with('[]') { if type_str_cleaned.starts_with('[]') {
elem_type := type_str_trimmed.all_after('[]') elem_type := type_str_cleaned.all_after('[]')
return Array{parse_type(elem_type)} return Array{parse_type(elem_type)}
} }
// Check for map types // Check for map types
if type_str_trimmed.starts_with('map[') && type_str_trimmed.contains(']') { if type_str_cleaned.starts_with('map[') && type_str_cleaned.contains(']') {
value_type := type_str_trimmed.all_after(']') value_type := type_str_cleaned.all_after(']')
return Map{parse_type(value_type)} return Map{parse_type(value_type)}
} }
// Check for result types // Check for result types
if type_str_trimmed.starts_with('!') { if type_str_cleaned.starts_with('!') {
result_type := type_str_trimmed.all_after('!') result_type := type_str_cleaned.all_after('!')
return Result{parse_type(result_type)} return Result{parse_type(result_type)}
} }
// If no other type matches, treat as an object/struct type // If no other type matches, treat as an object/struct type
println('Treating as object type: "${type_str_trimmed}"') return Object{type_str_cleaned}
return Object{type_str_trimmed}
} }