Implemented two new nodes in the abstract syntax tree: 'Dao.Object.DataExpr' of type 'Dao.Object.ObjectExpr' used to implement a more flexible syntax for coding binary data, and 'Dao.Object.WhileLoop' of type 'Dao.Object.ScriptExpr' which I should have implemented a long time ago but just never got around to it.
Solved a few more bugs in the parser, and implemented the parsers for the new 'Dao.Object.DataExpr' and 'Dao.Object.WhileLoop' nodes of the abstract syntax tree. The most obvious bugs have all been solved now, the remaining parser bugs are becoming much more difficult to solve.
Instantiated for 'Dao.PPrint.PPrintable', 'RandObj.HasRandGen', and for the new 'Dao.Object.DataExpr' and 'Dao.Object.WhileLoop' nodes of the abstract syntax tree. Also implemented the evaluation cases for these nodes in 'Dao.Evaluator.evalObject' and 'Dao.Evaluator.evalScriptExpr' functions, so they now (should) actually work in the interpreter as expected.
There is a bug in the pretty printer that for some reason indents some expressions. This bug is described in the TODO file. However, the parser used in the testing program did not expect expressions starting with whitespace, and some test cases were failing simply because they were indented when they should not have been. Although the indentation bug in the pretty printer is still not solved, the tests will not fail because of it.
Simplified the parser a bit, which solved a few parser bugs. Also, I found a keyword was in the pool of random words that were to be used as variable names, and this was causing a parser error, so I removed that keyword from the pool.
Deleted the old pretty printer once and for all.
I am going to have to re-think the use cases, potential utility of, and expression for, type objects.