aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2024-04-14Implemented overload for ostream and token as well as constructors for tokenAryadev Chavali
2024-04-14Implemented tokenise_bufferAryadev Chavali
Note that this is basically the same as the previous version, excluding the fact that it uses C++ idioms more and does a bit better in error checking.
2024-04-14Implemented tokenise_literal_stringAryadev Chavali
One thing I've realised is that even methods such as this require error tracking. I won't implement it in the tokenise method as it's not related to consuming the string per se but instead in the main method.
2024-04-14Implemented tokenise_literal_char (tokenise_char_literal)Aryadev Chavali
I made the escape sequence parsing occur here instead of leaving it to the main tokenise_buffer function as I think it's better suited here.
2024-04-14Implemented tokenise_literal_hexAryadev Chavali
Note the overall size of this function in comparison to the C version, as well as its clarity. Of course, it is doing allocations in the background through std::string which requires more profiling if I want to make this super efficientâ„¢ but honestly the assembler just needs to work, whereas the runtime needs to be fast.
2024-04-14Implemented tokenise_literal_number (tokenise_number)Aryadev Chavali
2024-04-14Started implementing lexer in lexer.cppAryadev Chavali
The implementation for tokenise_symbol is already a lot nicer to look at and add to due to string/string_view operator overloading of ==. Furthermore, error handling through pair<> instead of making some custom structure which essentially does the same thing is already making me happy for this rewrite.
2024-04-14Wrote a new lexer API in C++Aryadev Chavali
Essentially a refactor of the C formed lexer into C++ style. I can already see some benefits from doing this, in particular speed of prototyping.
2024-04-14Added C++ dir localsAryadev Chavali
2024-04-14Created custom functions to convert (h)words to and from bytecode formatAryadev Chavali
Instead of using endian.h that is not portable AND doesn't work with C++, I'll just write my own using a forced union based type punning trick. I've decided to use little endian for the format as well: it seems to be used by most desktop computers so it should make these functions faster to run for most CPUs.
2024-04-14Merge branch 'master' into asm-rewrite-cppAryadev Chavali
2024-04-14Start writing assembler in C++Aryadev Chavali
Best language to use as it's already compatible with the headers I'm using and can pretty neatly enter the build system while also using the functions I've built for converting to and from bytecode!
2024-04-14Documented lib/darr.hAryadev Chavali
2024-04-14Moved struct definitions lib/inst.h -> lib/prog.hAryadev Chavali
This means if I write the new assembler in another language I only need to FFI this header rather than all the functions as well which may not be as useful.
2024-04-14Documented lib/darr.hAryadev Chavali
2024-04-14Moved struct definitions lib/inst.h -> lib/prog.hAryadev Chavali
This means if I write the new assembler in another language I only need to FFI this header rather than all the functions as well which may not be as useful.
2024-04-14Added todo to rewrite assembler in a different languageAryadev Chavali
2024-04-14Finished todo on importing another fileAryadev Chavali
2024-04-14fix! loops in preprocess_use_blocks iterate to the wrong bound0.0.1Aryadev Chavali
A token_stream being constructed on the spot has different used/available properties to a fully constructed one: a fully constructed token stream uses available to hold the total number of tokens and used as an internal iterator, while one that is still being constructed uses the semantics of a standard darr. Furthermore, some loops didn't divide by ~sizeof(token_t)~ which lead to iteration over bound errors.
2024-04-12Fix problems with running programs due to mismatched endianAryadev Chavali
Basically ensure we're converting to big endian when writing bytecode and converting from big endian when reading bytecode.
2024-04-12Fixing build problems due to endian.hAryadev Chavali
Have to define _DEFAULT_SOURCE before you can use the endian conversion functions. As most standard library headers use features.h, and _DEFAULT_SOURCE must be defined before features.h is included, we have to include base.h before other headers.
2024-04-09Reworking todos on library linkingAryadev Chavali
2024-04-09Some rewording of spec.orgAryadev Chavali
2024-04-09Added some TODOs to lib/inst.c to enforce endianAryadev Chavali
2024-04-09Mid-work through documenting darr.hAryadev Chavali
2024-04-09Done TODO: Comment coverage > lib > base.hAryadev Chavali
Pretty simple
2024-04-09Fixed code in vm_pop_hword DWORD -> DHWORDAryadev Chavali
Though practically this would work, as the storage for the half word is not limited in any way, nevertheless it isn't syntactically right and it's better to fix now.
2024-04-09Completed TODO: Rigid EndianAryadev Chavali
Just used the endian.h functions to convert host endian to and from big endian.
2024-04-09Added todo to force an endian conventionAryadev Chavali
I've flip flopped a bit on this but I believe the virtual machine bytecode format must have a convention on endianness. This is because of the issue stated in the TODO which may very well happen.
2024-04-08Added better documentation to TODO listAryadev Chavali
2024-04-07Changed limit for examples/factorial.asmAryadev Chavali
Did some analysis and found that 21! takes above 64 bit integers to store hence set the limit to 20 instead.
2023-11-29Use a limit on $I rather than on $B for examples/fib.asmAryadev Chavali
2023-11-29Fixed issues with getting and setting words for heap pagesAryadev Chavali
Because I was using the hword macros instead of word macros, this causes truncation of bytes when I didn't want it.
2023-11-29Fixed logs in vm/runtimeAryadev Chavali
Just changing some messages and the format of heap printing
2023-11-29Cleaned up logs in assembler/parserAryadev Chavali
2023-11-29Easier to read documentation in examplesAryadev Chavali
2023-11-29Fixed incorrect free of tokens in error for preprocess_use_blocksAryadev Chavali
Also error now points to the correct place in the file.
2023-11-29Report some stats of the actual program when workingAryadev Chavali
2023-11-29Refactored preprocessor to preprocess_(use|macro)_blocks and process_presultsAryadev Chavali
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.
2023-11-29Refactored presult_t to include a stream pointerAryadev Chavali
So when a presult_t is constructed it holds an index to where it was constructed in terms of the token stream. This will be useful when implementing an error checker in the preprocessing or result parsing stages.
2023-11-29Added parse errors for %USE callsAryadev Chavali
So %USE <STRING> is the expected call pattern, so there's an error if there isn't a string after %USE. The other two errors are file I/O errors i.e. nonexistent files or errors in parsing the other file. We don't report specifics about the other file, that should be up to the user to check themselves.
2023-11-29Fixed tokenise_string_literalAryadev Chavali
Forgot to increment buffer->used and memcpy call was just incorrect.
2023-11-29Added function to copy tokensAryadev Chavali
This essentially just copies the internal string of the token into a new buffer.
2023-11-29Added TOKEN_PP_USE to lexer with implementationAryadev Chavali
2023-11-29Moved preprocessor>Constants to Completed and started work on %USEAryadev Chavali
2023-11-29Added todo for preprocessor "%MACRO"Aryadev Chavali
This is different to "%CONST" in that it can take token parameters and use them. This allows the construction of user code at compile time, which can be very useful for a variety of use cases.
2023-11-29Added todo for preprocessor "%USE" blocksAryadev Chavali
Essentially importing another file *literally* into the file. This would happen before parse results are gathered, similar to how "%CONST" is implemented currently.
2023-11-29Cleaned up todos standard library a bit moreAryadev Chavali
2023-11-11Added string literals in tokeniserAryadev Chavali
Doesn't do much, invalid for most operations.
2023-11-09Use constants in examples where possibleAryadev Chavali
Stuff like numeric limits can be codified in constants which act self documenting.