aboutsummaryrefslogtreecommitdiffhomepage
path: root/c
Commit message (Collapse)AuthorAgeFilesLines
* c: default enum to unsigned int backing typelemon2026-03-151-1/+3
| | | | Matches GCC behavior.
* eval & fold: handle division overflow for MIN/-1lemon2026-03-141-0/+3
|
* cpp: better handling for #include file not foundlemon2026-03-141-12/+20
| | | | | | Instead of attempting to keep going (since things will probably break due to missing declarations), just report any other #include errors and abort.
* c: static eval refactoringlemon2026-03-143-262/+384
| | | | | Explicit node for static symbol (addresses). Should not break with edge cases like the previous ad-hoc approach. And some other bugfixes
* c: relax constexpr constraints, fix alignoflemon2026-03-092-30/+49
| | | | | | | | | | | | - Allow short-circuiting of constant logical expressions where the unevaluated operand is not a constant expression (`1 || 0/0`) - Allow constant integer expressions that evaluate to zero to be used as null pointer constants (GNU extension). + According to the standard, `int *x = 5*0;` should be rejected. But compilers evaluate `5*0 -> 0` and allow it as if a null pointer literal.
* cpp: #include MACRO, free tkslemon2026-03-061-0/+1
|
* c: recognize another static initializer edge caselemon2026-03-051-3/+2
| | | | | | I think globsym & expr2reloc should be rewritten to be more robust to this kind of thing. Accumulate offsets whilst recursing into the child node that might contain a direct global symbol reference kind of thing.
* cpp: get rid of unnecessary ugly global variable for lexing header namelemon2026-03-051-31/+23
| | | | Make it a parameter.
* cpp: implement #include MACRO_NAMElemon2026-03-051-55/+98
|
* cpp: #include".." shouldn't look in working directorylemon2026-03-051-6/+8
|
* c: do not try to eval conditional expression's not taken branchlemon2026-03-051-2/+0
|
* driver: fix -pthread, -Ulemon2026-03-021-1/+5
|
* add bswap16/32/64lemon2026-03-023-32/+77
| | | | | - frontend: __builtin_bswapX intrinsics - backend: ObswapX instructions
* cpp: fix token spacing edge case when empty macros are involvedlemon2026-03-011-1/+5
|
* cpp: fix token spacing (#2) (hopefully)lemon2026-03-012-35/+80
|
* c: static intializer bugfix introduced in6c3f1593e9lemon2026-02-281-0/+1
|
* cpp: allow comments between function-like macro name and argumentslemon2026-02-261-8/+27
|
* c: allow casting of symbol address to intptr_t in static initializerslemon2026-02-252-2/+4
|
* preprocessor: use shared static buffers for replacement listslemon2026-02-251-150/+178
| | | | | | | One for macro definitions' bodies, another one for function-like macros with substituted arguments in the macro expansion stack. Cuts down on a lot of individual allocations. #undef'd macros' replacement lists are "leaked" but that is very minor
* fix various warningslemon2026-02-241-1/+1
|
* diagnostics: also print #include provenance for warningslemon2026-02-242-3/+4
|
* C23 true and false keywordslemon2026-02-241-3/+5
|
* cpp: fix __has_builtinlemon2026-02-231-2/+8
|
* cpp: add __COUNTER__ macrolemon2026-02-231-131/+172
|
* c: fix using string literal as conditional expression conditionallemon2026-02-221-12/+28
|
* preprocessor: fix an edge case with erroneously recursive macro expansionlemon2026-02-221-26/+42
|
* cpp: better diagnosticslemon2026-02-211-13/+40
|
* c: fix default argument promotion for function typeslemon2026-02-211-0/+1
|
* ir: basic inlining pass implementationlemon2026-02-181-1/+2
|
* cpp: add __VA_OPT__ and comma ## __VA_ARGS__ pastinglemon2026-02-061-5/+40
|
* c: support at least parsing C99 _Complex typeslemon2026-01-252-5/+16
|
* c: GNU __attribute__ stubslemon2026-01-253-10/+71
|
* driver: -iquote, -isystem, etclemon2026-01-121-15/+27
| | | | With GCC-like search order
* cpp: prioritize internal headers over system headerslemon2026-01-101-6/+6
|
* Add version tracking. Starting at 0.1.0lemon2026-01-091-4/+14
|
* c: fix use after freelemon2026-01-091-1/+2
| | | | | A silly one, declsbuf.p can be realloc'd in the call to putdecl, but in this statement that pointer could be fetched before the call.
* cpp: fix pasting ident+keywordlemon2026-01-091-4/+7
|
* lexer: multibyte escape seqs in wide character literallemon2026-01-091-4/+13
| | | | (hacky)
* c: allow 'register' in func parameterlemon2026-01-091-1/+1
|
* cpp: fix multiline comment in skipped preprocessor directivelemon2026-01-091-2/+16
|
* cpp: fix single-line comment after preprocessor directivelemon2026-01-091-1/+1
| | | | It was eating up the newline token
* c: fix diagnostic with "return <undeclared>"lemon2025-12-311-2/+2
|
* backend: separate instrs for integer/float storelemon2025-12-311-5/+5
|
* c: SYM expr should store decl ref as an index, not pointerlemon2025-12-303-52/+59
| | | | | | | | Because envdecls (now declsbuf) can be resized and invalidate those pointers. I missed this because the default initialization size of that buffer (and the fact that it would mostly only manifest with function-local expressions) made it not really come up in practice. Silly
* cpp: nicer handling of predefined macroslemon2025-12-291-40/+29
|
* backend: start implementing aarch64lemon2025-12-281-0/+4
|
* avoid GOT relocations in unnecessary instanceslemon2025-12-251-1/+1
| | | | | Also change xcon to have a flagset for symbols (whether it's a function, locally defined; later: thread local, etc).
* c: add _Genericlemon2025-12-221-0/+53
|
* c: recognize __attribute__ as decltok, improve diagnostic for expected ↵lemon2025-12-221-1/+2
| | | | declaration
* preprocessor make some errors just warningslemon2025-12-221-4/+6
|