Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit77ba222

Browse files
author
andrewjkennedy
committed
Pickling of metadata for units: need to ensure that integer exponents are pickled in a form compatible with F# 3.x tools.
This is issuedotnet#69 on github.
1 parentc5e6699 commit77ba222

File tree

2 files changed

+37
-9
lines changed

2 files changed

+37
-9
lines changed

‎src/fsharp/pickle.fs‎

Lines changed: 35 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1411,15 +1411,41 @@ let u_trait st =
14111411
#if INCLUDE_METADATA_WRITER
14121412
letp_rational q st= p_int32(GetNumerator q) st; p_int32(GetDenominator q) st
14131413

1414-
let recp_measure_expr unt st=
1415-
letunt= 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+
letp_measurecon tcref st= p_byte0 st; p_tcref"measure" tcref st
1415+
letp_measurevar v st= p_byte3 st; p_tpref v st
1416+
1417+
letp_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 recp_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 recp_measure_power unt q st=
1430+
lets= SignRational qin
1431+
if s=0then p_byte4 st
1432+
elseif s<0then p_byte1 st; p_measure_power unt(NegRational q) st
1433+
elseif GetDenominator q=1then 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 recp_normalized_measure unt st=
1438+
letunt= 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+
letp_measure_expr unt st= p_normalized_measure(normalizeMeasure st.oglobals unt) st
1448+
14231449
#endif
14241450

14251451
letu_rational st=

‎src/fsharp/tastops.fsi‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -541,6 +541,8 @@ val ListMeasureConOccsWithNonZeroExponents : TcGlobals -> bool -> MeasureExpr ->
541541
valProdMeasures:MeasureExpr list->MeasureExpr
542542
valMeasureVarExponent:Typar->MeasureExpr->Rational
543543
valMeasureConExponent:TcGlobals->bool->TyconRef->MeasureExpr->Rational
544+
valnormalizeMeasure:TcGlobals->MeasureExpr->MeasureExpr
545+
544546

545547
//-------------------------------------------------------------------------
546548
// Members

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp