summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortomsmeding <tom.smeding@gmail.com>2017-02-01 15:19:48 +0100
committertomsmeding <tom.smeding@gmail.com>2017-02-01 15:19:48 +0100
commitd5d642a170cd29e60c4d1dacd18ac4c5a8f8becd (patch)
tree8c3a10395dda14626796ab892cf1d2aba3236d41
parent65a27683fabadc2d1a9ab1b0dbbdb4857d3a3640 (diff)
Dots before labels to prevent namespace pollution
-rw-r--r--codegen.hs14
1 files changed, 7 insertions, 7 deletions
diff --git a/codegen.hs b/codegen.hs
index 4c3bca9..f1c4305 100644
--- a/codegen.hs
+++ b/codegen.hs
@@ -64,12 +64,12 @@ runCGMonad m = let (e, s) = runState (runExceptT (unMon m)) initialGenState
getUniqueId :: CGMonad Integer
getUniqueId = state $ \s -> (nextId s, s {nextId = nextId s + 1})
-getNewName :: String -> CGMonad String
+getNewName :: String -> CGMonad LLName
getNewName base = fmap ((base++) . show) getUniqueId
newBlock :: CGMonad LLName
newBlock = do
- name <- getNewName "bb"
+ name <- getNewName ".bb"
state $ \s -> (name, s {
currentBlock = Just name,
allBlocks = Map.insert name (A.BasicBlock (A.Name name) [] undefined) $ allBlocks s
@@ -96,7 +96,7 @@ addInstr :: A.Instruction -> CGMonad LLName
addInstr instr
| instrReturnsVoid instr = addNamedInstr $ A.Do instr
| otherwise = do
- name <- getNewName "t"
+ name <- getNewName ".t"
addNamedInstr $ A.Name name A.:= instr
addNamedInstr :: A.Named A.Instruction -> CGMonad LLName
@@ -150,7 +150,7 @@ lookupGlobalFunction name = liftM (fromJust . Map.lookup name . globalFunctions)
addStringLiteral :: String -> CGMonad (A.Type, LLName)
addStringLiteral str = do
- name <- getNewName "str"
+ name <- getNewName ".str"
state $ \s -> ((A.ptr $ A.ArrayType (fromIntegral (length str + 1)) A.i8, name),
s {stringLiterals = (name, str) : stringLiterals s})
@@ -229,7 +229,7 @@ genGlobalVars (Program decs) = liftM (mapMaybe id) $ mapM gen decs
return Nothing
gen (DecExtern t@(TypeFunc rt ats) n) = do
setGlobalFunction n n t
- argnames <- sequence $ replicate (length ats) (getNewName "arg")
+ argnames <- sequence $ replicate (length ats) (getNewName ".arg")
return $ Just $ A.GlobalDefinition $
A.functionDefaults {
A.G.returnType = toLLVMType rt,
@@ -277,7 +277,7 @@ genFunctions (Program decs) = liftM (mapMaybe id) $ mapM gen decs
return $ Just $ A.GlobalDefinition $ A.functionDefaults {
A.G.returnType = toLLVMType rettype,
A.G.name = A.Name name,
- A.G.parameters = ([A.Parameter (toLLVMType t) (A.Name ("farg_"++n)) [] | (t,n) <- args], False),
+ A.G.parameters = ([A.Parameter (toLLVMType t) (A.Name (".farg_"++n)) [] | (t,n) <- args], False),
A.G.basicBlocks = bbs
}
gen _ = return Nothing
@@ -291,7 +291,7 @@ genFunctionBlock bl (rettype, fname) args = do
prepArg (t,n) = do
label <- addInstr $ A.Alloca (toLLVMType t) Nothing 0 []
void $ addInstr $ A.Store False (A.LocalReference (A.ptr (toLLVMType t)) (A.Name label))
- (A.LocalReference (toLLVMType t) (A.Name ("farg_"++n)))
+ (A.LocalReference (toLLVMType t) (A.Name (".farg_"++n)))
Nothing 0 []
setVar n label t
sequence_ $ map prepArg args