Skip to content

Commit b61fa89

Browse files
committed
Rename TApp -> TStrCat, implement TNumToStr
1 parent 4b9e944 commit b61fa89

File tree

11 files changed

+64
-17
lines changed

11 files changed

+64
-17
lines changed

src/Libraries/Base1/Prelude.bs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ package Prelude(
77
PrimParam(..), PrimPort(..),
88
Bit, Rules, Module, Integer, Real, String, Char, SizeOf, Id__,
99
PrimAction, ActionValue, Action, ActionValue_, ActionWorld, AVStruct,
10-
TAdd, TSub, TMul, TDiv, TLog, TExp, TMax, TMin, TApp,
10+
TAdd, TSub, TMul, TDiv, TLog, TExp, TMax, TMin, TStrCat, TNumToStr,
1111
Nat(..),
1212
IsModule(..), addModuleRules, addRules,
1313

@@ -2772,7 +2772,8 @@ primitive type TExp :: # -> #
27722772
primitive type TMax :: # -> # -> #
27732773
primitive type TMin :: # -> # -> #
27742774

2775-
primitive type TApp :: $ -> $ -> $
2775+
primitive type TStrCat :: $ -> $ -> $
2776+
primitive type TNumToStr :: # -> $
27762777

27772778
------------------
27782779

src/comp/CType.hs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,8 @@ import Position
6666
import Id
6767
import IdPrint
6868
import PreIds(idArrow, idPrimPair, idPrimUnit, idBit, idString,
69-
idPrimAction, idAction, idActionValue_, idActionValue
69+
idPrimAction, idAction, idActionValue_, idActionValue,
70+
idTNumToStr
7071
{-, idSizeOf -})
7172
import Util(itos)
7273
import ErrorUtil
@@ -511,6 +512,9 @@ normTAp (TAp (TCon (TyCon op _ _)) (TCon (TyStr x xpos))) (TCon (TyStr y ypos))
511512
| isJust (res) = cTStr (fromJust res) (getPosition op)
512513
where res = opStrT op [x, y]
513514

515+
normTAp (TCon (TyCon op _ _)) (TCon (TyNum x xpos))
516+
| op == idTNumToStr = cTStr (mkNumFString x) (getPosition op)
517+
514518
normTAp f a = TAp f a
515519

516520
getTypeKind :: Type -> Maybe Kind

src/comp/ISyntax.hs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ import Eval
9393
import Id
9494
import Wires(ResetId, ClockDomain, ClockId, noClockId, noResetId, noDefaultClockId, noDefaultResetId, WireProps)
9595
import IdPrint
96-
import PreIds(idSizeOf, idId, idBind, idReturn, idPack, idUnpack, idMonad, idLiftModule, idBit, idFromInteger)
96+
import PreIds(idSizeOf, idId, idBind, idReturn, idPack, idUnpack, idMonad, idLiftModule, idBit, idFromInteger, idTNumToStr)
9797
import Backend
9898
import Prim(PrimOp(..))
9999
import TypeOps
@@ -105,6 +105,7 @@ import Pragma(Pragma, PProp, RulePragma, ISchedulePragma,
105105
extractSchedPragmaIds, removeSchedPragmaIds, mapSPIds)
106106
import Position
107107
import Data.Maybe
108+
import FStringCompat(mkNumFString)
108109

109110
import qualified Data.Set as S
110111
import Flags
@@ -428,6 +429,8 @@ normITAp (ITCon op _ _) (ITNum x) | isJust (res) =
428429
normITAp (ITAp (ITCon op _ _) (ITStr x)) (ITStr y) | isJust (res) =
429430
ITStr (fromJust res)
430431
where res = opStrT op [x, y]
432+
normITAp (ITCon op _ _) (ITNum x) | op == idTNumToStr =
433+
ITStr (mkNumFString x)
431434

432435
normITAp f@(ITCon op _ _) a | op == idSizeOf && notVar a =
433436
-- trace ("normITAp: " ++ ppReadable (ITAp f a)) $

src/comp/PreIds.hs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ idPrimSnd = prelude_id_no fsPrimSnd
8181
idPrimPair = prelude_id_no fsPrimPair
8282
idFalse = prelude_id_no fsFalse
8383
idTrue = prelude_id_no fsTrue
84-
idSizeOf, idTAdd, idTSub, idTMul, idTDiv, idTLog, idTExp, idTMax, idTMin, idTApp :: Id
84+
idSizeOf, idTAdd, idTSub, idTMul, idTDiv, idTLog, idTExp, idTMax, idTMin :: Id
8585
idSizeOf = prelude_id_no fsSizeOf
8686
idTAdd = prelude_id_no fsTAdd
8787
idTSub = prelude_id_no fsTSub
@@ -91,7 +91,9 @@ idTLog = prelude_id_no fsTLog
9191
idTExp = prelude_id_no fsTExp
9292
idTMax = prelude_id_no fsTMax
9393
idTMin = prelude_id_no fsTMin
94-
idTApp = prelude_id_no fsTApp
94+
idTStrCat, idTNumToStr :: Id
95+
idTStrCat = prelude_id_no fsTStrCat
96+
idTNumToStr = prelude_id_no fsTNumToStr
9597
idAction, idPrimAction, idToPrimAction, idFromPrimAction :: Id
9698
idAction = prelude_id_no fsAction
9799
idPrimAction = prelude_id_no fsPrimAction

src/comp/PreStrings.hs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,8 @@ fsTLog = mkFString "TLog"
279279
fsTExp = mkFString "TExp"
280280
fsTMax = mkFString "TMax"
281281
fsTMin = mkFString "TMin"
282-
fsTApp = mkFString "TApp"
282+
fsTStrCat = mkFString "TStrCat"
283+
fsTNumToStr = mkFString "TNumToStr"
283284
fsStaticAssert = mkFString "staticAssert"
284285
fsDynamicAssert = mkFString "dynamicAssert"
285286
fsContinuousAssert = mkFString "continuousAssert"

src/comp/TypeOps.hs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ module TypeOps(opNumT, numOpNames, opStrT, strOpNames) where
22
-- common routines for handling numeric and string types
33

44
import Id
5-
import PreIds(idTAdd, idTSub, idTMul, idTDiv, idTLog, idTExp, idTMax, idTMin, idTApp)
5+
import PreIds(idTAdd, idTSub, idTMul, idTDiv, idTLog, idTExp, idTMax, idTMin, idTStrCat, idTNumToStr)
66
import Util(divC, log2)
77
import FStringCompat(FString, concatFString)
88

@@ -21,11 +21,11 @@ opNumT i [x, y] | i == idTMin = Just (min x y)
2121
opNumT _ _ = Nothing
2222

2323
numOpNames :: [Id]
24-
numOpNames = [idTAdd, idTSub, idTMul, idTDiv, idTExp, idTLog, idTMax, idTMin]
24+
numOpNames = [idTAdd, idTSub, idTMul, idTDiv, idTExp, idTLog, idTMax, idTMin, idTNumToStr]
2525

2626
opStrT :: Id -> [FString] -> Maybe FString
27-
opStrT i xs | i == idTApp = Just $ concatFString xs
27+
opStrT i xs | i == idTStrCat = Just $ concatFString xs
2828
opStrT _ _ = Nothing
2929

3030
strOpNames :: [Id]
31-
strOpNames = [idTApp]
31+
strOpNames = [idTStrCat]
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package TNumToStr where
2+
3+
data (WrapStr :: $ -> *) s = WrapStr
4+
data (WrapNum :: # -> *) s = WrapNum
5+
6+
printWrapStr :: WrapStr s -> Action
7+
printWrapStr _ = $display (stringOf s)
8+
9+
a :: WrapStr (TNumToStr 42)
10+
a = WrapStr
11+
12+
class FoldNumsStr a s | a -> s where {}
13+
14+
instance (FoldNumsStr a s) => FoldNumsStr (WrapNum i, a) (TStrCat (TNumToStr i) (TStrCat "_" s)) where {}
15+
instance FoldNumsStr (WrapNum i) (TNumToStr i) where {}
16+
instance FoldNumsStr () "" where {}
17+
18+
b :: (FoldNumsStr (WrapNum 1, WrapNum 22, WrapNum 333) s) => WrapStr s
19+
b = WrapStr
20+
21+
c :: (FoldNumsStr () s) => WrapStr s
22+
c = WrapStr
23+
24+
sysTNumToStr :: Module Empty
25+
sysTNumToStr = module
26+
27+
rules
28+
when True ==> do
29+
printWrapStr a
30+
printWrapStr b
31+
printWrapStr c
32+
$finish

testsuite/bsc.typechecker/string/TApp.bs renamed to testsuite/bsc.typechecker/string/TStrCat.bs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
1-
package TApp where
1+
package TStrCat where
22

33
data (WrapStr :: $ -> *) s = WrapStr
44

55
printWrapStr :: WrapStr s -> Action
66
printWrapStr _ = $display (stringOf s)
77

8-
a :: WrapStr (TApp "aaa" "bbb")
8+
a :: WrapStr (TStrCat "aaa" "bbb")
99
a = WrapStr
1010

1111
class FlatWrapStr a s | a -> s where {}
1212

13-
instance (FlatWrapStr a s2) => FlatWrapStr (WrapStr s1, a) (TApp s1 (TApp "_" s2)) where {}
13+
instance (FlatWrapStr a s2) => FlatWrapStr (WrapStr s1, a) (TStrCat s1 (TStrCat "_" s2)) where {}
1414
instance FlatWrapStr (WrapStr s) s where {}
1515
instance FlatWrapStr () "" where {}
1616

@@ -20,8 +20,8 @@ b = WrapStr
2020
c :: (FlatWrapStr () s) => WrapStr s
2121
c = WrapStr
2222

23-
sysTApp :: Module Empty
24-
sysTApp = module
23+
sysTStrCat :: Module Empty
24+
sysTStrCat = module
2525

2626
rules
2727
when True ==> do

testsuite/bsc.typechecker/string/string.exp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,5 @@ test_c_veri StringOf
1515
test_c_veri_bsv StringOfBSV
1616

1717
test_c_veri TypeClassString
18-
test_c_veri TApp
18+
test_c_veri TStrCat
19+
test_c_veri TNumToStr
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
42
2+
1_22_333
3+

0 commit comments

Comments
 (0)