diff options
| author | gingerBill <bill@gingerbill.org> | 2020-07-14 23:01:34 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2020-07-14 23:01:34 +0100 |
| commit | 7ae54ae3b4141ff0136ce9a1684bc16e7d994b41 (patch) | |
| tree | 922364bc791c97067afa92d326adf09643ff96eb /src/check_expr.cpp | |
| parent | b2beb9512f60da01072895028dc6f00c422b6ab8 (diff) | |
Add `-no-dynamic-literals` to disallow dynamic array and map literals
Diffstat (limited to 'src/check_expr.cpp')
| -rw-r--r-- | src/check_expr.cpp | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 80ff37698..a29cdac36 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -8455,8 +8455,10 @@ ExprKind check_expr_base_internal(CheckerContext *c, Operand *o, Ast *node, Type context_name = str_lit("dynamic array literal"); is_constant = false; - add_package_dependency(c, "runtime", "__dynamic_array_reserve"); - add_package_dependency(c, "runtime", "__dynamic_array_append"); + if (!build_context.no_dynamic_literals) { + add_package_dependency(c, "runtime", "__dynamic_array_reserve"); + add_package_dependency(c, "runtime", "__dynamic_array_append"); + } } else if (t->kind == Type_SimdVector) { elem_type = t->SimdVector.elem; context_name = str_lit("simd vector literal"); @@ -8581,7 +8583,6 @@ ExprKind check_expr_base_internal(CheckerContext *c, Operand *o, Ast *node, Type cl->max_count = max; } - } else { isize index = 0; for (; index < cl->elems.count; index++) { @@ -8632,6 +8633,14 @@ ExprKind check_expr_base_internal(CheckerContext *c, Operand *o, Ast *node, Type error(node, "Compound literals are not allowed with intrinsics.x86_mmx"); } } + + + if (t->kind == Type_DynamicArray) { + if (build_context.no_dynamic_literals && cl->elems.count) { + error(node, "Compound literals of dynamic types have been disabled"); + } + } + break; } @@ -8940,8 +8949,12 @@ ExprKind check_expr_base_internal(CheckerContext *c, Operand *o, Ast *node, Type } } - add_package_dependency(c, "runtime", "__dynamic_map_reserve"); - add_package_dependency(c, "runtime", "__dynamic_map_set"); + if (build_context.no_dynamic_literals && cl->elems.count) { + error(node, "Compound literals of dynamic types have been disabled"); + } else { + add_package_dependency(c, "runtime", "__dynamic_map_reserve"); + add_package_dependency(c, "runtime", "__dynamic_map_set"); + } break; } |