1 # This file is part of NIT ( http://www.nitlanguage.org ).
3 # Copyright 2006-2008 Floréal Morandat <morandat@lirmm.fr>
4 # Copyright 2008 Jean Privat <jean@pryen.org>
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.
18 # Virtual type (property of type type)
23 redef class MMGlobalProperty
24 # Is self a virtual type
25 meth is_virtual_type
: Bool do return intro
isa MMTypeProperty
28 # Virtual type properties
30 special MMLocalProperty
31 redef meth inherit_to
(t
)
33 return new MMImplicitType(self, t
)
36 # Cached result of stype
37 attr _stype_cache
: MMVirtualType
39 # The virtual static type associated
40 meth stype
: MMVirtualType
42 # If the signature is not build: Circular definition
43 if signature
== null then return null
47 r
= new MMVirtualType(self)
55 # Select a virtual type property by its name
56 meth select_virtual_type
(name
: Symbol): MMTypeProperty
58 assert local_class
!= null
60 var res
= select_property
(local_class
.virtual_type
(name
))
61 assert res
isa MMTypeProperty
68 # The property associed
69 readable attr _property
: MMTypeProperty
71 protected init(p
: MMTypeProperty)
73 super(p
.name
, p
.signature
.return_type
)
77 redef meth for_module
(mod
)
79 var recv
= _property
.signature
.recv
.for_module
(mod
)
83 redef meth not_for_self
85 return bound
.not_for_self
88 redef meth adapt_to
(recv
)
90 # print "adapt {self} from {_property.signature.recv.module}::{_property.signature.recv} to {recv.module}::{recv}"
91 var prop
= recv
.select_property
(_property
.global
)
92 assert prop
isa MMTypeProperty
97 redef class MMLocalClass
98 meth virtual_type
(s
: Symbol): MMGlobalProperty
100 var prop
= get_property_by_name
(s
)
101 if prop
.is_virtual_type
then
109 special MMTypeProperty
110 special MMImplicitProperty