aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDanielGavin <danielgavin5@hotmail.com>2024-10-05 20:42:25 +0200
committerDanielGavin <danielgavin5@hotmail.com>2024-10-05 20:42:25 +0200
commit8508eb6004ec4dd3fa032d08cf7036daf94d97e5 (patch)
tree1df52cc1ef338b55b9098efd87f886eac85351fd /src
parent969c71414314703751e034d3910132d868f25130 (diff)
Support overriding base functions in objc.
Diffstat (limited to 'src')
-rw-r--r--src/server/analysis.odin12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/server/analysis.odin b/src/server/analysis.odin
index e153cac..5755fac 100644
--- a/src/server/analysis.odin
+++ b/src/server/analysis.odin
@@ -1492,7 +1492,7 @@ expand_struct_usings :: proc(ast_context: ^AstContext, symbol: Symbol, value: Sy
pkg := indexer.index.collection.packages[symbol.pkg]
if obj_struct, ok := pkg.objc_structs[symbol.name]; ok {
- for function, i in obj_struct.functions {
+ _objc_function: for function, i in obj_struct.functions {
base := new_type(ast.Ident, {}, {}, context.temp_allocator)
base.name = obj_struct.pkg
@@ -1504,6 +1504,16 @@ expand_struct_usings :: proc(ast_context: ^AstContext, symbol: Symbol, value: Sy
selector.field = field
selector.expr = base
+ //Check if the base functions need to be overridden. Potentially look at some faster approach than a linear loop.
+ for name, j in names {
+ if name == function.logical_name {
+ names[j] = function.logical_name
+ types[j] = selector
+ ranges[j] = obj_struct.ranges[i]
+ continue _objc_function
+ }
+ }
+
append(&names, function.logical_name)
append(&types, selector)
append(&ranges, obj_struct.ranges[i])