public TargetValue store_temp_value (TargetValue initializer, CodeNode node_reference, bool? value_owned = null) {
var lvalue = create_temp_value (initializer.value_type, false, node_reference, value_owned);
store_value (lvalue, initializer, node_reference.source_reference);
+ if (lvalue.value_type is ArrayType) {
+ stdout.printf ("%s tweaked\n", node_reference.to_string ());
+ /*((GLibValue) lvalue).array_length_cvalues = null;
+ ((GLibValue) lvalue).array_size_cvalue = null;
+ ((GLibValue) lvalue).array_length_cexpr = null;*/
+ }
return load_temp_value (lvalue);
}
}
public override void visit_sizeof_expression (SizeofExpression expr) {
+ // FIXME
+ if (expr.value_type == null) {
+ warning ("BAD %s\n", expr.to_string ());
+ expr.value_type = context.analyzer.ulong_type.copy ();
+ }
+
generate_type_declaration (expr.type_reference, cfile);
var csizeof = new CCodeFunctionCall (new CCodeIdentifier ("sizeof"));
}
public override void visit_unary_expression (UnaryExpression expr) {
+ assert (expr.checked);
if (expr.operator == UnaryOperator.REF || expr.operator == UnaryOperator.OUT) {
var glib_value = (GLibValue) expr.inner.target_value;
}
public override void visit_type_check (TypeCheck expr) {
+ assert (expr.checked);
+ // FIXME
+ if (expr.value_type == null) {
+ warning ("BAD %s\n", expr.to_string ());
+ expr.value_type = context.analyzer.bool_type.copy ();
+ }
+
generate_type_declaration (expr.type_reference, cfile);
var type = expr.expression.value_type;
var temp_var = get_temp_variable (param.variable_type, param.variable_type.value_owned, null, true);
emit_temp_var (temp_var);
set_cvalue (arg, get_variable_cexpression (temp_var.name));
+ stdout.printf ("%s.%s\n", param.parent_symbol.to_string (), param.name);
arg.target_value.value_type = arg.target_type.copy ();
cexpr = new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, get_cvalue (arg));
if (source_reference != null) {
context.analyzer.current_source_file = source_reference.file;
}
+
+ if (parent_symbol == null) {
+ stdout.printf ("%s\n", name);
+ assert_not_reached ();
+ }
context.analyzer.current_symbol = parent_symbol;
if (variable_type != null) {