mirror of https://github.com/zachjs/sv2v.git
support for null call arguments
This commit is contained in:
parent
b4b6ea348d
commit
b5b9fdb37e
|
|
@ -180,6 +180,9 @@ traverseNestedExprsM :: Monad m => MapperM m Expr -> MapperM m Expr
|
||||||
traverseNestedExprsM mapper = exprMapper
|
traverseNestedExprsM mapper = exprMapper
|
||||||
where
|
where
|
||||||
exprMapper e = mapper e >>= em
|
exprMapper e = mapper e >>= em
|
||||||
|
maybeExprMapper Nothing = return Nothing
|
||||||
|
maybeExprMapper (Just e) =
|
||||||
|
exprMapper e >>= return . Just
|
||||||
em (String s) = return $ String s
|
em (String s) = return $ String s
|
||||||
em (Number s) = return $ Number s
|
em (Number s) = return $ Number s
|
||||||
em (ConstBool b) = return $ ConstBool b
|
em (ConstBool b) = return $ ConstBool b
|
||||||
|
|
@ -200,7 +203,7 @@ traverseNestedExprsM mapper = exprMapper
|
||||||
em (Concat l) =
|
em (Concat l) =
|
||||||
mapM exprMapper l >>= return . Concat
|
mapM exprMapper l >>= return . Concat
|
||||||
em (Call f l) =
|
em (Call f l) =
|
||||||
mapM exprMapper l >>= return . Call f
|
mapM maybeExprMapper l >>= return . Call f
|
||||||
em (UniOp o e) =
|
em (UniOp o e) =
|
||||||
exprMapper e >>= return . UniOp o
|
exprMapper e >>= return . UniOp o
|
||||||
em (BinOp o e1 e2) = do
|
em (BinOp o e1 e2) = do
|
||||||
|
|
@ -277,7 +280,7 @@ traverseExprsM mapper = moduleItemMapper
|
||||||
exprMapper cc >>= \cc' -> return $ If cc' s1 s2
|
exprMapper cc >>= \cc' -> return $ If cc' s1 s2
|
||||||
flatStmtMapper (Timing event stmt) = return $ Timing event stmt
|
flatStmtMapper (Timing event stmt) = return $ Timing event stmt
|
||||||
flatStmtMapper (Subroutine f exprs) =
|
flatStmtMapper (Subroutine f exprs) =
|
||||||
mapM exprMapper exprs >>= return . Subroutine f
|
mapM maybeExprMapper exprs >>= return . Subroutine f
|
||||||
flatStmtMapper (Return expr) =
|
flatStmtMapper (Return expr) =
|
||||||
exprMapper expr >>= return . Return
|
exprMapper expr >>= return . Return
|
||||||
flatStmtMapper (Null) = return Null
|
flatStmtMapper (Null) = return Null
|
||||||
|
|
|
||||||
|
|
@ -269,7 +269,7 @@ data Expr
|
||||||
| Bit Expr Expr
|
| Bit Expr Expr
|
||||||
| Repeat Expr [Expr]
|
| Repeat Expr [Expr]
|
||||||
| Concat [Expr]
|
| Concat [Expr]
|
||||||
| Call Identifier [Expr]
|
| Call Identifier [Maybe Expr]
|
||||||
| UniOp UniOp Expr
|
| UniOp UniOp Expr
|
||||||
| BinOp BinOp Expr Expr
|
| BinOp BinOp Expr Expr
|
||||||
| Mux Expr Expr Expr
|
| Mux Expr Expr Expr
|
||||||
|
|
@ -369,7 +369,7 @@ instance Show Expr where
|
||||||
Range a (b, c) -> printf "%s[%s:%s]" (show a) (show b) (show c)
|
Range a (b, c) -> printf "%s[%s:%s]" (show a) (show b) (show c)
|
||||||
Repeat a b -> printf "{%s {%s}}" (show a) (commas $ map show b)
|
Repeat a b -> printf "{%s {%s}}" (show a) (commas $ map show b)
|
||||||
Concat a -> printf "{%s}" (commas $ map show a)
|
Concat a -> printf "{%s}" (commas $ map show a)
|
||||||
Call a b -> printf "%s(%s)" a (commas $ map show b)
|
Call a b -> printf "%s(%s)" a (commas $ map (maybe "" show) b)
|
||||||
UniOp a b -> printf "(%s %s)" (show a) (show b)
|
UniOp a b -> printf "(%s %s)" (show a) (show b)
|
||||||
BinOp a b c -> printf "(%s %s %s)" (show b) (show a) (show c)
|
BinOp a b c -> printf "(%s %s %s)" (show b) (show a) (show c)
|
||||||
Mux a b c -> printf "(%s ? %s : %s)" (show a) (show b) (show c)
|
Mux a b c -> printf "(%s ? %s : %s)" (show a) (show b) (show c)
|
||||||
|
|
@ -431,7 +431,7 @@ data Stmt
|
||||||
| If Expr Stmt Stmt
|
| If Expr Stmt Stmt
|
||||||
| Timing Timing Stmt
|
| Timing Timing Stmt
|
||||||
| Return Expr
|
| Return Expr
|
||||||
| Subroutine Identifier [Expr]
|
| Subroutine Identifier [Maybe Expr]
|
||||||
| Null
|
| Null
|
||||||
deriving Eq
|
deriving Eq
|
||||||
|
|
||||||
|
|
@ -462,7 +462,7 @@ instance Show Stmt where
|
||||||
show (If a b Null) = printf "if (%s) %s" (show a) (show b)
|
show (If a b Null) = printf "if (%s) %s" (show a) (show b)
|
||||||
show (If a b c ) = printf "if (%s) %s\nelse %s" (show a) (show b) (show c)
|
show (If a b c ) = printf "if (%s) %s\nelse %s" (show a) (show b) (show c)
|
||||||
show (Return e ) = printf "return %s;" (show e)
|
show (Return e ) = printf "return %s;" (show e)
|
||||||
show (Subroutine x a) = printf "%s(%s);" x (commas $ map show a)
|
show (Subroutine x a) = printf "%s(%s);" x (commas $ map (maybe "" show) a)
|
||||||
show (Timing t s ) = printf "%s%s" (show t) rest
|
show (Timing t s ) = printf "%s%s" (show t) rest
|
||||||
where
|
where
|
||||||
rest = case s of
|
rest = case s of
|
||||||
|
|
|
||||||
|
|
@ -479,12 +479,14 @@ Number :: { String }
|
||||||
String :: { String }
|
String :: { String }
|
||||||
: string { tail $ init $ tokenString $1 }
|
: string { tail $ init $ tokenString $1 }
|
||||||
|
|
||||||
CallArgs :: { [Expr] }
|
CallArgs :: { [Maybe Expr] }
|
||||||
: {- empty -} { [] }
|
: {- empty -} { [] }
|
||||||
| CallArgsNonEmpty { $1 }
|
| Expr { [Just $1] }
|
||||||
CallArgsNonEmpty :: { [Expr] }
|
| CallArgsFollow { (Nothing) : $1 }
|
||||||
: Expr { [$1] }
|
| Expr CallArgsFollow { (Just $1) : $2 }
|
||||||
| CallArgsNonEmpty "," Expr { $1 ++ [$3] }
|
CallArgsFollow :: { [Maybe Expr] }
|
||||||
|
: "," opt(Expr) { [$2] }
|
||||||
|
| "," opt(Expr) CallArgsFollow { $2 : $3 }
|
||||||
|
|
||||||
Exprs :: { [Expr] }
|
Exprs :: { [Expr] }
|
||||||
: Expr { [$1] }
|
: Expr { [$1] }
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue