Commit Graph
100 Commits
Author SHA1 Message Date
Rangi42 bf0cabb3ea Use std::shared_ptr for lexer capture buffers 2024-03-27 11:27:34 -04:00
Rangi42 32db0a0f18 Rename CaptureBody to Capture, and refactor its methods 2024-03-26 12:29:59 -04:00
Rangi42 a167d23d01 Use content-specific destructors for lexer state
Also rename `LexerState` content structs from `*LexerState` to `*Content`
2024-03-26 12:29:59 -04:00
Rangi42 8b6ae994b1 Use STR and CAT macros for # and ## 2024-03-25 14:22:43 -04:00
Rangi42 2b44672873 Rename a few variables 2024-03-25 14:22:38 -04:00
Rangi42 3568418c5d Remove RGBLINK's unimplemented '-s' "smart linking" placeholder flag 2024-03-25 11:36:23 -04:00
Rangi42 cb59119881 Use automatically-allocated std::string_view for macros 2024-03-25 11:33:17 -04:00
Rangi42 d9e5e57e27 Make CaptureBufs be parser values instead of a single static global 2024-03-23 19:44:54 -04:00
Rangi42 e9e8915725 Refactor to keep lexerState and lexerStateEOL static
Also run `clang-format` on everything
2024-03-23 19:14:46 -04:00
Rangi42 6a5518e0c5 Use RAII to unmap or close the lexer states' files automatically 2024-03-22 14:25:36 -04:00
Rangi42 507439bc25 Refactor macro args to be owned collectively by their fstack contexts 2024-03-22 14:25:36 -04:00
Rangi42 b85c5cde8f Use std::shared_ptr for MacroArgs 2024-03-22 14:25:36 -04:00
Rangi42 de667c8afb Remove unused Visitor template 2024-03-22 03:29:56 -04:00
Rangi42 32b4a6f284 Use "snake_case" consistently in parsers 2024-03-21 11:44:07 -04:00
Rangi42 6560b7819d Add make profile, optimized for callgrind 2024-03-21 11:42:12 -04:00
Rangi42 a862c7b17b Use sed instead of awk to extract Bison version 2024-03-18 15:36:45 -04:00
Rangi42 40db9d5cef Use std::string for lexer state paths 2024-03-18 14:42:05 -04:00
Rangi42 05d79d87f6 Pass std::string references to RPN functions 2024-03-18 14:42:05 -04:00
Rangi42 e96675be03 Pass std::string references to fstack functions 2024-03-18 14:42:05 -04:00
Rangi42 472d1bde06 Pass std::string references to symbol functions 2024-03-18 14:42:05 -04:00
Rangi42 6cabb8c9af Pass std::string references to output functions 2024-03-18 14:42:05 -04:00
Rangi42 7b11c528ef Pass std::string references to section functions 2024-03-18 14:42:05 -04:00
Rangi42 91164ac1b0 Pass std::string references to charmap functions 2024-03-18 14:42:05 -04:00
Rangi42 04899a21cd Pass std::string references to parser semantic functions instead of .c_str() pointers
This also refactors some semantic functions to be more efficient
2024-03-18 14:42:05 -04:00
Rangi42 8f77518406 Use std::string for most intermediate parsed strings
This is a work in progress: its performance is unacceptably slow,
and it is obviously not a complete refactoring:

- The parser's semantic functions are still written for C-style
  strings, taking `.c_str()` pointers instead of `std::string`
  references (and using their methods, `<algorithm>`s, etc).
- Quoted string literals from the lexer still use our `String`
  struct, which wraps around a fixed-size char array.
- Symbol values, macro arguments, and so forth are still pointers
  to C-style strings with unclear ownership semantics (i.e. we
  still have "leaks as a feature").
2024-03-18 14:42:05 -04:00
Rangi42 b76e196c89 Run clang-format on everything 2024-03-18 14:08:57 -04:00
Rangi42 d06376c170 Use std::unordered_map and std::vector for sections
This allows us to control the order in which sections are iterated,
instead of it depending on the internals of `std::map`. (This order
is arbitrary, but should be deterministic regardless.)
2024-03-16 11:51:47 -04:00
Rangi42 cefc4f4aa3 Use std::unordered_map for symbols 2024-03-16 11:19:19 -04:00
Rangi42 a14de10e28 Use std::unordered_map for charmaps 2024-03-16 11:13:14 -04:00
Rangi42 188fcfdd64 Add license header to test/CMakeLists.tst like the rest 2024-03-13 11:55:17 -04:00
Rangi42 846a9411b9 Refactor FileStackNode::dump to not need a helper function 2024-03-10 14:14:34 -04:00
Rangi42 58fdaa8747 Avoid a couple of clang-format quirks 2024-03-10 12:31:03 -04:00
Rangi42 d982d47c56 Use move semantics for more parsed values 2024-03-09 20:05:09 -05:00
Rangi42 569b940b82 No need to manually do the Expression destructor's job 2024-03-09 19:33:53 -05:00
Rangi42 ba104baf3e Refactor mapFile for Windows 2024-03-09 19:22:06 -05:00
Rangi42 cce7f51235 Remove RPN symbol name length limit 2024-03-09 17:56:30 -05:00
Rangi42 9f5bf5e285 Remove an unnecessary .close() call that the destructor handles 2024-03-08 22:29:37 -05:00
Rangi42 0bfade4435 Fix enum: REG_SP == REG_AF == 3 2024-03-08 20:00:29 -05:00
Rangi42 40704b5055 Remove unused yyerror declaration
Also reformat some `enum`s
2024-03-08 19:47:57 -05:00
Rangi42 1b97297d63 Fix a typo bug in sdas_obj.cpp
This was introduced in commit 447c561, PR #1330
2024-03-08 18:30:30 -05:00
Rangi42 75cc12bb3d Use std::optional for fstack paths 2024-03-07 21:41:02 -05:00
Rangi42 563d699394 Avoid an extra operation if !labelScope (thanks, ISSOtm) 2024-03-07 17:33:33 -05:00
Rangi42 e701faa1bc Print summaries at the end of test.sh scripts 2024-03-07 16:45:53 -05:00
Rangi42 aed172071b Replace some macros with static functions or constants 2024-03-07 16:10:05 -05:00
Rangi42 90356ee669 Remove unused #define 2024-03-07 15:07:16 -05:00
Rangi42 0a4a01c5e5 Ignore callgrind output files 2024-03-07 14:56:32 -05:00
Rangi42 0f52cd0bab Use std::reverse for binary digits 2024-03-07 14:48:23 -05:00
Rangi42 2fd95381a6 Get rid of some fixed-size char buffers 2024-03-07 14:36:30 -05:00
Rangi42 184957c0ed Use fwrite and fputs instead of multiple putc 2024-03-07 12:40:37 -05:00
Rangi42 7663a777d5 Remove 255-character limit on symbol names 2024-03-07 12:40:37 -05:00
Rangi42 097b7c3baf Use std::string for symbol names 2024-03-07 12:40:33 -05:00
Rangi42 bf45ebb178 Run clang-format to fix some inconsistent style 2024-03-07 11:52:53 -05:00
Rangi42 84bedc7bbe Use automatic allocation for RPN reasons 2024-03-07 09:58:45 -05:00
Rangi42 e5b7e65e91 Use std::nothrow from <new> with every new allocation 2024-03-07 09:56:15 -05:00
Rangi42 104fd6c70d Use automatic allocation for some parser values 2024-03-06 22:17:35 -05:00
Rangi42 35ec190664 Update Windows libpng to 1.6.43 2024-03-06 21:02:13 -05:00
Rangi42 8c173b4e95 Remove declaration for compatibility with macOS bison 2.3
We've required bision 3.0 since October 2022
2024-03-06 17:58:15 -05:00
Rangi42 94b724ae5f Update to use winflexbison 2.5.25 (bison 3.8.2) 2024-03-06 17:56:16 -05:00
Rangi42 6d4a61f51d Fix some numeric bases in RGBLINK output 2024-03-06 17:43:26 -05:00
Rangi42 75105016f7 Make sure that parsed subexpressions are fully defined
We were not initializing some expressions, and they were using
the values of the previous expressions instead. This just so
happened to not crash the tests, and to sometimes even give valid
results (although `BANK()` of a non-label symbol being $4B4E4142,
the ASCII balue of "BANK", was something we missed).
2024-03-06 16:00:55 -05:00
Rangi42 f419f206e5 Fix a latent bug with parsing macro args
This seems to only have worked by coincidence; `$$` was an
undefined value that happened to equal `$1` already.
2024-03-06 15:14:17 -05:00
Rangi42 82824a4bf2 Avoid using Bison's typed mid-rule actions
These work with `%union`, but will not work with C++ `variant`
2024-03-06 14:19:37 -05:00
Rangi42 d1652c0028 Refactor cases for simplicity, and remove redundant comments 2024-03-06 14:10:50 -05:00
Rangi42 053aa80951 Improve some const correctness in RGBASM 2024-03-06 13:53:03 -05:00
Rangi42 585c620945 Rename fail to sectError, since it increments nbSectErrors 2024-03-05 14:36:18 -05:00
Rangi42 bd88787cb3 Use FileStackNode constructor to avoid std::monostate possibility 2024-03-05 14:22:29 -05:00
Rangi42 74539f08ba Add some more trailing commas 2024-03-04 22:53:11 -05:00
Rangi42 f2c875e71e Avoid using std::get except in holds_alternative-asserting accessors 2024-03-03 23:33:23 -05:00
Rangi42 13904dc536 Remove EQUS callbacks for symbols
They're no longer used since `__FILE__` was removed
2024-03-03 21:26:44 -05:00
Rangi42 ba183e900b Update contributors 2024-03-03 21:17:52 -05:00
Rangi42 930a5c3e44 Replace RGBLINK non-null pointers with references 2024-03-03 00:57:03 -05:00
Rangi42 538b253dfb Replace RGBFIX non-null pointers with references 2024-03-03 00:57:03 -05:00
Rangi42 277ea9be28 Replace RGBASM non-null pointers with references 2024-03-03 00:57:03 -05:00
Rangi42 d812acff24 Check RGBGFX warning/error format strings with format_ macro 2024-03-02 23:17:54 -05:00
Rangi42 2e1b0b6421 Remove commented-out C-only macro features 2024-03-02 20:17:22 -05:00
Rangi42 52f8ecc347 We do not call malloc/free any more 2024-03-02 08:16:44 -05:00
Rangi42 19bb12754b Use new allocation for expanding \# 2024-03-02 08:04:59 -05:00
Rangi42 dbcb82799e Use std::vector for capture buffer 2024-03-02 06:46:11 -05:00
Rangi42 2069a95e0f Use std::string for macro args 2024-03-02 05:23:15 -05:00
Rangi42 b130c2e27c Use std::string for STRFMT spec and args 2024-03-02 05:09:43 -05:00
Rangi42 ba00cf5684 Use std::string for section names 2024-03-02 04:47:02 -05:00
Rangi42 b488d3a90f Use std::optional<std::string> for lexer expansion names 2024-03-02 04:34:42 -05:00
Rangi42 e14ba664ea Remove redundant (void) parameter declarations 2024-03-01 10:41:47 -05:00
Rangi42 91d22f180e Reorganize the asm parser to be more like the linker script parser
Split the declarations into those required for the `%union` and
those only required for the `code`.
Only declare functions on top; define them at the bottom.
2024-02-29 16:23:53 -05:00
Rangi42 1210a7441f Use std::visit with Visitor helper instead of std::holds_alternatve 2024-02-29 13:44:08 -05:00
Rangi42 cf08fed067 Use std::vector for SDCC object section data 2024-02-29 13:44:08 -05:00
Rangi42 c44b336e1b Use std::vector for SDCC object line buffer 2024-02-29 13:44:08 -05:00
Rangi42 e90084ad06 Rename isWRA0Mode to isWRAM0Mode 2024-02-29 13:44:08 -05:00
Rangi42 cdb9315366 Use std::vector for rgbfix ROMX data
Statically links libstdc++ for 32-bit MinGW
2024-02-29 13:44:08 -05:00
Rangi42 2ff723f943 Use vec.data() instead of &vec[0]
In general `vec.data()` is always safe, whereas `&vec[0]`
may fail when `vec` is empty.
2024-02-29 13:44:08 -05:00
Rangi42 d1fa5ccd4d Rename lexer_DeleteState to lexer_CleanupState 2024-02-29 13:44:08 -05:00
Rangi42 17df94c75b Remove now-unnecessary cleanup functions 2024-02-29 13:44:08 -05:00
Rangi42 96f354026a Use automatic allocation for section data 2024-02-29 13:44:08 -05:00
Rangi42 8fe6be19f1 Use automatic allocation for tryReadstring 2024-02-29 13:44:08 -05:00
Rangi42 002eed405b Use automatic allocation for assertion error messages 2024-02-29 13:44:08 -05:00
Rangi42 ef1c1440a0 Use automatic allocation for symbol names 2024-02-29 13:44:08 -05:00
Rangi42 826512730c Use automatic allocation for section symbols 2024-02-29 13:44:08 -05:00
Rangi42 5a26a48d11 Use automatic allocation for section names 2024-02-29 13:44:08 -05:00
Rangi42 3c0af94c5c Use automatic allocation for patches 2024-02-29 13:44:08 -05:00
Rangi42 fc5ab8a14c Clarify comment explaining how referenced works 2024-02-29 13:44:08 -05:00