From 747de6a34e6d89e9e423563d9950f5707f4dcc64 Mon Sep 17 00:00:00 2001 From: sebastianselander Date: Fri, 5 May 2023 11:43:17 +0200 Subject: [PATCH] Renaming symbols in desugar, removed incorrect comment in emits --- src/Codegen/Emits.hs | 2 +- src/Desugar/Desugar.hs | 33 ++++++++++++++++++++++++++++++--- 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/src/Codegen/Emits.hs b/src/Codegen/Emits.hs index 112839b..f020871 100644 --- a/src/Codegen/Emits.hs +++ b/src/Codegen/Emits.hs @@ -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 diff --git a/src/Desugar/Desugar.hs b/src/Desugar/Desugar.hs index 251c5ce..550d7c3 100644 --- a/src/Desugar/Desugar.hs +++ b/src/Desugar/Desugar.hs @@ -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 : ""