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) =
...
@@ -38,13 +38,13 @@ convertExpr (Inside expr valueRanges) =
else
UniOp
RedOr
$
Concat
checks
else
UniOp
RedOr
$
Concat
checks
where
where
checks
=
map
toCheck
valueRanges
checks
=
map
toCheck
valueRanges
toCheck
::
ExprOrRange
->
Expr
toCheck
::
Expr
->
Expr
toCheck
(
Left
pattern
)
=
toCheck
(
Range
Nil
NonIndexed
(
lo
,
hi
))
=
BinOp
WEq
expr
pattern
toCheck
(
Right
(
lo
,
hi
))
=
BinOp
LogAnd
BinOp
LogAnd
(
BinOp
Le
lo
expr
)
(
BinOp
Le
lo
expr
)
(
BinOp
Ge
hi
expr
)
(
BinOp
Ge
hi
expr
)
toCheck
pattern
=
BinOp
WEq
expr
pattern
convertExpr
other
=
other
convertExpr
other
=
other
convertStmt
::
Stmt
->
Stmt
convertStmt
::
Stmt
->
Stmt
...
@@ -62,12 +62,7 @@ convertStmt (Case u CaseInside expr items) =
...
@@ -62,12 +62,7 @@ convertStmt (Case u CaseInside expr items) =
stmt
=
convertStmt
(
Case
u
CaseInside
(
Ident
tmp
)
items
)
stmt
=
convertStmt
(
Case
u
CaseInside
(
Ident
tmp
)
items
)
-- underlying inside case elaboration
-- underlying inside case elaboration
itemsNonDefault
=
filter
(
not
.
null
.
fst
)
items
itemsNonDefault
=
filter
(
not
.
null
.
fst
)
items
makeComp
::
[
Expr
]
->
Expr
comps
=
map
(
Inside
expr
.
fst
)
itemsNonDefault
makeComp
=
Inside
expr
.
map
unwrap
unwrap
::
Expr
->
ExprOrRange
unwrap
(
Range
Nil
NonIndexed
r
)
=
Right
r
unwrap
e
=
Left
e
comps
=
map
(
makeComp
.
fst
)
itemsNonDefault
stmts
=
map
snd
itemsNonDefault
stmts
=
map
snd
itemsNonDefault
defaultStmt
=
fromMaybe
Null
(
lookup
[]
items
)
defaultStmt
=
fromMaybe
Null
(
lookup
[]
items
)
convertStmt
other
=
other
convertStmt
other
=
other
...
...
src/Convert/Traverse.hs
View file @
ec766657
...
@@ -405,12 +405,6 @@ traverseSinglyNestedExprsM exprMapper = em
...
@@ -405,12 +405,6 @@ traverseSinglyNestedExprsM exprMapper = em
typeOrExprMapper
(
Left
t
)
=
return
$
Left
t
typeOrExprMapper
(
Left
t
)
=
return
$
Left
t
typeOrExprMapper
(
Right
e
)
=
typeOrExprMapper
(
Right
e
)
=
exprMapper
e
>>=
return
.
Right
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
(
String
s
)
=
return
$
String
s
em
(
Real
s
)
=
return
$
Real
s
em
(
Real
s
)
=
return
$
Real
s
em
(
Number
n
)
=
return
$
Number
n
em
(
Number
n
)
=
return
$
Number
n
...
@@ -475,7 +469,7 @@ traverseSinglyNestedExprsM exprMapper = em
...
@@ -475,7 +469,7 @@ traverseSinglyNestedExprsM exprMapper = em
return
$
Pattern
$
zip
names
exprs
return
$
Pattern
$
zip
names
exprs
em
(
Inside
e
l
)
=
do
em
(
Inside
e
l
)
=
do
e'
<-
exprMapper
e
e'
<-
exprMapper
e
l'
<-
mapM
expr
OrRange
Mapper
l
l'
<-
mapM
exprMapper
l
return
$
Inside
e'
l'
return
$
Inside
e'
l'
em
(
MinTypMax
e1
e2
e3
)
=
do
em
(
MinTypMax
e1
e2
e3
)
=
do
e1'
<-
exprMapper
e1
e1'
<-
exprMapper
e1
...
...
src/Language/SystemVerilog/AST/Expr.hs
View file @
ec766657
...
@@ -10,14 +10,12 @@ module Language.SystemVerilog.AST.Expr
...
@@ -10,14 +10,12 @@ module Language.SystemVerilog.AST.Expr
(
Expr
(
..
)
(
Expr
(
..
)
,
Range
,
Range
,
TypeOrExpr
,
TypeOrExpr
,
ExprOrRange
,
Args
(
..
)
,
Args
(
..
)
,
PartSelectMode
(
..
)
,
PartSelectMode
(
..
)
,
DimsFn
(
..
)
,
DimsFn
(
..
)
,
DimFn
(
..
)
,
DimFn
(
..
)
,
showAssignment
,
showAssignment
,
showRanges
,
showRanges
,
showExprOrRange
,
ParamBinding
,
ParamBinding
,
showParams
,
showParams
,
pattern
RawNum
,
pattern
RawNum
...
@@ -34,7 +32,6 @@ import {-# SOURCE #-} Language.SystemVerilog.AST.Type
...
@@ -34,7 +32,6 @@ import {-# SOURCE #-} Language.SystemVerilog.AST.Type
type
Range
=
(
Expr
,
Expr
)
type
Range
=
(
Expr
,
Expr
)
type
TypeOrExpr
=
Either
Type
Expr
type
TypeOrExpr
=
Either
Type
Expr
type
ExprOrRange
=
Either
Expr
Range
pattern
RawNum
::
Integer
->
Expr
pattern
RawNum
::
Integer
->
Expr
pattern
RawNum
n
=
Number
(
Decimal
(
-
32
)
True
n
)
pattern
RawNum
n
=
Number
(
Decimal
(
-
32
)
True
n
)
...
@@ -61,7 +58,7 @@ data Expr
...
@@ -61,7 +58,7 @@ data Expr
|
DimFn
DimFn
TypeOrExpr
Expr
|
DimFn
DimFn
TypeOrExpr
Expr
|
Dot
Expr
Identifier
|
Dot
Expr
Identifier
|
Pattern
[(
Identifier
,
Expr
)]
|
Pattern
[(
Identifier
,
Expr
)]
|
Inside
Expr
[
ExprOrRange
]
|
Inside
Expr
[
Expr
]
|
MinTypMax
Expr
Expr
Expr
|
MinTypMax
Expr
Expr
Expr
|
Nil
|
Nil
deriving
(
Eq
,
Ord
)
deriving
(
Eq
,
Ord
)
...
@@ -83,9 +80,7 @@ instance Show Expr where
...
@@ -83,9 +80,7 @@ instance Show Expr where
show
(
Cast
tore
e
)
=
printf
"%s'(%s)"
(
showEither
tore
)
(
show
e
)
show
(
Cast
tore
e
)
=
printf
"%s'(%s)"
(
showEither
tore
)
(
show
e
)
show
(
DimsFn
f
v
)
=
printf
"%s(%s)"
(
show
f
)
(
showEither
v
)
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
(
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
)
show
(
Inside
e
l
)
=
printf
"(%s inside { %s })"
(
show
e
)
(
intercalate
", "
$
map
show
l
)
where
strs
=
map
showExprOrRange
l
show
(
Pattern
l
)
=
show
(
Pattern
l
)
=
printf
"'{
\n
%s
\n
}"
(
indent
$
intercalate
",
\n
"
$
map
showPatternItem
l
)
printf
"'{
\n
%s
\n
}"
(
indent
$
intercalate
",
\n
"
$
map
showPatternItem
l
)
where
where
...
@@ -187,10 +182,6 @@ showRanges l = " " ++ (concatMap showRange l)
...
@@ -187,10 +182,6 @@ showRanges l = " " ++ (concatMap showRange l)
showRange
::
Range
->
String
showRange
::
Range
->
String
showRange
(
h
,
l
)
=
printf
"[%s:%s]"
(
show
h
)
(
show
l
)
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
::
Expr
->
ShowS
showUniOpPrec
(
e
@
UniOp
{})
=
(
showParen
True
.
shows
)
e
showUniOpPrec
(
e
@
UniOp
{})
=
(
showParen
True
.
shows
)
e
showUniOpPrec
(
e
@
BinOp
{})
=
(
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] }
...
@@ -1140,7 +1140,7 @@ InsideCases :: { [Case] }
:
InsideCase
{
[
$
1
]
}
:
InsideCase
{
[
$
1
]
}
|
InsideCase
InsideCases
{
$
1
:
$
2
}
|
InsideCase
InsideCases
{
$
1
:
$
2
}
InsideCase
::
{
Case
}
InsideCase
::
{
Case
}
:
OpenRangeList
":"
Stmt
{
(
map
rangeAsExpr
$
1
,
$
3
)
}
:
OpenRangeList
":"
Stmt
{
(
$
1
,
$
3
)
}
|
"default"
opt
(
":"
)
Stmt
{
(
[]
,
$
3
)
}
|
"default"
opt
(
":"
)
Stmt
{
(
[]
,
$
3
)
}
Real
::
{
String
}
Real
::
{
String
}
...
@@ -1183,12 +1183,12 @@ TypeOrExpr :: { TypeOrExpr }
...
@@ -1183,12 +1183,12 @@ TypeOrExpr :: { TypeOrExpr }
:
TypeNonIdent
{
Left
$
1
}
:
TypeNonIdent
{
Left
$
1
}
|
Expr
{
Right
$
1
}
|
Expr
{
Right
$
1
}
OpenRangeList
::
{
[
Expr
OrRange
]
}
OpenRangeList
::
{
[
Expr
]
}
:
ValueRange
{
[
$
1
]
}
:
ValueRange
{
[
$
1
]
}
|
OpenRangeList
","
ValueRange
{
$
1
++
[
$
3
]
}
|
OpenRangeList
","
ValueRange
{
$
1
++
[
$
3
]
}
ValueRange
::
{
Expr
OrRange
}
ValueRange
::
{
Expr
}
:
Expr
{
Left
$
1
}
:
Expr
{
$
1
}
|
Range
{
R
ight
$
1
}
|
Range
{
R
ange
Nil
NonIndexed
$
1
}
Expr
::
{
Expr
}
Expr
::
{
Expr
}
:
"("
Expr
")"
{
$
2
}
:
"("
Expr
")"
{
$
2
}
...
@@ -1465,10 +1465,6 @@ caseInsideKW tok kw =
...
@@ -1465,10 +1465,6 @@ caseInsideKW tok kw =
error
$
show
(
tokenPosition
tok
)
error
$
show
(
tokenPosition
tok
)
++
": Parse error: cannot use inside with "
++
show
kw
++
": 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
::
Attr
->
ModuleItem
->
ModuleItem
addMIAttr
_
(
item
@
(
MIPackageItem
(
Decl
CommentDecl
{})))
=
item
addMIAttr
_
(
item
@
(
MIPackageItem
(
Decl
CommentDecl
{})))
=
item
addMIAttr
attr
item
=
MIAttr
attr
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