Add string as struct, Fix void pointer indexing

compound for String is not working but maybe that's fine
This commit is contained in:
Krzosa Karol
2023-02-09 20:17:48 +01:00
parent 5e8b3739af
commit d41da94c80
6 changed files with 32 additions and 45 deletions

View File

@@ -226,18 +226,6 @@ gen_value(Token *pos, Value a){
gen("0x%llx", pointer_value);
}
}break;
case TYPE_STRING:{
int length = 0;
gen("(%QString){(uint8_t *)\"", pctx->symbol_prefix);
for(int i = 0; i < a.intern_val.len; i++){
if(a.intern_val.str[i] == '\n'){length += 2; gen("\\n");}
else if(a.intern_val.str[i] == '\r'){length += 2; gen("\\r");}
else{length += 1; gen("%c", a.intern_val.str[i]);}
}
gen("\", %d}", length);
}break;
CASE_BOOL: {
a.bool_val ? gen("true"):gen("false");
}break;
@@ -248,7 +236,20 @@ gen_value(Token *pos, Value a){
case TYPE_TYPE: {
gen("%d", a.type_val->type_id);
}break;
default: result = false;
default: {
if (is_string(type)) {
int length = 0;
gen("(%QString){(uint8_t *)\"", pctx->symbol_prefix);
for(int i = 0; i < a.intern_val.len; i++){
if(a.intern_val.str[i] == '\n'){length += 2; gen("\\n");}
else if(a.intern_val.str[i] == '\r'){length += 2; gen("\\r");}
else{length += 1; gen("%c", a.intern_val.str[i]);}
}
gen("\", %d}", length);
}
else result = false;
}
}
return result;
}
@@ -383,7 +384,7 @@ gen_expr(Ast_Expr *ast){
gen("(");
gen_expr(node->expr);
if(node->index_original_type == pctx->type_string || node->index_original_type == pctx->untyped_string){
gen(".str");
gen(".data");
}
else if(is_slice(node->index_original_type)){
gen(".data");
@@ -833,12 +834,6 @@ compile_to_c_code(){
#define BufferSize(x) (sizeof(x)/sizeof((x)[0]))
typedef struct String{
uint8_t *str;
int64_t len;
}String;
)");
// Generate struct forward decls