Motivation:
PropDef.adjusted() is extremely central to all customization code and we need to keep a thorough lookout for any trouble. If any trouble arises, the following debug-tools have been prepared:
adjusted() remains in PropDef as deprecated_adjusted().private const bool dbg_trace_put = true;PropObj has a deprecated_put()PropObj has a compare_put() which runs both new and old versions to pinpoint what potentially differsuse cm.props, cm.subset, cm.basic; private class T1 extends PropObj { public props { double "w" v=0.2 : domain=DoubleEnum(0.2, 0.4); distance "d" v=0.3 : domain=DistanceEnum(0.3, 0.5); distance "e" v=distance(0.3) : domain=DistanceEnum(0.3, 0.5); } } { T1 z(); pln(#z."w"); z."w" = 1; // uses the new PropDef adjusted which allows us to widen Int(1) -> double PropDef field pln(#z."w"); pln(#z."w".class); } output: z."w"=0.2 z."w"=1 z."w".class=Double { T1 z(); pln(#z."w"); z.deprecated_put("w", 1); // same behavior as in 10.5 pln(#z."w"); pln(#z."w".class); } output: z."w"=0.2 PropDef(double w [ reg boxClass=Double]).depr_adj() null value or wrong boxClass double=1.Int, pType.boxClass=Double z."w"=0.2 z."w".class=Double
Upgraded error reporting
{
T1 z();
pln(#z."w");
z."w" = "ddd"; // "w" is a double field
}
output:
z."w"=0.2
PropDef(double w [ reg boxClass=Double]).adjusted() value type mismatch: double=ddd.Str
Extended tracing and compare put
cm.props propDef.cm private const bool dbg_trace_put = true;
{
T1 z();
pln(#z."w");
z."w" = 1;
pln(z.compare_put("w", "dd"));
}
output:
z."w"=0.2
compare_put:
new
PropDef(double w [ reg boxClass=Double]).adjusted() value type mismatch: double=dd.Str
old
PropDef(double w [ reg boxClass=Double]).depr_adj() null value or wrong boxClass double=dd.Str, pType.boxClass=Double
new=dd
OLD=dd
<dd, dd>
{
T1 z();
pln(#z."w");
z."w" = 1;
pln(z.compare_put("w", Byte(2)));
}
output:
z."w"=0.2
compare_put:
new
old
PropDef(double w [ reg boxClass=Double]).depr_adj() null value or wrong boxClass double=2.Byte, pType.boxClass=Double
new=2
OLD=2
<2, 2>
If you wish to add your own widening conversions to PropDef.put(), please contact dev support.
Supported widening conversions
private Object angleF_sangleF_widener(Object z) private Object angleF_sangleF_widener(Object z) private Object angle_orientation_widener(Object z) private Object angle_orientation_widener(Object z) private Object angle_sangle_widener(Object z) private Object angle_sangle_widener(Object z) private Object byte_double_widener(Object z) private Object byte_double_widener(Object z) private Object byte_float_widener(Object z) private Object byte_float_widener(Object z) private Object byte_int16_widener(Object z) private Object byte_int16_widener(Object z) private Object byte_int64_widener(Object z) private Object byte_int64_widener(Object z) private Object byte_int_widener(Object z) private Object byte_int_widener(Object z) private Object byte_nat64_widener(Object z) private Object byte_nat64_widener(Object z) private Object byte_nat_widener(Object z) private Object byte_nat_widener(Object z) private Object byte_word_widener(Object z) private Object byte_word_widener(Object z) private Object color_colorF_widener(Object z) private Object color_colorF_widener(Object z) private Object distance_double_widener(Object z) private Object distance_double_widener(Object z) private Object float_double_widener(Object z) private Object float_double_widener(Object z) private Object int16_double_widener(Object z) private Object int16_double_widener(Object z) private Object int16_float_widener(Object z) private Object int16_float_widener(Object z) private Object int16_int64_widener(Object z) private Object int16_int64_widener(Object z) private Object int16_int_widener(Object z) private Object int16_int_widener(Object z) private Object int16_nat64_widener(Object z) private Object int16_nat64_widener(Object z) private Object int64_double_widener(Object z) private Object int64_double_widener(Object z) private Object int8_double_widener(Object z) private Object int8_double_widener(Object z) private Object int8_float_widener(Object z) private Object int8_float_widener(Object z) private Object int8_int16_widener(Object z) private Object int8_int16_widener(Object z) private Object int8_int64_widener(Object z) private Object int8_int64_widener(Object z) private Object int8_int_widener(Object z) private Object int8_int_widener(Object z) private Object int8_nat64_widener(Object z) private Object int8_nat64_widener(Object z) private Object int_double_widener(Object z) private Object int_double_widener(Object z) private Object int_float_widener(Object z) private Object int_float_widener(Object z) private Object int_int64_widener(Object z) private Object int_int64_widener(Object z) private Object int_nat64_widener(Object z) private Object int_nat64_widener(Object z) private Object nat_double_widener(Object z) private Object nat_double_widener(Object z) private Object nat_float_widener(Object z) private Object nat_float_widener(Object z) private Object nat_int64_widener(Object z) private Object nat_int64_widener(Object z) private Object nat_nat64_widener(Object z) private Object nat_nat64_widener(Object z) private Object point2D_rect_widener(Object z) private Object point2D_rect_widener(Object z) private Object point2D_size2D_widener(Object z) private Object point2D_size2D_widener(Object z) private Object pointI_point2D_widener(Object z) private Object pointI_point2D_widener(Object z) private Object pointI_rect_widener(Object z) private Object pointI_rect_widener(Object z) private Object pointI_size2D_widener(Object z) private Object pointI_size2D_widener(Object z) private Object point_colorF_widener(Object z) private Object point_colorF_widener(Object z) private Object point_color_widener(Object z) private Object point_color_widener(Object z) private Object point_version_widener(Object z) private Object point_version_widener(Object z) private Object rangeI_range_widener(Object z) private Object rangeI_range_widener(Object z) private Object size2D_rect_widener(Object z) private Object size2D_rect_widener(Object z) private Object word_double_widener(Object z) private Object word_double_widener(Object z) private Object word_float_widener(Object z) private Object word_float_widener(Object z) private Object word_int64_widener(Object z) private Object word_int64_widener(Object z) private Object word_int_widener(Object z) private Object word_int_widener(Object z) private Object word_nat64_widener(Object z) private Object word_nat64_widener(Object z) private Object word_nat_widener(Object z) private Object word_nat_widener(Object z)