Add string as struct, Fix void pointer indexing
compound for String is not working but maybe that's fine
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user