aboutsummaryrefslogtreecommitdiff
path: root/src/checker.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2021-04-22 00:04:47 +0100
committergingerBill <bill@gingerbill.org>2021-04-22 00:04:47 +0100
commit65551ba8fb862a9caef97b3c84b17baa7715bbb6 (patch)
tree633209b38e096e50172463c3aa7b67703ef3336c /src/checker.cpp
parentc7d92562c2d8a168687c4dbfc9c31e8797a2365d (diff)
Add `optimization_mode` attribute for procedures
Allowed modes: "none", "minimal", "size", "speed" Currently: none == minimal and size == speed
Diffstat (limited to 'src/checker.cpp')
-rw-r--r--src/checker.cpp23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/checker.cpp b/src/checker.cpp
index 9233ad61e..10376b149 100644
--- a/src/checker.cpp
+++ b/src/checker.cpp
@@ -2572,6 +2572,29 @@ DECL_ATTRIBUTE_PROC(proc_decl_attribute) {
}
}
return true;
+ } else if (name == "optimization_mode") {
+ ExactValue ev = check_decl_attribute_value(c, value);
+ if (ev.kind == ExactValue_String) {
+ String mode = ev.value_string;
+ if (mode == "none") {
+ ac->optimization_mode = ProcedureOptimizationMode_None;
+ } else if (mode == "minimal") {
+ ac->optimization_mode = ProcedureOptimizationMode_Minimal;
+ } else if (mode == "size") {
+ ac->optimization_mode = ProcedureOptimizationMode_Size;
+ } else if (mode == "speed") {
+ ac->optimization_mode = ProcedureOptimizationMode_Speed;
+ } else {
+ error(elem, "Invalid optimization_mode for '%.*s'. Valid modes:", LIT(name));
+ error_line("\tnone\n");
+ error_line("\tminimal\n");
+ error_line("\tsize\n");
+ error_line("\tspeed\n");
+ }
+ } else {
+ error(elem, "Expected a string for '%.*s'", LIT(name));
+ }
+ return true;
}
return false;
}