Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Empty file removed .vscode/bookmarks.json
Empty file.
2 changes: 1 addition & 1 deletion base/Readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ The convention you'll see used throughout the upfront interface of the library i
1. Check name or parameters to make sure they are valid for the construction requested
2. Create a code object using `make_code`.
3. Populate immediate fields (Name, Type, ModuleFlags, etc)
4. Populate sub-entires using `add_entry`. If using the default serialization function `to_string`, follow the order at which entires are expected to appear (there is a strong ordering expected).
4. Populate sub-entires using `add_entry`. If using the default serialization function `to_strbuilder`, follow the order at which entires are expected to appear (there is a strong ordering expected).

Names or Content fields are interned strings and thus showed be cached using `get_cached_string` if its desired to preserve that behavior.

Expand Down
16 changes: 8 additions & 8 deletions base/auxillary/builder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,45 +15,45 @@ Builder builder_open( char const* path )
return result;
}

result.Buffer = string_make_reserve( GlobalAllocator, Builder_StrBufferReserve );
result.Buffer = strbuilder_make_reserve( GlobalAllocator, Builder_StrBufferReserve );

// log_fmt("$Builder - Opened file: %s\n", result.File.filename );
return result;
}

void builder_pad_lines( Builder* builder, s32 num )
{
string_append_strc( & builder->Buffer, txt("\n") );
strbuilder_append_str( & builder->Buffer, txt("\n") );
}

void builder_print( Builder* builder, Code code )
{
String str = code_to_string(code);
StrBuilder str = code_to_strbuilder(code);
// const ssize len = str.length();
// log_fmt( "%s - print: %.*s\n", File.filename, len > 80 ? 80 : len, str.Data );
string_append_string( & builder->Buffer, str );
strbuilder_append_string( & builder->Buffer, str );
}

void builder_print_fmt_va( Builder* builder, char const* fmt, va_list va )
{
ssize res;
char buf[ GEN_PRINTF_MAXLEN ] = { 0 };

res = str_fmt_va( buf, count_of( buf ) - 1, fmt, va ) - 1;
res = c_str_fmt_va( buf, count_of( buf ) - 1, fmt, va ) - 1;

string_append_c_str_len( (String*) & (builder->Buffer), (char const*)buf, res);
strbuilder_append_c_str_len( (StrBuilder*) & (builder->Buffer), (char const*)buf, res);
}

void builder_write(Builder* builder)
{
b32 result = file_write( & builder->File, builder->Buffer, string_length(builder->Buffer) );
b32 result = file_write( & builder->File, builder->Buffer, strbuilder_length(builder->Buffer) );

if ( result == false )
log_failure("gen::File::write - Failed to write to file: %s\n", file_name( & builder->File ) );

log_fmt( "Generated: %s\n", builder->File.filename );
file_close( & builder->File );
string_free(& builder->Buffer);
strbuilder_free(& builder->Buffer);
}

#pragma endregion Builder
2 changes: 1 addition & 1 deletion base/auxillary/builder.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ void builder_write( Builder* builder );
struct Builder
{
FileInfo File;
String Buffer;
StrBuilder Buffer;

#if GEN_COMPILER_CPP && ! GEN_C_LIKE_CPP
forceinline static Builder open( char const* path ) { return builder_open(path); }
Expand Down
2 changes: 1 addition & 1 deletion base/auxillary/gen_template.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,4 @@ CodeFn gen_func_template( CodeTemplate template, ... );
Code gen_class_struct_template( CodeTemplate template, ... );

Code gen_template( CodeTemplate template, ... );
Code gen_template( StrC template, StrC instantiation );
Code gen_template( Str template, Str instantiation );
24 changes: 12 additions & 12 deletions base/auxillary/scanner.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@ Code scan_file( char const* path )
GEN_FATAL("scan_file: %s is empty", path );
}

String str = string_make_reserve( GlobalAllocator, fsize );
StrBuilder str = strbuilder_make_reserve( GlobalAllocator, fsize );
file_read( & file, str, fsize );
string_get_header(str)->Length = fsize;
strbuilder_get_header(str)->Length = fsize;

// Skip GEN_INTELLISENSE_DIRECTIVES preprocessor blocks
// Its designed so that the directive should be the first thing in the file.
Expand All @@ -31,9 +31,9 @@ Code scan_file( char const* path )
#define current (*scanner)
#define matched 0
#define move_fwd() do { ++ scanner; -- left; } while (0)
const StrC directive_start = txt( "ifdef" );
const StrC directive_end = txt( "endif" );
const StrC def_intellisense = txt("GEN_INTELLISENSE_DIRECTIVES" );
const Str directive_start = txt( "ifdef" );
const Str directive_end = txt( "endif" );
const Str def_intellisense = txt("GEN_INTELLISENSE_DIRECTIVES" );

bool found_directive = false;
char const* scanner = (char const*)str;
Expand All @@ -49,15 +49,15 @@ Code scan_file( char const* path )

if ( ! found_directive )
{
if ( left && str_compare_len( scanner, directive_start.Ptr, directive_start.Len ) == matched )
if ( left && c_str_compare_len( scanner, directive_start.Ptr, directive_start.Len ) == matched )
{
scanner += directive_start.Len;
left -= directive_start.Len;

while ( left && char_is_space( current ) )
move_fwd();

if ( left && str_compare_len( scanner, def_intellisense.Ptr, def_intellisense.Len ) == matched )
if ( left && c_str_compare_len( scanner, def_intellisense.Ptr, def_intellisense.Len ) == matched )
{
scanner += def_intellisense.Len;
left -= def_intellisense.Len;
Expand All @@ -77,7 +77,7 @@ Code scan_file( char const* path )
continue;
}

if ( left && str_compare_len( scanner, directive_end.Ptr, directive_end.Len ) == matched )
if ( left && c_str_compare_len( scanner, directive_end.Ptr, directive_end.Len ) == matched )
{
scanner += directive_end.Len;
left -= directive_end.Len;
Expand All @@ -94,12 +94,12 @@ Code scan_file( char const* path )
if ( (scanner + 2) >= ( (char const*) str + fsize ) )
{
mem_move( str, scanner, left );
string_get_header(str)->Length = left;
strbuilder_get_header(str)->Length = left;
break;
}

mem_move( str, scanner, left );
string_get_header(str)->Length = left;
strbuilder_get_header(str)->Length = left;

break;
}
Expand All @@ -113,12 +113,12 @@ Code scan_file( char const* path )
}

file_close( & file );
return untyped_str( string_to_strc(str) );
return untyped_str( strbuilder_to_str(str) );
}

CodeBody parse_file( const char* path ) {
FileContents file = file_read_contents( GlobalAllocator, true, path );
StrC content = { file.size, (char const*)file.data };
Str content = { (char const*)file.data, file.size };
CodeBody code = parse_global_body( content );
log_fmt("\nParsed: %s\n", path);
return code;
Expand Down
8 changes: 7 additions & 1 deletion base/base.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,13 @@ int gen_main()
def_include(txt("components/types.hpp")),
preprocess_endif,
fmt_newline,
untyped_str( to_strc_from_c_str(generation_notice) )
untyped_str( to_str_from_c_str(generation_notice) )
));

CodeBody ecode = gen_ecode ( "enums/ECodeTypes.csv" );
CodeBody eoperator = gen_eoperator ( "enums/EOperator.csv" );
CodeBody especifier = gen_especifier( "enums/ESpecifier.csv" );
CodeBody etoktype = gen_etoktype ( "enums/ETokType.csv", "enums/AttributeTokens.csv" );
CodeBody ast_inlines = gen_ast_inlines();

Builder header_ecode = builder_open( "components/gen/ecodetypes.hpp" );
Expand All @@ -57,6 +58,11 @@ int gen_main()
builder_print( & header_especifier, gen_component_header );
builder_print( & header_especifier, format(especifier) );
builder_write( & header_especifier);

Builder header_etoktype = builder_open( "components/gen/etoktype.cpp" );
builder_print( & header_etoktype, gen_component_header );
builder_print( & header_etoktype, format(etoktype) );
builder_write( & header_etoktype);

Builder header_ast_inlines = builder_open( "components/gen/ast_inlines.hpp" );
builder_print( & header_ast_inlines, gen_component_header );
Expand Down
Loading