# HG changeset patch # User unc0rr # Date 1332609590 -14400 # Node ID 572571ea945edd93445ac19512b7688535ac0c0e # Parent ed63275e02b703fc0fdaa512acd4184c7a3dba83 Fix wrong type returned from id2C diff -r ed63275e02b7 -r 572571ea945e tools/PascalUnitSyntaxTree.hs --- a/tools/PascalUnitSyntaxTree.hs Sat Mar 24 19:57:06 2012 +0400 +++ b/tools/PascalUnitSyntaxTree.hs Sat Mar 24 21:19:50 2012 +0400 @@ -108,4 +108,5 @@ | BTSet BaseType | BTEnum [String] | BTVoid + | BTUnit deriving Show diff -r ed63275e02b7 -r 572571ea945e tools/pas2c.hs --- a/tools/pas2c.hs Sat Mar 24 19:57:06 2012 +0400 +++ b/tools/pas2c.hs Sat Mar 24 21:19:50 2012 +0400 @@ -124,10 +124,13 @@ typesAndVars2C :: Bool -> TypesAndVars -> State RenderState Doc typesAndVars2C b (TypesAndVars ts) = liftM vcat $ mapM (tvar2C b) ts +setBaseType :: BaseType -> Identifier -> Identifier +setBaseType bt (Identifier i _) = Identifier i bt + uses2C :: Uses -> State RenderState Doc uses2C uses@(Uses unitIds) = do mapM_ injectNamespace (Identifier "pas2cSystem" undefined : unitIds) - mapM_ (id2C IOInsert) unitIds + mapM_ (id2C IOInsert . setBaseType BTUnit) unitIds return $ vcat . map (\i -> text $ "#include \"" ++ i ++ ".h\"") $ uses2List uses where injectNamespace (Identifier i _) = do @@ -147,11 +150,10 @@ let i' = map toLower i v <- gets $ find (\(a, _) -> a == i') . currentScope ns <- gets currentScope - modify (\s -> s{lastType = t}) if isNothing v then error $ "Not defined: '" ++ i' ++ "'\n" -- ++ show ns else - return . text . fst . snd . fromJust $ v + let vv = snd $ fromJust v in modify (\s -> s{lastType = snd vv}) >> (return . text . fst $ vv) id2C IODeferred (Identifier i t) = do let i' = map toLower i v <- gets $ find (\(a, _) -> a == i') . currentScope @@ -383,8 +385,10 @@ ref2C rf@(RecordField ref1 ref2) = do r1 <- ref2C ref1 t <- gets lastType + ns <- gets currentScope case t of r@(BTRecord _) -> error $ show r + r@(BTUnit) -> error $ show r a -> error $ "dereferencing from " ++ show a ++ " - " ++ show rf r2 <- ref2C ref2 return $