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
370e5e9e
Commit
370e5e9e
authored
Dec 08, 2020
by
Zachary Snow
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
package item nesting performance optimization
parent
e72d372d
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
16 additions
and
9 deletions
+16
-9
src/Convert/NestPI.hs
+16
-9
No files found.
src/Convert/NestPI.hs
View file @
370e5e9e
...
...
@@ -49,7 +49,7 @@ convertDescription pis (orig @ Part{}) =
else
Part
attrs
extern
kw
lifetime
name
ports
items'
where
Part
attrs
extern
kw
lifetime
name
ports
items
=
orig
items'
=
addItems
pis
Set
.
empty
items
items'
=
addItems
pis
Set
.
empty
(
map
addUsedPIs
items
)
convertDescription
_
other
=
other
-- attempt to fix simple declaration order issues
...
...
@@ -57,7 +57,7 @@ reorderDescription :: Description -> Description
reorderDescription
(
Part
attrs
extern
kw
lifetime
name
ports
items
)
=
Part
attrs
extern
kw
lifetime
name
ports
items'
where
items'
=
addItems
localPIs
Set
.
empty
items
items'
=
addItems
localPIs
Set
.
empty
(
map
addUsedPIs
items
)
localPIs
=
Map
.
fromList
$
mapMaybe
toPIElem
items
toPIElem
::
ModuleItem
->
Maybe
(
Identifier
,
PackageItem
)
toPIElem
(
MIPackageItem
item
)
=
Just
(
piName
item
,
item
)
...
...
@@ -65,8 +65,8 @@ reorderDescription (Part attrs extern kw lifetime name ports items) =
reorderDescription
other
=
other
-- iteratively inserts missing package items exactly where they are needed
addItems
::
PIs
->
Idents
->
[
ModuleItem
]
->
[
ModuleItem
]
addItems
pis
existingPIs
(
item
:
items
)
=
addItems
::
PIs
->
Idents
->
[
(
ModuleItem
,
Idents
)
]
->
[
ModuleItem
]
addItems
pis
existingPIs
(
(
item
,
usedPIs
)
:
items
)
=
if
not
$
Set
.
disjoint
existingPIs
thisPI
then
-- this item was re-imported earlier in the module
addItems
pis
existingPIs
items
...
...
@@ -75,18 +75,25 @@ addItems pis existingPIs (item : items) =
item
:
addItems
pis
(
Set
.
union
existingPIs
thisPI
)
items
else
-- this item has at least one un-met dependency
addItems
pis
existingPIs
(
head
itemsToAdd
:
item
:
items
)
addItems
pis
existingPIs
(
addUsedPIs
chosen
:
(
item
,
usedPIs
)
:
items
)
where
thisPI
=
execWriter
$
collectPIsM
item
usedPIs
=
execWriter
$
traverseNestedModuleItemsM
(
traverseIdentsM
writeIdent
)
item
writeIdent
::
Identifier
->
Writer
Idents
Identifier
writeIdent
x
=
tell
(
Set
.
singleton
x
)
>>
return
x
neededPIs
=
Set
.
difference
(
Set
.
difference
usedPIs
existingPIs
)
thisPI
itemsToAdd
=
map
MIPackageItem
$
Map
.
elems
$
Map
.
restrictKeys
pis
neededPIs
chosen
=
head
itemsToAdd
addItems
_
_
[]
=
[]
-- augment a module item with the set of identifiers it uses
addUsedPIs
::
ModuleItem
->
(
ModuleItem
,
Idents
)
addUsedPIs
item
=
(
item
,
usedPIs
)
where
usedPIs
=
execWriter
$
traverseNestedModuleItemsM
(
traverseIdentsM
writeIdent
)
item
writeIdent
::
Identifier
->
Writer
Idents
Identifier
writeIdent
x
=
tell
(
Set
.
singleton
x
)
>>
return
x
-- writes down the names of package items
collectPIsM
::
ModuleItem
->
Writer
Idents
()
collectPIsM
(
MIPackageItem
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