| Commit message (Collapse) | Author | Age | Files | Lines | ||
|---|---|---|---|---|---|---|
| ... | ||||||
| * | c: recognize __attribute__ as decltok, improve diagnostic for expected ↵ | 2025-12-22 | 1 | -1/+2 | ||
| | | | | | declaration | |||||
| * | preprocessor make some errors just warnings | 2025-12-22 | 1 | -4/+6 | ||
| | | ||||||
| * | c/c.c: cleanup exprparse a little | 2025-12-22 | 1 | -13/+12 | ||
| | | ||||||
| * | c: Fix some dumb uses of initialized stuff | 2025-12-22 | 2 | -10/+12 | ||
| | | | | | | | Can't figure out what's wrong with the change to struct expr from 9721d6ba40 but it makes valgrind complain and causes miscompilation of the compiler itself.. | |||||
| * | c: keyword aliases | 2025-12-21 | 3 | -66/+81 | ||
| | | | | | | Some linux headers use __signed__ for whatever reason.. this is a general fix for those alternate keyword | |||||
| * | c: allow `return voidfn()` extension | 2025-12-21 | 1 | -4/+30 | ||
| | | ||||||
| * | lexer: more small optimizations | 2025-12-21 | 1 | -14/+33 | ||
| | | ||||||
| * | lexer: note source of #include when error occurs in #included file | 2025-12-20 | 2 | -1/+8 | ||
| | | ||||||
| * | c: small typechecking bugfixes | 2025-12-20 | 1 | -3/+3 | ||
| | | ||||||
| * | some static assertions for packed type sizes | 2025-12-20 | 1 | -6/+8 | ||
| | | ||||||
| * | backend: unify pass memory allocation strategies | 2025-12-20 | 1 | -1/+1 | ||
| | | | | | | | It was all over the place for temporary data structures used by individual passes. Now there is an arena specifically for that, which is nicer. | |||||
| * | c: support CRLF newlines | 2025-12-20 | 1 | -3/+11 | ||
| | | ||||||
| * | c: fix a silly C edge case with function redeclaration storage class | 2025-12-20 | 1 | -14/+21 | ||
| | | | | | | | C (or at least clang and gcc) allows declaring `static int f(...);` and defining it later as `int f(...) {...}`, omitting the 'static' in the latter definition. | |||||
| * | lexer: fix remnant use of TKEOF for character | 2025-12-20 | 1 | -9/+7 | ||
| | | ||||||
| * | optimize lexer a bit more | 2025-12-20 | 2 | -62/+88 | ||
| | | ||||||
| * | lexer: convert pp-idents to keywords only after preprocessing | 2025-12-20 | 2 | -71/+75 | ||
| | | ||||||
| * | c: factor out to tldecl(), improve error recovery, | 2025-12-20 | 1 | -73/+97 | ||
| | | ||||||
| * | c.h init zero bitset portability | 2025-12-19 | 1 | -1/+1 | ||
| | | ||||||
| * | c: support 0-length arrays as syntax for flexible array members | 2025-12-19 | 1 | -19/+29 | ||
| | | | | | | Keeping the expr around in the decllist paves the way for VLA support later on | |||||
| * | c: fix incr/decr codegen for floats | 2025-12-19 | 1 | -2/+2 | ||
| | | ||||||
| * | c: hack to support __FUNCTION__ GNU extension | 2025-12-19 | 1 | -4/+10 | ||
| | | ||||||
| * | cpp: GNU extension for named variadic arguments | 2025-12-18 | 1 | -4/+7 | ||
| | | ||||||
| * | cpp: better error recovery for #define syntax error | 2025-12-18 | 1 | -6/+7 | ||
| | | ||||||
| * | c: fix uninitiliazed field in decltypes | 2025-12-17 | 1 | -0/+1 | ||
| | | ||||||
| * | nicer defaults and facilities for cross-compilation | 2025-12-17 | 1 | -2/+16 | ||
| | | ||||||
| * | c: improve some type error diagnostics | 2025-12-15 | 1 | -13/+22 | ||
| | | ||||||
| * | create distinct interned string type | 2025-12-15 | 4 | -75/+76 | ||
| | | | | | | | | | | | | | | | Interned strings are used pervasively, so it's a good idea to add a layer of type safety to differentiate them from general cstrs and avoid potential bugs from comparing non-interned and interned strings. Not that that's happened so far that I can remember, but it could. I'm 90% sure it's legal to alias `struct {char c;}` pointers with `char` pointers. This specific typedef gives type safety but with a simple one-way `internstr -> const char *` typecast (with `&istr->c`). Converting the other way around is more intentional: a straight up cast `(internstr)cstr` which sticks out as unchecked and probably wrong, or calling the intern(cstr) function, which is the right way. | |||||
| * | move intern() to mem.c | 2025-12-15 | 3 | -47/+0 | ||
| | | | | | | Being in lex.c was vestigial, since it was being used all over the frontend and backend. | |||||
| * | lex: loop with goto instead of tail recursion | 2025-12-15 | 1 | -7/+8 | ||
| | | | | | | This uncovered a edgecase with loops and lifetime construction in regalloc! | |||||
| * | lexer: use a hashmap to lookup keywords | 2025-12-15 | 2 | -28/+28 | ||
| | | ||||||
| * | c: error when defining function with incomplete parameter type | 2025-12-15 | 1 | -0/+4 | ||
| | | ||||||
| * | c: support forward-declared enums | 2025-12-15 | 1 | -34/+32 | ||
| | | | | | This is a common non-standard GNU extension. | |||||
| * | c: emit data for __func__ lazily | 2025-12-15 | 1 | -15/+16 | ||
| | | ||||||
| * | c: fix another memory-leak-when-errors case | 2025-12-14 | 1 | -1/+2 | ||
| | | ||||||
| * | c: as a hack, warn for zero-length array instead of error | 2025-12-14 | 1 | -1/+1 | ||
| | | | | | | Treated as unsized array T[]. This shows up in some linux headers as a non-standard way to have flexible array members. | |||||
| * | c/builtin: fix vacopy | 2025-12-14 | 1 | -5/+6 | ||
| | | ||||||
| * | c: fix memory leak if initializer data if error | 2025-12-14 | 1 | -1/+1 | ||
| | | ||||||
| * | eval: long double placeholder | 2025-12-14 | 1 | -1/+2 | ||
| | | ||||||
| * | cpp: support #line directives | 2025-12-14 | 1 | -10/+75 | ||
| | | ||||||
| * | cpp: correctly handle extra tokens after directives | 2025-12-14 | 1 | -16/+21 | ||
| | | ||||||
| * | only put dats can in .text now when emitting it | 2025-12-14 | 1 | -2/+2 | ||
| | | ||||||
| * | various relocation related optimization | 2025-12-14 | 1 | -3/+3 | ||
| | | | | | | | | | | | With 59ca5a8db, querying if a symbol is defined is cheap. If we're compiling code that calls foo() and we defined foo() in this compilation unit, we already know its offset within the .text section, so use it instead of emitting a relocation for the linker to handle. Also, put small literal data in the .text section instead of .rodata. This seems to improve performance (cache locality?), and as a bonus, it will be good for aarch64's instr encoding with smallish PC-relative offsets. | |||||
| * | c: handle more static eval edgecases for int -> ptr | 2025-12-13 | 2 | -5/+20 | ||
| | | | | | | sqlite3 was falling back to `((void*)&((char*)0)[X])` for INT_TO_PTR, which this handles now. | |||||
| * | c: case/default labels only create new blocks when necessary | 2025-12-13 | 1 | -7/+11 | ||
| | | ||||||
| * | fix position independent loads of function symbols. | 2025-12-13 | 1 | -3/+3 | ||
| | | | | | | | | | For `extern int x[1];`, can use PCREL32 for &x. But for `extern int x(int)`, must use GOTREL, when not being called directly (that's PLT). Therefore the type of an external symbol (actually just whether it denotes a function) matters when deciding what kind of relocation to emit, so keep that information. | |||||
| * | s/amd64/x86_64/ | 2025-12-12 | 1 | -1/+1 | ||
| | | ||||||
| * | c: switch stmt diagnostics | 2025-12-12 | 1 | -8/+49 | ||
| | | | | | For duplicate cases, case value overflow | |||||
| * | lex: use pmap for macro lookup | 2025-12-12 | 2 | -126/+70 | ||
| | | | | | To reduce hashmap code repetition. Also add pmap_del for this purpose | |||||
| * | rename arraylength macro -> countof | 2025-12-11 | 3 | -51/+51 | ||
| | | ||||||
| * | c: accept C99 `[static N]` style array decls, changes to fn quals | 2025-12-11 | 1 | -24/+45 | ||
| | | | | | | | Function parameters qualifiers don't matter outside of function definition. `int (const int)` should be compatible with `int(int)` etc. So no need to store them in the typedata. | |||||