244 lines
3.3 KiB
C++
244 lines
3.3 KiB
C++
typedef struct OpenGL OpenGL;
|
|
struct OpenGL{
|
|
void(*glVertexAttribPointer)(GLuint, GLint, GLenum, GLboolean, GLsizei, GLvoid*);
|
|
void(*glBindTexture)(GLenum, GLuint);
|
|
void(*glDrawArrays)(GLenum, GLint, GLsizei);
|
|
};
|
|
|
|
typedef struct OS_Memory OS_Memory;
|
|
struct OS_Memory{
|
|
void* data;
|
|
SizeU commit;
|
|
SizeU reserve;
|
|
};
|
|
|
|
typedef struct Arena Arena;
|
|
struct Arena{
|
|
OS_Memory memory;
|
|
U64 len;
|
|
U64 alignment;
|
|
};
|
|
|
|
typedef struct String String;
|
|
struct String{
|
|
U8* str;
|
|
S64 len;
|
|
};
|
|
|
|
typedef Intern_String String;
|
|
enum Token_Kind{
|
|
TK_End,
|
|
TK_Mul,
|
|
TK_Div,
|
|
TK_Add,
|
|
TK_Sub,
|
|
TK_Mod,
|
|
TK_BitAnd,
|
|
TK_BitOr,
|
|
TK_BitXor,
|
|
TK_Neg,
|
|
TK_Not,
|
|
TK_OpenParen,
|
|
TK_CloseParen,
|
|
TK_OpenBrace,
|
|
TK_CloseBrace,
|
|
TK_OpenBracket,
|
|
TK_CloseBracket,
|
|
TK_Comma,
|
|
TK_Pound,
|
|
TK_Question,
|
|
TK_ThreeDots,
|
|
TK_Semicolon,
|
|
TK_Dot,
|
|
TK_LesserThen,
|
|
TK_GreaterThen,
|
|
TK_Colon,
|
|
TK_Assign,
|
|
TK_DivAssign,
|
|
TK_MulAssign,
|
|
TK_ModAssign,
|
|
TK_SubAssign,
|
|
TK_AddAssign,
|
|
TK_AndAssign,
|
|
TK_OrAssign,
|
|
TK_XorAssign,
|
|
TK_LeftShiftAssign,
|
|
TK_RightShiftAssign,
|
|
TK_DoubleColon,
|
|
TK_At,
|
|
TK_Decrement,
|
|
TK_Increment,
|
|
TK_PostDecrement,
|
|
TK_PostIncrement,
|
|
TK_LesserThenOrEqual,
|
|
TK_GreaterThenOrEqual,
|
|
TK_Equals,
|
|
TK_And,
|
|
TK_Or,
|
|
TK_NotEquals,
|
|
TK_LeftShift,
|
|
TK_RightShift,
|
|
TK_Arrow,
|
|
TK_ExprSizeof,
|
|
TK_DocComment,
|
|
TK_Comment,
|
|
TK_Identifier,
|
|
TK_StringLit,
|
|
TK_U8Lit,
|
|
TK_Character,
|
|
TK_Error,
|
|
TK_Float,
|
|
TK_Int,
|
|
TK_Keyword,
|
|
};
|
|
|
|
typedef struct Token Token;
|
|
struct Token{
|
|
Token_Kind kind;
|
|
String string;
|
|
union {
|
|
S64 integer_val;
|
|
String error_val;
|
|
Intern_String intern_val;
|
|
};
|
|
String file;
|
|
S64 line;
|
|
U8* line_begin;
|
|
};
|
|
|
|
typedef struct Tokens Tokens;
|
|
struct Tokens{
|
|
Token* tokens;
|
|
S64 iter;
|
|
};
|
|
|
|
typedef struct Lex_Stream Lex_Stream;
|
|
struct Lex_Stream{
|
|
U8* stream;
|
|
U8* line_begin;
|
|
String filename;
|
|
S64 line;
|
|
};
|
|
|
|
enum Expr_Kind{
|
|
EK_None,
|
|
EK_Atom,
|
|
EK_Unary,
|
|
EK_Binary,
|
|
EK_Ternary,
|
|
EK_Cast,
|
|
EK_List,
|
|
EK_Call,
|
|
EK_Index,
|
|
};
|
|
|
|
typedef struct Expr Expr;
|
|
struct Expr{
|
|
Expr_Kind kind;
|
|
Token* token;
|
|
Expr* next;
|
|
union {
|
|
struct cast_val{
|
|
AST_Node* type;
|
|
Expr* expr;
|
|
};
|
|
struct list{
|
|
Expr* first;
|
|
Expr* last;
|
|
};
|
|
struct call{
|
|
Expr* atom;
|
|
Expr* list;
|
|
};
|
|
struct index{
|
|
Expr* atom;
|
|
Expr* index;
|
|
};
|
|
struct unary{
|
|
Expr* expr;
|
|
};
|
|
struct binary{
|
|
Expr* left;
|
|
Expr* right;
|
|
};
|
|
struct ternary{
|
|
Expr* cond;
|
|
Expr* on_true;
|
|
Expr* on_false;
|
|
};
|
|
};
|
|
};
|
|
|
|
enum AST_Kind{
|
|
AK_None,
|
|
AK_BaseType,
|
|
AK_Typedef,
|
|
AK_Enum,
|
|
AK_Struct,
|
|
AK_Union,
|
|
AK_Note,
|
|
AK_List,
|
|
AK_Pointer,
|
|
AK_Array,
|
|
AK_Function,
|
|
AK_Variable,
|
|
AK_EnumChild,
|
|
};
|
|
|
|
typedef struct AST_Node AST_Node;
|
|
struct AST_Node{
|
|
AST_Kind kind;
|
|
Token* pos;
|
|
Intern_String name;
|
|
AST_Node* next;
|
|
AST_Node* next_scope;
|
|
AST_Node* first_note;
|
|
AST_Node* last_note;
|
|
AST_Node* first_child;
|
|
AST_Node* last_child;
|
|
union {
|
|
SizeU base_type_size;
|
|
AST_Node* pointer;
|
|
AST_Node* typedef_type;
|
|
AST_Node* variable_type;
|
|
AST_Node* func_return_type;
|
|
};
|
|
};
|
|
|
|
typedef struct Parser_Error Parser_Error;
|
|
struct Parser_Error{
|
|
Parser_Error* next;
|
|
String message;
|
|
Token* token;
|
|
};
|
|
|
|
typedef struct Scope Scope;
|
|
struct Scope{
|
|
Scope* next;
|
|
AST_Node* first;
|
|
AST_Node* last;
|
|
};
|
|
|
|
typedef struct Parser Parser;
|
|
struct Parser{
|
|
Arena main_arena;
|
|
Arena intern_table_arena;
|
|
Arena symbol_table_arena;
|
|
Scope* scope_free_list;
|
|
Scope* scope_stack;
|
|
Scope* global_scope;
|
|
S64 symbols_inserted;
|
|
S64 symbols_count;
|
|
AST_Node* symbols;
|
|
Intern_String* interns;
|
|
S64 interns_in_bytes;
|
|
S64 interns_inserted;
|
|
S64 interns_count;
|
|
U8* first_keyword;
|
|
U8* last_keyword;
|
|
Parser_Error default;
|
|
Parser_Error error;
|
|
Tokens token_array;
|
|
};
|
|
|