Resolve compilation warnings
This commit is contained in:
@@ -27,25 +27,30 @@ emitLabelDef (LabelDef label) = do
|
|||||||
let current = length (_beans ctx)
|
let current = length (_beans ctx)
|
||||||
put ctx { _labels = M.insert label current labels }
|
put ctx { _labels = M.insert label current labels }
|
||||||
return ()
|
return ()
|
||||||
|
emitLabelDef _ = return()
|
||||||
|
|
||||||
emitParam :: Emitter
|
emitParam :: Emitter
|
||||||
emitParam (Param (Integer x)) = emitByte $ fromIntegral $ x
|
emitParam (Param (Integer x)) = emitByte $ fromIntegral $ x
|
||||||
emitParam (Param (LabelRef label)) = emitBean $ Reference $ label
|
emitParam (Param (LabelRef label)) = emitBean $ Reference $ label
|
||||||
|
emitParam _ = return()
|
||||||
|
|
||||||
emitInstr :: Emitter
|
emitInstr :: Emitter
|
||||||
emitInstr (Instruction (Operator op) Empty) = emitByte $ fromIntegral . fromEnum $ op
|
emitInstr (Instruction (Operator op) Empty) = emitByte $ fromIntegral . fromEnum $ op
|
||||||
emitInstr (Instruction (Operator op) (Params params)) = do
|
emitInstr (Instruction (Operator op) (Params params)) = do
|
||||||
emitByte $ fromIntegral . fromEnum $ op
|
emitByte $ fromIntegral . fromEnum $ op
|
||||||
mapM emitParam params
|
mapM_ emitParam params
|
||||||
return ()
|
return ()
|
||||||
|
emitInstr _ = return()
|
||||||
|
|
||||||
emitLine :: Emitter
|
emitLine :: Emitter
|
||||||
emitLine (Line labelDef Empty) = emitLabelDef labelDef
|
emitLine (Line labelDef Empty) = emitLabelDef labelDef
|
||||||
emitLine (Line Empty instr) = emitInstr instr
|
emitLine (Line Empty instr) = emitInstr instr
|
||||||
emitLine (Line labelDef instr) = emitLabelDef labelDef >> emitInstr instr >> return ()
|
emitLine (Line labelDef instr) = emitLabelDef labelDef >> emitInstr instr >> return ()
|
||||||
|
emitLine _ = return()
|
||||||
|
|
||||||
emitProgram :: Emitter
|
emitProgram :: Emitter
|
||||||
emitProgram (Program progLines) = mapM emitLine progLines >> return ()
|
emitProgram (Program progLines) = mapM emitLine progLines >> return ()
|
||||||
|
emitProgram _ = return()
|
||||||
|
|
||||||
emitByte :: Word8 -> State Context ()
|
emitByte :: Word8 -> State Context ()
|
||||||
emitByte byte = emitBean $ Byte $ byte
|
emitByte byte = emitBean $ Byte $ byte
|
||||||
@@ -62,7 +67,7 @@ resolveLabels labels beans = sequence $ foldr folder [] beans
|
|||||||
folder b acc = (resolveLabel labels b) : acc
|
folder b acc = (resolveLabel labels b) : acc
|
||||||
|
|
||||||
resolveLabel :: M.Map String Int -> Bean -> Either String Bean
|
resolveLabel :: M.Map String Int -> Bean -> Either String Bean
|
||||||
resolveLabel labels b@(Byte _) = Right b
|
resolveLabel _ b@(Byte _) = Right b
|
||||||
resolveLabel labels (Reference label) = case M.lookup label labels of
|
resolveLabel labels (Reference label) = case M.lookup label labels of
|
||||||
(Just t) -> Right . Byte . fromIntegral $ t
|
(Just t) -> Right . Byte . fromIntegral $ t
|
||||||
Nothing -> Left $ "Label '" ++ label ++ "' is not defined"
|
Nothing -> Left $ "Label '" ++ label ++ "' is not defined"
|
||||||
|
|||||||
Reference in New Issue
Block a user