--- a/stage4/generate_c/generate_c_vardecl.cc Wed Nov 18 10:53:15 2009 +0100
+++ b/stage4/generate_c/generate_c_vardecl.cc Sun Nov 29 16:38:11 2009 +0100
@@ -888,8 +888,14 @@
(wanted_varformat == localinit_vf)) {
for(int i = 0; i < list->n; i++) {
s4o.print(s4o.indent_spaces);
- if (wanted_varformat != init_vf) {
- this->current_var_type_symbol->accept(*this);
+ if (wanted_varformat == local_vf) {
+ s4o.print(DECLARE_VAR);
+ s4o.print("(");
+ this->current_var_type_symbol->accept(*this);
+ s4o.print(",");
+ }
+ else if (wanted_varformat == localinit_vf) {
+ this->current_var_type_symbol->accept(*this);
s4o.print(" ");
}
print_variable_prefix();
@@ -899,8 +905,10 @@
s4o.print(" = ");
this->current_var_init_symbol->accept(*this);
}
+ s4o.print(";\n");
}
- s4o.print(";\n");
+ else
+ s4o.print(")\n");
}
}
@@ -956,11 +964,13 @@
}
else if (this->current_var_init_symbol != NULL) {
s4o.print(nv->get());
+ s4o.print(INIT_VAR);
+ s4o.print("(");
this->print_variable_prefix();
list->elements[i]->accept(*this);
- s4o.print(" = ");
+ s4o.print(",");
this->current_var_init_symbol->accept(*this);
- s4o.print(";");
+ s4o.print(")");
}
}
}
@@ -1141,29 +1151,38 @@
(wanted_varformat == init_vf) ||
(wanted_varformat == localinit_vf)) {
s4o.print(s4o.indent_spaces);
- if (wanted_varformat != init_vf) {
+ if (wanted_varformat == local_vf) {
+ s4o.print(DECLARE_VAR);
+ s4o.print("(");
+ symbol->type->accept(*this);
+ s4o.print(",");
+ }
+ else if (wanted_varformat == localinit_vf) {
symbol->type->accept(*this);
s4o.print(" ");
}
print_variable_prefix();
symbol->name->accept(*this);
- if (wanted_varformat != local_vf) {
+ if (wanted_varformat == local_vf)
+ s4o.print(")\n");
+ else {
s4o.print(" = ");
symbol->value->accept(*this);
- s4o.print(";");
- }
- s4o.print(";\n");
+ s4o.print(";\n");
+ }
}
if (wanted_varformat == constructorinit_vf) {
/* NOTE: I (Mario) think this is dead code - never gets executed. Must confirm it before deleting it... */
s4o.print(nv->get());
+ s4o.print(INIT_VAR);
+ s4o.print("(");
this->print_variable_prefix();
// s4o.print("EN = __BOOL_LITERAL(TRUE);");
symbol->name->accept(*this);
- s4o.print(" = ");
+ s4o.print(",");
symbol->value->accept(*this);
- s4o.print(";");
+ s4o.print(")");
}
}
return NULL;
@@ -1189,16 +1208,22 @@
(wanted_varformat == init_vf) ||
(wanted_varformat == localinit_vf)) {
s4o.print(s4o.indent_spaces);
- if (wanted_varformat != init_vf) {
+ if (wanted_varformat == local_vf) {
+ s4o.print(DECLARE_VAR);
+ s4o.print("(");
+ symbol->type->accept(*this);
+ s4o.print(",");
+ }
+ else if (wanted_varformat == localinit_vf) {
symbol->type->accept(*this);
s4o.print(" ");
}
print_variable_prefix();
symbol->name->accept(*this);
- if (wanted_varformat != local_vf) {
- s4o.print(" = __BOOL_LITERAL(TRUE);");
- }
- s4o.print(";\n");
+ if (wanted_varformat == local_vf)
+ s4o.print(")\n");
+ else
+ s4o.print(" = __BOOL_LITERAL(TRUE);\n");
}
if (wanted_varformat == foutputassign_vf) {
@@ -1218,10 +1243,12 @@
if (wanted_varformat == constructorinit_vf) {
/* NOTE: I (Mario) think this is dead code - never gets executed. Must confirm it before deleting it... */
s4o.print(nv->get());
+ s4o.print(INIT_VAR);
+ s4o.print("(");
this->print_variable_prefix();
// s4o.print("ENO = __BOOL_LITERAL(TRUE);");
symbol->name->accept(*this);
- s4o.print(" = __BOOL_LITERAL(TRUE);");
+ s4o.print(",__BOOL_LITERAL(TRUE))");
}
}
return NULL;
@@ -1490,40 +1517,43 @@
switch(wanted_varformat) {
case local_vf:
s4o.print(s4o.indent_spaces);
+ s4o.print(DECLARE_LOCATED);
+ s4o.print("(");
this->current_var_type_symbol->accept(*this);
- s4o.print(" *");
+ s4o.print(",");
if (symbol->variable_name != NULL)
symbol->variable_name->accept(*this);
else
symbol->location->accept(*this);
- s4o.print(";\n");
+ s4o.print(")\n");
break;
case constructorinit_vf:
s4o.print(nv->get());
- s4o.print("{extern ");
+ s4o.print(INIT_LOCATED);
+ s4o.print("(");
this->current_var_type_symbol->accept(*this);
- s4o.print("* ");
+ s4o.print(",");
symbol->location->accept(*this);
- s4o.print("; ");
- print_variable_prefix();
+ s4o.print(",");
if (symbol->variable_name != NULL)
symbol->variable_name->accept(*this);
else
symbol->location->accept(*this);
- s4o.print(" = ");
- symbol->location->accept(*this);
+ s4o.print(",");
+ print_variable_prefix();
+ s4o.print(")\n");
if (this->current_var_init_symbol != NULL) {
- s4o.print("; *");
- print_variable_prefix();
- if (symbol->variable_name != NULL)
+ s4o.print(INIT_LOCATED_VALUE);
+ s4o.print("(");
+ if (symbol->variable_name != NULL)
symbol->variable_name->accept(*this);
else
symbol->location->accept(*this);
- s4o.print(" = ");
+ s4o.print(",");
this->current_var_init_symbol->accept(*this);
- }
- s4o.print(";}");
+ s4o.print(")\n");
+ }
break;
case globalinit_vf:
@@ -1623,29 +1653,25 @@
case local_vf:
case localinit_vf:
s4o.print(s4o.indent_spaces);
+ s4o.print(DECLARE_EXTERNAL);
+ s4o.print("(");
this->current_var_type_symbol->accept(*this);
- s4o.print(" *");
+ s4o.print(",");
symbol->global_var_name->accept(*this);
- if ((wanted_varformat == localinit_vf) &&
- (this->current_var_init_symbol != NULL)) {
- s4o.print(" = ");
- this->current_var_init_symbol->accept(*this);
- }
- s4o.print(";\n");
+ s4o.print(")\n");
break;
case constructorinit_vf:
s4o.print(nv->get());
- s4o.print("{extern ");
+ s4o.print(INIT_EXTERNAL);
+ s4o.print("(");
this->current_var_type_symbol->accept(*this);
- s4o.print(" *");
+ s4o.print(",");
symbol->global_var_name->accept(*this);
- s4o.print("; ");
+ s4o.print(",");
print_variable_prefix();
symbol->global_var_name->accept(*this);
- s4o.print(" = ");
- symbol->global_var_name->accept(*this);
- s4o.print(";}");
+ s4o.print(")");
break;
case finterface_vf:
@@ -1738,53 +1764,56 @@
/* now to produce the c equivalent... */
switch(wanted_varformat) {
case local_vf:
- s4o.print("extern ");
+ s4o.print(s4o.indent_spaces);
+ s4o.print(DECLARE_GLOBAL_LOCATION);
+ s4o.print("(");
this->current_var_type_symbol->accept(*this);
- s4o.print("* ");
+ s4o.print(",");
symbol->location->accept(*this);
- s4o.print(";\n");
+ s4o.print(")\n");
if (symbol->global_var_name != NULL) {
s4o.print(s4o.indent_spaces);
+ s4o.print(DECLARE_GLOBAL_LOCATED);
+ s4o.print("(");
this->current_var_type_symbol->accept(*this);
- s4o.print(" *");
+ s4o.print(",");
if (this->resource_name != NULL) {
this->resource_name->accept(*this);
- s4o.print("__");
}
+ s4o.print(",");
symbol->global_var_name->accept(*this);
- s4o.print(";\n");
- if (this->resource_name != NULL) {
- s4o.print(s4o.indent_spaces);
- s4o.print("#define ");
- symbol->global_var_name->accept(*this);
- s4o.print(" ");
- this->resource_name->accept(*this);
- s4o.print("__");
- symbol->global_var_name->accept(*this);
- s4o.print("\n");
- }
+ s4o.print(")\n");
}
break;
case constructorinit_vf:
- s4o.print(nv->get());
-
if (symbol->global_var_name != NULL) {
+ s4o.print(nv->get());
+ s4o.print(s4o.indent_spaces);
+ s4o.print(INIT_GLOBAL_LOCATED);
+ s4o.print("(");
+ if (this->resource_name != NULL) {
+ this->resource_name->accept(*this);
+ }
+ s4o.print(",");
symbol->global_var_name->accept(*this);
- s4o.print(" = ");
+ s4o.print(",");
symbol->location->accept(*this);
- s4o.print(";");
- s4o.print(nv->get());
- s4o.print("*");
- symbol->global_var_name->accept(*this);
- }
- else
- symbol->location->accept(*this);
- s4o.print(" = ");
+ s4o.print(")");
+ }
if (this->current_var_init_symbol != NULL) {
- this->current_var_init_symbol->accept(*this);
- }
- s4o.print(";");
+ s4o.print(nv->get());
+ s4o.print(s4o.indent_spaces);
+ s4o.print(INIT_GLOBAL);
+ s4o.print("(");
+ if (symbol->global_var_name != NULL)
+ symbol->global_var_name->accept(*this);
+ else
+ symbol->location->accept(*this);
+ s4o.print(",");
+ this->current_var_init_symbol->accept(*this);
+ s4o.print(")");
+ }
break;
default:
@@ -1817,33 +1846,16 @@
case local_vf:
case localinit_vf:
for(int i = 0; i < list->n; i++) {
- s4o.print(s4o.indent_spaces);
+ s4o.print(s4o.indent_spaces);
+ s4o.print(DECLARE_GLOBAL);
+ s4o.print("(");
this->current_var_type_symbol->accept(*this);
- s4o.print(" ");
+ s4o.print(",");
if(this->resource_name != NULL)
this->resource_name->accept(*this);
- s4o.print("__");
+ s4o.print(",");
list->elements[i]->accept(*this);
- s4o.print(";\n");
- if(this->resource_name != NULL)
- s4o.print("static ");
- this->current_var_type_symbol->accept(*this);
- s4o.print(" *");
- list->elements[i]->accept(*this);
- s4o.print(" = &");
- if(this->resource_name != NULL)
- this->resource_name->accept(*this);
- s4o.print("__");
- list->elements[i]->accept(*this);
-#if 0
- if (wanted_varformat == localinit_vf) {
- if (this->current_var_init_symbol != NULL) {
- s4o.print(" = ");
- this->current_var_init_symbol->accept(*this);
- }
- }
-#endif
- s4o.print(";\n");
+ s4o.print(")\n");
}
break;
@@ -1852,11 +1864,12 @@
for(int i = 0; i < list->n; i++) {
s4o.print(nv->get());
- s4o.print("*");
+ s4o.print(INIT_GLOBAL);
+ s4o.print("(");
list->elements[i]->accept(*this);
- s4o.print(" = ");
+ s4o.print(",");
this->current_var_init_symbol->accept(*this);
- s4o.print(";");
+ s4o.print(")");
#if 0
/* The following code would be for globalinit_vf !!
* But it is not currently required...