nitlanguage
/
nit.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
typing: Make `TypeVisitor::anchor` non-nullable
[nit.git]
/
src
/
semantize
/
typing.nit
diff --git
a/src/semantize/typing.nit
b/src/semantize/typing.nit
index
9813284
..
1555050
100644
(file)
--- a/
src/semantize/typing.nit
+++ b/
src/semantize/typing.nit
@@
-40,13
+40,13
@@
private class TypeVisitor
# The static type of the receiver
# Mainly used for type tests and type resolutions
# The static type of the receiver
# Mainly used for type tests and type resolutions
- var anchor: nullable MClassType = null
+ var anchor: MClassType is noinit
# The analyzed mclassdef
# The analyzed mclassdef
- var mclassdef: nullable MClassDef = null
+ var mclassdef: MClassDef is noinit
# The analyzed property
# The analyzed property
- var mpropdef: nullable MPropDef
+ var mpropdef: MPropDef
var selfvariable = new Variable("self")
var selfvariable = new Variable("self")
@@
-59,33
+59,24
@@
private class TypeVisitor
init
do
var mpropdef = self.mpropdef
init
do
var mpropdef = self.mpropdef
+ var mclassdef = mpropdef.mclassdef
+ self.mclassdef = mclassdef
+ self.anchor = mclassdef.bound_mtype
- if mpropdef != null then
- self.mpropdef = mpropdef
- var mclassdef = mpropdef.mclassdef
- self.mclassdef = mclassdef
- self.anchor = mclassdef.bound_mtype
-
- var mclass = mclassdef.mclass
+ var mclass = mclassdef.mclass
- var selfvariable = new Variable("self")
- self.selfvariable = selfvariable
- selfvariable.declared_type = mclass.mclass_type
+ var selfvariable = new Variable("self")
+ self.selfvariable = selfvariable
+ selfvariable.declared_type = mclass.mclass_type
- var mprop = mpropdef.mproperty
- if mprop isa MMethod and mprop.is_new then
- is_toplevel_context = true
- end
+ var mprop = mpropdef.mproperty
+ if mprop isa MMethod and mprop.is_new then
+ is_toplevel_context = true
end
end
fun anchor_to(mtype: MType): MType
do
end
end
fun anchor_to(mtype: MType): MType
do
- var anchor = anchor
- if anchor == null then
- assert not mtype.need_anchor
- return mtype
- end
return mtype.anchor_to(mmodule, anchor)
end
return mtype.anchor_to(mmodule, anchor)
end
@@
-580,7
+571,16
@@
private class TypeVisitor
return mtypes.first
else
var res = merge_types(node,mtypes)
return mtypes.first
else
var res = merge_types(node,mtypes)
- if res == null then res = variable.declared_type
+ if res == null then
+ res = variable.declared_type
+ # Try to fallback to a non-null version
+ if res != null and can_be_null(res) then do
+ for t in mtypes do
+ if t != null and can_be_null(t) then break label
+ end
+ res = res.as_notnull
+ end label
+ end
return res
end
end
return res
end
end
@@
-736,7
+736,7
@@
end
class CallSite
super MEntity
class CallSite
super MEntity
- redef var location: Location
+ redef var location
# The static type of the receiver (possibly unresolved)
var recv: MType
# The static type of the receiver (possibly unresolved)
var recv: MType
@@
-781,11
+781,13
@@
class CallSite
fun dump_info(v: ASTDump): String do
return "{recv}.{mpropdef}{msignature}"
end
fun dump_info(v: ASTDump): String do
return "{recv}.{mpropdef}{msignature}"
end
+
+ redef fun mdoc_or_fallback do return mproperty.intro.mdoc
end
redef class Variable
# The declared type of the variable
end
redef class Variable
# The declared type of the variable
- var declared_type: nullable MType is writable
+ var declared_type: nullable MType = null is writable
# Was the variable type-adapted?
# This is used to speedup type retrieval while it remains `false`
# Was the variable type-adapted?
# This is used to speedup type retrieval while it remains `false`
@@
-2136,7
+2138,6
@@
redef class ASuperExpr
redef fun accept_typing(v)
do
var anchor = v.anchor
redef fun accept_typing(v)
do
var anchor = v.anchor
- assert anchor != null
var recvtype = v.get_variable(self, v.selfvariable)
assert recvtype != null
var mproperty = v.mpropdef.mproperty
var recvtype = v.get_variable(self, v.selfvariable)
assert recvtype != null
var mproperty = v.mpropdef.mproperty
@@
-2175,7
+2176,6
@@
redef class ASuperExpr
private fun process_superinit(v: TypeVisitor)
do
var anchor = v.anchor
private fun process_superinit(v: TypeVisitor)
do
var anchor = v.anchor
- assert anchor != null
var recvtype = v.get_variable(self, v.selfvariable)
assert recvtype != null
var mpropdef = v.mpropdef
var recvtype = v.get_variable(self, v.selfvariable)
assert recvtype != null
var mpropdef = v.mpropdef