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)