diff --git a/lib/core/code/model_types.v b/lib/core/code/model_types.v index a4866759..8b907ee7 100644 --- a/lib/core/code/model_types.v +++ b/lib/core/code/model_types.v @@ -237,12 +237,21 @@ pub fn (t Type) empty_value() string { // parse_type parses a type string into a Type struct pub fn parse_type(type_str string) Type { - println('Parsing type string: "${type_str}"') - mut type_str_trimmed := type_str.trim_space() + mut type_str_cleaned := 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 - if type_str_trimmed.contains('struct ') { - lines := type_str_trimmed.split_into_lines() + if type_str_cleaned.contains('struct ') { + lines := type_str_cleaned.split_into_lines() for line in lines { if line.contains('struct ') { 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 = struct_name.trim_space() - println('Extracted struct name: "${struct_name}"') return Object{struct_name} } } } // Check for simple types first - if type_str_trimmed == 'string' { + if type_str_cleaned == '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{} - } else if type_str_trimmed == 'int' { + } else if type_str_cleaned == 'int' { return Integer{} - } else if type_str_trimmed == 'u8' { + } else if type_str_cleaned == 'u8' { return Integer{ bytes: 8 signed: false } - } else if type_str_trimmed == 'u16' { + } else if type_str_cleaned == 'u16' { return Integer{ bytes: 16 signed: false } - } else if type_str_trimmed == 'u32' { + } else if type_str_cleaned == 'u32' { return Integer{ bytes: 32 signed: false } - } else if type_str_trimmed == 'u64' { + } else if type_str_cleaned == 'u64' { return Integer{ bytes: 64 signed: false } - } else if type_str_trimmed == 'i8' { + } else if type_str_cleaned == 'i8' { return Integer{ bytes: 8 } - } else if type_str_trimmed == 'i16' { + } else if type_str_cleaned == 'i16' { return Integer{ bytes: 16 } - } else if type_str_trimmed == 'i32' { + } else if type_str_cleaned == 'i32' { return Integer{ bytes: 32 } - } else if type_str_trimmed == 'i64' { + } else if type_str_cleaned == 'i64' { return Integer{ bytes: 64 } } // Check for array types - if type_str_trimmed.starts_with('[]') { - elem_type := type_str_trimmed.all_after('[]') + if type_str_cleaned.starts_with('[]') { + elem_type := type_str_cleaned.all_after('[]') return Array{parse_type(elem_type)} } // Check for map types - if type_str_trimmed.starts_with('map[') && type_str_trimmed.contains(']') { - value_type := type_str_trimmed.all_after(']') + if type_str_cleaned.starts_with('map[') && type_str_cleaned.contains(']') { + value_type := type_str_cleaned.all_after(']') return Map{parse_type(value_type)} } // Check for result types - if type_str_trimmed.starts_with('!') { - result_type := type_str_trimmed.all_after('!') + if type_str_cleaned.starts_with('!') { + result_type := type_str_cleaned.all_after('!') return Result{parse_type(result_type)} } // If no other type matches, treat as an object/struct type - println('Treating as object type: "${type_str_trimmed}"') - return Object{type_str_trimmed} + return Object{type_str_cleaned} }