All tests passing, repl builds successfully

This commit is contained in:
2022-11-26 09:53:59 +00:00
parent f6367fa89d
commit cfafba589b
8 changed files with 21 additions and 41 deletions

View File

@@ -18,7 +18,7 @@ static int nativeClock(Interpreter* interpreter, LiteralArray* arguments) {
//push to the stack //push to the stack
int len = strlen(timestr) - 1; //-1 for the newline int len = strlen(timestr) - 1; //-1 for the newline
Literal timeLiteral = TO_STRING_LITERAL(copyString(timestr, len), len); Literal timeLiteral = TO_STRING_LITERAL(createRefStringLength(timestr, len));
//push to the stack //push to the stack
pushLiteralArray(&interpreter->stack, timeLiteral); pushLiteralArray(&interpreter->stack, timeLiteral);
@@ -57,7 +57,7 @@ int hookStandard(Interpreter* interpreter, Literal identifier, Literal alias) {
//load the dict with functions //load the dict with functions
for (int i = 0; natives[i].name; i++) { for (int i = 0; natives[i].name; i++) {
Literal name = TO_STRING_LITERAL(copyString(natives[i].name, strlen(natives[i].name)), strlen(natives[i].name)); Literal name = TO_STRING_LITERAL(createRefStringLength(natives[i].name, strlen(natives[i].name)));
Literal func = TO_FUNCTION_LITERAL((void*)natives[i].fn, 0); Literal func = TO_FUNCTION_LITERAL((void*)natives[i].fn, 0);
func.type = LITERAL_FUNCTION_NATIVE; func.type = LITERAL_FUNCTION_NATIVE;

View File

@@ -292,12 +292,12 @@ static int nativeTimerToString(Interpreter* interpreter, LiteralArray* arguments
if (timer->tv_sec == 0 && timer->tv_usec < 0) { //special case, for when the negative sign is encoded in the usec if (timer->tv_sec == 0 && timer->tv_usec < 0) { //special case, for when the negative sign is encoded in the usec
char buffer[128]; char buffer[128];
snprintf(buffer, 128, "-%ld.%06ld", timer->tv_sec, -timer->tv_usec); snprintf(buffer, 128, "-%ld.%06ld", timer->tv_sec, -timer->tv_usec);
resultLiteral = TO_STRING_LITERAL( copyString(buffer, strlen(buffer)), strlen(buffer)); resultLiteral = TO_STRING_LITERAL(createRefStringLength(buffer, strlen(buffer)));
} }
else { //normal case else { //normal case
char buffer[128]; char buffer[128];
snprintf(buffer, 128, "%ld.%06ld", timer->tv_sec, timer->tv_usec); snprintf(buffer, 128, "%ld.%06ld", timer->tv_sec, timer->tv_usec);
resultLiteral = TO_STRING_LITERAL( copyString(buffer, strlen(buffer)), strlen(buffer)); resultLiteral = TO_STRING_LITERAL(createRefStringLength(buffer, strlen(buffer)));
} }
pushLiteralArray(&interpreter->stack, resultLiteral); pushLiteralArray(&interpreter->stack, resultLiteral);
@@ -374,7 +374,7 @@ int hookTimer(Interpreter* interpreter, Literal identifier, Literal alias) {
//load the dict with functions //load the dict with functions
for (int i = 0; natives[i].name; i++) { for (int i = 0; natives[i].name; i++) {
Literal name = TO_STRING_LITERAL(copyString(natives[i].name, strlen(natives[i].name)), strlen(natives[i].name)); Literal name = TO_STRING_LITERAL(createRefStringLength(natives[i].name, strlen(natives[i].name)));
Literal func = TO_FUNCTION_LITERAL((void*)natives[i].fn, 0); Literal func = TO_FUNCTION_LITERAL((void*)natives[i].fn, 0);
func.type = LITERAL_FUNCTION_NATIVE; func.type = LITERAL_FUNCTION_NATIVE;

View File

@@ -50,15 +50,15 @@ void repl() {
ASTNode* node = scanParser(&parser); ASTNode* node = scanParser(&parser);
while(node != NULL) { while(node != NULL) {
//pack up and restart //pack up and restart
if (node->type == AST_NODEERROR) { if (node->type == AST_NODE_ERROR) {
printf(ERROR "error node detected\n" RESET); printf(ERROR "error node detected\n" RESET);
error = true; error = true;
freeNode(node); freeASTNode(node);
break; break;
} }
writeCompiler(&compiler, node); writeCompiler(&compiler, node);
freeNode(node); freeASTNode(node);
node = scanParser(&parser); node = scanParser(&parser);
} }

View File

@@ -78,16 +78,16 @@ unsigned char* compileString(char* source, size_t* size) {
ASTNode* node = scanParser(&parser); ASTNode* node = scanParser(&parser);
while(node != NULL) { while(node != NULL) {
//pack up and leave //pack up and leave
if (node->type == AST_NODEERROR) { if (node->type == AST_NODE_ERROR) {
printf(ERROR "error node detected\n" RESET); printf(ERROR "error node detected\n" RESET);
freeNode(node); freeASTNode(node);
freeCompiler(&compiler); freeCompiler(&compiler);
freeParser(&parser); freeParser(&parser);
return NULL; return NULL;
} }
writeCompiler(&compiler, node); writeCompiler(&compiler, node);
freeNode(node); freeASTNode(node);
node = scanParser(&parser); node = scanParser(&parser);
} }

View File

@@ -4,27 +4,7 @@ IDIR +=. ../source ../repl
CFLAGS +=$(addprefix -I,$(IDIR)) -g -Wall -W -Wno-unused-parameter -Wno-unused-function -Wno-unused-variable CFLAGS +=$(addprefix -I,$(IDIR)) -g -Wall -W -Wno-unused-parameter -Wno-unused-function -Wno-unused-variable
LIBS += LIBS +=
ODIR = obj ODIR = obj
TARGETS = $(wildcard ../source/*.c) $(wildcard ../repl/lib_*.c)
#TARGETS = $(wildcard ../source/*.c) $(wildcard ../repl/lib_*.c)
#literal primitives
TARGETS+=../source/memory.c ../source/refstring.c ../source/literal.c ../source/literal_array.c ../source/literal_dictionary.c ../source/scope.c
#lexer
TARGETS+=../source/toy_common.c ../source/keyword_types.c ../source/lexer.c
#ast primitives
TARGETS+=../source/ast_node.c
#parser
TARGETS+=../source/parser.c
#compiler
TARGETS+=../source/compiler.c
#interpreter
TARGETS+=../source/interpreter.c ../source/builtin.c
TESTS = $(wildcard test_*.c) TESTS = $(wildcard test_*.c)
OBJ = $(addprefix $(ODIR)/,$(TARGETS:../source/%.c=%.o)) $(addprefix $(ODIR)/,$(TESTS:.c=.o)) OBJ = $(addprefix $(ODIR)/,$(TARGETS:../source/%.c=%.o)) $(addprefix $(ODIR)/,$(TESTS:.c=.o))

View File

@@ -64,16 +64,16 @@ unsigned char* compileString(char* source, size_t* size) {
ASTNode* node = scanParser(&parser); ASTNode* node = scanParser(&parser);
while(node != NULL) { while(node != NULL) {
//pack up and leave //pack up and leave
if (node->type == AST_NODEERROR) { if (node->type == AST_NODE_ERROR) {
printf(ERROR "error node detected\n" RESET); printf(ERROR "error node detected\n" RESET);
freeNode(node); freeASTNode(node);
freeCompiler(&compiler); freeCompiler(&compiler);
freeParser(&parser); freeParser(&parser);
return NULL; return NULL;
} }
writeCompiler(&compiler, node); writeCompiler(&compiler, node);
freeNode(node); freeASTNode(node);
node = scanParser(&parser); node = scanParser(&parser);
} }

View File

@@ -79,16 +79,16 @@ unsigned char* compileString(char* source, size_t* size) {
ASTNode* node = scanParser(&parser); ASTNode* node = scanParser(&parser);
while(node != NULL) { while(node != NULL) {
//pack up and leave //pack up and leave
if (node->type == AST_NODEERROR) { if (node->type == AST_NODE_ERROR) {
printf(ERROR "error node detected\n" RESET); printf(ERROR "error node detected\n" RESET);
freeNode(node); freeASTNode(node);
freeCompiler(&compiler); freeCompiler(&compiler);
freeParser(&parser); freeParser(&parser);
return NULL; return NULL;
} }
writeCompiler(&compiler, node); writeCompiler(&compiler, node);
freeNode(node); freeASTNode(node);
node = scanParser(&parser); node = scanParser(&parser);
} }

View File

@@ -62,16 +62,16 @@ unsigned char* compileString(char* source, size_t* size) {
ASTNode* node = scanParser(&parser); ASTNode* node = scanParser(&parser);
while(node != NULL) { while(node != NULL) {
//pack up and leave //pack up and leave
if (node->type == AST_NODEERROR) { if (node->type == AST_NODE_ERROR) {
printf(ERROR "error node detected\n" RESET); printf(ERROR "error node detected\n" RESET);
freeNode(node); freeASTNode(node);
freeCompiler(&compiler); freeCompiler(&compiler);
freeParser(&parser); freeParser(&parser);
return NULL; return NULL;
} }
writeCompiler(&compiler, node); writeCompiler(&compiler, node);
freeNode(node); freeASTNode(node);
node = scanParser(&parser); node = scanParser(&parser);
} }