mirror of
https://github.com/krgamestudios/Toy.git
synced 2026-04-15 14:54:07 +10:00
Hooks can't be dict keys, tweaked Toy_readFile
This commit is contained in:
@@ -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");
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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++;
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user