X-Git-Url: http://nitlanguage.org diff --git a/src/modelize/modelize_property.nit b/src/modelize/modelize_property.nit index c0d3890..3243f96 100644 --- a/src/modelize/modelize_property.nit +++ b/src/modelize/modelize_property.nit @@ -196,7 +196,7 @@ redef class ModelBuilder for param in sig.mparameters do var ret_type = param.mtype - var mparameter = new MParameter(param.name, ret_type, false) + var mparameter = new MParameter(param.name, ret_type, false, ret_type isa MNullableType) mparameters.add(mparameter) end initializers.add(npropdef.mpropdef.mproperty) @@ -217,7 +217,7 @@ redef class ModelBuilder var paramname = npropdef.mpropdef.mproperty.name.substring_from(1) var ret_type = npropdef.mpropdef.static_mtype if ret_type == null then return - var mparameter = new MParameter(paramname, ret_type, false) + var mparameter = new MParameter(paramname, ret_type, false, ret_type isa MNullableType) mparameters.add(mparameter) var msetter = npropdef.mwritepropdef if msetter == null then @@ -286,7 +286,13 @@ redef class ModelBuilder 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) - mparameters.add_all sig.mparameters + # 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 else # TODO attributes? abort @@ -942,7 +948,13 @@ redef class AMethPropdef var mparameters = new Array[MParameter] for i in [0..param_names.length[ do - var mparameter = new MParameter(param_names[i], param_types[i], i == vararg_rank) + 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) if nsig != null then nsig.n_params[i].mparameter = mparameter mparameters.add(mparameter) end @@ -1322,7 +1334,7 @@ redef class AAttrPropdef if mwritepropdef != null then var name: String name = n_id2.text - var mparameter = new MParameter(name, mtype, false) + var mparameter = new MParameter(name, mtype, false, false) var msignature = new MSignature([mparameter], null) mwritepropdef.msignature = msignature end