nitc :: NeoModel :: to_mpropdef
MPropDef
from a node
.REQUIRE node.labels.has("MPropDef")
# Build a new `MPropDef` from a `node`.
#
# REQUIRE `node.labels.has("MPropDef")`
private fun to_mpropdef(model: Model, node: NeoNode): MPropDef do
var m = mentities.get_or_null(node.id.as(Int))
if m isa MPropDef then return m
assert node.labels.has("MPropDef")
var mclassdef = to_mclassdef(model, node.in_nodes("DECLARES").first)
var mproperty = to_mproperty(model, node.out_nodes("DEFINES").first)
var location = to_location(node["location"].to_s)
var mpropdef: nullable MPropDef = null
if node.labels.has("MMethodDef") then
mpropdef = new MMethodDef(mclassdef, mproperty.as(MMethod), location)
mpropdef.is_abstract = node["is_abstract"].as(Bool)
mpropdef.is_intern = node["is_intern"].as(Bool)
mpropdef.is_extern = node["is_extern"].as(Bool)
mentities[node.id.as(Int)] = mpropdef
mpropdef.msignature = to_mtype(model, node.out_nodes("SIGNATURE").first).as(MSignature)
else if node.labels.has("MAttributeDef") then
mpropdef = new MAttributeDef(mclassdef, mproperty.as(MAttribute), location)
mentities[node.id.as(Int)] = mpropdef
var static_mtype = node.out_nodes("TYPE")
if not static_mtype.is_empty then mpropdef.static_mtype = to_mtype(model, static_mtype.first)
else if node.labels.has("MVirtualTypeDef") then
mpropdef = new MVirtualTypeDef(mclassdef, mproperty.as(MVirtualTypeProp), location)
mentities[node.id.as(Int)] = mpropdef
var bound = node.out_nodes("BOUND")
if not bound.is_empty then mpropdef.bound = to_mtype(model, bound.first)
else if node.labels.has("MInnerClassDef") then
var inner = to_mclassdef(model, node.out_nodes("NESTS").first)
mpropdef = new MInnerClassDef(mclassdef,
mproperty.as(MInnerClass), location, inner)
mentities[node.id.as(Int)] = mpropdef
end
if mpropdef == null then
print "not yet implemented to_mpropdef for {node.labels.join(",")}"
abort
end
set_doc(node, mpropdef)
return mpropdef
end
src/neo.nit:489,2--530,4