for param in sig.mparameters do
var ret_type = param.mtype
- var mparameter = new MParameter(param.name, ret_type, false, ret_type isa MNullableType)
+ var mparameter = new MParameter(param.name, ret_type, false)
mparameters.add(mparameter)
end
initializers.add(npropdef.mpropdef.mproperty)
var paramname = mreadpropdef.mproperty.name
var ret_type = mreadpropdef.msignature.return_mtype
if ret_type == null then return
- var mparameter = new MParameter(paramname, ret_type, false, ret_type isa MNullableType)
+ var mparameter = new MParameter(paramname, ret_type, false)
mparameters.add(mparameter)
var msetter = npropdef.mwritepropdef
if msetter == null then
if pd isa MMethodDef then
# Get the signature resolved for the current receiver
var sig = pd.msignature.resolve_for(mclassdef.mclass.mclass_type, mclassdef.bound_mtype, mclassdef.mmodule, false)
- # Because the last parameter of setters is never default, try to default them for the autoinit.
- for param in sig.mparameters do
- if not param.is_default and param.mtype isa MNullableType then
- param = new MParameter(param.name, param.mtype, param.is_vararg, true)
- end
- mparameters.add(param)
- end
+ mparameters.add_all(sig.mparameters)
else
# TODO attributes?
abort
var i = 0
for p in spd.initializers do
if p != longest.initializers[i] then
- self.error(nclassdef, "Error: conflict for inherited inits {spd}({spd.initializers.join(", ")}) and {longest}({longest.initializers.join(", ")})")
+ var proposal = new ArraySet[MProperty]
+ for spd2 in spropdefs do
+ proposal.add_all spd2.initializers
+ end
+ proposal.add_all initializers
+ self.error(nclassdef, "Error: cannot generate automatic init for class {mclassdef.mclass}. Conflict in the order in inherited initializers {spd}({spd.initializers.join(", ")}) and {longest}({longest.initializers.join(", ")}). Use `autoinit` to order initializers. eg `autoinit {proposal.join(", ")}`")
# TODO: invalidate the initializer to avoid more errors
return
end
var mparameters = new Array[MParameter]
for i in [0..param_names.length[ do
- var is_default = false
- if vararg_rank == -1 and param_types[i] isa MNullableType then
- if i < param_names.length-1 or accept_special_last_parameter then
- is_default = true
- end
- end
- var mparameter = new MParameter(param_names[i], param_types[i], i == vararg_rank, is_default)
+ var mparameter = new MParameter(param_names[i], param_types[i], i == vararg_rank)
if nsig != null then nsig.n_params[i].mparameter = mparameter
mparameters.add(mparameter)
end
if nexpr != null then
if nexpr isa ANewExpr then
mtype = modelbuilder.resolve_mtype_unchecked(mmodule, mclassdef, nexpr.n_type, true)
- else if nexpr isa AIntExpr then
- var cla = modelbuilder.try_get_mclass_by_name(nexpr, mmodule, "Int")
- if cla != null then mtype = cla.mclass_type
- else if nexpr isa AByteExpr then
- var cla = modelbuilder.try_get_mclass_by_name(nexpr, mmodule, "Byte")
+ else if nexpr isa AIntegerExpr then
+ var cla: nullable MClass = null
+ if nexpr.value isa Int then
+ cla = modelbuilder.try_get_mclass_by_name(nexpr, mmodule, "Int")
+ else if nexpr.value isa Byte then
+ cla = modelbuilder.try_get_mclass_by_name(nexpr, mmodule, "Byte")
+ else if nexpr.value isa Int8 then
+ cla = modelbuilder.try_get_mclass_by_name(nexpr, mmodule, "Int8")
+ else if nexpr.value isa Int16 then
+ cla = modelbuilder.try_get_mclass_by_name(nexpr, mmodule, "Int16")
+ else if nexpr.value isa UInt16 then
+ cla = modelbuilder.try_get_mclass_by_name(nexpr, mmodule, "UInt16")
+ else if nexpr.value isa Int32 then
+ cla = modelbuilder.try_get_mclass_by_name(nexpr, mmodule, "Int32")
+ else if nexpr.value isa UInt32 then
+ cla = modelbuilder.try_get_mclass_by_name(nexpr, mmodule, "UInt32")
+ else
+ # Should not happen, and should be updated as new types are added
+ abort
+ end
if cla != null then mtype = cla.mclass_type
else if nexpr isa AFloatExpr then
var cla = modelbuilder.try_get_mclass_by_name(nexpr, mmodule, "Float")
if mwritepropdef != null then
var name: String
name = n_id2.text
- var mparameter = new MParameter(name, mtype, false, false)
+ var mparameter = new MParameter(name, mtype, false)
var msignature = new MSignature([mparameter], null)
mwritepropdef.msignature = msignature
end