handle macro-less inline procedures

This commit is contained in:
Wolfgang Thaller 2012-04-22 17:56:00 +02:00
parent 8eeb63b4f3
commit dbc71a294d
1 changed files with 19 additions and 6 deletions

View File

@ -45,15 +45,28 @@ balancedText stopAtComma = fmap (foldr ($) "") $
trim = dropWhile isSpace . reverse . dropWhile isSpace . reverse
cleanup = unwords . words . trim
returnType = do
t <- identifier tp
ptrs <- many (reservedOp tp "*" >> return '*')
return $ t ++ ptrs
externApiDeclaration = do
reserved tp "EXTERN_API"
rettype <- fmap trim $ parens tp (balancedText False)
rettype <- (reserved tp "EXTERN_API" >> (fmap trim $ parens tp (balancedText False)))
<|> (reserved tp "pascal" >> returnType)
name <- identifier tp
arguments <- fmap (map cleanup) $ parens tp (commaSep tp $ balancedText True)
inlines <- option [] $ do
inlinekey <- identifier tp
guard ("WORDINLINE" `isSuffixOf` inlinekey)
parens tp (commaSep tp hexword)
let hexwords = commaSep tp hexword
macroinline = do
inlinekey <- identifier tp
guard ("WORDINLINE" `isSuffixOf` inlinekey)
parens tp hexwords
plaininline = do
reservedOp tp "="
braces tp hexwords
inlines <- macroinline <|> plaininline <|> return []
semi tp
let arguments' | arguments == ["void"] = []
| otherwise = arguments