diff options
| author | gingerBill <bill@gingerbill.org> | 2021-04-22 00:04:47 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2021-04-22 00:04:47 +0100 |
| commit | 65551ba8fb862a9caef97b3c84b17baa7715bbb6 (patch) | |
| tree | 633209b38e096e50172463c3aa7b67703ef3336c /src/checker.cpp | |
| parent | c7d92562c2d8a168687c4dbfc9c31e8797a2365d (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.cpp | 23 |
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; } |