@@ -38,7 +38,7 @@ const TOMLDict = Dict{String, Any}
38
38
# Parser #
39
39
# #########
40
40
41
- mutable struct Parser
41
+ mutable struct Parser{Dates}
42
42
str:: String
43
43
# 1 character look ahead
44
44
current_char:: Char
@@ -84,14 +84,11 @@ mutable struct Parser
84
84
85
85
# Filled in in case we are parsing a file to improve error messages
86
86
filepath:: Union{String, Nothing}
87
-
88
- # Optionally populate with the Dates stdlib to change the type of Date types returned
89
- Dates:: Union{Module, Nothing}
90
87
end
91
88
92
- function Parser (str:: String ; filepath= nothing )
89
+ function Parser {Dates} (str:: String ; filepath= nothing ) where {Dates}
93
90
root = TOMLDict ()
94
- l = Parser (
91
+ l = Parser {Dates} (
95
92
str, # str
96
93
EOF_CHAR, # current_char
97
94
firstindex (str), # pos
@@ -106,12 +103,12 @@ function Parser(str::String; filepath=nothing)
106
103
IdSet {Any} (), # static_arrays
107
104
IdSet {TOMLDict} (), # defined_tables
108
105
root,
109
- filepath,
110
- nothing
106
+ filepath
111
107
)
112
108
startup (l)
113
109
return l
114
110
end
111
+
115
112
function startup (l:: Parser )
116
113
# Populate our one character look-ahead
117
114
c = eat_char (l)
@@ -122,8 +119,12 @@ function startup(l::Parser)
122
119
end
123
120
end
124
121
125
- Parser () = Parser (" " )
126
- Parser (io:: IO ) = Parser (read (io, String))
122
+ Parser {Dates} () where {Dates} = Parser {Dates} (" " )
123
+ Parser {Dates} (io:: IO ) where {Dates} = Parser {Dates} (read (io, String))
124
+
125
+ Parser () = Parser {nothing} ()
126
+ Parser (io:: IO ) = Parser {nothing} (io)
127
+ Parser (str:: String ; filepath= nothing ) = Parser {nothing} (str; filepath)
127
128
128
129
function reinit! (p:: Parser , str:: String ; filepath:: Union{Nothing, String} = nothing )
129
130
p. str = str
@@ -1021,8 +1022,7 @@ function parse_datetime(l)
1021
1022
return try_return_datetime (l, year, month, day, h, m, s, ms)
1022
1023
end
1023
1024
1024
- function try_return_datetime (p, year, month, day, h, m, s, ms)
1025
- Dates = p. Dates
1025
+ function try_return_datetime (p:: Parser{Dates} , year, month, day, h, m, s, ms) where Dates
1026
1026
if Dates != = nothing
1027
1027
try
1028
1028
return Dates. DateTime (year, month, day, h, m, s, ms)
@@ -1035,8 +1035,7 @@ function try_return_datetime(p, year, month, day, h, m, s, ms)
1035
1035
end
1036
1036
end
1037
1037
1038
- function try_return_date (p, year, month, day)
1039
- Dates = p. Dates
1038
+ function try_return_date (p:: Parser{Dates} , year, month, day) where Dates
1040
1039
if Dates != = nothing
1041
1040
try
1042
1041
return Dates. Date (year, month, day)
@@ -1058,8 +1057,7 @@ function parse_local_time(l::Parser)
1058
1057
return try_return_time (l, h, m, s, ms)
1059
1058
end
1060
1059
1061
- function try_return_time (p, h, m, s, ms)
1062
- Dates = p. Dates
1060
+ function try_return_time (p:: Parser{Dates} , h, m, s, ms) where Dates
1063
1061
if Dates != = nothing
1064
1062
try
1065
1063
return Dates. Time (h, m, s, ms)
0 commit comments