shithub: mc

Download patch

ref: 82eecd5a321aa3c619437a21997aa73c33c31d3c
parent: b5ddbc86346fddc60360a817ee62bc8ca938973e
author: S. Gilles <sgilles@math.umd.edu>
date: Mon Sep 9 03:53:57 EDT 2019

Split out intfmt to a separate file.

This prepares for intfmt being used within fltfmt for the exponent in
scientific notation.

--- a/lib/std/bld.sub
+++ b/lib/std/bld.sub
@@ -38,6 +38,7 @@
 	hasprefix.myr
 	hassuffix.myr
 	htab.myr
+	intfmt.myr
 	intparse.myr
 	introspect.myr
 	ipparse.myr
--- a/lib/std/fmt.myr
+++ b/lib/std/fmt.myr
@@ -7,6 +7,7 @@
 use "hashfuncs"
 use "hasprefix"
 use "htab"
+use "intfmt"
 use "intparse"
 use "introspect"
 use "memops"
@@ -477,12 +478,6 @@
 	-> fp
 }
 
-type intparams = struct
-	base	: size
-	padto	: size
-	padfill	: char
-;;
-
 const intparams = {params
 	var ip : intparams
 
@@ -570,60 +565,6 @@
 
 const isprint = {b
 	-> b >= (' ' : byte) && b < ('~' : byte)
-}
-
-const digitchars = "0123456789abcdef"
-const intfmt = {sb, opts, signed, bits : uint64, nbits
-	var isneg
-	var sval, val
-	var b : byte[64]
-	var i, j, npad
-	var base
-
-	base = (opts.base : uint64)
-	if signed && bits >= 1 << (nbits - 1)
-		sval = -(bits : int64)
-		val = (sval : uint64)
-		isneg = true
-
-		/* if its negative after inverting, we have int64 min */
-		if sval < 0
-			std.sbputs(sb, "-9223372036854775808")
-			-> void
-		;;
-	else
-		val = (bits : uint64)
-		val &= ~0 >> nbits
-		isneg = false
-	;;
-
-	i = 0
-	if val == 0
-		b[0] = ('0' : byte)
-		i++
-	;;
-	while val != 0
-		b[i] = digitchars[val % base]
-		val /= base
-		i++
-	;;
-
-	npad = clamp(opts.padto - i, 0, opts.padto)
-	if isneg
-		npad--
-	;;
-	if opts.padfill == '0' && isneg
-		sbputb(sb, ('-' : byte))
-	;;
-	for j = 0; j < npad; j++
-		sbputc(sb, opts.padfill)
-	;;
-	if opts.padfill != '0' && isneg
-		sbputb(sb, ('-' : byte))
-	;;
-	for j = i; j != 0; j--
-		sbputb(sb, b[j - 1])
-	;;
 }
 
 /* would use std.get(), but that's a dependency loop */
--- /dev/null
+++ b/lib/std/intfmt.myr
@@ -1,0 +1,79 @@
+use "die"
+use "extremum"
+use "intparse"
+use "option"
+use "strbuf"
+use "striter"
+use "types"
+
+pkg std =
+	pkglocal type intparams = struct
+		base	: size
+		padto	: size
+		padfill	: char
+	;;
+
+	pkglocal const intfmt	: (sb : strbuf#, opts : intparams, signed : bool, bits : uint64, nbits : uint64 -> void)
+;;
+
+const digitchars = "0123456789abcdef"
+const intfmt = {sb : strbuf#, opts : intparams, signed : bool, bits : uint64, nbits : uint64
+	var isneg
+	var sval, val
+	var b : byte[64]
+	var i, j, npad
+	var base
+
+	base = (opts.base : uint64)
+	if signed && bits >= 1 << (nbits - 1)
+		sval = -(bits : int64)
+		val = (sval : uint64)
+		isneg = true
+
+		/* if its negative after inverting, we have int64 min */
+		if sval < 0
+			std.sbputs(sb, "-9223372036854775808")
+			-> void
+		;;
+	else
+		val = (bits : uint64)
+		val &= ~0 >> nbits
+		isneg = false
+	;;
+
+	i = 0
+	if val == 0
+		b[0] = ('0' : byte)
+		i++
+	;;
+	while val != 0
+		b[i] = digitchars[val % base]
+		val /= base
+		i++
+	;;
+
+	npad = clamp(opts.padto - i, 0, opts.padto)
+	if isneg
+		npad--
+	;;
+	if opts.padfill == '0' && isneg
+		sbputb(sb, ('-' : byte))
+	;;
+	for j = 0; j < npad; j++
+		sbputc(sb, opts.padfill)
+	;;
+	if opts.padfill != '0' && isneg
+		sbputb(sb, ('-' : byte))
+	;;
+	for j = i; j != 0; j--
+		sbputb(sb, b[j - 1])
+	;;
+}
+
+/* would use std.get(), but that's a dependency loop */
+const getint = {s, msg
+	match std.intparse(s)
+	| `Some w:	-> w;
+	| `None:	die(msg)
+	;;
+}
--- a/mk/bootstrap/bootstrap+Darwin-x86_64.sh
+++ b/mk/bootstrap/bootstrap+Darwin-x86_64.sh
@@ -90,6 +90,7 @@
 	$pwd/6/6m -O obj -I obj/lib/sys lib/std/intparse.myr
 	$pwd/6/6m -O obj -I obj/lib/sys lib/std/strsplit.myr
 	$pwd/6/6m -O obj -I obj/lib/sys lib/std/strbuf.myr
+	$pwd/6/6m -O obj -I obj/lib/sys lib/std/intfmt.myr
 	$pwd/6/6m -O obj -I obj/lib/sys lib/std/sldup.myr
 	$pwd/6/6m -O obj -I obj/lib/sys lib/std/bigint.myr
 	$pwd/6/6m -O obj -I obj/lib/sys lib/std/fltparse.myr
--- a/mk/bootstrap/bootstrap+FreeBSD-amd64.sh
+++ b/mk/bootstrap/bootstrap+FreeBSD-amd64.sh
@@ -90,6 +90,7 @@
 	$pwd/6/6m -O obj -I obj/lib/sys lib/std/intparse.myr
 	$pwd/6/6m -O obj -I obj/lib/sys lib/std/strsplit.myr
 	$pwd/6/6m -O obj -I obj/lib/sys lib/std/strbuf.myr
+	$pwd/6/6m -O obj -I obj/lib/sys lib/std/intfmt.myr
 	$pwd/6/6m -O obj -I obj/lib/sys lib/std/sldup.myr
 	$pwd/6/6m -O obj -I obj/lib/sys lib/std/bigint.myr
 	$pwd/6/6m -O obj -I obj/lib/sys lib/std/fltparse.myr
--- a/mk/bootstrap/bootstrap+Linux-x86_64.sh
+++ b/mk/bootstrap/bootstrap+Linux-x86_64.sh
@@ -90,6 +90,7 @@
 	$pwd/6/6m -O obj -I obj/lib/sys lib/std/intparse.myr
 	$pwd/6/6m -O obj -I obj/lib/sys lib/std/strsplit.myr
 	$pwd/6/6m -O obj -I obj/lib/sys lib/std/strbuf.myr
+	$pwd/6/6m -O obj -I obj/lib/sys lib/std/intfmt.myr
 	$pwd/6/6m -O obj -I obj/lib/sys lib/std/sldup.myr
 	$pwd/6/6m -O obj -I obj/lib/sys lib/std/bigint.myr
 	$pwd/6/6m -O obj -I obj/lib/sys lib/std/fltparse.myr
@@ -127,8 +128,8 @@
 	$pwd/6/6m -O obj -I obj/lib/sys lib/std/dial+posixy.myr
 	$pwd/6/6m -O obj -I obj/lib/sys lib/std/listen+posixy.myr
 	$pwd/6/6m -O obj -I obj/lib/sys lib/std/try.myr
-	ar -rcs obj/lib/std/libstd.a obj/lib/std/resolve.o obj/lib/std/result.o obj/lib/std/try.o obj/lib/std/ipparse.o obj/lib/std/alloc.o obj/lib/std/sleq.o obj/lib/std/putint.o obj/lib/std/sljoin.o obj/lib/std/slpop.o obj/lib/std/syswrap.o obj/lib/std/getint.o obj/lib/std/strsplit.o obj/lib/std/slfill.o obj/lib/std/writeall.o obj/lib/std/fltfmt.o obj/lib/std/hasprefix.o obj/lib/std/swap.o obj/lib/std/fmt.o obj/lib/std/netaddr.o obj/lib/std/varargs.o obj/lib/std/diriter.o obj/lib/std/getcwd.o obj/lib/std/blat.o obj/lib/std/optparse.o obj/lib/std/pathjoin.o obj/lib/std/readall.o obj/lib/std/strjoin.o obj/lib/std/threadhooks.o obj/lib/std/sjlj.o obj/lib/std/extremum.o obj/lib/std/endian.o obj/lib/std/rand.o obj/lib/std/sldup.o obj/lib/std/sleep.o obj/lib/std/wait.o obj/lib/std/introspect.o obj/lib/std/fltparse.o obj/lib/std/fndup.o obj/lib/std/strbuf.o obj/lib/std/strreplace.o obj/lib/std/assert.o obj/lib/std/spork.o obj/lib/std/slpush.o obj/lib/std/strstrip.o obj/lib/std/htab.o obj/lib/std/hashfuncs.o obj/lib/std/slput.o obj/lib/std/sjlj-impl.o obj/lib/std/fltbits.o obj/lib/std/striter.o obj/lib/std/types.o obj/lib/std/cstrconv.o obj/lib/std/units.o obj/lib/std/backtrace.o obj/lib/std/syswrap-ss.o obj/lib/std/die.o obj/lib/std/mk.o obj/lib/std/hassuffix.o obj/lib/std/memops-impl.o obj/lib/std/pledge.o obj/lib/std/utf.o obj/lib/std/slurp.o obj/lib/std/dialparse.o obj/lib/std/bytealloc.o obj/lib/std/mktemp.o obj/lib/std/consts.o obj/lib/std/chomp.o obj/lib/std/dir.o obj/lib/std/search.o obj/lib/std/memops.o obj/lib/std/fmtfuncs.o obj/lib/std/strfind.o obj/lib/std/env.o obj/lib/std/dirname.o obj/lib/std/clear.o obj/lib/std/listen.o obj/lib/std/sort.o obj/lib/std/cmp.o obj/lib/std/now.o obj/lib/std/intparse.o obj/lib/std/traits.o obj/lib/std/mkpath.o obj/lib/std/option.o obj/lib/std/dial.o obj/lib/std/errno.o obj/lib/std/chartype.o obj/lib/std/bigint.o obj/lib/std/bitset.o obj/lib/std/getbp.o obj/lib/std/slcp.o obj/lib/std/execvp.o
-	$pwd/muse/muse -o obj/lib/std/libstd.use -p std obj/lib/std/resolve.use obj/lib/std/result.use obj/lib/std/try.use obj/lib/std/ipparse.use obj/lib/std/alloc.use obj/lib/std/sleq.use obj/lib/std/putint.use obj/lib/std/sljoin.use obj/lib/std/slpop.use obj/lib/std/syswrap.use obj/lib/std/getint.use obj/lib/std/strsplit.use obj/lib/std/slfill.use obj/lib/std/writeall.use obj/lib/std/fltfmt.use obj/lib/std/hasprefix.use obj/lib/std/swap.use obj/lib/std/fmt.use obj/lib/std/netaddr.use obj/lib/std/varargs.use obj/lib/std/diriter.use obj/lib/std/getcwd.use obj/lib/std/blat.use obj/lib/std/optparse.use obj/lib/std/pathjoin.use obj/lib/std/readall.use obj/lib/std/strjoin.use obj/lib/std/threadhooks.use obj/lib/std/sjlj.use obj/lib/std/extremum.use obj/lib/std/endian.use obj/lib/std/rand.use obj/lib/std/sldup.use obj/lib/std/sleep.use obj/lib/std/wait.use obj/lib/std/introspect.use obj/lib/std/fltparse.use obj/lib/std/fndup.use obj/lib/std/strbuf.use obj/lib/std/strreplace.use obj/lib/std/assert.use obj/lib/std/spork.use obj/lib/std/slpush.use obj/lib/std/strstrip.use obj/lib/std/htab.use obj/lib/std/hashfuncs.use obj/lib/std/slput.use obj/lib/std/fltbits.use obj/lib/std/striter.use obj/lib/std/types.use obj/lib/std/cstrconv.use obj/lib/std/units.use obj/lib/std/backtrace.use obj/lib/std/syswrap-ss.use obj/lib/std/die.use obj/lib/std/mk.use obj/lib/std/hassuffix.use obj/lib/std/pledge.use obj/lib/std/utf.use obj/lib/std/slurp.use obj/lib/std/dialparse.use obj/lib/std/bytealloc.use obj/lib/std/mktemp.use obj/lib/std/consts.use obj/lib/std/chomp.use obj/lib/std/dir.use obj/lib/std/search.use obj/lib/std/memops.use obj/lib/std/fmtfuncs.use obj/lib/std/strfind.use obj/lib/std/env.use obj/lib/std/dirname.use obj/lib/std/clear.use obj/lib/std/listen.use obj/lib/std/sort.use obj/lib/std/cmp.use obj/lib/std/now.use obj/lib/std/intparse.use obj/lib/std/traits.use obj/lib/std/mkpath.use obj/lib/std/option.use obj/lib/std/dial.use obj/lib/std/errno.use obj/lib/std/chartype.use obj/lib/std/bigint.use obj/lib/std/bitset.use obj/lib/std/slcp.use obj/lib/std/execvp.use
+	ar -rcs obj/lib/std/libstd.a obj/lib/std/resolve.o obj/lib/std/intfmt.o obj/lib/std/result.o obj/lib/std/try.o obj/lib/std/ipparse.o obj/lib/std/alloc.o obj/lib/std/sleq.o obj/lib/std/putint.o obj/lib/std/sljoin.o obj/lib/std/slpop.o obj/lib/std/syswrap.o obj/lib/std/getint.o obj/lib/std/strsplit.o obj/lib/std/slfill.o obj/lib/std/writeall.o obj/lib/std/fltfmt.o obj/lib/std/hasprefix.o obj/lib/std/swap.o obj/lib/std/fmt.o obj/lib/std/netaddr.o obj/lib/std/varargs.o obj/lib/std/diriter.o obj/lib/std/getcwd.o obj/lib/std/blat.o obj/lib/std/optparse.o obj/lib/std/pathjoin.o obj/lib/std/readall.o obj/lib/std/strjoin.o obj/lib/std/threadhooks.o obj/lib/std/sjlj.o obj/lib/std/extremum.o obj/lib/std/endian.o obj/lib/std/rand.o obj/lib/std/sldup.o obj/lib/std/sleep.o obj/lib/std/wait.o obj/lib/std/introspect.o obj/lib/std/fltparse.o obj/lib/std/fndup.o obj/lib/std/strbuf.o obj/lib/std/strreplace.o obj/lib/std/assert.o obj/lib/std/spork.o obj/lib/std/slpush.o obj/lib/std/strstrip.o obj/lib/std/htab.o obj/lib/std/hashfuncs.o obj/lib/std/slput.o obj/lib/std/sjlj-impl.o obj/lib/std/fltbits.o obj/lib/std/striter.o obj/lib/std/types.o obj/lib/std/cstrconv.o obj/lib/std/units.o obj/lib/std/backtrace.o obj/lib/std/syswrap-ss.o obj/lib/std/die.o obj/lib/std/mk.o obj/lib/std/hassuffix.o obj/lib/std/memops-impl.o obj/lib/std/pledge.o obj/lib/std/utf.o obj/lib/std/slurp.o obj/lib/std/dialparse.o obj/lib/std/bytealloc.o obj/lib/std/mktemp.o obj/lib/std/consts.o obj/lib/std/chomp.o obj/lib/std/dir.o obj/lib/std/search.o obj/lib/std/memops.o obj/lib/std/fmtfuncs.o obj/lib/std/strfind.o obj/lib/std/env.o obj/lib/std/dirname.o obj/lib/std/clear.o obj/lib/std/listen.o obj/lib/std/sort.o obj/lib/std/cmp.o obj/lib/std/now.o obj/lib/std/intparse.o obj/lib/std/traits.o obj/lib/std/mkpath.o obj/lib/std/option.o obj/lib/std/dial.o obj/lib/std/errno.o obj/lib/std/chartype.o obj/lib/std/bigint.o obj/lib/std/bitset.o obj/lib/std/getbp.o obj/lib/std/slcp.o obj/lib/std/execvp.o
+	$pwd/muse/muse -o obj/lib/std/libstd.use -p std obj/lib/std/resolve.use obj/lib/std/intfmt.use obj/lib/std/result.use obj/lib/std/try.use obj/lib/std/ipparse.use obj/lib/std/alloc.use obj/lib/std/sleq.use obj/lib/std/putint.use obj/lib/std/sljoin.use obj/lib/std/slpop.use obj/lib/std/syswrap.use obj/lib/std/getint.use obj/lib/std/strsplit.use obj/lib/std/slfill.use obj/lib/std/writeall.use obj/lib/std/fltfmt.use obj/lib/std/hasprefix.use obj/lib/std/swap.use obj/lib/std/fmt.use obj/lib/std/netaddr.use obj/lib/std/varargs.use obj/lib/std/diriter.use obj/lib/std/getcwd.use obj/lib/std/blat.use obj/lib/std/optparse.use obj/lib/std/pathjoin.use obj/lib/std/readall.use obj/lib/std/strjoin.use obj/lib/std/threadhooks.use obj/lib/std/sjlj.use obj/lib/std/extremum.use obj/lib/std/endian.use obj/lib/std/rand.use obj/lib/std/sldup.use obj/lib/std/sleep.use obj/lib/std/wait.use obj/lib/std/introspect.use obj/lib/std/fltparse.use obj/lib/std/fndup.use obj/lib/std/strbuf.use obj/lib/std/strreplace.use obj/lib/std/assert.use obj/lib/std/spork.use obj/lib/std/slpush.use obj/lib/std/strstrip.use obj/lib/std/htab.use obj/lib/std/hashfuncs.use obj/lib/std/slput.use obj/lib/std/fltbits.use obj/lib/std/striter.use obj/lib/std/types.use obj/lib/std/cstrconv.use obj/lib/std/units.use obj/lib/std/backtrace.use obj/lib/std/syswrap-ss.use obj/lib/std/die.use obj/lib/std/mk.use obj/lib/std/hassuffix.use obj/lib/std/pledge.use obj/lib/std/utf.use obj/lib/std/slurp.use obj/lib/std/dialparse.use obj/lib/std/bytealloc.use obj/lib/std/mktemp.use obj/lib/std/consts.use obj/lib/std/chomp.use obj/lib/std/dir.use obj/lib/std/search.use obj/lib/std/memops.use obj/lib/std/fmtfuncs.use obj/lib/std/strfind.use obj/lib/std/env.use obj/lib/std/dirname.use obj/lib/std/clear.use obj/lib/std/listen.use obj/lib/std/sort.use obj/lib/std/cmp.use obj/lib/std/now.use obj/lib/std/intparse.use obj/lib/std/traits.use obj/lib/std/mkpath.use obj/lib/std/option.use obj/lib/std/dial.use obj/lib/std/errno.use obj/lib/std/chartype.use obj/lib/std/bigint.use obj/lib/std/bitset.use obj/lib/std/slcp.use obj/lib/std/execvp.use
 	$pwd/6/6m -O obj -I obj/lib/sys -I obj/lib/std -I obj/lib/bio -I obj/lib/regex -I obj/lib/thread mbld/types.myr
 	$pwd/6/6m -O obj -I obj/lib/sys -I obj/lib/std lib/regex/types.myr
 	$pwd/6/6m -O obj -I obj/lib/sys -I obj/lib/std lib/regex/interp.myr
--- a/mk/bootstrap/bootstrap+NetBSD-amd64.sh
+++ b/mk/bootstrap/bootstrap+NetBSD-amd64.sh
@@ -69,6 +69,7 @@
 	$pwd/6/6m -I lib/sys lib/std/slpush.myr
 	$pwd/6/6m -I lib/sys lib/std/strsplit.myr
 	$pwd/6/6m -I lib/sys lib/std/strbuf.myr
+	$pwd/6/6m -I lib/sys lib/std/intfmt.myr
 	$pwd/6/6m -I lib/sys lib/std/sldup.myr
 	$pwd/6/6m -I lib/sys lib/std/bigint.myr
 	$pwd/6/6m -I lib/sys lib/std/fltparse.myr
--- a/mk/bootstrap/bootstrap+OpenBSD-amd64.sh
+++ b/mk/bootstrap/bootstrap+OpenBSD-amd64.sh
@@ -89,6 +89,7 @@
 	$pwd/6/6m -O obj -I obj/lib/sys lib/std/slpush.myr
 	$pwd/6/6m -O obj -I obj/lib/sys lib/std/striter.myr
 	$pwd/6/6m -O obj -I obj/lib/sys lib/std/intparse.myr
+	$pwd/6/6m -O obj -I obj/lib/sys lib/std/intfmt.myr
 	$pwd/6/6m -O obj -I obj/lib/sys lib/std/strsplit.myr
 	$pwd/6/6m -O obj -I obj/lib/sys lib/std/strbuf.myr
 	$pwd/6/6m -O obj -I obj/lib/sys lib/std/sldup.myr
--- a/mk/bootstrap/bootstrap+Plan9-amd64.sh
+++ b/mk/bootstrap/bootstrap+Plan9-amd64.sh
@@ -85,6 +85,7 @@
 	$pwd/6/6.out -O obj -I obj/lib/sys lib/std/slpush.myr
 	$pwd/6/6.out -O obj -I obj/lib/sys lib/std/striter.myr
 	$pwd/6/6.out -O obj -I obj/lib/sys lib/std/intparse.myr
+	$pwd/6/6.out -O obj -I obj/lib/sys lib/std/intfmt.myr
 	$pwd/6/6.out -O obj -I obj/lib/sys lib/std/strsplit.myr
 	$pwd/6/6.out -O obj -I obj/lib/sys lib/std/strbuf.myr
 	$pwd/6/6.out -O obj -I obj/lib/sys lib/std/sldup.myr