Skip to content

Commit

Permalink
use @builtin.StringBuilder in json package
Browse files Browse the repository at this point in the history
  • Loading branch information
hackwaly committed Sep 25, 2024
1 parent 56ee2ec commit 1fc0514
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 52 deletions.
37 changes: 0 additions & 37 deletions json/internal_types.mbt
Original file line number Diff line number Diff line change
Expand Up @@ -61,40 +61,3 @@ priv enum Token {
Comma
Colon
} derive(Eq, Show)

priv struct StringBuilder {
mut buffer : String
}

fn StringBuilder::make() -> StringBuilder {
{ buffer: "" }
}

fn add_string(self : StringBuilder, s : String) -> Unit {
self.buffer = self.buffer + s
}

fn add_substring(
self : StringBuilder,
s : String,
start : Int,
end : Int
) -> Unit {
self.buffer = self.buffer + s.substring(~start, ~end)
}

fn add_char(self : StringBuilder, c : Char) -> Unit {
self.buffer = self.buffer + c.to_string()
}

fn to_string(self : StringBuilder) -> String {
self.buffer
}

test "add_string method coverage" {
let sb = StringBuilder::make()
add_string(sb, "Hello")
assert_eq!(sb.buffer, "Hello")
add_string(sb, " World")
assert_eq!(sb.buffer, "Hello World")
}
8 changes: 4 additions & 4 deletions json/json.mbt
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ pub fn stringify(
if members.is_empty() {
return "{}"
}
let buf = Buffer::new(size_hint=0)
let buf = StringBuilder::new(size_hint=0)
buf.write_char('{')
buf.write_string(indent_str(level + 1, indent))
let mut first = true
Expand Down Expand Up @@ -125,7 +125,7 @@ pub fn stringify(
if arr.is_empty() {
return "[]"
}
let buf = Buffer::new(size_hint=0)
let buf = StringBuilder::new(size_hint=0)
buf.write_char('[')
buf.write_string(indent_str(level + 1, indent))
for i, v in arr {
Expand All @@ -139,7 +139,7 @@ pub fn stringify(
buf..write_char(']').to_string()
}
String(s) => {
let buf = Buffer::new(size_hint=0)
let buf = StringBuilder::new(size_hint=0)
buf
..write_char('\"')
..write_string(escape(s, ~escape_slash))
Expand All @@ -165,7 +165,7 @@ fn escape(str : String, ~escape_slash : Bool) -> String {
}
}

let buf = Buffer::new(size_hint=str.length())
let buf = StringBuilder::new(size_hint=str.length())
for c in str {
match c {
'"' | '\\' => buf.write_string("\\\{c}")
Expand Down
22 changes: 11 additions & 11 deletions json/lex_string.mbt
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,11 @@
// limitations under the License.

fn lex_string(ctx : ParseContext) -> String!ParseError {
let buf = StringBuilder::make()
let buf = StringBuilder::new()
let mut start = ctx.offset
fn flush(end : Int) {
if start > 0 && end > start {
buf.add_substring(ctx.input, start, end)
buf.write_sub_string(ctx.input, start, end - start)
}
}

Expand All @@ -31,17 +31,17 @@ fn lex_string(ctx : ParseContext) -> String!ParseError {
Some('\\') => {
flush(ctx.offset - 1)
match read_char(ctx) {
Some('b') => buf.add_char('\b')
Some('f') => buf.add_char('\x0C')
Some('n') => buf.add_char('\n')
Some('r') => buf.add_char('\r')
Some('t') => buf.add_char('\t')
Some('"') => buf.add_char('"')
Some('\\') => buf.add_char('\\')
Some('/') => buf.add_char('/')
Some('b') => buf.write_char('\b')
Some('f') => buf.write_char('\x0C')
Some('n') => buf.write_char('\n')
Some('r') => buf.write_char('\r')
Some('t') => buf.write_char('\t')
Some('"') => buf.write_char('"')
Some('\\') => buf.write_char('\\')
Some('/') => buf.write_char('/')
Some('u') => {
let c = lex_hex_digits!(ctx, 4)
buf.add_char(Char::from_int(c))
buf.write_char(Char::from_int(c))
}
Some(_) => invalid_char!(ctx, shift=-1)
None => raise InvalidEof
Expand Down

0 comments on commit 1fc0514

Please sign in to comment.