temp_ref_values.clear ();
}
- public void emit_temp_var (LocalVariable local) {
+ public void emit_temp_var (LocalVariable local, bool on_error = false) {
var init = (!local.name.has_prefix ("*") && local.init);
if (is_in_coroutine ()) {
closure_struct.add_field (get_ccode_name (local.variable_type), local.name);
// as they might be used multiple times when declared in a loop
if (init) {
- var initializer = default_value_for_type (local.variable_type, false);
+ var initializer = default_value_for_type (local.variable_type, false, on_error);
if (initializer == null) {
cfile.add_include ("string.h");
var memset_call = new CCodeFunctionCall (new CCodeIdentifier ("memset"));
} else {
var cvar = new CCodeVariableDeclarator (local.name, null, get_ccode_declarator_suffix (local.variable_type));
if (init) {
- cvar.initializer = default_value_for_type (local.variable_type, true);
+ cvar.initializer = default_value_for_type (local.variable_type, true, on_error);
cvar.init0 = true;
}
ccode.add_declaration (get_ccode_name (local.variable_type), cvar);
return type;
}
- public CCodeExpression? default_value_for_type (DataType type, bool initializer_expression) {
+ public CCodeExpression? default_value_for_type (DataType type, bool initializer_expression, bool on_error = false) {
var st = type.data_type as Struct;
var array_type = type as ArrayType;
- if (type.data_type != null && !type.nullable && get_ccode_default_value (type.data_type) != "") {
- return new CCodeConstant (get_ccode_default_value (type.data_type));
+ if (type.data_type != null && !type.nullable
+ && (on_error ? get_ccode_default_value_on_error (type.data_type) : get_ccode_default_value (type.data_type)) != "") {
+ return new CCodeConstant (on_error ? get_ccode_default_value_on_error (type.data_type) : get_ccode_default_value (type.data_type));
} else if (initializer_expression && !type.nullable &&
(st != null || (array_type != null && array_type.fixed_length))) {
// 0-initialize struct with struct initializer { 0 }
cfile.add_function (function);
}
- public void return_default_value (DataType return_type) {
+ public void return_default_value (DataType return_type, bool on_error = false) {
var st = return_type.data_type as Struct;
if (st != null && st.is_simple_type () && !return_type.nullable) {
// 0-initialize struct with struct initializer { 0 }
// only allowed as initializer expression in C
var ret_temp_var = get_temp_variable (return_type, true, null, true);
- emit_temp_var (ret_temp_var);
+ emit_temp_var (ret_temp_var, on_error);
ccode.add_return (new CCodeIdentifier (ret_temp_var.name));
} else {
- ccode.add_return (default_value_for_type (return_type, false));
+ ccode.add_return (default_value_for_type (return_type, false, on_error));
}
}
[SimpleType]
[GIR (name = "gint")]
-[CCode (cname = "gint", cheader_filename = "glib.h", type_id = "G_TYPE_INT", marshaller_type_name = "INT", get_value_function = "g_value_get_int", set_value_function = "g_value_set_int", default_value = "0", type_signature = "i")]
+[CCode (cname = "gint", cheader_filename = "glib.h", type_id = "G_TYPE_INT", marshaller_type_name = "INT", get_value_function = "g_value_get_int", set_value_function = "g_value_set_int", default_value = "0", default_value_on_error = "-1", type_signature = "i")]
[IntegerType (rank = 6)]
public struct int {
[CCode (cname = "G_MININT")]
[SimpleType]
[GIR (name = "gshort")]
-[CCode (cname = "gshort", cheader_filename = "glib.h", type_id = "G_TYPE_INT", marshaller_type_name = "INT", get_value_function = "g_value_get_int", set_value_function = "g_value_set_int", default_value = "0", type_signature = "n")]
+[CCode (cname = "gshort", cheader_filename = "glib.h", type_id = "G_TYPE_INT", marshaller_type_name = "INT", get_value_function = "g_value_get_int", set_value_function = "g_value_set_int", default_value = "0", default_value_on_error = "-1", type_signature = "n")]
[IntegerType (rank = 4, min = -32768, max = 32767)]
public struct short {
[CCode (cname = "G_MINSHORT")]
[SimpleType]
[GIR (name = "glong")]
-[CCode (cname = "glong", cheader_filename = "glib.h", type_id = "G_TYPE_LONG", marshaller_type_name = "LONG", get_value_function = "g_value_get_long", set_value_function = "g_value_set_long", default_value = "0L")]
+[CCode (cname = "glong", cheader_filename = "glib.h", type_id = "G_TYPE_LONG", marshaller_type_name = "LONG", get_value_function = "g_value_get_long", set_value_function = "g_value_set_long", default_value = "0L", default_value_on_error = "-1L")]
[IntegerType (rank = 8)]
public struct long {
[CCode (cname = "G_MINLONG")]
[SimpleType]
[GIR (name = "glong")]
-[CCode (cname = "gssize", cheader_filename = "glib.h", type_id = "G_TYPE_LONG", marshaller_type_name = "LONG", get_value_function = "g_value_get_long", set_value_function = "g_value_set_long", default_value = "0L")]
+[CCode (cname = "gssize", cheader_filename = "glib.h", type_id = "G_TYPE_LONG", marshaller_type_name = "LONG", get_value_function = "g_value_get_long", set_value_function = "g_value_set_long", default_value = "0L", default_value_on_error = "-1L")]
[IntegerType (rank = 8)]
public struct ssize_t {
[Version (since = "2.14")]
[SimpleType]
[GIR (name = "gint8")]
-[CCode (cname = "gint8", cheader_filename = "glib.h", type_id = "G_TYPE_CHAR", marshaller_type_name = "CHAR", get_value_function = "g_value_get_char", set_value_function = "g_value_set_char", default_value = "0", type_signature = "y")]
+[CCode (cname = "gint8", cheader_filename = "glib.h", type_id = "G_TYPE_CHAR", marshaller_type_name = "CHAR", get_value_function = "g_value_get_char", set_value_function = "g_value_set_char", default_value = "0", default_value_on_error = "-1", type_signature = "y")]
[IntegerType (rank = 1, min = -128, max = 127)]
public struct int8 {
[Version (since = "2.4")]
[SimpleType]
[GIR (name = "gint16")]
-[CCode (cname = "gint16", cheader_filename = "glib.h", type_id = "G_TYPE_INT", marshaller_type_name = "INT", get_value_function = "g_value_get_int", set_value_function = "g_value_set_int", default_value = "0", type_signature = "n")]
+[CCode (cname = "gint16", cheader_filename = "glib.h", type_id = "G_TYPE_INT", marshaller_type_name = "INT", get_value_function = "g_value_get_int", set_value_function = "g_value_set_int", default_value = "0", default_value_on_error = "-1", type_signature = "n")]
[IntegerType (rank = 4, min = -32768, max = 32767)]
public struct int16 {
[Version (since = "2.4")]
[SimpleType]
[GIR (name = "gint32")]
-[CCode (cname = "gint32", cheader_filename = "glib.h", type_id = "G_TYPE_INT", marshaller_type_name = "INT", get_value_function = "g_value_get_int", set_value_function = "g_value_set_int", default_value = "0", type_signature = "i")]
+[CCode (cname = "gint32", cheader_filename = "glib.h", type_id = "G_TYPE_INT", marshaller_type_name = "INT", get_value_function = "g_value_get_int", set_value_function = "g_value_set_int", default_value = "0", default_value_on_error = "-1", type_signature = "i")]
[IntegerType (rank = 6)]
public struct int32 {
[Version (since = "2.4")]
[SimpleType]
[GIR (name = "gint64")]
-[CCode (cname = "gint64", cheader_filename = "glib.h", type_id = "G_TYPE_INT64", marshaller_type_name = "INT64", get_value_function = "g_value_get_int64", set_value_function = "g_value_set_int64", default_value = "0LL", type_signature = "x")]
+[CCode (cname = "gint64", cheader_filename = "glib.h", type_id = "G_TYPE_INT64", marshaller_type_name = "INT64", get_value_function = "g_value_get_int64", set_value_function = "g_value_set_int64", default_value = "0LL", default_value_on_error = "-1LL", type_signature = "x")]
[IntegerType (rank = 10)]
public struct int64 {
[CCode (cname = "G_MININT64")]
[SimpleType]
[GIR (name = "gfloat")]
-[CCode (cname = "gfloat", cheader_filename = "glib.h,float.h,math.h", type_id = "G_TYPE_FLOAT", marshaller_type_name = "FLOAT", get_value_function = "g_value_get_float", set_value_function = "g_value_set_float", default_value = "0.0F")]
+[CCode (cname = "gfloat", cheader_filename = "glib.h,float.h,math.h", type_id = "G_TYPE_FLOAT", marshaller_type_name = "FLOAT", get_value_function = "g_value_get_float", set_value_function = "g_value_set_float", default_value = "0.0F", default_value_on_error = "-1.0F")]
[FloatingType (rank = 1)]
public struct float {
[CCode (cname = "FLT_ROUNDS")]
[SimpleType]
[GIR (name = "gdouble")]
-[CCode (cname = "gdouble", cheader_filename = "glib.h,float.h,math.h", type_id = "G_TYPE_DOUBLE", marshaller_type_name = "DOUBLE", get_value_function = "g_value_get_double", set_value_function = "g_value_set_double", default_value = "0.0", type_signature = "d")]
+[CCode (cname = "gdouble", cheader_filename = "glib.h,float.h,math.h", type_id = "G_TYPE_DOUBLE", marshaller_type_name = "DOUBLE", get_value_function = "g_value_get_double", set_value_function = "g_value_set_double", default_value = "0.0", default_value_on_error = "-1.0", type_signature = "d")]
[FloatingType (rank = 2)]
public struct double {
[CCode (cname = "DBL_MANT_DIG")]