Skip to content

Commit

Permalink
codegen: Fix codegen for prefix operators
Browse files Browse the repository at this point in the history
  • Loading branch information
alimpfard committed Aug 28, 2024
1 parent d9a7443 commit 6109d03
Showing 1 changed file with 20 additions and 4 deletions.
24 changes: 20 additions & 4 deletions selfhost/codegen.jakt
Original file line number Diff line number Diff line change
Expand Up @@ -4369,6 +4369,11 @@ struct CodeGenerator {
}

let generate_method_name = fn[this, &call, &name, &output]() throws {
if name.is_prefix() {
output.append(name.as_name_for_use())
return
}

let generic_parameters = call.type_args
if not generic_parameters.is_empty() {
output.append("template ")
Expand Down Expand Up @@ -4405,7 +4410,9 @@ struct CodeGenerator {
} else {
// object.method(...) -> method(object, ...)
generate_method_name()
output.append("(")
if not name is Operator {
output.append("(")
}
generate_object(output, syntactically_self_contained: true)
}

Expand Down Expand Up @@ -4505,7 +4512,10 @@ struct CodeGenerator {
if function.type is ImplicitConstructor or function.type is ExternalClassConstructor {
let type_id = call.return_type
let type = .program.get_type(type_id)
output.append(.codegen_namespace_path(call))
let name = call.name_for_codegen()
if not name.is_prefix() and name.is_scopable() {
output.append(.codegen_namespace_path(call))
}

match type {
Struct(struct_id) => {
Expand Down Expand Up @@ -4571,11 +4581,17 @@ struct CodeGenerator {
}
}
} else {
output.append(.codegen_namespace_path(call))
let name = call.name_for_codegen()
if not name.is_prefix() and name.is_scopable() {
output.append(.codegen_namespace_path(call))
}
output.append(call.name_for_codegen().as_name_for_use())
}
} else {
output.append(.codegen_namespace_path(call))
let name = call.name_for_codegen()
if not name.is_prefix() and name.is_scopable() {
output.append(.codegen_namespace_path(call))
}
output.append(call.name_for_codegen().as_name_for_use())
}

Expand Down

0 comments on commit 6109d03

Please sign in to comment.