@@ -1411,15 +1411,41 @@ let u_trait st =
14111411#if INCLUDE_ METADATA_ WRITER
14121412let p_rational q st = p_ int32( GetNumerator q) st; p_ int32( GetDenominator q) st
14131413
1414- let rec p_measure_expr unt st =
1415- let unt = stripUnitEqnsAuxfalse unt
1416- match untwith
1417- | MeasureCon tcref-> p_ byte0 st; p_ tcref" measure" tcref st
1418- | MeasureInv x-> p_ byte1 st; p_ measure_ expr x st
1419- | MeasureProd( x1, x2) -> p_ byte2 st; p_ measure_ expr x1 st; p_ measure_ expr x2 st
1420- | MeasureVar( v) -> p_ byte3 st; p_ tpref v st
1421- | MeasureOne-> p_ byte4 st
1422- | MeasureRationalPower( x, q) -> p_ byte5 st; p_ measure_ expr x st; p_ rational q st
1414+ let p_measurecon tcref st = p_ byte0 st; p_ tcref" measure" tcref st
1415+ let p_measurevar v st = p_ byte3 st; p_ tpref v st
1416+
1417+ let p_measure_varcon unt st =
1418+ match untwith
1419+ | MeasureCon tcref-> p_ measurecon tcref st
1420+ | MeasureVar v-> p_ measurevar v st
1421+ | _ -> pfailwith st( " p_measure_varcon: expected measure variable or constructor" )
1422+
1423+ let rec p_measure_intpower unt n st =
1424+ match nwith
1425+ | 0 -> p_ byte4 st
1426+ | 1 -> p_ measure_ varcon unt st
1427+ | _ -> p_ byte2 st; p_ measure_ varcon unt st; p_ measure_ intpower unt( n-1 ) st
1428+
1429+ let rec p_measure_power unt q st =
1430+ let s = SignRational qin
1431+ if s= 0 then p_ byte4 st
1432+ else if s< 0 then p_ byte1 st; p_ measure_ power unt( NegRational q) st
1433+ else if GetDenominator q= 1 then p_ measure_ intpower unt( GetNumerator q) st
1434+ else p_ byte5 st; p_ measure_ varcon unt st; p_ rational q st
1435+
1436+
1437+ let rec p_normalized_measure unt st =
1438+ let unt = stripUnitEqnsAuxfalse unt
1439+ match untwith
1440+ | MeasureCon tcref-> p_ measurecon tcref st
1441+ | MeasureInv x-> p_ byte1 st; p_ normalized_ measure x st
1442+ | MeasureProd( x1, x2) -> p_ byte2 st; p_ normalized_ measure x1 st; p_ normalized_ measure x2 st
1443+ | MeasureVar v-> p_ measurevar v st
1444+ | MeasureOne-> p_ byte4 st
1445+ | MeasureRationalPower( x, q) -> p_ measure_ power x q st
1446+
1447+ let p_measure_expr unt st = p_ normalized_ measure( normalizeMeasure st.oglobals unt) st
1448+
14231449#endif
14241450
14251451let u_rational st =