aboutsummaryrefslogtreecommitdiff
path: root/src/utils.c
diff options
context:
space:
mode:
authorMustafa Quraish <[email protected]>2022-02-02 07:20:53 -0500
committerMustafa Quraish <[email protected]>2022-02-02 07:37:39 -0500
commit1a8f96c65f94227faa9747ef876a60f3c313c6f1 (patch)
treed80a396958ff2fc752b620cc5314e27e40b58ecb /src/utils.c
parentUse `type*` instead of `type&` to denote a pointer type (for now) (diff)
downloadcup-1a8f96c65f94227faa9747ef876a60f3c313c6f1.tar.xz
cup-1a8f96c65f94227faa9747ef876a60f3c313c6f1.zip
Type checking of expressions / functions!
This is a bit of a chonky commit, but it adds in the basics of checking the types of expressions / function calls / return types. There's still a lot of work to be done, including: (1) Adding new core types, and casting between allowed types automatically (2) Picking the corrent output type based on input types (for instance float+int == float) (3) We need much better error reporting, the error messages are really vague and unhelpful as-is (4) We also need to work to ensure that a function with a return type actually returns (5) Possible re-factoring to make stuff less hacky when we have more types / structs / arrays / etc.
Diffstat (limited to 'src/utils.c')
-rw-r--r--src/utils.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/utils.c b/src/utils.c
index 2335981..939021a 100644
--- a/src/utils.c
+++ b/src/utils.c
@@ -27,4 +27,9 @@ void _die_location(char *file, int line, Location loc, const char *fmt, ...)
}
i64 i64max(i64 a, i64 b) { return a > b ? a : b; }
-i64 i64min(i64 a, i64 b) { return a < b ? a : b; } \ No newline at end of file
+i64 i64min(i64 a, i64 b) { return a < b ? a : b; }
+
+i64 align_up(i64 val, i64 align)
+{
+ return (val + align - 1) & ~(align - 1);
+} \ No newline at end of file