mirror of
https://github.com/krgamestudios/Toy.git
synced 2026-04-15 14:54:07 +10:00
Removed unneeded files and console colors are disabled
This commit is contained in:
2
makefile
2
makefile
@@ -13,7 +13,7 @@ export TOY_OUTDIR=out
|
|||||||
export TOY_OBJDIR=obj
|
export TOY_OBJDIR=obj
|
||||||
|
|
||||||
#targets
|
#targets
|
||||||
#all:
|
all: source repl
|
||||||
|
|
||||||
.PHONY: source
|
.PHONY: source
|
||||||
source:
|
source:
|
||||||
|
|||||||
@@ -55,7 +55,7 @@
|
|||||||
|
|
||||||
//version specifiers, embedded as the header
|
//version specifiers, embedded as the header
|
||||||
#define TOY_VERSION_MAJOR 2
|
#define TOY_VERSION_MAJOR 2
|
||||||
#define TOY_VERSION_MINOR 0
|
#define TOY_VERSION_MINOR 1
|
||||||
#define TOY_VERSION_PATCH 0
|
#define TOY_VERSION_PATCH 0
|
||||||
|
|
||||||
//defined as a function, for technical reasons
|
//defined as a function, for technical reasons
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ NOTE: you need both font AND background for these to work
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
//platform/compiler-specific instructions
|
//platform/compiler-specific instructions
|
||||||
#if defined(__linux__) || defined(__MINGW32__) || defined(__GNUC__)
|
#if defined(TOY_CC_ENABLED) && ( defined(__linux__) || defined(__MINGW32__) || defined(__GNUC__) )
|
||||||
|
|
||||||
//fonts color
|
//fonts color
|
||||||
#define TOY_CC_FONT_BLACK "\033[30;"
|
#define TOY_CC_FONT_BLACK "\033[30;"
|
||||||
|
|||||||
@@ -1,168 +0,0 @@
|
|||||||
#include "toy_module_bundle.h"
|
|
||||||
#include "toy_console_colors.h"
|
|
||||||
|
|
||||||
#include "toy_module_compiler.h"
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
//utils
|
|
||||||
static void expand(Toy_ModuleBundle* bundle, unsigned int amount) {
|
|
||||||
if (bundle->count + amount > bundle->capacity) {
|
|
||||||
bundle->capacity = 8; //DON'T bitshift zero
|
|
||||||
|
|
||||||
while (bundle->count + amount > bundle->capacity) { //expand as much as needed
|
|
||||||
bundle->capacity <<= 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
bundle->ptr = realloc(bundle->ptr, bundle->capacity);
|
|
||||||
|
|
||||||
if (bundle->ptr == NULL) {
|
|
||||||
fprintf(stderr, TOY_CC_ERROR "ERROR: Failed to allocate a 'Toy_ModuleBundle' of %d capacity\n" TOY_CC_RESET, (int)(bundle->capacity));
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void emitByte(Toy_ModuleBundle* bundle, unsigned char byte) {
|
|
||||||
expand(bundle, 1);
|
|
||||||
bundle->ptr[bundle->count++] = byte;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void writeModuleBundleHeader(Toy_ModuleBundle* bundle) {
|
|
||||||
emitByte(bundle, TOY_VERSION_MAJOR);
|
|
||||||
emitByte(bundle, TOY_VERSION_MINOR);
|
|
||||||
emitByte(bundle, TOY_VERSION_PATCH);
|
|
||||||
emitByte(bundle, 0); //module count
|
|
||||||
|
|
||||||
//get the build string
|
|
||||||
const char* build = Toy_private_version_build();
|
|
||||||
size_t len = strlen(build) + 1; //includes null
|
|
||||||
|
|
||||||
//emit the build string
|
|
||||||
expand(bundle, len);
|
|
||||||
strncpy((char*)(bundle->ptr + bundle->count), build, len);
|
|
||||||
bundle->count += len;
|
|
||||||
|
|
||||||
//align the count
|
|
||||||
bundle->count = (bundle->count + 3) & ~3;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int validateModuleBundleHeader(Toy_ModuleBundle* bundle) {
|
|
||||||
if (bundle->ptr[0] != TOY_VERSION_MAJOR || bundle->ptr[1] > TOY_VERSION_MINOR) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (bundle->ptr[2] != TOY_VERSION_PATCH) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcmp((char*)(bundle->ptr + 4), TOY_VERSION_BUILD) != 0) {
|
|
||||||
return 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
//exposed functions
|
|
||||||
void Toy_initModuleBundle(Toy_ModuleBundle* bundle) {
|
|
||||||
bundle->ptr = NULL;
|
|
||||||
bundle->capacity = 0;
|
|
||||||
bundle->count = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Toy_appendModuleBundle(Toy_ModuleBundle* bundle, Toy_Ast* ast) {
|
|
||||||
//probably some inefficincies in memory usage here
|
|
||||||
if (bundle->capacity == 0) {
|
|
||||||
writeModuleBundleHeader(bundle); //TODO: update the header?
|
|
||||||
}
|
|
||||||
|
|
||||||
//increment the module count
|
|
||||||
if (bundle->ptr[3] < 255) {
|
|
||||||
bundle->ptr[3]++;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
fprintf(stderr, TOY_CC_ERROR "ERROR: Too many modules in a bundle\n" TOY_CC_RESET);
|
|
||||||
exit(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned char* module = Toy_compileModule(ast);
|
|
||||||
|
|
||||||
//don't try writing an empty module
|
|
||||||
if (module == NULL) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
//write the module to the bundle
|
|
||||||
size_t len = (size_t)(((int*)module)[0]);
|
|
||||||
|
|
||||||
expand(bundle, len);
|
|
||||||
memcpy(bundle->ptr + bundle->count, module, len);
|
|
||||||
bundle->count += len;
|
|
||||||
|
|
||||||
free(module);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Toy_freeModuleBundle(Toy_ModuleBundle* bundle) {
|
|
||||||
free(bundle->ptr);
|
|
||||||
Toy_initModuleBundle(bundle);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Toy_bindModuleBundle(Toy_ModuleBundle* bundle, unsigned char* ptr, unsigned int size) {
|
|
||||||
if (bundle == NULL) {
|
|
||||||
fprintf(stderr, TOY_CC_ERROR "ERROR: Can't bind a NULL bundle\n" TOY_CC_RESET);
|
|
||||||
exit(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (bundle->ptr != NULL || bundle->capacity != 0 || bundle->count != 0) {
|
|
||||||
fprintf(stderr, TOY_CC_ERROR "ERROR: Can't bind a bundle with pre-existing contents\n" TOY_CC_RESET);
|
|
||||||
exit(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
//copy
|
|
||||||
expand(bundle, size);
|
|
||||||
|
|
||||||
memcpy(bundle->ptr, ptr, size);
|
|
||||||
bundle->count = size;
|
|
||||||
|
|
||||||
//TODO: test this
|
|
||||||
int valid = validateModuleBundleHeader(bundle);
|
|
||||||
|
|
||||||
if (valid < 0) {
|
|
||||||
fprintf(stderr, TOY_CC_ERROR "ERROR: Wrong version info found in module header: expected %d.%d.%d.%s found %d.%d.%d.%s, exiting\n" TOY_CC_RESET, TOY_VERSION_MAJOR, TOY_VERSION_MINOR, TOY_VERSION_PATCH, TOY_VERSION_BUILD, bundle->ptr[0], bundle->ptr[1], bundle->ptr[2], (char*)(bundle->ptr + 4));
|
|
||||||
exit(valid);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (valid > 0) {
|
|
||||||
fprintf(stderr, TOY_CC_WARN "WARNING: Wrong version info found in module header: expected %d.%d.%d.%s found %d.%d.%d.%s, continuing\n" TOY_CC_RESET, TOY_VERSION_MAJOR, TOY_VERSION_MINOR, TOY_VERSION_PATCH, TOY_VERSION_BUILD, bundle->ptr[0], bundle->ptr[1], bundle->ptr[2], (char*)(bundle->ptr + 4));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Toy_Module Toy_extractModuleFromBundle(Toy_ModuleBundle* bundle, unsigned char index) {
|
|
||||||
if (bundle == NULL) {
|
|
||||||
fprintf(stderr, TOY_CC_ERROR "ERROR: Can't extract from a NULL bundle\n" TOY_CC_RESET);
|
|
||||||
return (Toy_Module){ 0 };
|
|
||||||
}
|
|
||||||
|
|
||||||
if (bundle->ptr == NULL) {
|
|
||||||
fprintf(stderr, TOY_CC_ERROR "ERROR: Can't extract from an empty bundle\n" TOY_CC_RESET);
|
|
||||||
return (Toy_Module){ 0 };
|
|
||||||
}
|
|
||||||
|
|
||||||
//yes, it's a bit awkward
|
|
||||||
char* buildPtr = (char*)(bundle->ptr + 4);
|
|
||||||
int buildLen = strlen(buildPtr);
|
|
||||||
buildLen = (buildLen + 3) & ~3;
|
|
||||||
|
|
||||||
//first module's start position
|
|
||||||
unsigned char* moduleHead = bundle->ptr + 4 + buildLen;
|
|
||||||
|
|
||||||
for (unsigned char i = 0; i < index; i++) {
|
|
||||||
unsigned int size = *((int*)(moduleHead));
|
|
||||||
moduleHead += size;
|
|
||||||
}
|
|
||||||
|
|
||||||
//read in the module
|
|
||||||
return Toy_parseModule(moduleHead);
|
|
||||||
}
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include "toy_common.h"
|
|
||||||
#include "toy_ast.h"
|
|
||||||
#include "toy_module.h"
|
|
||||||
|
|
||||||
typedef struct Toy_ModuleBundle {
|
|
||||||
unsigned char* ptr;
|
|
||||||
unsigned int capacity;
|
|
||||||
unsigned int count;
|
|
||||||
} Toy_ModuleBundle;
|
|
||||||
|
|
||||||
//create a bundle
|
|
||||||
TOY_API void Toy_initModuleBundle(Toy_ModuleBundle* bundle);
|
|
||||||
TOY_API void Toy_appendModuleBundle(Toy_ModuleBundle* bundle, Toy_Ast* ast); //TODO: raw bytes
|
|
||||||
TOY_API void Toy_freeModuleBundle(Toy_ModuleBundle* bundle);
|
|
||||||
|
|
||||||
//load module bundle with external data (makes an internal copy)
|
|
||||||
TOY_API void Toy_bindModuleBundle(Toy_ModuleBundle* bundle, unsigned char* ptr, unsigned int size);
|
|
||||||
TOY_API Toy_Module Toy_extractModuleFromBundle(Toy_ModuleBundle* bundle, unsigned char index);
|
|
||||||
|
|
||||||
//NOTE: 'Toy_ModuleBundle' isn't used anywhere?
|
|
||||||
@@ -209,16 +209,16 @@ static ParsingTuple parsingRulesetTable[] = {
|
|||||||
{PREC_NONE,NULL,NULL},// TOY_TOKEN_OPERATOR_QUESTION,
|
{PREC_NONE,NULL,NULL},// TOY_TOKEN_OPERATOR_QUESTION,
|
||||||
{PREC_GROUP,compound,aggregate},// TOY_TOKEN_OPERATOR_COLON,
|
{PREC_GROUP,compound,aggregate},// TOY_TOKEN_OPERATOR_COLON,
|
||||||
|
|
||||||
{PREC_NONE,NULL,NULL},// TOY_TOKEN_OPERATOR_SEMICOLON, // ;
|
{PREC_NONE,NULL,NULL},// TOY_TOKEN_OPERATOR_SEMICOLON,
|
||||||
{PREC_GROUP,NULL,aggregate},// TOY_TOKEN_OPERATOR_COMMA, // ,
|
{PREC_GROUP,NULL,aggregate},// TOY_TOKEN_OPERATOR_COMMA,
|
||||||
|
|
||||||
{PREC_NONE,NULL,NULL},// TOY_TOKEN_OPERATOR_DOT, // .
|
{PREC_NONE,NULL,NULL},// TOY_TOKEN_OPERATOR_DOT,
|
||||||
{PREC_UNARY,NULL,binary},// TOY_TOKEN_OPERATOR_CONCAT, // ..
|
{PREC_UNARY,NULL,binary},// TOY_TOKEN_OPERATOR_CONCAT,
|
||||||
{PREC_NONE,NULL,NULL},// TOY_TOKEN_OPERATOR_REST, // ...
|
{PREC_NONE,NULL,NULL},// TOY_TOKEN_OPERATOR_REST,
|
||||||
|
|
||||||
//unused operators
|
//unused operators
|
||||||
{PREC_NONE,NULL,NULL},// TOY_TOKEN_OPERATOR_AMPERSAND, // &
|
{PREC_NONE,NULL,NULL},// TOY_TOKEN_OPERATOR_AMPERSAND,
|
||||||
{PREC_NONE,NULL,NULL},// TOY_TOKEN_OPERATOR_PIPE, // |
|
{PREC_NONE,NULL,NULL},// TOY_TOKEN_OPERATOR_PIPE,
|
||||||
|
|
||||||
//meta tokens
|
//meta tokens
|
||||||
{PREC_NONE,NULL,NULL},// TOY_TOKEN_ERROR,
|
{PREC_NONE,NULL,NULL},// TOY_TOKEN_ERROR,
|
||||||
|
|||||||
@@ -66,12 +66,12 @@ typedef enum Toy_TokenType {
|
|||||||
TOY_TOKEN_OPERATOR_ASSIGN,
|
TOY_TOKEN_OPERATOR_ASSIGN,
|
||||||
|
|
||||||
//comparator operators
|
//comparator operators
|
||||||
TOY_TOKEN_OPERATOR_COMPARE_EQUAL,
|
TOY_TOKEN_OPERATOR_COMPARE_EQUAL, // ==
|
||||||
TOY_TOKEN_OPERATOR_COMPARE_NOT,
|
TOY_TOKEN_OPERATOR_COMPARE_NOT, // !=
|
||||||
TOY_TOKEN_OPERATOR_COMPARE_LESS,
|
TOY_TOKEN_OPERATOR_COMPARE_LESS, // <
|
||||||
TOY_TOKEN_OPERATOR_COMPARE_LESS_EQUAL,
|
TOY_TOKEN_OPERATOR_COMPARE_LESS_EQUAL, // <=
|
||||||
TOY_TOKEN_OPERATOR_COMPARE_GREATER,
|
TOY_TOKEN_OPERATOR_COMPARE_GREATER, // >
|
||||||
TOY_TOKEN_OPERATOR_COMPARE_GREATER_EQUAL,
|
TOY_TOKEN_OPERATOR_COMPARE_GREATER_EQUAL, // >=
|
||||||
|
|
||||||
//structural operators
|
//structural operators
|
||||||
TOY_TOKEN_OPERATOR_PAREN_LEFT,
|
TOY_TOKEN_OPERATOR_PAREN_LEFT,
|
||||||
@@ -82,22 +82,22 @@ typedef enum Toy_TokenType {
|
|||||||
TOY_TOKEN_OPERATOR_BRACE_RIGHT,
|
TOY_TOKEN_OPERATOR_BRACE_RIGHT,
|
||||||
|
|
||||||
//other operators
|
//other operators
|
||||||
TOY_TOKEN_OPERATOR_AND, // &&
|
TOY_TOKEN_OPERATOR_AND, // &&
|
||||||
TOY_TOKEN_OPERATOR_OR, // ||
|
TOY_TOKEN_OPERATOR_OR, // ||
|
||||||
TOY_TOKEN_OPERATOR_NEGATE, // !
|
TOY_TOKEN_OPERATOR_NEGATE, // ! (prefix)
|
||||||
TOY_TOKEN_OPERATOR_QUESTION, // ?
|
TOY_TOKEN_OPERATOR_QUESTION, // ?
|
||||||
TOY_TOKEN_OPERATOR_COLON, // :
|
TOY_TOKEN_OPERATOR_COLON, // :
|
||||||
|
|
||||||
TOY_TOKEN_OPERATOR_SEMICOLON, // ;
|
TOY_TOKEN_OPERATOR_SEMICOLON, // ;
|
||||||
TOY_TOKEN_OPERATOR_COMMA, // ,
|
TOY_TOKEN_OPERATOR_COMMA, // ,
|
||||||
|
|
||||||
TOY_TOKEN_OPERATOR_DOT, // .
|
TOY_TOKEN_OPERATOR_DOT, // .
|
||||||
TOY_TOKEN_OPERATOR_CONCAT, // ..
|
TOY_TOKEN_OPERATOR_CONCAT, // ..
|
||||||
TOY_TOKEN_OPERATOR_REST, // ...
|
TOY_TOKEN_OPERATOR_REST, // ...
|
||||||
|
|
||||||
//unused operators
|
//unused operators
|
||||||
TOY_TOKEN_OPERATOR_AMPERSAND, // &
|
TOY_TOKEN_OPERATOR_AMPERSAND, // &
|
||||||
TOY_TOKEN_OPERATOR_PIPE, // |
|
TOY_TOKEN_OPERATOR_PIPE, // |
|
||||||
|
|
||||||
//meta tokens
|
//meta tokens
|
||||||
TOY_TOKEN_ERROR,
|
TOY_TOKEN_ERROR,
|
||||||
|
|||||||
Reference in New Issue
Block a user