aboutsummaryrefslogtreecommitdiff
path: root/src/check_expr.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2022-11-08 14:58:05 +0000
committergingerBill <bill@gingerbill.org>2022-11-08 14:58:05 +0000
commita71daee545f5425aae971c0e00d7064fe53d64c7 (patch)
tree0509041a757de626760408684e2db4c1b22678b3 /src/check_expr.cpp
parent046dd5503211c617a88d7de7d089dd5b74e63500 (diff)
Allow for `-use-static-map-calls` which generates a get procedure per `map`; add `runtime.map_get`
Diffstat (limited to 'src/check_expr.cpp')
-rw-r--r--src/check_expr.cpp15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/check_expr.cpp b/src/check_expr.cpp
index c2753e979..045b22ca2 100644
--- a/src/check_expr.cpp
+++ b/src/check_expr.cpp
@@ -3244,7 +3244,12 @@ void check_binary_expr(CheckerContext *c, Operand *x, Ast *node, Type *type_hint
check_assignment(c, x, yt->Map.key, str_lit("map 'not_in'"));
}
- add_package_dependency(c, "runtime", "__dynamic_map_get");
+ if (build_context.use_static_map_calls) {
+ add_package_dependency(c, "runtime", "map_desired_position");
+ add_package_dependency(c, "runtime", "map_probe_distance");
+ } else {
+ add_package_dependency(c, "runtime", "__dynamic_map_get");
+ }
} else if (is_type_bit_set(rhs_type)) {
Type *yt = base_type(rhs_type);
@@ -8992,8 +8997,14 @@ ExprKind check_index_expr(CheckerContext *c, Operand *o, Ast *node, Type *type_h
o->type = t->Map.value;
o->expr = node;
- add_package_dependency(c, "runtime", "__dynamic_map_get");
+
add_package_dependency(c, "runtime", "__dynamic_map_set");
+ if (build_context.use_static_map_calls) {
+ add_package_dependency(c, "runtime", "map_desired_position");
+ add_package_dependency(c, "runtime", "map_probe_distance");
+ } else {
+ add_package_dependency(c, "runtime", "__dynamic_map_get");
+ }
return Expr_Expr;
}