mirror of
https://github.com/DarkPlacesEngine/gmqcc.git
synced 2025-02-17 09:02:25 +00:00
Support in the AST for TYPE_FIELD globals which are no actual fields
This commit is contained in:
parent
fe05d5afd9
commit
52daf02444
3 changed files with 8 additions and 8 deletions
4
ast.c
4
ast.c
|
@ -877,7 +877,7 @@ bool ast_value_codegen(ast_value *self, ast_function *func, bool lvalue, ir_valu
|
|||
return true;
|
||||
}
|
||||
|
||||
bool ast_global_codegen(ast_value *self, ir_builder *ir)
|
||||
bool ast_global_codegen(ast_value *self, ir_builder *ir, bool isfield)
|
||||
{
|
||||
ir_value *v = NULL;
|
||||
if (self->isconst && self->expression.vtype == TYPE_FUNCTION)
|
||||
|
@ -894,7 +894,7 @@ bool ast_global_codegen(ast_value *self, ir_builder *ir)
|
|||
return true;
|
||||
}
|
||||
|
||||
if (self->expression.vtype == TYPE_FIELD) {
|
||||
if (isfield && self->expression.vtype == TYPE_FIELD) {
|
||||
v = ir_builder_create_field(ir, self->name, self->expression.next->expression.vtype);
|
||||
if (!v)
|
||||
return false;
|
||||
|
|
2
ast.h
2
ast.h
|
@ -171,7 +171,7 @@ bool ast_value_set_name(ast_value*, const char *name);
|
|||
|
||||
bool ast_value_codegen(ast_value*, ast_function*, bool lvalue, ir_value**);
|
||||
bool ast_local_codegen(ast_value *self, ir_function *func, bool isparam);
|
||||
bool ast_global_codegen(ast_value *self, ir_builder *ir);
|
||||
bool ast_global_codegen(ast_value *self, ir_builder *ir, bool isfield);
|
||||
|
||||
bool GMQCC_WARN ast_value_params_add(ast_value*, ast_value*);
|
||||
|
||||
|
|
10
parser.c
10
parser.c
|
@ -2994,7 +2994,7 @@ bool parser_finish(const char *output)
|
|||
field = (ast_value*)parser->fields[i].var;
|
||||
isconst = field->isconst;
|
||||
field->isconst = false;
|
||||
if (!ast_global_codegen((ast_value*)field, ir)) {
|
||||
if (!ast_global_codegen((ast_value*)field, ir, true)) {
|
||||
printf("failed to generate field %s\n", field->name);
|
||||
ir_builder_delete(ir);
|
||||
return false;
|
||||
|
@ -3025,28 +3025,28 @@ bool parser_finish(const char *output)
|
|||
"unused global: `%s`", asvalue->name);
|
||||
}
|
||||
}
|
||||
if (!ast_global_codegen(asvalue, ir)) {
|
||||
if (!ast_global_codegen(asvalue, ir, false)) {
|
||||
printf("failed to generate global %s\n", parser->globals[i].name);
|
||||
ir_builder_delete(ir);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
for (i = 0; i < parser->imm_float_count; ++i) {
|
||||
if (!ast_global_codegen(parser->imm_float[i], ir)) {
|
||||
if (!ast_global_codegen(parser->imm_float[i], ir, false)) {
|
||||
printf("failed to generate global %s\n", parser->imm_float[i]->name);
|
||||
ir_builder_delete(ir);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
for (i = 0; i < parser->imm_string_count; ++i) {
|
||||
if (!ast_global_codegen(parser->imm_string[i], ir)) {
|
||||
if (!ast_global_codegen(parser->imm_string[i], ir, false)) {
|
||||
printf("failed to generate global %s\n", parser->imm_string[i]->name);
|
||||
ir_builder_delete(ir);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
for (i = 0; i < parser->imm_vector_count; ++i) {
|
||||
if (!ast_global_codegen(parser->imm_vector[i], ir)) {
|
||||
if (!ast_global_codegen(parser->imm_vector[i], ir, false)) {
|
||||
printf("failed to generate global %s\n", parser->imm_vector[i]->name);
|
||||
ir_builder_delete(ir);
|
||||
return false;
|
||||
|
|
Loading…
Reference in a new issue