shithub: mc

Download patch

ref: 1eca6494d70ec51a950891697093525be826cef5
parent: 99517584674b6040c9c72393d160b9b60d6f3321
author: Ori Bernstein <ori@eigenstate.org>
date: Fri Jun 12 08:30:21 EDT 2015

Move movement to f2fmt and friends.

--- a/mbld/build.myr
+++ b/mbld/build.myr
@@ -52,7 +52,7 @@
 	| `std.Some (`Gen gt):	runin(b, gt.cmd, gt.dir)
 	| `std.Some (`Cmd ct):	runin(b, ct.cmd, ct.dir)
 	| `std.Some (`Man mt):	/* nothing needed */
-	| `std.None:	std.fatal("invalid target %s\n", targ)
+	| `std.None:	std.f2fatal("invalid target {}\n", targ)
 	;;
 	-> true
 }
@@ -67,10 +67,10 @@
 
 	setdir(b, targ.dir)
 	addincludes(b, targ)
-	std.put("%s...\n", targ.name)
+	std.f2put("{}...\n", targ.name)
 	dg = myrdeps(b, targ, false, addsrc)
 	if !std.hthas(dg.deps, targ.name)
-		std.fatal("no input files for %s\n", targ.name)
+		std.f2fatal("no input files for {}\n", targ.name)
 	;;
 	if builddep(b, dg, targ.name, targ.incpath) || !freshlibs(targ, dg.libs)
 		src = std.htkeys(dg.sources)
@@ -88,11 +88,11 @@
 	setdir(b, targ.dir)
 	addincludes(b, targ)
 	lib = targ.name
-	std.put("lib%s.a...\n", lib)
-	archive = std.fmt("lib%s.a", lib)
+	std.f2put("lib{}.a...\n", lib)
+	archive = std.f2fmt("lib{}.a", lib)
 	dg = myrdeps(b, targ, false, false)
 	if !std.hthas(dg.deps, lib)
-		std.fatal("no target declared for %s\n", lib)
+		std.f2fatal("no target declared for {}\n", lib)
 	;;
 	u = builddep(b, dg, targ.name, targ.incpath)
 	l = builddep(b, dg, archive, targ.incpath)
@@ -155,7 +155,7 @@
 				;;
 			| `std.None:
 				if !std.fexists(d)
-					std.fatal("no input file %s\n", d)
+					std.f2fatal("no input file {}\n", d)
 				;;
 			;;
 			if !isfresh(d, out)
@@ -204,7 +204,7 @@
 		run(cmd)
 		std.slfree(o)
 	else
-		std.fatal("Unknown file type for %s\n", src)
+		std.f2fatal("Unknown file type for {}\n", src)
 	;;
 }
 
@@ -257,7 +257,7 @@
 	for c in config.Arcmd
 		cmd = std.slpush(cmd, std.sldup(c))
 	;;
-	cmd = std.slpush(cmd, std.fmt("lib%s.a", lib))
+	cmd = std.slpush(cmd, std.f2fmt("lib{}.a", lib))
 	for f in files
 		obj = srcswapsuffix(f, config.Objsuffix)
 		cmd = std.slpush(cmd, obj)
@@ -277,7 +277,7 @@
 		if std.hassuffix(f, ".myr")
 			cmd = std.slpush(cmd, srcswapsuffix(f, ".use"))
 		elif !std.hassuffix(f, ".s")
-			std.fatal("unknown file type for %s\n", f)
+			std.f2fatal("unknown file type for {}\n", f)
 		;;
 	;;
 	run(cmd)
@@ -293,7 +293,7 @@
 	/* -L incpath... */
 	if !config.Directlib
 		for inc in incs
-			cmd = std.slpush(cmd, std.fmt("-L%s", inc))
+			cmd = std.slpush(cmd, std.f2fmt("-L{}", inc))
 		;;
 	;;
 
@@ -311,7 +311,7 @@
 
 const visit = {cmd, head, g, lib, looped, marked, incs
 	if std.hthas(looped, lib)
-		std.fatal("cycle in library graph involving \"%s\"\n", lib)
+		std.f2fatal("cycle in library graph involving \"{}\"\n", lib)
 	elif std.hthas(marked, lib)
 		-> cmd
 	;;
@@ -327,11 +327,11 @@
 
 const putlib = {cmd, head, lib, incs
 	if !config.Directlib
-		-> std.slput(cmd, head, std.fmt("-l%s", lib))
+		-> std.slput(cmd, head, std.f2fmt("-l", lib))
 	else
 		match findlib(lib, incs)
 		| `std.None:
-			std.fatal("could not find library lib%s.a\n", lib)
+			std.f2fatal("could not find library lib{}.a\n", lib)
 		| `std.Some p:
 			-> std.slput(cmd, head, p)
 		;;
@@ -366,10 +366,10 @@
 			;;
 			std.slfree(lib)
 		| `std.None:
-			std.fput(1, "%s: could not find library lib%s.a\n", targ.name, l)
-			std.fput(1, "searched:\n")
+			std.f2fput(1, "{}: could not find library lib{}.a\n", targ.name, l)
+			std.f2fput(1, "searched:\n")
 			for inc in targ.incpath
-				std.fput(1, "\t%s\n", inc)
+				std.f2fput(1, "\t{}\n", inc)
 			;;
 			std.exit(1)
 		;;
@@ -401,7 +401,7 @@
 	*/
 	match std.fmtime(src)
 	| `std.Some mt:	srcmt = mt
-	| `std.None:	std.fatal("could not stat %s\n", src)
+	| `std.None:	std.f2fatal("could not stat {}\n", src)
 	;;
 	match std.fmtime(dst)
 	| `std.Some mt:	dstmt = mt
--- a/mbld/clean.myr
+++ b/mbld/clean.myr
@@ -24,7 +24,7 @@
 		| `Gen gt:
 			for f in gt.out
 				if !gt.durable && std.remove(f)
-					std.put("\tclean %s\n", f)
+					std.f2put("\tclean {}\n", f)
 				;;
 			;;
 		| `Cmd ct:	/* nothing to do */
@@ -52,7 +52,7 @@
 		| `Gen gt:
 			for f in gt.out
 				if !gt.durable && std.remove(f)
-					std.put("\tclean %s\n", f)
+					std.f2put("\tclean {}\n", f)
 				;;
 			;;
 		| `Cmd ct:
@@ -80,7 +80,7 @@
 	keys = std.htkeys(dg.deps)
 	for k in keys
 		if !std.htgetv(mchammer_files, k, false) && std.remove(k)
-			std.put("\tclean %s\n", k)
+			std.f2put("\tclean {}\n", k)
 		;;
 	;;
 }
--- a/mbld/deps.myr
+++ b/mbld/deps.myr
@@ -48,7 +48,7 @@
 	])
 	/* direct dependencies of binary */
 	if mt.islib
-		out = std.fmt("lib%s.a", mt.name)
+		out = std.f2fmt("lib{}.a", mt.name)
 		useout = std.sldup(mt.name)
 	else
 		out = std.sldup(mt.name)
@@ -106,13 +106,13 @@
 		->
 	;;
 	keys = std.htkeys(dg.deps)
-	std.put("digraph dg {\n")
+	std.f2put("digraph dg {{\n")
 	for k in keys
 		for v in std.htgetv(dg.deps, k, ["WTFUNKNOWN!"][:])
-			std.put("\t\"%s\" -> \"%s\";\n", k, v)
+			std.f2put("\t\"{}\" -> \"{}\";\n", k, v)
 		;;
 	;;
-	std.put("}\n")
+	std.f2put("}\n")
 }
 
 const srcdeps = {b, ds, g, path, obj, usefile
@@ -124,9 +124,9 @@
 
 	ds.depstk = std.slpush(ds.depstk, path)
 	if std.htgetv(g.seen, path, false)
-		std.fput(1, "dependency loop involving %s:\n", path)
+		std.f2fput(1, "dependency loop involving {}:\n", path)
 		for d in ds.depstk
-			std.fput(1, "\t%s\n", d)
+			std.fput(1, "\t{}\n", d)
 		;;
 		std.exit(1)
 	;;
@@ -165,7 +165,7 @@
 
 	if std.hthas(g.done, usefile)
 		if opt_debug
-			std.put("already loaded deps for %s\n", usefile)
+			std.f2put("already loaded deps for {}\n", usefile)
 		;;
 		->
 	;;
@@ -177,7 +177,7 @@
 		if ds.addsrc
 			std.htput(g.sources, src, true)
 		elif !std.hthas(g.input, usefile)
-			std.fatal("%s:%i: source file %s not listed in bldfile\n", f, line, src)
+			std.f2fatal("{}:{}: source file {} not listed in bldfile\n", f, line, src)
 		;;
 	;;
 	pushdep(g, src, usefile)
@@ -194,12 +194,12 @@
 	if !std.fexists(path)
 		match std.htget(b.gensrc, path)
 		| `std.Some gt:	run(gt.cmd)
-		| `std.None:	std.fatal("no input file %s\n", path)
+		| `std.None:	std.f2fatal("no input file {}\n", path)
 		;;
 	;;
 	match bio.open(path, bio.Rd)
 	| `std.Some fd:	f = fd
-	| `std.None:	std.fatal("could not open %s\n", path)
+	| `std.None:	std.f2fatal("could not open {}\n", path)
 	;;
 
 	lnum = 0
@@ -230,14 +230,14 @@
 	f = openlib(lib, incs)
 	match bio.getc(f)
 	| `std.Some 'U': /* nothing */
-	| `std.Some _:	std.fatal("library %s: corrupt or invalid usefile\n", lib)
-	| `std.None:	std.fatal("library %s: could not read usefile\n", lib)
+	| `std.Some _:	std.f2fatal("library {}: corrupt or invalid usefile\n", lib)
+	| `std.None:	std.f2fatal("library {}: could not read usefile\n", lib)
 	;;
 	match bio.getbe32(f)
 	| `std.Some 1:	/* nothing: version matches. */
-	| `std.Some 0:	std.fput(1, "library %s: warning: old usefile version\n", lib)
-	| `std.Some _:	std.fatal("library %s: usefile version unknown\n", lib)
-	| `std.None:	std.fatal("library %s: corrutpt or invalid usefile\n", lib)
+	| `std.Some 0:	std.f2fput(1, "library {}: warning: old usefile version\n", lib)
+	| `std.Some _:	std.f2fatal("library {}: usefile version unknown\n", lib)
+	| `std.None:	std.f2fatal("library {}: corrutpt or invalid usefile\n", lib)
 	;;
 	std.slfree(rdstr(f))
 	done = false
@@ -276,7 +276,7 @@
 	| `std.None:
 		/* nothing */
 	;;
-	std.fatal("could not find library %s.\n", lib)
+	std.f2fatal("could not find library {}.\n", lib)
 }
 
 const depname = {deps, ln, lnum
@@ -304,7 +304,7 @@
 	var sl
 
 	if opt_debug
-		std.put("%s <= %s\n", dst, src)
+		std.f2put("{} <= {}\n", dst, src)
 	;;
 	std.assert(dst.len < 200, "BUG!")
 	sl = std.htgetv(dg.deps, dst, [][:])
--- a/mbld/install.myr
+++ b/mbld/install.myr
@@ -34,7 +34,7 @@
 		| `Lib lt:
 			if lt.install
 				movefile(b, rm, lt.dir, lt.name, config.Libpath, 0o644)
-				libarchive = std.fmt("lib%s.a", lt.name)
+				libarchive = std.f2fmt("lib{}.a", lt.name)
 				movefile(b, rm, lt.dir, libarchive, config.Libpath, 0o644)
 				std.slfree(libarchive)
 			;;
@@ -60,18 +60,18 @@
 	setdir(b, dir)
 	path = std.pathjoin([opt_destdir, opt_instroot, prefix, file][:])
 	if rm
-		std.put("\trm %s\n", path)
+		std.f2put("\trm {}\n", path)
 		if !std.remove(path)
-			std.put("\t\tno such file %s\n", file)
+			std.f2put("\t\tno such file {}\n", file)
 		;;
 	else
-		std.put("\t%s => %s\n", file, path)
+		std.f2put("\t{} => {}\n", file, path)
 		std.remove(path)
 		match std.slurp(file)
-		| `std.Fail m:	std.fatal("Could not open %s for reading\n", file)
+		| `std.Fail m:	std.f2fatal("Could not open {} for reading\n", file)
 		| `std.Ok buf:
 			if !std.blat(path, buf, perm)
-				std.put("Could not write %s\n", file)
+				std.f2put("Could not write {}\n", file)
 			;;
 			std.slfree(buf)
 		;;
@@ -84,15 +84,15 @@
 
 	match std.strrfind(man, ".")
 	| `std.None:
-		std.fatal("manpage %s has no section\n", man)
+		std.f2fatal("manpage {} has no section\n", man)
 	| `std.Some s:
 		sect = s + 1
 		if s + 1 == man.len
-			std.fatal("manpage %s missing suffix\n", man)
+			std.f2fatal("manpage {} missing suffix\n", man)
 		;;
 	;;
 
-	manrel = std.fmt("%s%s", opt_manpath, man[sect:])
+	manrel = std.f2fmt("{}{}", opt_manpath, man[sect:])
 	movefile(b, rm, dir, man, manrel, 0o644)
 	std.slfree(manrel)
 }
--- a/mbld/main.myr
+++ b/mbld/main.myr
@@ -96,7 +96,7 @@
 		findproj(b, "bld.proj")
 		bld.load(b)
 		for t in b.all
-			std.put("%s\n", t)
+			std.f2put("{}\n", t)
 		;;
 	else
 		findproj(b, "bld.proj")
@@ -133,7 +133,7 @@
 
 const findproj = {b, bldfile
 	if !findbase(b, bldfile) || !std.chdir(b.basedir)
-		std.fatal("could not find %s\n", bldfile)
+		std.f2fatal("could not find {}\n", bldfile)
 	;;
 	bld.setdir(b, "")
 }
--- a/mbld/parse.myr
+++ b/mbld/parse.myr
@@ -59,7 +59,7 @@
 			loadall(b, subproj, subpath)
 			b.basedir = curbase
 		else
-			std.fatal("could not open %s or %s \n", subbld, subproj)
+			std.f2fatal("could not open {} or {} \n", subbld, subproj)
 		;;
 		std.slfree(subbld)
 		std.slfree(subproj)
@@ -91,7 +91,7 @@
 
 const visit = {all, b, targ, looped, marked
 	if std.hthas(looped, targ)
-		std.fatal("cycle in build depgraph involving %s\n", targ)
+		std.f2fatal("cycle in build depgraph involving {}\n", targ)
 	elif std.hthas(marked, targ)
 		-> all
 	;;
@@ -109,7 +109,7 @@
 	match targ
 	| `Bin t:	-> t.libdeps
 	| `Lib t:	-> t.libdeps
-	| _:	std.fatal("depending on non-library target")
+	| _:	std.f2fatal("depending on non-library target")
 	;;
 }
 
@@ -123,7 +123,7 @@
 	p.basedir = std.sldup(basedir)
 	match std.slurp(path)
 	| `std.Ok d:	p.data = d
-	| `std.Fail _:	std.fatal("could not open '%s'\n", path)
+	| `std.Fail _:	std.f2fatal("could not open '{}'\n", path)
 	;;
 	p.rest = p.data
 	-> p
@@ -145,7 +145,7 @@
 
 	ap = std.vastart(&args)
 	sl = std.bfmtv(buf[:], msg, ap)
-	std.fput(1, "%s:%i: %s", p.fname, p.line, sl)
+	std.f2fput(1, "{}:{}: {}", p.fname, p.line, sl)
 	std.exit(1)
 }
 
@@ -158,7 +158,7 @@
 	;;
 	skipspace(p)
 	if p.rest.len > 0
-		failparse(p, "junk in file near %s\n", p.rest[:std.min(p.rest.len, 10)])
+		failparse(p, "junk in file near {}\n", p.rest[:std.min(p.rest.len, 10)])
 		-> false
 	;;
 	-> true
@@ -173,7 +173,7 @@
 	| `std.Some "cmd":	cmdtarget(b, p, "cmd", true)
 	| `std.Some "man":	mantarget(b, p)
 	| `std.Some "sub":	subtarget(b, p)
-	| `std.Some targtype:	failparse(p, "unknown targtype type %s\n", targtype)
+	| `std.Some targtype:	failparse(p, "unknown targtype type {}\n", targtype)
 	| `std.None:	-> false
 	;;
 	-> true
@@ -230,10 +230,10 @@
 	var gt
 
 	match wordlist(p)
-	| `std.None:	failparse(p, "%s target missing output files\n", cmd)
+	| `std.None:	failparse(p, "{} target missing output files\n", cmd)
 	| `std.Some out:
 		if iscmd && out.len != 1
-			failparse(p, "%s target takes one name\n", cmd)
+			failparse(p, "{} target takes one name\n", cmd)
 		;;
 		outlist = out
 	;;
@@ -242,7 +242,7 @@
 	if !iscmd && matchc(p, '{')
 		match attrlist(p)
 		| `std.Some al:	attrs = al
-		| `std.None:	failparse(p, "invalid attr list for %s\n", outlist[0])
+		| `std.None:	failparse(p, "invalid attr list for {}\n", outlist[0])
 		;;
 	else
 		attrs = [][:]
@@ -250,17 +250,17 @@
 
 	skipspace(p)
 	if !matchc(p, '=')
-		failparse(p, "expected '=' after '%s %s'\n", cmdlist, outlist[outlist.len-1])
+		failparse(p, "expected '=' after '{} {}'\n", cmdlist, outlist[outlist.len-1])
 	;;
 
 	match wordlist(p)
-	| `std.None:	failparse(p, "%s target missing command\n", cmd)
+	| `std.None:	failparse(p, "{} target missing command\n", cmd)
 	| `std.Some cl:
 		cmdlist = cl
 	;;
 
 	if !matchc(p, ';') || !matchc(p, ';')
-		failparse(p, "expected ';;' terminating genfile command, got %c\n", peekc(p))
+		failparse(p, "expected ';;' terminating genfile command, got {}\n", peekc(p))
 	;;
 
 	durable = false
@@ -271,9 +271,9 @@
 		| ("dep", depname):	deplist = std.slpush(deplist, depname)
 		| ("sys", tags):	systags = std.slpush(systags, tags)
 		| (attr, ""):
-			failparse(p, "attribute %s not valid on %s targets\n", attr, cmd)
+			failparse(p, "attribute {} not valid on {} targets\n", attr, cmd)
 		| (attr, val):
-			failparse(p, "attribute %s=%s not valid on %s targets\n", attr, val, cmd)
+			failparse(p, "attribute {}={} not valid on {} targets\n", attr, val, cmd)
 		;;
 	;;
 
@@ -306,7 +306,7 @@
 
 	match word(p)
 	| `std.Some n:	name = n
-	| `std.None:	failparse(p, "expected target name after '%s'\n", targ)
+	| `std.None:	failparse(p, "expected target name after '{}'\n", targ)
 	;;
 
 	skipspace(p)
@@ -313,7 +313,7 @@
 	if matchc(p, '{')
 		match attrlist(p)
 		| `std.Some al:	attrs = al
-		| `std.None:	failparse(p, "invalid attr list for %s %s\n", targ, name)
+		| `std.None:	failparse(p, "invalid attr list for {} {}\n", targ, name)
 		;;
 	else
 		attrs = [][:]
@@ -321,7 +321,7 @@
 
 	skipspace(p)
 	if !matchc(p, '=')
-		failparse(p, "expected '=' after '%s %s'\n", targ, name)
+		failparse(p, "expected '=' after '{} {}'\n", targ, name)
 	;;
 
 	match inputlist(p)
@@ -333,12 +333,12 @@
 		;;
 		inputs = fselfin(fsel)
 		std.slfree(wl)
-	| `std.None: failparse(p, "expected list of file names after '%s %s'\n", targ, name)
+	| `std.None: failparse(p, "expected list of file names after '{} {}'\n", targ, name)
 	;;
 
 	skipspace(p)
 	if !matchc(p, ';') || !matchc(p, ';')
-		failparse(p, "expected ';;' terminating input list, got %c\n", peekc(p))
+		failparse(p, "expected ';;' terminating input list, got {}\n", peekc(p))
 	;;
 
 	inst = true
@@ -353,7 +353,7 @@
 		| ("noinst", ""):	inst = false
 		| ("sys", tags):	systags = std.slpush(systags, tags)
 		| (invalid, _):
-			std.fatal("%s: got invalid attr '%s'\n", targ, invalid)
+			std.f2fatal("{}: got invalid attr '{}'\n", targ, invalid)
 		;;
 	;;
 	for inc in bld.opt_incpaths
@@ -382,11 +382,11 @@
 	inputs = [][:]
 	skipspace(p)
 	if !matchc(p, '=')
-		failparse(p, "expected '=' after '%s' target\n", targ)
+		failparse(p, "expected '=' after '{}' target\n", targ)
 	;;
 
 	match wordlist(p)
-	| `std.None:	failparse(p, "expected list of file names after '%s' target\n", targ)
+	| `std.None:	failparse(p, "expected list of file names after '{}' target\n", targ)
 	| `std.Some wl:	inputs = wl
 	;;
 	skipspace(p)
@@ -430,7 +430,7 @@
 		;;
 	;;
 	if !matchc(p, '}')
-		failparse(p, "expected '}' at end of attr list, got '%c'\n", peekc(p))
+		failparse(p, "expected '}' at end of attr list, got '{}'\n", peekc(p))
 	;;
 	if al.len == 0
 		-> `std.None
@@ -596,9 +596,9 @@
 const addtarg = {p, b, name, targ
 	var tn
 
-	tn = std.fmt("%s:%s", p.fdir, name)
+	tn = std.f2fmt("{}:{}", p.fdir, name)
 	if std.hthas(b.targs, tn)
-		failparse(p, "duplicate target %s\n", tn)
+		failparse(p, "duplicate target {}\n", tn)
 	;;
 	b.all = std.slpush(b.all, tn)
 	std.htput(b.targs, tn, targ)
@@ -611,10 +611,10 @@
 	| `std.None:
 		dir = std.sldup(".")
 		lib = std.sldup(libpath)
-		targ = std.fmt("%s:%s", p.fdir, lib)
+		targ = std.f2fmt("{}:{}", p.fdir, lib)
 	| `std.Some idx:
 		if idx == libpath.len
-			std.fatal("libdep %s missing library after ':'\n")
+			std.f2fatal("libdep {} missing library after ':'\n")
 		;;
 		/* absolute path */
 		if std.hasprefix(libpath, "@/") || std.hasprefix(libpath, "@:")
@@ -627,7 +627,7 @@
 			lib = std.sldup(libpath[idx+1:])
 			targ = std.pathcat(p.fdir, libpath)
 			if std.hasprefix(targ, "../")
-				std.fatal("library %s outside of project\n", libpath)
+				std.f2fatal("library {} outside of project\n", libpath)
 			;;
 		;;
 	;;
--- a/mbld/test.myr
+++ b/mbld/test.myr
@@ -55,9 +55,9 @@
 	;;
 	if hastest
 		if ok
-			std.put("TESTS PASSED\n")
+			std.f2put("TESTS PASSED\n")
 		else
-			std.put("TESTS FAILED\n")
+			std.f2put("TESTS FAILED\n")
 			std.exit(1)
 		;;
 	;;
@@ -121,11 +121,11 @@
 const runtest = {bin
 	var r, log
 
-	std.put("run %s:\t", bin)
+	std.f2put("run {}:\t", bin)
 	log = std.strcat(bin, ".log")
 	match std.spork([bin][:])
 	| `std.Fail m:
-		std.fatal("unable to run test: %s\n", m)
+		std.f2fatal("unable to run test: {}\n", m)
 	| `std.Ok (pid, infd, outfd):
 		match std.fslurp(outfd)
 		| `std.Ok "":	/* empty output; nothing to log */
@@ -137,8 +137,8 @@
 
 		r = false
 		match std.wait(pid)
-		| `std.Wfailure:	std.put("FAIL\n")
-		| `std.Wsignalled:	std.put("CRASH\n")
+		| `std.Wfailure:	std.f2put("FAIL\n")
+		| `std.Wsignalled:	std.f2put("CRASH\n")
 		| `std.Wsuccess:
 			std.put("PASS\n")
 			r = true
--- a/mbld/util.myr
+++ b/mbld/util.myr
@@ -20,17 +20,17 @@
 	printcmd(cmd)
 	pid = std.fork()
 	if pid == -1
-		std.fatal("could not fork command\n")
+		std.f2fatal("could not fork command\n")
 	elif pid == 0
 		if std.execvp(cmd[0], cmd) < 0
-			std.fatal("failed to exec %s\n", cmd[0])
+			std.f2fatal("failed to exec {}\n", cmd[0])
 		;;
 	else
 		match std.wait(pid)
 		| `std.Wsuccess:	/* nothing */
-		| `std.Wfailure:	std.fatal("FAIL: \"%s\"\n", std.strjoin(cmd, " "))
-		| `std.Wsignalled:	std.fatal("CRASH: \"%s\"\n", std.strjoin(cmd, " "))
-		| `std.Waiterror:	std.fatal("WAT: \"%s\"\n", std.strjoin(cmd, " "))
+		| `std.Wfailure:	std.f2fatal("FAIL: \"{}\"\n", std.strjoin(cmd, " "))
+		| `std.Wsignalled:	std.f2fatal("CRASH: \"{}\"\n", std.strjoin(cmd, " "))
+		| `std.Waiterror:	std.f2fatal("WAT: \"{}\"\n", std.strjoin(cmd, " "))
 		;;
 	;;
 }
@@ -37,13 +37,13 @@
 
 const printcmd = {lst
 	if lst.len > 0
-		std.put("\t")
-		std.put("%s\t", lst[0])
+		std.f2put("\t")
+		std.f2put("{}\t", lst[0])
 		for l in lst[1:]
-			std.put("%s ", l)
+			std.f2put("{} ", l)
 		;;
 	;;
-	std.put("\n")
+	std.f2put("\n")
 }
 
 const srcsplit = {src
@@ -73,7 +73,7 @@
 	if std.hassuffix(f, suff)
 		f = f[:f.len - suff.len]
 	;;
-	-> std.fmt("%s%s", f, newsuff)
+	-> std.f2fmt("{}{}", f, newsuff)
 }
 
 const srcswapsuffix = {src, new
@@ -85,7 +85,7 @@
 	elif std.sleq(suff, ".s")
 		-> std.strcat(base, new)
 	else
-		std.fatal("unrecognized source %s\n", src)
+		std.f2fatal("unrecognized source {}\n", src)
 	;;
 }
 
@@ -98,7 +98,7 @@
 
 const gettarg = {tab, n
 	match std.htget(tab, n)
-	| `std.None:	std.fatal("internal: nonexistent %s\n", n)
+	| `std.None:	std.f2fatal("internal: nonexistent {}\n", n)
 	| `std.Some t:	-> t
 	;;
 }
@@ -109,12 +109,12 @@
 	if !std.sleq(b.curdir, dir)
 		p = std.pathcat(b.basedir, dir)
 		if b.curdir.len != 0
-			std.put("Leaving directory '%s'\n", b.curdir)
+			std.f2put("Leaving directory '{}'\n", b.curdir)
 		;;
 
-		std.put("Entering directory '%s'\n", dir)
+		std.f2put("Entering directory '{}'\n", dir)
 		if !std.chdir(p)
-			std.fatal("could not cd into %s\n", p)
+			std.f2fatal("could not cd into {}\n", p)
 		;;
 		b.curdir = dir
 		std.slfree(p)