Hooks can't be dict keys, tweaked Toy_readFile

This commit is contained in:
2023-02-18 16:47:38 +00:00
parent 8a68d864e6
commit 6fa224fa7b
13 changed files with 22 additions and 20 deletions

View File

@@ -49,7 +49,7 @@ static int nativeLoadScript(Toy_Interpreter* interpreter, Toy_LiteralArray* argu
//load and compile the bytecode //load and compile the bytecode
size_t fileSize = 0; size_t fileSize = 0;
const char* source = Toy_readFile(filePath, &fileSize); const char* source = (const char*)Toy_readFile(filePath, &fileSize);
if (!source) { if (!source) {
interpreter->errorOutput("Failed to load source file\n"); interpreter->errorOutput("Failed to load source file\n");

View File

@@ -180,7 +180,7 @@ int main(int argc, const char* argv[]) {
//compile and save //compile and save
size_t size = 0; size_t size = 0;
const char* source = Toy_readFile(Toy_commandLine.compilefile, &size); const char* source = (const char*)Toy_readFile(Toy_commandLine.compilefile, &size);
if (!source) { if (!source) {
return 1; return 1;
} }
@@ -220,7 +220,7 @@ int main(int argc, const char* argv[]) {
} }
size_t size; size_t size;
initialSource = Toy_readFile(Toy_commandLine.initialfile, &size); initialSource = (const char*)Toy_readFile(Toy_commandLine.initialfile, &size);
} }
repl(initialSource); repl(initialSource);

View File

@@ -14,7 +14,7 @@
#include <stdlib.h> #include <stdlib.h>
//IO functions //IO functions
const char* Toy_readFile(const char* path, size_t* fileSize) { const unsigned char* Toy_readFile(const char* path, size_t* fileSize) {
FILE* file = fopen(path, "rb"); FILE* file = fopen(path, "rb");
if (file == NULL) { if (file == NULL) {
@@ -26,14 +26,14 @@ const char* Toy_readFile(const char* path, size_t* fileSize) {
*fileSize = ftell(file); *fileSize = ftell(file);
rewind(file); rewind(file);
char* buffer = (char*)malloc(*fileSize + 1); unsigned char* buffer = (unsigned char*)malloc(*fileSize + 1);
if (buffer == NULL) { if (buffer == NULL) {
fprintf(stderr, TOY_CC_ERROR "Not enough memory to read \"%s\"\n" TOY_CC_RESET, path); fprintf(stderr, TOY_CC_ERROR "Not enough memory to read \"%s\"\n" TOY_CC_RESET, path);
return NULL; return NULL;
} }
size_t bytesRead = fread(buffer, sizeof(char), *fileSize, file); size_t bytesRead = fread(buffer, sizeof(unsigned char), *fileSize, file);
buffer[*fileSize] = '\0'; //NOTE: fread doesn't append this buffer[*fileSize] = '\0'; //NOTE: fread doesn't append this
@@ -120,7 +120,7 @@ void Toy_runBinary(const unsigned char* tb, size_t size) {
void Toy_runBinaryFile(const char* fname) { void Toy_runBinaryFile(const char* fname) {
size_t size = 0; //not used size_t size = 0; //not used
const unsigned char* tb = (const unsigned char*)Toy_readFile(fname, &size); const unsigned char* tb = Toy_readFile(fname, &size);
if (!tb) { if (!tb) {
return; return;
} }
@@ -140,7 +140,7 @@ void Toy_runSource(const char* source) {
void Toy_runSourceFile(const char* fname) { void Toy_runSourceFile(const char* fname) {
size_t size = 0; //not used size_t size = 0; //not used
const char* source = Toy_readFile(fname, &size); const char* source = (const char*)Toy_readFile(fname, &size);
if (!source) { if (!source) {
return; return;
} }

View File

@@ -2,7 +2,7 @@
#include "toy_common.h" #include "toy_common.h"
const char* Toy_readFile(const char* path, size_t* fileSize); const unsigned char* Toy_readFile(const char* path, size_t* fileSize);
int Toy_writeFile(const char* path, const unsigned char* bytes, size_t size); int Toy_writeFile(const char* path, const unsigned char* bytes, size_t size);
const unsigned char* Toy_compileString(const char* source, size_t* size); const unsigned char* Toy_compileString(const char* source, size_t* size);

View File

@@ -18,3 +18,5 @@ TOY_API bool Toy_setLiteralArray(Toy_LiteralArray* array, Toy_Literal index, Toy
TOY_API Toy_Literal Toy_getLiteralArray(Toy_LiteralArray* array, Toy_Literal index); TOY_API Toy_Literal Toy_getLiteralArray(Toy_LiteralArray* array, Toy_Literal index);
int Toy_findLiteralIndex(Toy_LiteralArray* array, Toy_Literal literal); int Toy_findLiteralIndex(Toy_LiteralArray* array, Toy_Literal literal);
//TODO: add a function to get the capacity & count

View File

@@ -141,7 +141,7 @@ void Toy_setLiteralDictionary(Toy_LiteralDictionary* dictionary, Toy_Literal key
} }
//BUGFIX: Can't hash a function //BUGFIX: Can't hash a function
if (TOY_IS_FUNCTION(key) || TOY_IS_FUNCTION_NATIVE(key)) { if (TOY_IS_FUNCTION(key) || TOY_IS_FUNCTION_NATIVE(key) || TOY_IS_FUNCTION_HOOK(key)) {
fprintf(stderr, TOY_CC_ERROR "Dictionaries can't have function keys (set)\n" TOY_CC_RESET); fprintf(stderr, TOY_CC_ERROR "Dictionaries can't have function keys (set)\n" TOY_CC_RESET);
return; return;
} }
@@ -166,7 +166,7 @@ Toy_Literal Toy_getLiteralDictionary(Toy_LiteralDictionary* dictionary, Toy_Lite
} }
//BUGFIX: Can't hash a function //BUGFIX: Can't hash a function
if (TOY_IS_FUNCTION(key) || TOY_IS_FUNCTION_NATIVE(key)) { if (TOY_IS_FUNCTION(key) || TOY_IS_FUNCTION_NATIVE(key) || TOY_IS_FUNCTION_HOOK(key)) {
fprintf(stderr, TOY_CC_ERROR "Dictionaries can't have function keys (get)\n" TOY_CC_RESET); fprintf(stderr, TOY_CC_ERROR "Dictionaries can't have function keys (get)\n" TOY_CC_RESET);
return TOY_TO_NULL_LITERAL; return TOY_TO_NULL_LITERAL;
} }
@@ -193,7 +193,7 @@ void Toy_removeLiteralDictionary(Toy_LiteralDictionary* dictionary, Toy_Literal
} }
//BUGFIX: Can't hash a function //BUGFIX: Can't hash a function
if (TOY_IS_FUNCTION(key) || TOY_IS_FUNCTION_NATIVE(key)) { if (TOY_IS_FUNCTION(key) || TOY_IS_FUNCTION_NATIVE(key) || TOY_IS_FUNCTION_HOOK(key)) {
fprintf(stderr, TOY_CC_ERROR "Dictionaries can't have function keys (remove)\n" TOY_CC_RESET); fprintf(stderr, TOY_CC_ERROR "Dictionaries can't have function keys (remove)\n" TOY_CC_RESET);
return; return;
} }

View File

@@ -27,7 +27,7 @@ void error(char* msg) {
int main() { int main() {
{ {
size_t size = 0; size_t size = 0;
const char* source = Toy_readFile("scripts/call-from-host.toy", &size); const char* source = (const char*)Toy_readFile("scripts/call-from-host.toy", &size);
const unsigned char* tb = Toy_compileString(source, &size); const unsigned char* tb = Toy_compileString(source, &size);
free((void*)source); free((void*)source);

View File

@@ -52,7 +52,7 @@ int main() {
{ {
//source //source
size_t sourceLength = 0; size_t sourceLength = 0;
const char* source = Toy_readFile("scripts/compiler_sample_code.toy", &sourceLength); const char* source = (const char*)Toy_readFile("scripts/compiler_sample_code.toy", &sourceLength);
//test basic compilation & collation //test basic compilation & collation
Toy_Lexer lexer; Toy_Lexer lexer;

View File

@@ -53,7 +53,7 @@ void runSourceCustom(const char* source) {
void runSourceFileCustom(const char* fname) { void runSourceFileCustom(const char* fname) {
size_t size = 0; //not used size_t size = 0; //not used
const char* source = Toy_readFile(fname, &size); const char* source = (const char*)Toy_readFile(fname, &size);
runSourceCustom(source); runSourceCustom(source);
free((void*)source); free((void*)source);
} }

View File

@@ -105,7 +105,7 @@ int main() {
//compile the source //compile the source
size_t size = 0; size_t size = 0;
const char* source = Toy_readFile(fname, &size); const char* source = (const char*)Toy_readFile(fname, &size);
if (!source) { if (!source) {
printf(TOY_CC_ERROR "Failed to load file: %s\n" TOY_CC_RESET, fname); printf(TOY_CC_ERROR "Failed to load file: %s\n" TOY_CC_RESET, fname);
failedAsserts++; failedAsserts++;
@@ -140,7 +140,7 @@ int main() {
//compile the source //compile the source
size_t size = 0; size_t size = 0;
const char* source = Toy_readFile(fname, &size); const char* source = (const char*)Toy_readFile(fname, &size);
if (!source) { if (!source) {
printf(TOY_CC_ERROR "Failed to load file: %s\n" TOY_CC_RESET, fname); printf(TOY_CC_ERROR "Failed to load file: %s\n" TOY_CC_RESET, fname);
failedAsserts++; failedAsserts++;

View File

@@ -84,7 +84,7 @@ void runSourceCustom(const char* source) {
void runSourceFileCustom(const char* fname) { void runSourceFileCustom(const char* fname) {
size_t size = 0; //not used size_t size = 0; //not used
const char* source = Toy_readFile(fname, &size); const char* source = (const char*)Toy_readFile(fname, &size);
runSourceCustom(source); runSourceCustom(source);
free((void*)source); free((void*)source);
} }

View File

@@ -68,7 +68,7 @@ static int consume(Toy_Interpreter* interpreter, Toy_LiteralArray* arguments) {
int main() { int main() {
{ {
size_t size = 0; size_t size = 0;
const char* source = Toy_readFile("scripts/opaque-data-type.toy", &size); const char* source = (const char*)Toy_readFile("scripts/opaque-data-type.toy", &size);
const unsigned char* tb = Toy_compileString(source, &size); const unsigned char* tb = Toy_compileString(source, &size);
free((void*)source); free((void*)source);

View File

@@ -58,7 +58,7 @@ int main() {
{ {
//get the source file //get the source file
size_t size = 0; size_t size = 0;
const char* source = Toy_readFile("scripts/parser_sample_code.toy", &size); const char* source = (const char*)Toy_readFile("scripts/parser_sample_code.toy", &size);
//test parsing a chunk of junk (valgrind will find leaks) //test parsing a chunk of junk (valgrind will find leaks)
Toy_Lexer lexer; Toy_Lexer lexer;