Add foreign functions
This commit is contained in:
82
new_ast.cpp
82
new_ast.cpp
@@ -1,85 +1,4 @@
|
||||
|
||||
// Lexer::interns::map::allocator - array allocator, resizing
|
||||
// Lexer::tokens - array allocator, resizing
|
||||
//
|
||||
// Parser::ast_arena - arena for asts
|
||||
// Lexer::interns::string_allocator - arena for interns
|
||||
//
|
||||
Intern_String keyword_struct;
|
||||
Intern_String keyword_union;
|
||||
Intern_String keyword_return;
|
||||
Intern_String keyword_if;
|
||||
Intern_String keyword_else;
|
||||
Intern_String keyword_true;
|
||||
Intern_String keyword_false;
|
||||
Intern_String keyword_for;
|
||||
Intern_String keyword_pass;
|
||||
Intern_String keyword_cast;
|
||||
Intern_String keyword_enum;
|
||||
|
||||
Intern_String intern_void;
|
||||
Intern_String intern_int;
|
||||
Intern_String intern_str;
|
||||
Intern_String intern_uint;
|
||||
|
||||
struct Ast_Package;
|
||||
struct Sym;
|
||||
struct Parse_Ctx:Lexer{
|
||||
Allocator *perm; // Stores: AST, tokens, interns
|
||||
Allocator *heap;
|
||||
|
||||
U64 unique_ids;
|
||||
Map type_map;
|
||||
|
||||
Ast_Package *resolving_package;
|
||||
Map resolved;
|
||||
Map syms;
|
||||
S32 scope;
|
||||
Array<Sym *> local_syms;
|
||||
|
||||
Token empty_token;
|
||||
S64 indent;
|
||||
|
||||
String_Builder gen;
|
||||
|
||||
Intern_String intern(String string){
|
||||
return intern_string(&interns, string);
|
||||
}
|
||||
|
||||
void init(Allocator *perm_allocator, Allocator *heap_allocator){
|
||||
perm = perm_allocator;
|
||||
heap = heap_allocator;
|
||||
|
||||
gen = {perm};
|
||||
resolved = {heap};
|
||||
syms = {heap};
|
||||
type_map = {heap};
|
||||
local_syms = {heap};
|
||||
bigint_allocator = perm;
|
||||
|
||||
lex_init(perm, heap, this);
|
||||
keyword_struct= intern("struct"_s);
|
||||
keyword_union = intern("union"_s);
|
||||
keyword_cast = intern("cast"_s);
|
||||
keyword_true = intern("true"_s);
|
||||
keyword_false = intern("false"_s);
|
||||
keyword_return = intern("return"_s);
|
||||
keyword_if = intern("if"_s);
|
||||
keyword_pass = intern("pass"_s);
|
||||
keyword_else = intern("else"_s);
|
||||
keyword_for = intern("for"_s);
|
||||
keyword_enum = intern_string(&interns, "enum"_s);
|
||||
interns.first_keyword = keyword_struct.str;
|
||||
interns.last_keyword = keyword_enum.str;
|
||||
|
||||
intern_void = intern_string(&interns, "void"_s);
|
||||
intern_int = intern_string(&interns, "int"_s);
|
||||
intern_str = intern_string(&interns, "String"_s);
|
||||
intern_uint = intern_string(&interns, "uint"_s);
|
||||
}
|
||||
};
|
||||
|
||||
thread_local Parse_Ctx *pctx;
|
||||
//-----------------------------------------------------------------------------
|
||||
// AST
|
||||
//-----------------------------------------------------------------------------
|
||||
@@ -123,6 +42,7 @@ enum{
|
||||
AST_AGGREGATE_CHILD = 16,
|
||||
AST_ITEM_INCLUDED = 32,
|
||||
AST_ATOM = 64,
|
||||
AST_FOREIGN = 128,
|
||||
};
|
||||
|
||||
struct Ast{
|
||||
|
||||
Reference in New Issue
Block a user