Refactored preprocessor to preprocess_(use|macro)_blocks and process_presults
We have distinct functions for the use blocks and the macro blocks, which each generate wholesale new token streams via `token_copy` so we don't run into weird errors around ownership of the internal strings of each token. Furthermore, process_presults now uses the stream index in each presult to report errors when stuff goes wrong.
This commit is contained in:
13
asm/parser.h
13
asm/parser.h
@@ -86,12 +86,19 @@ typedef struct
|
||||
|
||||
block_t search_blocks(block_t *, size_t, char *, size_t);
|
||||
|
||||
perr_t preprocess_use_blocks(token_stream_t *, token_stream_t *);
|
||||
perr_t preprocess_macro_blocks(token_stream_t *, token_stream_t *);
|
||||
// Analyses then inlines corresponding tokens into stream directly
|
||||
perr_t preprocessor(token_stream_t *);
|
||||
// Parses from the preprocessed stream
|
||||
|
||||
// Parses the next "parse result" from stream
|
||||
perr_t parse_next(token_stream_t *, presult_t *);
|
||||
// Deals with address building
|
||||
perr_t process_presults(presult_t *, size_t, prog_t **);
|
||||
// Constructs a program from the set of parse results (from repeatedly
|
||||
// calling parse_next)
|
||||
perr_t process_presults(presult_t *, size_t, size_t *, prog_t **);
|
||||
|
||||
// Preprocesses, generates results then constructs a program all in
|
||||
// one routine (thing to call in most use cases).
|
||||
perr_t parse_stream(token_stream_t *, prog_t **);
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user