var ccomma = new CCodeCommaExpression ();
+ if (target_type.nullable) {
+ var newcall = new CCodeFunctionCall (new CCodeIdentifier ("g_new0"));
+ newcall.add_argument (new CCodeConstant ("GValue"));
+ newcall.add_argument (new CCodeConstant ("1"));
+ var newassignment = new CCodeAssignment (get_variable_cexpression (decl.name), newcall);
+ ccomma.append_expression (newassignment);
+ }
+
var ccall = new CCodeFunctionCall (new CCodeIdentifier ("g_value_init"));
- ccall.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, get_variable_cexpression (decl.name)));
+ if (target_type.nullable) {
+ ccall.add_argument (get_variable_cexpression (decl.name));
+ }
+ else {
+ ccall.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, get_variable_cexpression (decl.name)));
+ }
ccall.add_argument (new CCodeIdentifier (expression_type.get_type_id ()));
ccomma.append_expression (ccall);
ccall = new CCodeFunctionCall (get_value_setter_function (expression_type));
- ccall.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, get_variable_cexpression (decl.name)));
+ if (target_type.nullable) {
+ ccall.add_argument (get_variable_cexpression (decl.name));
+ }
+ else {
+ ccall.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, get_variable_cexpression (decl.name)));
+ }
ccall.add_argument (cexpr);
ccomma.append_expression (ccall);
--- /dev/null
+
+Program: test
+
+void test_value () {
+ Value v1 = 1;
+ assert (v1.get_int() == 1);
+
+ string s = "hello";
+ Value v2 = s;
+ assert (v2.get_string () == s);
+}
+
+void test_value_array () {
+ int[] iarray = {1,2,3,4,5};
+ Value[] viarray = {1,2,3,4,5};
+ assert (viarray.length == iarray.length);
+ for (int i = 0; i < viarray.length; i++) {
+ assert (viarray[i].get_int () == iarray[i]);
+ }
+
+ string[] sarray = { "hello", "vala", "world" };
+ Value[] vsarray = { "hello", "vala", "world" };
+ assert (vsarray.length == sarray.length);
+ for (int i = 0; i < vsarray.length; i++) {
+ assert (vsarray[i].get_string () == sarray[i]);
+ }
+}
+
+void test_nullable_value () {
+ Value? v1 = 1;
+ assert (v1.get_int() == 1);
+
+ string s = "hello";
+ Value? v2 = s;
+ assert (v2.get_string () == s);
+}
+
+void test_nullable_value_array () {
+ int[] iarray = {1,2,3,4,5};
+ Value?[] viarray = {1,2,3,4,5};
+ assert (viarray.length == iarray.length);
+ for (int i = 0; i < viarray.length; i++) {
+ assert (viarray[i].get_int () == iarray[i]);
+ }
+
+ string[] sarray = { "hello", "vala", "world" };
+ Value?[] vsarray = { "hello", "vala", "world" };
+ assert (vsarray.length == sarray.length);
+ for (int i = 0; i < vsarray.length; i++) {
+ assert (vsarray[i].get_string () == sarray[i]);
+ }
+}
+
+void main () {
+ test_value ();
+ test_value_array ();
+ test_nullable_value ();
+ test_nullable_value_array ();
+}