Rangi
fa9e29e4ce
Implement ++ operator for string concatenation ( #1698 )
2025-06-12 22:52:00 +02:00
Rangi
5d998ef483
Restrict custom binary and graphics digits ( #1693 )
...
* Restrict custom binary and graphics digits
* Update documentation
* Fix build error
2025-05-22 10:52:51 +02:00
Rangi
126b1e5726
Reuse startsIdentifier and continuesIdentifier functions ( #1695 )
2025-05-19 15:31:26 -04:00
Rangi
e45b9625ca
Group sequences of garbage characters ( #1672 )
2025-04-30 23:31:41 -04:00
Rangi
0b7cda9e0c
Allow negative values to count macro arguments from the end ( #1670 )
2025-04-20 00:37:50 -04:00
Rangi42
2cdbb145da
Avoid use of goto in shiftChar
2025-02-27 14:17:01 -05:00
Rangi
632342b254
Use LCOV_EXCL comments to exclude some lines from test coverage ( #1662 )
2025-02-16 13:56:55 -05:00
Rangi
b2e865ee2a
Disable EQUS expansion for raw symbols (by parsing them as strings) ( #1648 )
2025-02-15 10:44:51 +01:00
Rangi
3feb75f84f
Implement new string functions ( #1655 )
...
`STRFIND`, `STRRFIND`, `STRCHAR`, `STRSLICE`, `CHARCMP`, `CHARSIZE`, and `REVCHAR`
2025-02-14 23:09:45 +01:00
Rangi42
48412e9c56
Some miscellaneous refactoring and copy-editing
2025-02-10 16:51:51 +01:00
Rangi
4c916b8da8
Parser refers to "symbol"s, "label"s, and "local label"s, not "identifier"s ( #1652 )
...
This better matches how the lexed tokens are discussed in rgbasm(5)
2025-02-06 18:01:33 +01:00
Rangi
c19ddc80f0
Fix failing assertion with backslash at EOF in macro arguments ( #1634 )
...
`Expansion::advance()` can increase its offset beyond the size,
so I don't think this assumption was valid in the first place;
`BufferedContent::advance()` should be able to as well.
2025-01-28 21:51:11 -05:00
Rangi42
d54619a453
Remove colNo column tracking from lexer
...
This was added as part of 71f88717 just for debug and fstack trace
output, but we no longer output it anyway.
2025-01-28 01:12:18 -05:00
Rangi42
cae31005f8
Always use braces with InsertBraces: true in .clang-format
2025-01-27 20:12:12 -05:00
Rangi42
01c9106b59
Include windows.h before other Win32 header files
2025-01-27 20:12:12 -05:00
Rangi42
b8b60207f5
Use // line comments not /* block comments
2025-01-27 20:12:12 -05:00
Rangi42
a354af3d08
Reformat source files with clang-format 19.1.7
2025-01-27 20:12:12 -05:00
Rangi42
890528812e
Prefer C++ constructs to C-style sizeof-based macros
2025-01-24 18:56:41 -05:00
Rangi42
84f59e14ed
Rename Z80 prefix to SM83
2025-01-24 12:11:46 -05:00
Rangi42
0ee4ba95b3
Replace old-style cast in Windows-only code with static_cast
2025-01-16 23:41:12 -05:00
Rangi42
4e2464a69d
Replace some #define with constexpr
2025-01-04 03:53:59 -05:00
Sylvie
b877c81c32
Use C++-style casts ( #1576 )
2024-12-09 21:56:54 -05:00
Sylvie
573e044b30
Deprecate LDIO ( #1567 )
...
* Deprecate `LDIO`
* `ld [$ff00+n8], a` is not treated as `ldh [n8], a`
2024-12-05 12:49:13 -05:00
Sylvie
a2ff653a83
Fix nested undefined interpolation segfault ( #1542 )
2024-10-16 00:09:47 +02:00
Sylvie
a13723c523
Implement 0x/0o/0b number prefixes ( #1533 )
2024-10-08 15:56:00 -04:00
Rangi42
a9e49a09fd
Allow tab character after backslash line continuation
2024-10-01 22:41:55 -04:00
Sylvie
6b89938da7
Avoid treating labels and macros differently in column 1 ( #1515 )
...
Fixes #1512
2024-09-23 01:26:25 +02:00
Sylvie
9ef2e43bf7
Track local label scope, string equated as .. ( #1504 )
2024-09-18 09:52:30 -04:00
Sylvie
197f6cb0ba
No need for .c_str() with keywordDict lookups ( #1505 )
2024-09-18 12:23:05 +02:00
Rangi42
02439b18c0
\# will always be defined inside macros
...
This lets the case structure here match the other branches
2024-09-15 00:00:00 -04:00
Sylvie
122ef95d9c
Implement . string constant for the current label scope ( #1499 )
2024-09-13 21:20:01 +02:00
Rangi42
6bc2446966
Rephrase error messages for consistency
2024-09-10 21:38:50 +02:00
Rangi42
8cd0e66297
Revert "Implement INCLUDE_ONCE directive ( #1481 )"
...
This reverts commit 5f07095f6d .
2024-09-08 11:30:31 -04:00
sukus
5f07095f6d
Implement INCLUDE_ONCE directive ( #1481 )
...
Identify files by (device, inode), not by path, so that symlinks,
relative paths, case-insensitive paths, or other edge cases
do not result in double includes.
2024-09-08 00:02:02 -04:00
ISSOtm
610f04beeb
Fix condition for assuming at EOF
...
Part of that condition's purpose is to ensure that we read the correct
lexer state; but it's possible now for the fstack to be non-empty
*before* the lexer state is registered, i.e. if there is an error
in the function that registers it.
This causes a NULL pointer deref.
2024-09-05 17:48:52 +02:00
Sylvie
1283b0b6a6
Allow dollar signs in identifiers ( #1493 )
2024-09-03 23:09:06 +02:00
Rangi42
a098213053
Rearrange switches so default cases are last
2024-09-01 13:00:04 -04:00
Sylvie
b438c83bda
Implement a '#' prefix for raw identifiers that may alias keywords ( #1480 )
...
* Implement a '#' prefix for raw identifiers that may alias keywords
* Review comments
* Disallow hashless raw identifiers in interpolations
* Run clang-format
2024-08-21 19:31:44 +02:00
Sylvie
57c3d74b9e
Use a custom generic tagged union Either instead of std::variant for efficiency ( #1476 )
...
* Implement custom generic tagged union `Either`
This should be more efficient than `std::variant`, while still
keeping runtime safety as it `assert`s when `get`ting values.
* Use `Either` for RPN expressions
* Use `Either` for file stack node data
* Use `Either` for `File` buffer
* Use `Either` for `STRFMT` args
* Use `Either` for RGBLINK symbol values
* Support an equivalent of `std::monostate` for `Either`
* Use `Either` for lexer tokens
* Use `Either` for symbol values
* Use `Either` for lexer mmap/buffer state
2024-08-20 21:19:11 +02:00
Rangi42
ee3a93a442
Test macro args \0 and \<0>
2024-08-18 21:38:45 -04:00
Sylvie
b987e5669f
Comment the parsers better ( #1463 )
2024-08-09 21:36:52 -04:00
Sylvie
e93190d491
Implement BITWIDTH and TZCOUNT functions ( #1450 )
2024-08-07 10:39:30 -04:00
Sylvie
7435630d6a
Error messages note when a symbol has been purged ( #1453 )
2024-08-06 15:35:06 -04:00
Sylvie
13a8895fca
Improve the error messages for interpolating undefined or invalid symbols ( #1423 )
2024-07-25 17:36:02 -04:00
Sylvie
ee748cfe26
Miscellaneous refactoring of code and docs ( #1411 )
2024-06-18 20:47:31 +02:00
Sylvie
623c3f662c
Allow NUL characters in strings ( #1405 )
2024-06-18 14:26:18 -04:00
Rangi42
39e9315e8a
Use a smaller size for the lexer buffer
...
Large sizes are more efficient when it's actually buffered,
but most of the time `mmap` is used instead, and the extra size
just slows down allocation of lexer states.
2024-05-17 20:59:42 -04:00
Sylvie
e2633d5b66
Use the standard stream buffer size for the lexer buffer ( #1396 )
2024-05-17 11:02:36 +02:00
Sylvie
a234da42a6
Replace assert with assume for release build optimization ( #1390 )
2024-04-02 11:09:31 -04:00
Rangi42
eb708ebee5
Rename some variables left from the C parser (e.g. yylval)
2024-03-29 19:42:23 -04:00