Skip to content

Commit 0bec4c8

Browse files
committed
fix: use StringView for @json.parse
1 parent 974c684 commit 0bec4c8

File tree

6 files changed

+16
-7
lines changed

6 files changed

+16
-7
lines changed

json/internal_types.mbt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,12 @@
1515
///|
1616
priv struct ParseContext {
1717
mut offset : Int
18-
input : String
18+
input : StringView
1919
end_offset : Int
2020
}
2121

2222
///|
23-
fn ParseContext::make(input : String) -> ParseContext {
23+
fn ParseContext::make(input : StringView) -> ParseContext {
2424
{ offset: 0, input, end_offset: input.length() }
2525
}
2626

json/lex_number.mbt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,12 @@ fn ParseContext::lex_number_end(
149149
start : Int,
150150
end : Int,
151151
) -> (Double, String?) {
152-
let s = ctx.input.unsafe_substring(start~, end~)
152+
let s = ctx.input
153+
.data()
154+
.unsafe_substring(
155+
start=ctx.input.start_offset() + start,
156+
end=ctx.input.start_offset() + end,
157+
)
153158
if !s.contains(".") && !s.contains("e") && !s.contains("E") {
154159
// If the string does not contain a decimal point or exponent, it is likely an integer
155160
// We can try to parse it as an integer first

json/lex_string.mbt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,11 @@ fn ParseContext::lex_string(ctx : ParseContext) -> String raise ParseError {
1818
let mut start = ctx.offset
1919
fn flush(end : Int) {
2020
if start > 0 && end > start {
21-
buf.write_substring(ctx.input, start, end - start)
21+
buf.write_substring(
22+
ctx.input.data(),
23+
ctx.input.start_offset() + start,
24+
end - start,
25+
)
2226
}
2327
}
2428

json/parse.mbt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ pub fn valid(input : String) -> Bool {
2323
}
2424

2525
///|
26-
pub fn parse(input : String) -> Json raise ParseError {
26+
pub fn parse(input : StringView) -> Json raise ParseError {
2727
let ctx = ParseContext::make(input)
2828
let val = ctx.parse_value()
2929
ctx.lex_skip_whitespace()

json/pkg.generated.mbti

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ fn[T : FromJson] from_json(Json, path? : JsonPath) -> T raise JsonDecodeError
77
#callsite(autofill(args_loc, loc))
88
fn inspect(&ToJson, content? : Json, loc~ : SourceLoc, args_loc~ : ArgsLoc) -> Unit raise InspectError
99

10-
fn parse(String) -> Json raise ParseError
10+
fn parse(StringView) -> Json raise ParseError
1111

1212
fn valid(String) -> Bool
1313

json/utils.mbt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
// limitations under the License.
1414

1515
///|
16-
fn offset_to_position(input : String, offset : Int) -> Position {
16+
fn offset_to_position(input : StringView, offset : Int) -> Position {
1717
let mut line = 1
1818
let mut column = 0
1919
for i in 0..<offset {

0 commit comments

Comments
 (0)