equal
deleted
inserted
replaced
113 toCFiles ns p@(fn, pu) = do |
113 toCFiles ns p@(fn, pu) = do |
114 hPutStrLn stderr $ "Rendering '" ++ fn ++ "'..." |
114 hPutStrLn stderr $ "Rendering '" ++ fn ++ "'..." |
115 toCFiles' p |
115 toCFiles' p |
116 where |
116 where |
117 toCFiles' (fn, p@(Program {})) = writeFile (fn ++ ".c") $ (render2C initialState . pascal2C) p |
117 toCFiles' (fn, p@(Program {})) = writeFile (fn ++ ".c") $ (render2C initialState . pascal2C) p |
118 toCFiles' (fn, (Unit _ interface implementation _ _)) = do |
118 toCFiles' (fn, (Unit unitId interface implementation _ _)) = do |
119 let (a, s) = runState (interface2C interface) initialState |
119 let (a, s) = runState (id2C IOInsert (setBaseType BTUnit unitId) >> interface2C interface) initialState |
120 writeFile (fn ++ ".h") $ "#pragma once\n" ++ (render a) |
120 writeFile (fn ++ ".h") $ "#pragma once\n" ++ (render a) |
121 writeFile (fn ++ ".c") $ (render2C s . implementation2C) implementation |
121 writeFile (fn ++ ".c") $ (render2C s . implementation2C) implementation |
122 initialState = emptyState ns |
122 initialState = emptyState ns |
123 |
123 |
124 render2C :: RenderState -> State RenderState Doc -> String |
124 render2C :: RenderState -> State RenderState Doc -> String |
449 r <> parens (hsep . punctuate (char ',') $ ps) |
449 r <> parens (hsep . punctuate (char ',') $ ps) |
450 expr2C _ = return $ text "<<expression>>" |
450 expr2C _ = return $ text "<<expression>>" |
451 |
451 |
452 |
452 |
453 ref2C :: Reference -> State RenderState Doc |
453 ref2C :: Reference -> State RenderState Doc |
|
454 -- rewrite into proper form |
|
455 ref2C r@(RecordField ref1 (ArrayElement exprs ref2)) = ref2C $ ArrayElement exprs (RecordField ref1 ref2) |
|
456 ref2C r@(RecordField ref1 (Dereference ref2)) = ref2C $ Dereference (RecordField ref1 ref2) |
|
457 ref2C r@(RecordField ref1 (RecordField ref2 ref3)) = ref2C $ RecordField (RecordField ref1 ref2) ref3 |
|
458 -- conversion routines |
454 ref2C ae@(ArrayElement exprs ref) = do |
459 ref2C ae@(ArrayElement exprs ref) = do |
455 es <- mapM expr2C exprs |
460 es <- mapM expr2C exprs |
456 r <- ref2C ref |
461 r <- ref2C ref |
457 t <- gets lastType |
462 t <- gets lastType |
458 ns <- gets currentScope |
463 ns <- gets currentScope |