aboutsummaryrefslogtreecommitdiff
path: root/src/server/analysis.odin
diff options
context:
space:
mode:
authorDanielGavin <danielgavin5@hotmail.com>2024-07-25 21:56:36 +0200
committerDanielGavin <danielgavin5@hotmail.com>2024-07-25 21:56:36 +0200
commit18afea306114de303161f4aa044fb9842db1b10c (patch)
tree483e8dc928d577b0ada6ae61be0cc6aa2a63eabe /src/server/analysis.odin
parent5f37d25310d282c0370f082328b5268e344b131c (diff)
Support soa in generics
Diffstat (limited to 'src/server/analysis.odin')
-rw-r--r--src/server/analysis.odin26
1 files changed, 24 insertions, 2 deletions
diff --git a/src/server/analysis.odin b/src/server/analysis.odin
index 14b1aad..8cc5bee 100644
--- a/src/server/analysis.odin
+++ b/src/server/analysis.odin
@@ -489,7 +489,13 @@ is_symbol_same_typed :: proc(
return false
}
- return is_symbol_same_typed(ast_context, a_symbol, b_symbol)
+ a_is_soa := .Soa in a_symbol.flags
+ b_is_soa := .Soa in a_symbol.flags
+
+ return(
+ is_symbol_same_typed(ast_context, a_symbol, b_symbol) &&
+ a_is_soa == b_is_soa \
+ )
case SymbolFixedArrayValue:
b_value := b.value.(SymbolFixedArrayValue)
@@ -561,7 +567,13 @@ is_symbol_same_typed :: proc(
return false
}
- return is_symbol_same_typed(ast_context, a_symbol, b_symbol)
+ a_is_soa := .Soa in a_symbol.flags
+ b_is_soa := .Soa in a_symbol.flags
+
+ return(
+ is_symbol_same_typed(ast_context, a_symbol, b_symbol) &&
+ a_is_soa == b_is_soa \
+ )
case SymbolMapValue:
b_value := b.value.(SymbolMapValue)
@@ -2826,6 +2838,10 @@ make_symbol_array_from_ast :: proc(
}
}
+ if common.array_is_soa(v) {
+ symbol.flags |= {.Soa}
+ }
+
return symbol
}
@@ -2845,6 +2861,12 @@ make_symbol_dynamic_array_from_ast :: proc(
expr = v.elem,
}
+
+ if common.dynamic_array_is_soa(v) {
+ symbol.flags |= {.Soa}
+ }
+
+
return symbol
}