Renaming symbols in desugar, removed incorrect comment in emits

This commit is contained in:
sebastianselander 2023-05-05 11:43:17 +02:00
parent fe25f18eb7
commit 747de6a34e
2 changed files with 31 additions and 4 deletions

View file

@ -15,6 +15,7 @@ import Data.Coerce (coerce)
import Data.Map qualified as Map
import Data.Maybe (fromJust, fromMaybe)
import Data.Tuple.Extra (dupe, first, second)
import Debug.Trace (traceShow)
import Monomorphizer.MonomorphizerIr as MIR
import TypeChecker.TypeCheckerIr qualified as TIR
@ -268,7 +269,6 @@ emitECased t e cases = do
emitCases rt ty label stackPtr vs (Branch (MIR.PEnum (TIR.Ident "False"), _) exp) = do
emitCases rt ty label stackPtr vs (Branch (MIR.PLit (MIR.LInt 0, TLit "Bool"), t) exp)
emitCases rt ty label stackPtr vs (Branch (MIR.PEnum consId, _) exp) = do
-- //TODO Penum wrong, acts as a catch all
emit $ Comment "Penum"
cons <- gets constructors
let r = fromJust $ Map.lookup consId cons

View file

@ -16,7 +16,7 @@ desugar :: Program -> Program
desugar (Program defs) = Program (map desugarDef defs)
desugarVarName :: VarName -> LIdent
desugarVarName (VSymbol (Symbol i)) = LIdent i
desugarVarName (VSymbol (Symbol i)) = LIdent $ fixName i
desugarVarName (VIdent i) = i
desugarDef :: Def -> Def
@ -68,8 +68,8 @@ desugarExp = \case
ELet b e -> ELet (desugarBind b) (desugarExp e)
ECase e br -> ECase (desugarExp e) (map desugarBranch br)
EAnn e t -> EAnn (desugarExp e) t
EVarS (VSymbol (Symbol symb)) -> EVar (LIdent symb)
EVarS (VIdent ident) -> EVar ident
EVarS (VSymbol (Symbol symb)) -> EVar (LIdent $ fixName symb)
EVarS (VIdent (LIdent ident)) -> EVar $ LIdent $ fixName ident
EVar i -> EVar i
ELit l -> ELit l
EInj i -> EInj i
@ -88,3 +88,30 @@ desugarPattern = \case
desugarLit :: Lit -> Lit
desugarLit (LInt i) = LInt i
desugarLit (LChar c) = LChar c
fixName :: String -> String
fixName = concatMap mapSymbols
where
mapSymbols :: Char -> String
mapSymbols c = case c of
'@' -> "$at$"
'#' -> "$octothorpe$"
'%' -> "$percent$"
'^' -> "$hat$"
'&' -> "$and$"
'*' -> "$star$"
'_' -> "$underscore$"
'-' -> "$minus$"
'+' -> "$plus$"
'=' -> "$equals$"
'|' -> "$pipe$"
'?' -> "$questionmark$"
'/' -> "$fslash$"
'<' -> "$langle$"
'>' -> "$rangle$"
',' -> "$comma$"
'•' -> "$bullet$"
':' -> "$semicolon$"
'[' -> "$lbracket$"
']' -> "$rbracket$"
c -> c : ""