generate_type_declaration (actual_type, cfile);
result = new CCodeCastExpression (cexpr, get_ccode_name (actual_type));
} else if (analyzer.is_signed_integer_type_argument (actual_type)) {
+ // FIXME this should not happen
+ while (cexpr is CCodeCastExpression) {
+ cexpr = ((CCodeCastExpression) cexpr).inner;
+ }
result = new CCodeCastExpression (new CCodeCastExpression (cexpr, "gintptr"), get_ccode_name (actual_type));
} else if (analyzer.is_unsigned_integer_type_argument (actual_type)) {
+ // FIXME this should not happen
+ while (cexpr is CCodeCastExpression) {
+ cexpr = ((CCodeCastExpression) cexpr).inner;
+ }
result = new CCodeCastExpression (new CCodeCastExpression (cexpr, "guintptr"), get_ccode_name (actual_type));
}
return result;
unowned SemanticAnalyzer analyzer = context.analyzer;
var result = cexpr;
if (analyzer.is_signed_integer_type_argument (actual_type)) {
+ // FIXME this should not happen
+ while (cexpr is CCodeCastExpression) {
+ cexpr = ((CCodeCastExpression) cexpr).inner;
+ }
result = new CCodeCastExpression (new CCodeCastExpression (cexpr, "gintptr"), get_ccode_name (pointer_type));
} else if (analyzer.is_unsigned_integer_type_argument (actual_type)) {
+ // FIXME this should not happen
+ while (cexpr is CCodeCastExpression) {
+ cexpr = ((CCodeCastExpression) cexpr).inner;
+ }
result = new CCodeCastExpression (new CCodeCastExpression (cexpr, "guintptr"), get_ccode_name (pointer_type));
}
return result;
generics/gvariant-serialization.test \
generics/inference-argument-may-fail.vala \
generics/inference-static-function.vala \
+ generics/integer-member-access.vala \
generics/integer-type-cast.vala \
generics/integer-type-cast-return.vala \
generics/parameter-invalid-initializer.test \
--- /dev/null
+class Foo<K,V> {
+ public K k;
+ public V v;
+}
+
+void main () {
+ var foo = new Foo<int,uint> ();
+ foo.k = int.MIN;
+ foo.v = uint.MAX;
+ assert (foo.k == int.MIN);
+ assert (foo.v == uint.MAX);
+
+ var bar = new Foo<int,uint> ();
+ bar.k = foo.k;
+ bar.v = foo.v;
+ assert (bar.k == int.MIN);
+ assert (bar.v == uint.MAX);
+}