nitlanguage
/
nit.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
separate_compiler: Write errors to stderr
[nit.git]
/
src
/
nitni
/
nitni_callbacks.nit
diff --git
a/src/nitni/nitni_callbacks.nit
b/src/nitni/nitni_callbacks.nit
index
cb75bc8
..
823f624
100644
(file)
--- a/
src/nitni/nitni_callbacks.nit
+++ b/
src/nitni/nitni_callbacks.nit
@@
-33,7
+33,10
@@
class VerifyNitniCallbacksPhase
redef fun process_npropdef(npropdef)
do
redef fun process_npropdef(npropdef)
do
- if not npropdef isa AExternPropdef then return
+ if not npropdef isa AMethPropdef then return
+ var mpropdef = npropdef.mpropdef
+ if mpropdef == null then return
+ if not mpropdef.is_extern then return
npropdef.verify_nitni_callbacks(toolcontext)
end
npropdef.verify_nitni_callbacks(toolcontext)
end
@@
-80,7
+83,7
@@
class ForeignCallbackSet
end
end
end
end
-redef class AExternPropdef
+redef class AMethPropdef
private var foreign_callbacks_cache: nullable ForeignCallbackSet = null
# All foreign callbacks from this method
private var foreign_callbacks_cache: nullable ForeignCallbackSet = null
# All foreign callbacks from this method
@@
-108,7
+111,7
@@
redef class AExternPropdef
# return type
var rmt = mpropdef.msignature.return_mtype
if rmt != null then
# return type
var rmt = mpropdef.msignature.return_mtype
if rmt != null then
- if rmt isa MParameterType or rmt isa MVirtualType then
+ if rmt isa MFormalType then
var mclass_type = mpropdef.mclassdef.bound_mtype
rmt = rmt.anchor_to(mmodule, mclass_type)
end
var mclass_type = mpropdef.mclassdef.bound_mtype
rmt = rmt.anchor_to(mmodule, mclass_type)
end
@@
-119,7
+122,7
@@
redef class AExternPropdef
# params
for p in mpropdef.msignature.mparameters do
var mtype = p.mtype.resolve_for(recv_type, recv_type, mmodule, true)
# params
for p in mpropdef.msignature.mparameters do
var mtype = p.mtype.resolve_for(recv_type, recv_type, mmodule, true)
- if mtype isa MParameterType or mtype isa MVirtualType then
+ if mtype isa MFormalType then
var mclass_type = mpropdef.mclassdef.bound_mtype
mtype = mtype.anchor_to(mmodule, mclass_type)
end
var mclass_type = mpropdef.mclassdef.bound_mtype
mtype = mtype.anchor_to(mmodule, mclass_type)
end
@@
-139,6
+142,8
@@
redef class AExternPropdef
redef fun accept_rapid_type_visitor(v)
do
redef fun accept_rapid_type_visitor(v)
do
+ if foreign_callbacks_cache == null then return
+
for cb in foreign_callbacks.callbacks do v.add_send(cb.recv_mtype, cb.mproperty.as(MMethod))
for cast in foreign_callbacks.casts do v.add_cast_type(cast.to)
for sup in foreign_callbacks.supers do
for cb in foreign_callbacks.callbacks do v.add_send(cb.recv_mtype, cb.mproperty.as(MMethod))
for cast in foreign_callbacks.casts do v.add_cast_type(cast.to)
for sup in foreign_callbacks.supers do
@@
-282,7
+287,7
@@
redef class ALocalPropExternCall
mmodule, mclass_type, m_name )
if method == null then
mmodule, mclass_type, m_name )
if method == null then
- toolcontext.error(location, "Local method {m_name} not found.")
+ toolcontext.error(location, "Error: local method `{m_name}` not found.")
return
end
return
end
@@
-303,12
+308,12
@@
redef class AFullPropExternCall
if mtype == null then return
if mtype == null then return
- if mtype isa MParameterType or mtype isa MVirtualType then
+ if mtype isa MFormalType then
mtype = mtype.anchor_to(mmodule, mclass_type)
end
if mtype isa MNullableType then
mtype = mtype.anchor_to(mmodule, mclass_type)
end
if mtype isa MNullableType then
- toolcontext.error(location, "Type {n_type.collect_text} is nullable and thus cannot be the receiver." )
+ toolcontext.error(location, "Error: type `{n_type.collect_text}` is nullable and thus cannot be the receiver." )
return
end
return
end
@@
-317,7
+322,7
@@
redef class AFullPropExternCall
mmodule, mtype, m_name )
if method == null then
mmodule, mtype, m_name )
if method == null then
- toolcontext.error(location, "Method {m_name} not found in {n_type.collect_text}." )
+ toolcontext.error(location, "Error: method `{m_name}` not found in `{n_type.collect_text}`." )
return
end
return
end
@@
-336,16
+341,22
@@
redef class AInitPropExternCall
if mtype == null then return
if not mtype isa MClassType then
if mtype == null then return
if not mtype isa MClassType then
- toolcontext.error(location, "Type {n_type.collect_text} is not a class and thus cannot be used to instanciate a new instance." )
+ toolcontext.error(location, "Error: type `{n_type.collect_text}` is not a class and thus cannot be used to instantiate a new instance." )
return
end
return
end
- var meth_name = "init"
+ var meth_name = "new"
var meth = toolcontext.modelbuilder.try_get_mproperty_by_name2( self,
mmodule, mtype, meth_name )
if meth == null then
var meth = toolcontext.modelbuilder.try_get_mproperty_by_name2( self,
mmodule, mtype, meth_name )
if meth == null then
- toolcontext.error(location, "Method {meth_name} not found in {n_type.collect_text}." )
+ meth_name = "init"
+ meth = toolcontext.modelbuilder.try_get_mproperty_by_name2( self,
+ mmodule, mtype, meth_name )
+ end
+
+ if meth == null then
+ toolcontext.error(location, "Error: method `{meth_name}` not found in `{n_type.collect_text}`." )
return
end
return
end
@@
-411,7
+422,7
@@
redef class AAsNotNullableExternCall
redef fun from_mtype do return n_type.mtype.as_nullable
redef fun to_mtype do
var mtype = n_type.mtype.as(not null)
redef fun from_mtype do return n_type.mtype.as_nullable
redef fun to_mtype do
var mtype = n_type.mtype.as(not null)
- mtype = mtype.as_notnullable
+ mtype = mtype.undecorate
return mtype
end
return mtype
end