|
@@ -9351,6 +9351,23 @@ gb_internal bool is_expr_inferred_fixed_array(Ast *type_expr) {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
+gb_internal bool check_for_dynamic_literals(CheckerContext *c, Ast *node, AstCompoundLit *cl) {
|
|
|
+ if (cl->elems.count > 0 && (check_feature_flags(c, node) & OptInFeatureFlag_DynamicLiterals) == 0) {
|
|
|
+ ERROR_BLOCK();
|
|
|
+ error(node, "Compound literals of dynamic types are disabled by default");
|
|
|
+ error_line("\tSuggestion: If you want to enable them for this specific file, add '#+feature dynamic-literals' at the top of the file\n");
|
|
|
+ error_line("\tWarning: Please understand that dynamic literals will implicitly allocate using the current 'context.allocator' in that scope\n");
|
|
|
+ if (build_context.ODIN_DEFAULT_TO_NIL_ALLOCATOR) {
|
|
|
+ error_line("\tWarning: As '-default-to-panic-allocator' has been set, the dynamic compound literal may not be initialized as expected\n");
|
|
|
+ } else if (build_context.ODIN_DEFAULT_TO_PANIC_ALLOCATOR) {
|
|
|
+ error_line("\tWarning: As '-default-to-panic-allocator' has been set, the dynamic compound literal may not be initialized as expected\n");
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ return cl->elems.count > 0;
|
|
|
+}
|
|
|
+
|
|
|
gb_internal ExprKind check_compound_literal(CheckerContext *c, Operand *o, Ast *node, Type *type_hint) {
|
|
|
ExprKind kind = Expr_Expr;
|
|
|
ast_node(cl, CompoundLit, node);
|
|
@@ -9551,11 +9568,6 @@ gb_internal ExprKind check_compound_literal(CheckerContext *c, Operand *o, Ast *
|
|
|
elem_type = t->DynamicArray.elem;
|
|
|
context_name = str_lit("dynamic array literal");
|
|
|
is_constant = false;
|
|
|
-
|
|
|
- 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");
|
|
@@ -9730,11 +9742,9 @@ gb_internal ExprKind check_compound_literal(CheckerContext *c, Operand *o, Ast *
|
|
|
|
|
|
|
|
|
if (t->kind == Type_DynamicArray) {
|
|
|
- if (build_context.no_dynamic_literals && cl->elems.count && (node->file()->feature_flags & OptInFeatureFlag_DynamicLiterals) != 0) {
|
|
|
- ERROR_BLOCK();
|
|
|
- error(node, "Compound literals of dynamic types have been disabled");
|
|
|
- error_line("\tSuggestion: If you want to enable them for this specific file, use '#+feature dynamic-literals' at the top of the file\n");
|
|
|
- error_line("\tWarning: Please understand that dynamic literals will implicitly allocate using the current 'context.allocator' in that scope\n");
|
|
|
+ if (check_for_dynamic_literals(c, node, cl)) {
|
|
|
+ add_package_dependency(c, "runtime", "__dynamic_array_reserve");
|
|
|
+ add_package_dependency(c, "runtime", "__dynamic_array_append");
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -10123,12 +10133,7 @@ gb_internal ExprKind check_compound_literal(CheckerContext *c, Operand *o, Ast *
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if (build_context.no_dynamic_literals && cl->elems.count && (node->file()->feature_flags & OptInFeatureFlag_DynamicLiterals) != 0) {
|
|
|
- ERROR_BLOCK();
|
|
|
- error(node, "Compound literals of dynamic types have been disabled");
|
|
|
- error_line("\tSuggestion: If you want to enable them for this specific file, use '#+feature dynamic-literals' at the top of the file\n");
|
|
|
- error_line("\tWarning: Please understand that dynamic literals will implicitly allocate using the current 'context.allocator' in that scope\n");
|
|
|
- } else {
|
|
|
+ if (check_for_dynamic_literals(c, node, cl)) {
|
|
|
add_map_reserve_dependencies(c);
|
|
|
add_map_set_dependencies(c);
|
|
|
}
|