1 # This file is part of NIT ( http://www.nitlanguage.org ).
3 # Copyright 2004-2008 Jean Privat <jean@pryen.org>
4 # Copyright 2006-2008 Floréal Morandat <morandat@lirmm.fr>
6 # Licensed under the Apache License, Version 2.0 (the "License");
7 # you may not use this file except in compliance with the License.
8 # You may obtain a copy of the License at
10 # http://www.apache.org/licenses/LICENSE-2.0
12 # Unless required by applicable law or agreed to in writing, software
13 # distributed under the License is distributed on an "AS IS" BASIS,
14 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 # See the License for the specific language governing permissions and
16 # limitations under the License.
24 # The type a indirect type refers to
25 fun direct_type
: MMType do return self
27 fun has_formal
: Bool do return false
30 # Formal types are named indirect types
31 abstract class MMTypeFormal
33 redef fun is_valid
do return _bound
!= null and _bound
.is_valid
35 # The name of the type
36 readable var _name
: Symbol
39 fun bound
: MMType do return _bound
.as(not null)
40 var _bound
: nullable MMType
42 redef fun <(t
) do return t
== self or t
.is_supertype
(bound
)
43 redef fun is_supertype
(t
) do return _bound
.is_supertype
(t
)
44 redef fun is_nullable
do return _bound
.is_nullable
45 redef fun direct_type
do return _bound
.direct_type
46 redef fun local_class
do return _bound
.local_class
47 redef fun has_formal
do return true
49 redef fun to_s
do return _name
.to_s
51 protected init(name
: Symbol, bound
: nullable MMType)
58 redef class MMNullableType
59 redef fun has_formal
do return self.base_type
.has_formal