Skip to content

Commit 1f57f34

Browse files
authored
parser: consume finish handoff (#297)
Make Parser ~Copyable; move storage into TOMLDocument.
1 parent 38c385a commit 1f57f34

File tree

3 files changed

+42
-7
lines changed

3 files changed

+42
-7
lines changed
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
extension Parser {
2+
consuming func finish(source: String) -> TOMLDocument {
3+
var tables: [InternalTOMLTable] = []
4+
var arrays: [InternalTOMLArray] = []
5+
var keyTables: [KeyTablePair] = []
6+
var keyArrays: [KeyArrayPair] = []
7+
var keyValues: [KeyValuePair] = []
8+
9+
swap(&tables, &self.tables)
10+
swap(&arrays, &self.arrays)
11+
swap(&keyTables, &self.keyTables)
12+
swap(&keyArrays, &self.keyArrays)
13+
swap(&keyValues, &self.keyValues)
14+
15+
return TOMLDocument(
16+
source: source,
17+
tables: tables,
18+
arrays: arrays,
19+
keyTables: keyTables,
20+
keyArrays: keyArrays,
21+
keyValues: keyValues
22+
)
23+
}
24+
}

Sources/TOMLDecoder/Parsing/Parser.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
struct Parser {
1+
struct Parser: ~Copyable {
22
var token = Token.empty
33
var cursor = 0
44
var currentLineNumber = 1

Sources/TOMLDecoder/Parsing/TOMLDocument.swift

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,22 @@ struct TOMLDocument: Equatable, @unchecked Sendable {
99

1010
let source: String
1111

12+
init(
13+
source: String,
14+
tables: [InternalTOMLTable],
15+
arrays: [InternalTOMLArray],
16+
keyTables: [KeyTablePair],
17+
keyArrays: [KeyArrayPair],
18+
keyValues: [KeyValuePair]
19+
) {
20+
self.source = source
21+
self.tables = tables
22+
self.arrays = arrays
23+
self.keyTables = keyTables
24+
self.keyArrays = keyArrays
25+
self.keyValues = keyValues
26+
}
27+
1228
init(source: String, keyTransform: (@Sendable (String) -> String)?) throws(TOMLError) {
1329
var hasContinousStorage = false
1430
var parser = Parser(keyTransform: keyTransform)
@@ -31,12 +47,7 @@ struct TOMLDocument: Equatable, @unchecked Sendable {
3147
}
3248
}
3349

34-
self.source = source
35-
tables = parser.tables
36-
arrays = parser.arrays
37-
keyValues = parser.keyValues
38-
keyTables = parser.keyTables
39-
keyArrays = parser.keyArrays
50+
self = parser.finish(source: source)
4051
}
4152
}
4253

0 commit comments

Comments
 (0)