diff --git a/docs/TODO.txt b/docs/TODO.txt index fb01944..546d960 100644 --- a/docs/TODO.txt +++ b/docs/TODO.txt @@ -27,22 +27,20 @@ DONE: native functions DONE: global functions _get, _set, _push, _pop, _length, clear available DONE: change comma to colon in dictionary definition DONE: Address circular references -TODO: are compounds shallow or deep copies? Deep copies +DONE: are compounds shallow or deep copies? Deep copies +DONE: third output stream, for lexer/parser/compiler/interpreter errors +DONE: Assertion-based test scripts -TODO: third output stream, for lexer/parser/compiler/interpreter errors - - -TODO: slice and dot notation around the _index function +TODO: Import/export keywords +TODO: slice and dot notation around the builtin _index function TODO: ternary operator -TODO: Nullish types +TODO: Nullish types? TODO: A way to check the type of a variable (typeOf keyword) TODO: a = b = c = 1; ? -TODO: Assertion-based test scripts TODO: standard library -TODO: external runner library -TODO: document how it all works -TODO: better and more consistent error messages +TODO: external script runner library +TODO: document how it all works - book? TODO: maximum recursion/function depth diff --git a/source/compiler.c b/source/compiler.c index 4bc01fb..7654102 100644 --- a/source/compiler.c +++ b/source/compiler.c @@ -184,7 +184,7 @@ static int writeNodeCompoundToCache(Compiler* compiler, Node* node) { freeLiteral(literal); } else { - fprintf(stderr, ERROR "[Internal] Unrecognized compound type in writeNodeCompoundToCache()" RESET); + fprintf(stderr, ERROR "[internal] Unrecognized compound type in writeNodeCompoundToCache()" RESET); } return index; @@ -279,7 +279,7 @@ static void writeCompilerWithJumps(Compiler* compiler, Node* node, void* breakAd //determine node type switch(node->type) { case NODE_ERROR: { - fprintf(stderr, ERROR "[Internal] NODE_ERROR encountered in writeCompilerWithJumps()\n" RESET); + fprintf(stderr, ERROR "[internal] NODE_ERROR encountered in writeCompilerWithJumps()\n" RESET); compiler->bytecode[compiler->count++] = OP_EOF; //1 byte } break; @@ -338,7 +338,7 @@ static void writeCompilerWithJumps(Compiler* compiler, Node* node, void* breakAd break; case NODE_PAIR: - fprintf(stderr, ERROR "[Internal] NODE_PAIR encountered in writeCompilerWithJumps()\n" RESET); + fprintf(stderr, ERROR "[internal] NODE_PAIR encountered in writeCompilerWithJumps()\n" RESET); break; case NODE_VAR_DECL: { diff --git a/source/lexer.c b/source/lexer.c index 6105f24..5b20ce5 100644 --- a/source/lexer.c +++ b/source/lexer.c @@ -308,6 +308,7 @@ static void trim(char** s, int* l) { //all this to remove a newline? while(**s && isspace( **(unsigned char**)(s)) ) { (*s)++; (*l)--; } } +//for debugging void printToken(Token* token) { if (token->type == TOKEN_ERROR) { printf(ERROR "Error\t%d\t%.*s\n" RESET, token->line, token->length, token->lexeme); diff --git a/source/lexer.h b/source/lexer.h index 74595a4..3211502 100644 --- a/source/lexer.h +++ b/source/lexer.h @@ -22,4 +22,5 @@ typedef struct { void initLexer(Lexer* lexer, char* source); Token scanLexer(Lexer* lexer); +//for debugging void printToken(Token* token); \ No newline at end of file diff --git a/test/test_interpreter.c b/test/test_interpreter.c index f2df14e..89d0c8a 100644 --- a/test/test_interpreter.c +++ b/test/test_interpreter.c @@ -11,7 +11,12 @@ #include #include -//IO functions +//supress the print output +static void noPrintFn(const char* output) { + //NO OP +} + +//compilation functions char* readFile(char* path, size_t* fileSize) { FILE* file = fopen(path, "rb"); @@ -86,6 +91,10 @@ unsigned char* compileString(char* source, size_t* size) { void runBinary(unsigned char* tb, size_t size) { Interpreter interpreter; initInterpreter(&interpreter); + + //NOTE: supress print output for testing + setInterpreterPrint(&interpreter, noPrintFn); + runInterpreter(&interpreter, tb, size); freeInterpreter(&interpreter); } @@ -138,6 +147,9 @@ int main() { int size = 0; unsigned char* bytecode = collateCompiler(&compiler, &size); + //NOTE: supress print output for testing + setInterpreterPrint(&interpreter, noPrintFn); + //run runInterpreter(&interpreter, bytecode, size);