Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
sv2v
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lvzhengyang
sv2v
Commits
ec766657
Commit
ec766657
authored
Feb 17, 2021
by
Zachary Snow
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
simplify value range representation
parent
4bfcfe4b
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
13 additions
and
37 deletions
+13
-37
src/Convert/Inside.hs
+5
-10
src/Convert/Traverse.hs
+1
-7
src/Language/SystemVerilog/AST/Expr.hs
+2
-11
src/Language/SystemVerilog/Parser/Parse.y
+5
-9
No files found.
src/Convert/Inside.hs
View file @
ec766657
...
...
@@ -38,13 +38,13 @@ convertExpr (Inside expr valueRanges) =
else
UniOp
RedOr
$
Concat
checks
where
checks
=
map
toCheck
valueRanges
toCheck
::
ExprOrRange
->
Expr
toCheck
(
Left
pattern
)
=
BinOp
WEq
expr
pattern
toCheck
(
Right
(
lo
,
hi
))
=
toCheck
::
Expr
->
Expr
toCheck
(
Range
Nil
NonIndexed
(
lo
,
hi
))
=
BinOp
LogAnd
(
BinOp
Le
lo
expr
)
(
BinOp
Ge
hi
expr
)
toCheck
pattern
=
BinOp
WEq
expr
pattern
convertExpr
other
=
other
convertStmt
::
Stmt
->
Stmt
...
...
@@ -62,12 +62,7 @@ convertStmt (Case u CaseInside expr items) =
stmt
=
convertStmt
(
Case
u
CaseInside
(
Ident
tmp
)
items
)
-- underlying inside case elaboration
itemsNonDefault
=
filter
(
not
.
null
.
fst
)
items
makeComp
::
[
Expr
]
->
Expr
makeComp
=
Inside
expr
.
map
unwrap
unwrap
::
Expr
->
ExprOrRange
unwrap
(
Range
Nil
NonIndexed
r
)
=
Right
r
unwrap
e
=
Left
e
comps
=
map
(
makeComp
.
fst
)
itemsNonDefault
comps
=
map
(
Inside
expr
.
fst
)
itemsNonDefault
stmts
=
map
snd
itemsNonDefault
defaultStmt
=
fromMaybe
Null
(
lookup
[]
items
)
convertStmt
other
=
other
...
...
src/Convert/Traverse.hs
View file @
ec766657
...
...
@@ -405,12 +405,6 @@ traverseSinglyNestedExprsM exprMapper = em
typeOrExprMapper
(
Left
t
)
=
return
$
Left
t
typeOrExprMapper
(
Right
e
)
=
exprMapper
e
>>=
return
.
Right
exprOrRangeMapper
(
Left
e
)
=
exprMapper
e
>>=
return
.
Left
exprOrRangeMapper
(
Right
(
e1
,
e2
))
=
do
e1'
<-
exprMapper
e1
e2'
<-
exprMapper
e2
return
$
Right
(
e1'
,
e2'
)
em
(
String
s
)
=
return
$
String
s
em
(
Real
s
)
=
return
$
Real
s
em
(
Number
n
)
=
return
$
Number
n
...
...
@@ -475,7 +469,7 @@ traverseSinglyNestedExprsM exprMapper = em
return
$
Pattern
$
zip
names
exprs
em
(
Inside
e
l
)
=
do
e'
<-
exprMapper
e
l'
<-
mapM
expr
OrRange
Mapper
l
l'
<-
mapM
exprMapper
l
return
$
Inside
e'
l'
em
(
MinTypMax
e1
e2
e3
)
=
do
e1'
<-
exprMapper
e1
...
...
src/Language/SystemVerilog/AST/Expr.hs
View file @
ec766657
...
...
@@ -10,14 +10,12 @@ module Language.SystemVerilog.AST.Expr
(
Expr
(
..
)
,
Range
,
TypeOrExpr
,
ExprOrRange
,
Args
(
..
)
,
PartSelectMode
(
..
)
,
DimsFn
(
..
)
,
DimFn
(
..
)
,
showAssignment
,
showRanges
,
showExprOrRange
,
ParamBinding
,
showParams
,
pattern
RawNum
...
...
@@ -34,7 +32,6 @@ import {-# SOURCE #-} Language.SystemVerilog.AST.Type
type
Range
=
(
Expr
,
Expr
)
type
TypeOrExpr
=
Either
Type
Expr
type
ExprOrRange
=
Either
Expr
Range
pattern
RawNum
::
Integer
->
Expr
pattern
RawNum
n
=
Number
(
Decimal
(
-
32
)
True
n
)
...
...
@@ -61,7 +58,7 @@ data Expr
|
DimFn
DimFn
TypeOrExpr
Expr
|
Dot
Expr
Identifier
|
Pattern
[(
Identifier
,
Expr
)]
|
Inside
Expr
[
ExprOrRange
]
|
Inside
Expr
[
Expr
]
|
MinTypMax
Expr
Expr
Expr
|
Nil
deriving
(
Eq
,
Ord
)
...
...
@@ -83,9 +80,7 @@ instance Show Expr where
show
(
Cast
tore
e
)
=
printf
"%s'(%s)"
(
showEither
tore
)
(
show
e
)
show
(
DimsFn
f
v
)
=
printf
"%s(%s)"
(
show
f
)
(
showEither
v
)
show
(
DimFn
f
v
e
)
=
printf
"%s(%s, %s)"
(
show
f
)
(
showEither
v
)
(
show
e
)
show
(
Inside
e
l
)
=
printf
"(%s inside { %s })"
(
show
e
)
(
intercalate
", "
strs
)
where
strs
=
map
showExprOrRange
l
show
(
Inside
e
l
)
=
printf
"(%s inside { %s })"
(
show
e
)
(
intercalate
", "
$
map
show
l
)
show
(
Pattern
l
)
=
printf
"'{
\n
%s
\n
}"
(
indent
$
intercalate
",
\n
"
$
map
showPatternItem
l
)
where
...
...
@@ -187,10 +182,6 @@ showRanges l = " " ++ (concatMap showRange l)
showRange
::
Range
->
String
showRange
(
h
,
l
)
=
printf
"[%s:%s]"
(
show
h
)
(
show
l
)
showExprOrRange
::
ExprOrRange
->
String
showExprOrRange
(
Left
x
)
=
show
x
showExprOrRange
(
Right
x
)
=
show
x
showUniOpPrec
::
Expr
->
ShowS
showUniOpPrec
(
e
@
UniOp
{})
=
(
showParen
True
.
shows
)
e
showUniOpPrec
(
e
@
BinOp
{})
=
(
showParen
True
.
shows
)
e
...
...
src/Language/SystemVerilog/Parser/Parse.y
View file @
ec766657
...
...
@@ -1140,7 +1140,7 @@ InsideCases :: { [Case] }
:
InsideCase
{
[
$
1
]
}
|
InsideCase
InsideCases
{
$
1
:
$
2
}
InsideCase
::
{
Case
}
:
OpenRangeList
":"
Stmt
{
(
map
rangeAsExpr
$
1
,
$
3
)
}
:
OpenRangeList
":"
Stmt
{
(
$
1
,
$
3
)
}
|
"default"
opt
(
":"
)
Stmt
{
(
[]
,
$
3
)
}
Real
::
{
String
}
...
...
@@ -1183,12 +1183,12 @@ TypeOrExpr :: { TypeOrExpr }
:
TypeNonIdent
{
Left
$
1
}
|
Expr
{
Right
$
1
}
OpenRangeList
::
{
[
Expr
OrRange
]
}
OpenRangeList
::
{
[
Expr
]
}
:
ValueRange
{
[
$
1
]
}
|
OpenRangeList
","
ValueRange
{
$
1
++
[
$
3
]
}
ValueRange
::
{
Expr
OrRange
}
:
Expr
{
Left
$
1
}
|
Range
{
R
ight
$
1
}
ValueRange
::
{
Expr
}
:
Expr
{
$
1
}
|
Range
{
R
ange
Nil
NonIndexed
$
1
}
Expr
::
{
Expr
}
:
"("
Expr
")"
{
$
2
}
...
...
@@ -1465,10 +1465,6 @@ caseInsideKW tok kw =
error
$
show
(
tokenPosition
tok
)
++
": Parse error: cannot use inside with "
++
show
kw
rangeAsExpr
::
ExprOrRange
->
Expr
rangeAsExpr
(
Left
e
)
=
e
rangeAsExpr
(
Right
r
)
=
Range
Nil
NonIndexed
r
addMIAttr
::
Attr
->
ModuleItem
->
ModuleItem
addMIAttr
_
(
item
@
(
MIPackageItem
(
Decl
CommentDecl
{})))
=
item
addMIAttr
attr
item
=
MIAttr
attr
item
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment