File: casting.vala

package info (click to toggle)
vala 0.56.18-2
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 57,468 kB
  • sloc: ansic: 581,293; sh: 5,334; makefile: 3,946; xml: 3,161; yacc: 1,219; lex: 374; javascript: 23
file content (90 lines) | stat: -rw-r--r-- 1,562 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
delegate void FooFunc ();

[CCode (has_target = false)]
delegate void FooFuncTargetless ();

class Foo : Object {
	public Foo () {
		baz (func);
		assert (ref_count == 1);

		bar (func);
		assert (ref_count == 1);

		baz ((FooFunc) func);
		assert (ref_count == 1);

		bar ((FooFunc) func);
		assert (ref_count == 1);

		man ((FooFuncTargetless) func);
		assert (ref_count == 1);

		maz ((FooFuncTargetless) func);
		assert (ref_count == 1);
	}

	public void func () {
	}

	void baz (FooFunc f) {
		assert (ref_count == 1);
	}

	void bar (owned FooFunc f) {
		assert (ref_count == 2);
	}

	void man (FooFuncTargetless f) {
		assert (ref_count == 1);
	}

	void maz (owned FooFuncTargetless f) {
		assert (ref_count == 1);
	}
}

void func () {
}

void main () {
	var foo = new Foo ();
	assert (foo.ref_count == 1);

	FooFunc f0 = foo.func;
	assert (foo.ref_count == 2);
	f0 = null;
	assert (foo.ref_count == 1);

	var f1 = (FooFunc) foo.func;
	assert (foo.ref_count == 2);
	f1 = null;
	assert (foo.ref_count == 1);

	unowned FooFunc f2 = foo.func;
	assert (foo.ref_count == 1);
	f2 = null;
	assert (foo.ref_count == 1);

	unowned FooFunc f3 = (FooFunc) foo.func;
	assert (foo.ref_count == 1);
	f3 = null;
	assert (foo.ref_count == 1);

	var f4 = (FooFuncTargetless) foo.func;
	assert (foo.ref_count == 1);
	f4 = null;
	assert (foo.ref_count == 1);

	FooFuncTargetless f5 = func;
	f5 = null;

	var f6 = (FooFuncTargetless) func;
	f6 = null;

	unowned FooFuncTargetless f7 = func;
	f7 = null;

	unowned FooFuncTargetless f8 = (FooFuncTargetless) func;
	f8 = null;
}