List of known bugs:
[ ] macros are not allowed at the expression level. This is not necessarily a bug, but does
- bring many complications to the table about how resolve this.
+ bring many complications to the table about how resolve this. Current solution is to
+ turn expression macros (macros that specify a return value) into a `do` expression.
+
+[ ] Enums suck. Make them more powerful.
+
+[ ] add `do` expressions:
+
+ x := do {
+ a := 1;
+ b := 2;
+ return a + b;
+ };
+
+[X] Add support for tabs in error messages.
+
+[ ] switch statements should work with any type that supports '=='.
[X] recursive quick-procedures / procedures that use #auto have trouble if the first lexical
return statement is a recursive call.
#endif
i32 linelength = 0;
+ i32 first_char = 0;
char* walker = err->pos.line_start;
+ while (*walker == ' ' || *walker == '\t') first_char++, linelength++, walker++;
while (*walker != '\n') linelength++, walker++;
if (colored_printing) bh_printf("\033[90m");
bh_printf("%b\n", err->pos.line_start, linelength);
char* pointer_str = bh_alloc_array(global_scratch_allocator, char, linelength + numlen);
- memset(pointer_str, ' ', linelength + numlen);
+ memset(pointer_str, ' ', numlen);
+ memcpy(pointer_str + numlen - 1, err->pos.line_start, first_char);
+ memset(pointer_str + first_char + numlen - 1, ' ', err->pos.column - first_char);
memset(pointer_str + err->pos.column + numlen - 1, '~', err->pos.length - 1);
pointer_str[err->pos.column + numlen - 2] = '^';
pointer_str[err->pos.column + numlen + err->pos.length - 1] = 0;