asynchronous/yield.vala \
generics/constructor-chain-up.vala \
generics/inference-static-function.vala \
+ generics/parameter-sizeof-initializer.vala \
generics/bug640330.test \
generics/bug640330.vala \
generics/bug694765-1.vala \
--- /dev/null
+[Compact]
+class Foo<G> {
+ public Foo (ulong real_foo, ulong foo = sizeof (G)) {
+ assert (foo == real_foo);
+ }
+
+ public void bar (ulong real_foo, ulong foo = sizeof (G)) {
+ assert (foo == real_foo);
+ }
+}
+
+void main () {
+ {
+ var garray = new GLib.Array<uint32> ();
+ }
+ {
+ var foo = new Foo<uint32> (sizeof (uint32));
+ foo.bar (4);
+ }
+ {
+ var foo = new Foo<int16> (sizeof (int16));
+ foo.bar (2);
+ }
+ {
+ var foo = new Foo<uint8> (sizeof (uint8));
+ foo.bar (1);
+ }
+}
return false;
}
+ //Resolve possible generic-type in SizeofExpression used as parameter default-value
+ foreach (Expression arg in get_argument_list ()) {
+ unowned SizeofExpression sizeof_expr = arg as SizeofExpression;
+ if (sizeof_expr != null && sizeof_expr.type_reference is GenericType) {
+ var sizeof_type = sizeof_expr.type_reference.get_actual_type (target_object_type, method_type_args, this);
+ replace_expression (arg, new SizeofExpression (sizeof_type, source_reference));
+ }
+ }
+
/* Check for constructv chain up */
if (base_cm != null && base_cm.is_variadic () && args.size == base_cm.get_parameters ().size) {
var this_last_arg = args[args.size-1];
}
}
+ //Resolve possible generic-type in SizeofExpression used as parameter default-value
+ foreach (Expression arg in get_argument_list ()) {
+ unowned SizeofExpression sizeof_expr = arg as SizeofExpression;
+ if (sizeof_expr != null && sizeof_expr.type_reference is GenericType) {
+ var sizeof_type = sizeof_expr.type_reference.get_actual_type (type_reference, type_reference.get_type_arguments (), this);
+ replace_expression (arg, new SizeofExpression (sizeof_type, source_reference));
+ }
+ }
+
foreach (MemberInitializer init in get_object_initializer ()) {
context.analyzer.visit_member_initializer (init, type_reference);
}