mirror of
https://github.com/krgamestudios/Toy.git
synced 2026-04-15 23:04:08 +10:00
I've expanded support to three major platforms: - linux - windows - macos The CI now runs the test suites for all of these, both under normal conditions and under GDB (except for macos, which lacks GDB support). TOY_BITNESS specifies the bit-width of the current platform, either 32 or 64. A value of -1 means the bit-width could not be determined. Some tests will be disabled if the appropriate bit-width can't be determined, and a warning is printed to stderr. TOY_API has been tweaked, and is now dependant on different preprocessor flags. It is defined as 'extern' on all supported platforms except windows, which instead specifies DLL support. It defaults to 'extern' if the platform can't be determined. commit d0350998ecc80b8925a1962ceb2ab400da50be9d Author: Kayne Ruse <kayneruse@gmail.com> Date: Sun Sep 22 09:55:42 2024 +1000 Expanded GDB tests using matrix strategy commit dc2addacc52830227ddcd0f35997c0e1668b579c Author: Kayne Ruse <kayneruse@gmail.com> Date: Sun Sep 22 09:05:42 2024 +1000 Reserved the yield keyword commit f485c380f74a49092e0c5a41e599fbb06dbce235 Author: Kayne Ruse <kayneruse@gmail.com> Date: Sat Sep 21 15:17:11 2024 +1000 Potential segfault fix commit d8b19d21c92133feb071e631009a3cf99df0f068 Author: Kayne Ruse <kayneruse@gmail.com> Date: Sat Sep 21 14:25:47 2024 +1000 Added testing on windows under GDB, read more I'm hunting a segfault that only appears on windows, but I lack a windows machine, so github's runners are all I have right now. commit 8606db541fb5cbe91b16a39e9815fe4a27ba0c8a Author: Kayne Ruse <kayneruse@gmail.com> Date: Sat Sep 21 13:12:02 2024 +1000 DLL import/export macros tweaked for windows TOY_EXPORT for making a DLL TOY_IMPORT for using a DLL Defaults to 'extern' if neither option is present commit a6929666401953a5b3a93dfe83c9398e012beefc Author: Kayne Ruse <kayneruse@gmail.com> Date: Sat Sep 21 12:52:06 2024 +1000 Investigating bitness issue on windows commit 8f615f735868a316e8d5a6a77ed899e72fd537f8 Author: Kayne Ruse <kayneruse@gmail.com> Date: Sat Sep 21 12:32:55 2024 +1000 Adjusting bitness tests in test_ast.c commit 61694f2183ac84ee7c53c855f2f6aa29f360f16c Author: Kayne Ruse <kayneruse@gmail.com> Date: Sat Sep 21 11:46:59 2024 +1000 Added experimental macOS CI job
124 lines
3.1 KiB
C
124 lines
3.1 KiB
C
#pragma once
|
|
|
|
#include "toy_common.h"
|
|
#include "toy_memory.h"
|
|
|
|
#include "toy_value.h"
|
|
|
|
//each major type
|
|
typedef enum Toy_AstType {
|
|
TOY_AST_BLOCK,
|
|
|
|
TOY_AST_VALUE,
|
|
TOY_AST_UNARY,
|
|
TOY_AST_BINARY,
|
|
TOY_AST_GROUP,
|
|
|
|
TOY_AST_PASS,
|
|
TOY_AST_ERROR,
|
|
TOY_AST_END,
|
|
} Toy_AstType;
|
|
|
|
//flags are handled differently by different types
|
|
typedef enum Toy_AstFlag {
|
|
TOY_AST_FLAG_NONE,
|
|
|
|
//binary flags
|
|
TOY_AST_FLAG_ADD,
|
|
TOY_AST_FLAG_SUBTRACT,
|
|
TOY_AST_FLAG_MULTIPLY,
|
|
TOY_AST_FLAG_DIVIDE,
|
|
TOY_AST_FLAG_MODULO,
|
|
TOY_AST_FLAG_ASSIGN, //TODO: implement the declare statement
|
|
TOY_AST_FLAG_ADD_ASSIGN,
|
|
TOY_AST_FLAG_SUBTRACT_ASSIGN,
|
|
TOY_AST_FLAG_MULTIPLY_ASSIGN,
|
|
TOY_AST_FLAG_DIVIDE_ASSIGN,
|
|
TOY_AST_FLAG_MODULO_ASSIGN,
|
|
TOY_AST_FLAG_COMPARE_EQUAL,
|
|
TOY_AST_FLAG_COMPARE_NOT,
|
|
TOY_AST_FLAG_COMPARE_LESS,
|
|
TOY_AST_FLAG_COMPARE_LESS_EQUAL,
|
|
TOY_AST_FLAG_COMPARE_GREATER,
|
|
TOY_AST_FLAG_COMPARE_GREATER_EQUAL,
|
|
TOY_AST_FLAG_AND,
|
|
TOY_AST_FLAG_OR,
|
|
|
|
//unary flags
|
|
TOY_AST_FLAG_NEGATE,
|
|
TOY_AST_FLAG_INCREMENT,
|
|
TOY_AST_FLAG_DECREMENT,
|
|
|
|
// TOY_AST_FLAG_TERNARY,
|
|
} Toy_AstFlag;
|
|
|
|
//the root AST type
|
|
typedef union Toy_Ast Toy_Ast;
|
|
|
|
void Toy_private_initAstBlock(Toy_Bucket** bucket, Toy_Ast** handle);
|
|
void Toy_private_appendAstBlock(Toy_Bucket** bucket, Toy_Ast** handle, Toy_Ast* child);
|
|
|
|
void Toy_private_emitAstValue(Toy_Bucket** bucket, Toy_Ast** handle, Toy_Value value);
|
|
void Toy_private_emitAstUnary(Toy_Bucket** bucket, Toy_Ast** handle, Toy_AstFlag flag);
|
|
void Toy_private_emitAstBinary(Toy_Bucket** bucket, Toy_Ast** handle,Toy_AstFlag flag, Toy_Ast* right);
|
|
void Toy_private_emitAstGroup(Toy_Bucket** bucket, Toy_Ast** handle);
|
|
|
|
void Toy_private_emitAstPass(Toy_Bucket** bucket, Toy_Ast** handle);
|
|
void Toy_private_emitAstError(Toy_Bucket** bucket, Toy_Ast** handle);
|
|
void Toy_private_emitAstEnd(Toy_Bucket** bucket, Toy_Ast** handle);
|
|
|
|
typedef struct Toy_AstBlock {
|
|
Toy_AstType type;
|
|
Toy_Ast* child; //begin encoding the line
|
|
Toy_Ast* next; //'next' is either an AstBlock or null
|
|
Toy_Ast* tail; //'tail' - either points to the tail of the current list, or null; only used by the head of a list as an optimisation
|
|
} Toy_AstBlock;
|
|
|
|
typedef struct Toy_AstValue {
|
|
Toy_AstType type;
|
|
Toy_Value value;
|
|
} Toy_AstValue;
|
|
|
|
typedef struct Toy_AstUnary {
|
|
Toy_AstType type;
|
|
Toy_AstFlag flag;
|
|
Toy_Ast* child;
|
|
} Toy_AstUnary;
|
|
|
|
typedef struct Toy_AstBinary {
|
|
Toy_AstType type;
|
|
Toy_AstFlag flag;
|
|
Toy_Ast* left;
|
|
Toy_Ast* right;
|
|
} Toy_AstBinary;
|
|
|
|
typedef struct Toy_AstGroup {
|
|
Toy_AstType type;
|
|
Toy_Ast* child;
|
|
} Toy_AstGroup;
|
|
|
|
typedef struct Toy_AstPass {
|
|
Toy_AstType type;
|
|
} Toy_AstPass;
|
|
|
|
typedef struct Toy_AstError {
|
|
Toy_AstType type;
|
|
//TODO: more data regarding the error
|
|
} Toy_AstError;
|
|
|
|
typedef struct Toy_AstEnd {
|
|
Toy_AstType type;
|
|
} Toy_AstEnd;
|
|
|
|
union Toy_Ast { //32 | 64 BITNESS
|
|
Toy_AstType type; //4 | 4
|
|
Toy_AstBlock block; //16 | 32
|
|
Toy_AstValue value; //12 | 12
|
|
Toy_AstUnary unary; //12 | 16
|
|
Toy_AstBinary binary; //16 | 24
|
|
Toy_AstGroup group; //8 | 16
|
|
Toy_AstPass pass; //4 | 4
|
|
Toy_AstError error; //4 | 4
|
|
Toy_AstEnd end; //4 | 4
|
|
}; //16 | 32
|