mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-05 23:28:48 +00:00
Merge pull request #5182 from Kelimion/dynamic-literals
-dynamic-literals
This commit is contained in:
@@ -459,6 +459,7 @@ struct BuildContext {
|
|||||||
bool ignore_unknown_attributes;
|
bool ignore_unknown_attributes;
|
||||||
bool no_bounds_check;
|
bool no_bounds_check;
|
||||||
bool no_type_assert;
|
bool no_type_assert;
|
||||||
|
bool dynamic_literals; // Opt-in to `#+feature dynamic-literals` project-wide.
|
||||||
bool no_output_files;
|
bool no_output_files;
|
||||||
bool no_crt;
|
bool no_crt;
|
||||||
bool no_rpath;
|
bool no_rpath;
|
||||||
|
|||||||
+1
-1
@@ -9433,7 +9433,7 @@ gb_internal bool is_expr_inferred_fixed_array(Ast *type_expr) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
gb_internal bool check_for_dynamic_literals(CheckerContext *c, Ast *node, AstCompoundLit *cl) {
|
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) {
|
if (cl->elems.count > 0 && (check_feature_flags(c, node) & OptInFeatureFlag_DynamicLiterals) == 0 && !build_context.dynamic_literals) {
|
||||||
ERROR_BLOCK();
|
ERROR_BLOCK();
|
||||||
error(node, "Compound literals of dynamic types are disabled by default");
|
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("\tSuggestion: If you want to enable them for this specific file, add '#+feature dynamic-literals' at the top of the file\n");
|
||||||
|
|||||||
@@ -4844,7 +4844,7 @@ gb_internal lbAddr lb_build_addr_compound_lit(lbProcedure *p, Ast *expr) {
|
|||||||
if (cl->elems.count == 0) {
|
if (cl->elems.count == 0) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
GB_ASSERT(expr->file()->feature_flags & OptInFeatureFlag_DynamicLiterals);
|
GB_ASSERT(expr->file()->feature_flags & OptInFeatureFlag_DynamicLiterals || build_context.dynamic_literals);
|
||||||
|
|
||||||
lbValue err = lb_dynamic_map_reserve(p, v.addr, 2*cl->elems.count, pos);
|
lbValue err = lb_dynamic_map_reserve(p, v.addr, 2*cl->elems.count, pos);
|
||||||
gb_unused(err);
|
gb_unused(err);
|
||||||
|
|||||||
@@ -319,6 +319,7 @@ enum BuildFlagKind {
|
|||||||
BuildFlag_NoBoundsCheck,
|
BuildFlag_NoBoundsCheck,
|
||||||
BuildFlag_NoTypeAssert,
|
BuildFlag_NoTypeAssert,
|
||||||
BuildFlag_NoDynamicLiterals,
|
BuildFlag_NoDynamicLiterals,
|
||||||
|
BuildFlag_DynamicLiterals,
|
||||||
BuildFlag_NoCRT,
|
BuildFlag_NoCRT,
|
||||||
BuildFlag_NoRPath,
|
BuildFlag_NoRPath,
|
||||||
BuildFlag_NoEntryPoint,
|
BuildFlag_NoEntryPoint,
|
||||||
@@ -538,6 +539,7 @@ gb_internal bool parse_build_flags(Array<String> args) {
|
|||||||
add_flag(&build_flags, BuildFlag_NoTypeAssert, str_lit("no-type-assert"), BuildFlagParam_None, Command__does_check);
|
add_flag(&build_flags, BuildFlag_NoTypeAssert, str_lit("no-type-assert"), BuildFlagParam_None, Command__does_check);
|
||||||
add_flag(&build_flags, BuildFlag_NoThreadLocal, str_lit("no-thread-local"), BuildFlagParam_None, Command__does_check);
|
add_flag(&build_flags, BuildFlag_NoThreadLocal, str_lit("no-thread-local"), BuildFlagParam_None, Command__does_check);
|
||||||
add_flag(&build_flags, BuildFlag_NoDynamicLiterals, str_lit("no-dynamic-literals"), BuildFlagParam_None, Command__does_check);
|
add_flag(&build_flags, BuildFlag_NoDynamicLiterals, str_lit("no-dynamic-literals"), BuildFlagParam_None, Command__does_check);
|
||||||
|
add_flag(&build_flags, BuildFlag_DynamicLiterals, str_lit("dynamic-literals"), BuildFlagParam_None, Command__does_check);
|
||||||
add_flag(&build_flags, BuildFlag_NoCRT, str_lit("no-crt"), BuildFlagParam_None, Command__does_build);
|
add_flag(&build_flags, BuildFlag_NoCRT, str_lit("no-crt"), BuildFlagParam_None, Command__does_build);
|
||||||
add_flag(&build_flags, BuildFlag_NoRPath, str_lit("no-rpath"), BuildFlagParam_None, Command__does_build);
|
add_flag(&build_flags, BuildFlag_NoRPath, str_lit("no-rpath"), BuildFlagParam_None, Command__does_build);
|
||||||
add_flag(&build_flags, BuildFlag_NoEntryPoint, str_lit("no-entry-point"), BuildFlagParam_None, Command__does_check &~ Command_test);
|
add_flag(&build_flags, BuildFlag_NoEntryPoint, str_lit("no-entry-point"), BuildFlagParam_None, Command__does_check &~ Command_test);
|
||||||
@@ -1207,6 +1209,9 @@ gb_internal bool parse_build_flags(Array<String> args) {
|
|||||||
case BuildFlag_NoDynamicLiterals:
|
case BuildFlag_NoDynamicLiterals:
|
||||||
gb_printf_err("Warning: Use of -no-dynamic-literals is now redundant\n");
|
gb_printf_err("Warning: Use of -no-dynamic-literals is now redundant\n");
|
||||||
break;
|
break;
|
||||||
|
case BuildFlag_DynamicLiterals:
|
||||||
|
build_context.dynamic_literals = true;
|
||||||
|
break;
|
||||||
case BuildFlag_NoCRT:
|
case BuildFlag_NoCRT:
|
||||||
build_context.no_crt = true;
|
build_context.no_crt = true;
|
||||||
break;
|
break;
|
||||||
|
|||||||
Reference in New Issue
Block a user