Skip to content

Commit a5e680b

Browse files
authored
Merge pull request #67 from grin-compiler/32-alt-remove-unnamed
Extended syntax: remove unnamed alternatives from syntax
2 parents db49996 + 4f916c1 commit a5e680b

File tree

18 files changed

+60
-90
lines changed

18 files changed

+60
-90
lines changed

grin/src/AbstractInterpretation/ExtendedSyntax/CreatedBy/CodeGen.hs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,6 @@ import AbstractInterpretation.ExtendedSyntax.CreatedBy.CodeGenBase
2424
import AbstractInterpretation.ExtendedSyntax.HeapPointsTo.CodeGen (litToSimpleType, unitType, codegenSimpleType) -- FIXME: why? remove, refactor
2525
import AbstractInterpretation.ExtendedSyntax.HeapPointsTo.Result (undefinedProducer) -- FIXME: why? remove, refactor
2626

27-
-- TODO: remove
28-
import Debug.Trace
2927

3028
data CByMapping
3129
= CByMapping
@@ -335,9 +333,8 @@ codeGen e = flip evalState emptyCGState $ para folder e >> mkCByProgramM where
335333
{- NOTE: The alternatives are already evaluated,
336334
we only have return them.
337335
-}
338-
AltF cpat (_, cgAlt) -> pure $ A cpat cgAlt
339336
-- NOTE: Currently, the names of the alternatives are ignored by the analysis.
340-
NAltF cpat n (_, cgAlt) -> do
337+
AltF cpat n (_, cgAlt) -> do
341338
altNameReg <- newReg
342339
addReg n altNameReg
343340
pure $ A cpat cgAlt

grin/src/AbstractInterpretation/ExtendedSyntax/EffectTracking/CodeGen.hs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,8 @@ codeGenM = cata folder where
7979
emit IR.Move { srcReg = altReg, dstReg = caseResultReg }
8080
pure $ R caseResultReg
8181

82-
AltF _ exp -> exp
8382
-- NOTE: Currently, the names of the alternatives are ignored by the analysis.
84-
NAltF _ n exp -> do
83+
AltF _ n exp -> do
8584
altNameReg <- newReg
8685
addReg n altNameReg
8786
exp

grin/src/AbstractInterpretation/ExtendedSyntax/HeapPointsTo/CodeGen.hs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -289,9 +289,8 @@ codeGenM = cata folder where
289289

290290
pure $ R caseResultReg
291291

292-
AltF cpat exp -> pure $ A cpat exp
293292
-- NOTE: Currently, the names of the alternatives are ignored by the analysis.
294-
NAltF cpat n exp -> do
293+
AltF cpat n exp -> do
295294
altNameReg <- newReg
296295
addReg n altNameReg
297296
pure $ A cpat exp

grin/src/AbstractInterpretation/ExtendedSyntax/LiveVariable/CodeGen.hs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -396,9 +396,8 @@ codeGenM e = (cata folder >=> const setMainLive) e
396396

397397
pure $ R caseResultReg
398398

399-
AltF cpat exp -> pure $ A cpat exp
400399
-- NOTE: Currently, the names of the alternatives are ignored by the analysis.
401-
NAltF cpat n exp -> do
400+
AltF cpat n exp -> do
402401
altNameReg <- newReg
403402
addReg n altNameReg
404403
pure $ A cpat exp

grin/src/Grin/ExtendedSyntax/GADT.hs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ data Exp (role' :: Role) where
6868

6969
Alt
7070
:: CPat -- ^ Pattern to match against
71+
-> Name -- ^ Name of the alternative
7172
-> Exp 'Bind' -- ^ Body of the alternative
7273
-> Exp 'Alt'
7374

@@ -108,5 +109,5 @@ convertToExp = \case
108109
Fetch name -> E.SFetch name
109110
Update lName nName -> E.SUpdate lName nName
110111
Case name alts -> E.ECase name (convertToExp <$> alts)
111-
Alt cpat body -> E.Alt cpat (convertToExp body)
112+
Alt cpat name body -> E.Alt cpat name (convertToExp body)
112113
Bind lhs bpat rhs -> E.EBind (convertToExp lhs) bpat (convertToExp rhs)

grin/src/Grin/ExtendedSyntax/Lint.hs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -247,8 +247,7 @@ annotate te = cata builder where
247247
)
248248
:< SFetchF var -- Fetch returns a value based on its arguments that is associated in its binded variable
249249
SAppF name params -> (te ^? function . at name . _Just . _1) :< SAppF name params
250-
AltF cpat body -> extract body :< AltF cpat body
251-
NAltF cpat n body -> extract body :< NAltF cpat n body
250+
AltF cpat n body -> extract body :< AltF cpat n body
252251
ECaseF var alts ->
253252
(do case catMaybes $ map extract alts of
254253
[] -> Nothing
@@ -445,11 +444,9 @@ lint warningKinds mTypeEnv exp@(Program exts _) =
445444
syntaxE SEWithoutNodesCtx
446445

447446
-- Alt
448-
(_ :< AltF cpat _) -> checkWithChild ExpCtx $ do
449-
syntaxE AltCtx
450447
-- TODO: Define some checks for the alt name.
451448
-- For example, that it is a fresh variable.
452-
(_ :< NAltF cpat n _) -> checkWithChild ExpCtx $ do
449+
(_ :< AltF cpat n _) -> checkWithChild ExpCtx $ do
453450
syntaxE AltCtx
454451

455452
where

grin/src/Grin/ExtendedSyntax/Nametable.hs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,7 @@ convert = second (view nametable) . flip runState emptyNS . cata build where
9494
SFetchF ptr -> SFetch <$> nameToIdx ptr
9595
SUpdateF ptr var -> SUpdate <$> nameToIdx ptr <*> nameToIdx var
9696
SBlockF body -> SBlock <$> body
97-
AltF cp e -> Alt <$> cpat cp <*> e
98-
NAltF cp n e -> NAlt <$> cpat cp <*> nameToIdx n <*> e
97+
AltF cp n e -> Alt <$> cpat cp <*> nameToIdx n <*> e
9998

10099
-- * Restore
101100

@@ -116,8 +115,7 @@ restore (exp, nt) = cata build exp where
116115
SFetchF ptr -> SFetch (rname ptr)
117116
SUpdateF ptr var -> SUpdate (rname ptr) (rname var)
118117
SBlockF body -> SBlock body
119-
AltF cp e -> Alt (rcpat cp) e
120-
NAltF cp n e -> NAlt (rcpat cp) (rname n) e
118+
AltF cp n e -> Alt (rcpat cp) (rname n) e
121119

122120
rname :: Name -> Name
123121
rname (NI i) = maybe (error $ show i ++ " is not found") NM $ Map.lookup i nt

grin/src/Grin/ExtendedSyntax/Parse/AST.hs

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -31,25 +31,11 @@ def = Def <$> try (L.indentGuard sc EQ pos1 *> var) <*> many var <* op "=" <*> (
3131
expr :: Pos -> Parser Exp
3232
expr i = L.indentGuard sc EQ i >>
3333
try ((\pat e b -> EBind e pat b) <$> try (bindingPat <* op "<-") <*> simpleExp i <*> expr i ) <|>
34-
ifThenElse i <|>
3534
simpleExp i
3635

37-
ifThenElse :: Pos -> Parser Exp
38-
ifThenElse i = do
39-
kw "if"
40-
b <- var
41-
kw "then"
42-
t <- (L.indentGuard sc GT i >>= expr)
43-
L.indentGuard sc EQ i
44-
kw "else"
45-
e <- (L.indentGuard sc GT i >>= expr)
46-
return $ ECase b [ Alt (LitPat (LBool True)) t
47-
, Alt (LitPat (LBool False)) e
48-
]
49-
5036
simpleExp :: Pos -> Parser SimpleExp
5137
simpleExp i = SReturn <$ kw "pure" <*> value <|>
52-
ECase <$ kw "case" <*> var <* kw "of" <*> (L.indentGuard sc GT i >>= some . nAlternative) <|>
38+
ECase <$ kw "case" <*> var <* kw "of" <*> (L.indentGuard sc GT i >>= some . alternative) <|>
5339
SStore <$ kw "store" <*> var <|>
5440
SFetch <$ kw "fetch" <*> var <|>
5541
SUpdate <$ kw "update" <*> var <*> var <|>
@@ -62,10 +48,7 @@ primNameOrDefName :: Parser Name
6248
primNameOrDefName = nMap ("_"<>) <$ char '_' <*> var <|> var
6349

6450
alternative :: Pos -> Parser Alt
65-
alternative i = Alt <$> try (L.indentGuard sc EQ i *> altPat) <* op "->" <*> (L.indentGuard sc GT i >>= expr)
66-
67-
nAlternative :: Pos -> Parser NAlt
68-
nAlternative i = NAlt <$> try (L.indentGuard sc EQ i *> altPat) <*> (op "@" *> var) <* op "->" <*> (L.indentGuard sc GT i >>= expr)
51+
alternative i = Alt <$> try (L.indentGuard sc EQ i *> altPat) <*> (op "@" *> var) <* op "->" <*> (L.indentGuard sc GT i >>= expr)
6952

7053
-- NOTE: The parser `value` already handles the parentheses around "complex" values,
7154
-- and we don't want to parenthesize variables, literals and units.

grin/src/Grin/ExtendedSyntax/Pretty.hs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -118,8 +118,7 @@ prettyHighlightExternals externals exp = cata prettyExpAlgebra exp where
118118
SUpdateF name v -> keywordR "update" <+> pretty name <+> pretty v
119119
SBlockF exp -> text "do" <$$> indent 2 exp
120120
-- Alt
121-
AltF cpat exp -> pretty cpat <+> text "->" <$$> indent 2 exp
122-
NAltF cpat scrut exp -> pretty cpat <+> pretty '@' <+> pretty scrut <+> text "->" <$$> indent 2 exp
121+
AltF cpat scrut exp -> pretty cpat <+> pretty '@' <+> pretty scrut <+> text "->" <$$> indent 2 exp
123122

124123

125124
instance Pretty Exp where

grin/src/Grin/ExtendedSyntax/PrettyLint.hs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,5 +51,4 @@ prettyAnnExp exp = cata folder exp where
5151
SUpdateF ptr var -> keywordR "update" <+> pretty ptr <+> pretty var
5252
SBlockF exp -> text "do" <$$> indent 2 (pretty exp)
5353
-- Alt
54-
AltF cpat exp -> pretty cpat <+> text "->" <$$> indent 2 (pretty exp)
55-
NAltF cpat n exp -> pretty cpat <+> pretty '@' <+> pretty n <+> text "->" <$$> indent 2 (pretty exp)
54+
AltF cpat n exp -> pretty cpat <+> pretty '@' <+> pretty n <+> text "->" <$$> indent 2 (pretty exp)

0 commit comments

Comments
 (0)