update NOTICE and LICENSE
[nit.git] / tests / base_var_type_evolution_null.nit
1 # This file is part of NIT ( http://www.nitlanguage.org ).
2 #
3 # Copyright 2010 Jean Privat <jean@pryen.org>
4 #
5 # Licensed under the Apache License, Version 2.0 (the "License");
6 # you may not use this file except in compliance with the License.
7 # You may obtain a copy of the License at
8 #
9 # http://www.apache.org/licenses/LICENSE-2.0
10 #
11 # Unless required by applicable law or agreed to in writing, software
12 # distributed under the License is distributed on an "AS IS" BASIS,
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 # See the License for the specific language governing permissions and
15 # limitations under the License.
16
17 import kernel
18
19 class A
20 end
21
22 class B
23 super A
24 end
25
26 fun rand: Bool do return true
27
28 fun eat_na(a: nullable A) do 'a'.output
29 fun eat_a(a: A) do 'A'.output
30 fun eat_nb(b: nullable B) do 'b'.output
31 fun eat_b(b: B) do 'B'.output
32
33 var a: nullable Object = null
34 a = new B
35 if rand then
36 a = null #!alt1#
37 #alt2#a = new A
38 #alt3#a = new B
39 end
40 eat_na(a)
41 #alt2#eat_a(a)
42 eat_nb(a)
43 #alt1#eat_b(a)
44 #alt3#eat_b(a)
45 #alt4#eat_b(a)
46 '\n'.output
47
48 # a is 'nullable B' here
49 if rand then
50 a = new A
51 end
52 eat_na(a)
53 #alt5#eat_a(a)
54 #alt6#eat_nb(a)
55 '\n'.output
56 # a is 'nullable A' here
57
58 if rand then
59 a = new B
60 else
61 a = new B
62 #alt7#a = new A
63 end
64 eat_b(a)
65 '\n'.output
66