ARC Analysis in one pass v3 (#17068)
* Analyse last reads all at once * Integrate firstWrite analysis * Small cleanup * Use sets instead of seqs * Remove instrTargets * Reap the benefits * Implement error diagnostics * Operate on DFA index for lastRead analysis * Use mgetOrPut * Cache alias results This improves performance by a lot, since many CFG locations map to a single PNode * Improve performance * Improve performance * Cleanup * Fix #17025 * Grammar * Expand testcase
This commit is contained in:
parent
4f118721be
commit
aa3af9e053
8 changed files with 208 additions and 130 deletions
56
tests/arc/t17025.nim
Normal file
56
tests/arc/t17025.nim
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
discard """
|
||||
cmd: "nim c --gc:arc $file"
|
||||
output: '''
|
||||
{"Package": {"name": "hello"}, "Author": {"name": "name", "qq": "123456789", "email": "email"}}
|
||||
hello
|
||||
name
|
||||
123456789
|
||||
email
|
||||
hello
|
||||
name2
|
||||
987654321
|
||||
liame
|
||||
'''
|
||||
"""
|
||||
|
||||
import parsecfg, streams, tables
|
||||
|
||||
const cfg = """[Package]
|
||||
name=hello
|
||||
[Author]
|
||||
name=name
|
||||
qq=123456789
|
||||
email="email""""
|
||||
|
||||
proc main() =
|
||||
let stream = newStringStream(cfg)
|
||||
let dict = loadConfig(stream)
|
||||
var pname = dict.getSectionValue("Package","name")
|
||||
var name = dict.getSectionValue("Author","name")
|
||||
var qq = dict.getSectionValue("Author","qq")
|
||||
var email = dict.getSectionValue("Author","email")
|
||||
echo dict[]
|
||||
echo pname & "\n" & name & "\n" & qq & "\n" & email
|
||||
stream.close()
|
||||
|
||||
main()
|
||||
|
||||
proc getDict(): OrderedTableRef[string, OrderedTableRef[string, string]] =
|
||||
result = newOrderedTable[string, OrderedTableRef[string, string]]()
|
||||
result["Package"] = newOrderedTable[string, string]()
|
||||
result["Package"]["name"] = "hello"
|
||||
result["Author"] = newOrderedTable[string, string]()
|
||||
result["Author"]["name"] = "name2"
|
||||
result["Author"]["qq"] = "987654321"
|
||||
result["Author"]["email"] = "liame"
|
||||
|
||||
proc main2() =
|
||||
let dict = getDict()
|
||||
var pname = dict.getSectionValue("Package","name")
|
||||
var name = dict.getSectionValue("Author","name")
|
||||
var qq = dict.getSectionValue("Author","qq")
|
||||
var email = dict.getSectionValue("Author","email")
|
||||
echo pname & "\n" & name & "\n" & qq & "\n" & email
|
||||
|
||||
main2()
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue