perf: Replaced fmt.aprintf/fmt.tprintf calls with fmt.sbprintf.

This commit is contained in:
Spencer Brower
2026-08-04 15:35:30 -04:00
parent 695548bada
commit 380c324623
3 changed files with 32 additions and 39 deletions
+19 -26
View File
@@ -7,10 +7,9 @@ import "core:time"
generate_rss :: proc(site: ^Site) -> string { generate_rss :: proc(site: ^Site) -> string {
sb := strings.builder_make() sb := strings.builder_make()
strings.write_string( fmt.sbprintf(
&sb, &sb,
fmt.aprintf( `<?xml version="1.0" encoding="utf-8" standalone="yes"?>
`<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"> <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel> <channel>
<title>%s</title> <title>%s</title>
@@ -18,11 +17,10 @@ generate_rss :: proc(site: ^Site) -> string {
<description>%s</description> <description>%s</description>
<language>en-us</language> <language>en-us</language>
<atom:link href="%s/index.xml" rel="self" type="application/rss+xml"/>`, <atom:link href="%s/index.xml" rel="self" type="application/rss+xml"/>`,
xml_escape(site.title), xml_escape(site.title),
site.base_url, site.base_url,
xml_escape(site.description), xml_escape(site.description),
site.base_url, site.base_url,
),
) )
for page in site.pages { for page in site.pages {
@@ -35,10 +33,9 @@ generate_rss :: proc(site: ^Site) -> string {
pub_date = format_rfc822(page.date) pub_date = format_rfc822(page.date)
} }
strings.write_string( fmt.sbprintf(
&sb, &sb,
fmt.aprintf( `<item>
`<item>
<title>%s</title> <title>%s</title>
<link>%s</link> <link>%s</link>
<pubDate>%s</pubDate> <pubDate>%s</pubDate>
@@ -46,12 +43,11 @@ generate_rss :: proc(site: ^Site) -> string {
<description>%s</description> <description>%s</description>
</item> </item>
`, `,
xml_escape(page.title), xml_escape(page.title),
page.url, page.url,
pub_date, pub_date,
page.url, page.url,
xml_escape(page.content), xml_escape(page.content),
),
) )
} }
@@ -70,11 +66,11 @@ generate_sitemap :: proc(site: ^Site) -> string {
) )
for page in site.pages { for page in site.pages {
lastmod := "" fmt.sbprintf(&sb, "<url><loc>%s</loc>", page.url)
if page.date != "" { if page.date != "" {
lastmod = fmt.aprintf("<lastmod>%s</lastmod>", page.date) fmt.sbprintf(&sb, "<lastmod>%s</lastmod>", page.date)
} }
strings.write_string(&sb, fmt.aprintf("<url><loc>%s</loc>%s</url>\n", page.url, lastmod)) fmt.sbprintf(&sb, "</url>\n")
} }
// Section index pages (for sections without an index in content) // Section index pages (for sections without an index in content)
@@ -103,14 +99,11 @@ generate_sitemap :: proc(site: ^Site) -> string {
section_lastmod = page.date section_lastmod = page.date
} }
} }
lm := "" fmt.sbprintf(&sb, "<url><loc>%s/%s/</loc>", site.base_url, section)
if section_lastmod != "" { if section_lastmod != "" {
lm = fmt.aprintf("<lastmod>%s</lastmod>", section_lastmod) fmt.sbprintf(&sb, "<lastmod>%s</lastmod>", section_lastmod)
} }
strings.write_string( fmt.sbprintf(&sb, "</url>\n")
&sb,
fmt.aprintf("<url><loc>%s/%s/</loc>%s</url>\n", site.base_url, section, lm),
)
} }
strings.write_string(&sb, "</urlset>") strings.write_string(&sb, "</urlset>")
+1 -1
View File
@@ -227,7 +227,7 @@ format_error :: proc(
} }
strings.write_string(&sb, "--> ") strings.write_string(&sb, "--> ")
strings.write_string(&sb, reset) strings.write_string(&sb, reset)
strings.write_string(&sb, fmt.tprintf("%s:%d:%d\n", path, line, col)) fmt.sbprintf(&sb, "%s:%d:%d\n", path, line, col)
// Top gutter line. // Top gutter line.
write_gutter(&sb, width, faint, reset) write_gutter(&sb, width, faint, reset)
+12 -12
View File
@@ -129,12 +129,12 @@ match_token :: proc(b: ^strings.Builder, dt: Date_Components, s: string) -> int
if strings.has_prefix( if strings.has_prefix(
s, s,
"January", "January",
) {strings.write_string(b, fmt.tprintf("%s", time.Month(dt.month))); return 7} ) {fmt.sbprintf(b, "%s", time.Month(dt.month)); return 7}
if strings.has_prefix(s, "Monday") {emit_weekday(b, dt, full = true); return 6} if strings.has_prefix(s, "Monday") {emit_weekday(b, dt, full = true); return 6}
if strings.has_prefix( if strings.has_prefix(
s, s,
"2006", "2006",
) {strings.write_string(b, fmt.tprintf("%04d", dt.year)); return 4} ) {fmt.sbprintf(b, "%04d", dt.year); return 4}
if strings.has_prefix(s, "MST") { if strings.has_prefix(s, "MST") {
abbr := dt.tz_abbr abbr := dt.tz_abbr
if len(abbr) == 0 do abbr = "UTC" if len(abbr) == 0 do abbr = "UTC"
@@ -146,37 +146,37 @@ match_token :: proc(b: ^strings.Builder, dt: Date_Components, s: string) -> int
if strings.has_prefix( if strings.has_prefix(
s, s,
"06", "06",
) {strings.write_string(b, fmt.tprintf("%02d", dt.year % 100)); return 2} ) {fmt.sbprintf(b, "%02d", dt.year % 100); return 2}
if strings.has_prefix(s, "02") {strings.write_string(b, fmt.tprintf("%02d", dt.day)); return 2} if strings.has_prefix(s, "02") {fmt.sbprintf(b, "%02d", dt.day); return 2}
if strings.has_prefix( if strings.has_prefix(
s, s,
"15", "15",
) {strings.write_string(b, fmt.tprintf("%02d", dt.hour)); return 2} ) {fmt.sbprintf(b, "%02d", dt.hour); return 2}
if strings.has_prefix( if strings.has_prefix(
s, s,
"04", "04",
) {strings.write_string(b, fmt.tprintf("%02d", dt.minute)); return 2} ) {fmt.sbprintf(b, "%02d", dt.minute); return 2}
if strings.has_prefix( if strings.has_prefix(
s, s,
"05", "05",
) {strings.write_string(b, fmt.tprintf("%02d", dt.second)); return 2} ) {fmt.sbprintf(b, "%02d", dt.second); return 2}
if strings.has_prefix( if strings.has_prefix(
s, s,
"01", "01",
) {strings.write_string(b, fmt.tprintf("%02d", dt.month)); return 2} ) {fmt.sbprintf(b, "%02d", dt.month); return 2}
if strings.has_prefix(s, "03") {emit_hour_12(b, dt, pad = true); return 2} if strings.has_prefix(s, "03") {emit_hour_12(b, dt, pad = true); return 2}
if strings.has_prefix(s, "PM") {emit_am_pm(b, dt); return 2} if strings.has_prefix(s, "PM") {emit_am_pm(b, dt); return 2}
if strings.has_prefix(s, "pm") {emit_am_pm_lower(b, dt); return 2} if strings.has_prefix(s, "pm") {emit_am_pm_lower(b, dt); return 2}
if len(s) >= 1 { if len(s) >= 1 {
switch s[0] { switch s[0] {
case '2': case '2':
strings.write_string(b, fmt.tprintf("%d", dt.day)); return 1 fmt.sbprintf(b, "%d", dt.day); return 1
case '1': case '1':
strings.write_string(b, fmt.tprintf("%d", dt.month)); return 1 fmt.sbprintf(b, "%d", dt.month); return 1
case '4': case '4':
strings.write_string(b, fmt.tprintf("%d", dt.minute)); return 1 fmt.sbprintf(b, "%d", dt.minute); return 1
case '5': case '5':
strings.write_string(b, fmt.tprintf("%d", dt.second)); return 1 fmt.sbprintf(b, "%d", dt.second); return 1
case '3': case '3':
emit_hour_12(b, dt, pad = false); return 1 emit_hour_12(b, dt, pad = false); return 1
case: case: