summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/std/bld.sub1
-rw-r--r--lib/std/fmt.myr61
-rw-r--r--lib/std/intfmt.myr79
-rwxr-xr-xmk/bootstrap/bootstrap+Darwin-x86_64.sh1
-rwxr-xr-xmk/bootstrap/bootstrap+FreeBSD-amd64.sh1
-rwxr-xr-xmk/bootstrap/bootstrap+Linux-x86_64.sh5
-rwxr-xr-xmk/bootstrap/bootstrap+NetBSD-amd64.sh1
-rwxr-xr-xmk/bootstrap/bootstrap+OpenBSD-amd64.sh1
-rwxr-xr-xmk/bootstrap/bootstrap+Plan9-amd64.sh1
9 files changed, 89 insertions, 62 deletions
diff --git a/lib/std/bld.sub b/lib/std/bld.sub
index 093e242..4ab703c 100644
--- a/lib/std/bld.sub
+++ b/lib/std/bld.sub
@@ -38,6 +38,7 @@ lib std =
hasprefix.myr
hassuffix.myr
htab.myr
+ intfmt.myr
intparse.myr
introspect.myr
ipparse.myr
diff --git a/lib/std/fmt.myr b/lib/std/fmt.myr
index 5dc3ba3..b981a74 100644
--- a/lib/std/fmt.myr
+++ b/lib/std/fmt.myr
@@ -7,6 +7,7 @@ use "fltfmt"
use "hashfuncs"
use "hasprefix"
use "htab"
+use "intfmt"
use "intparse"
use "introspect"
use "memops"
@@ -477,12 +478,6 @@ const fltparams = {params
-> fp
}
-type intparams = struct
- base : size
- padto : size
- padfill : char
-;;
-
const intparams = {params
var ip : intparams
@@ -572,60 +567,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 */
const getint = {s, msg
match std.intparse(s)
diff --git a/lib/std/intfmt.myr b/lib/std/intfmt.myr
new file mode 100644
index 0000000..7b9cfdf
--- /dev/null
+++ b/lib/std/intfmt.myr
@@ -0,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)
+ ;;
+}
diff --git a/mk/bootstrap/bootstrap+Darwin-x86_64.sh b/mk/bootstrap/bootstrap+Darwin-x86_64.sh
index a1be640..43c7e49 100755
--- a/mk/bootstrap/bootstrap+Darwin-x86_64.sh
+++ b/mk/bootstrap/bootstrap+Darwin-x86_64.sh
@@ -90,6 +90,7 @@ set -x
$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
diff --git a/mk/bootstrap/bootstrap+FreeBSD-amd64.sh b/mk/bootstrap/bootstrap+FreeBSD-amd64.sh
index a33ef64..f097d6e 100755
--- a/mk/bootstrap/bootstrap+FreeBSD-amd64.sh
+++ b/mk/bootstrap/bootstrap+FreeBSD-amd64.sh
@@ -90,6 +90,7 @@ set -x
$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
diff --git a/mk/bootstrap/bootstrap+Linux-x86_64.sh b/mk/bootstrap/bootstrap+Linux-x86_64.sh
index bf49b54..47b7117 100755
--- a/mk/bootstrap/bootstrap+Linux-x86_64.sh
+++ b/mk/bootstrap/bootstrap+Linux-x86_64.sh
@@ -90,6 +90,7 @@ set -x
$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 @@ set -x
$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
diff --git a/mk/bootstrap/bootstrap+NetBSD-amd64.sh b/mk/bootstrap/bootstrap+NetBSD-amd64.sh
index a81f8c3..7e41618 100755
--- a/mk/bootstrap/bootstrap+NetBSD-amd64.sh
+++ b/mk/bootstrap/bootstrap+NetBSD-amd64.sh
@@ -69,6 +69,7 @@ set -x
$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
diff --git a/mk/bootstrap/bootstrap+OpenBSD-amd64.sh b/mk/bootstrap/bootstrap+OpenBSD-amd64.sh
index 62f4b0a..00b0328 100755
--- a/mk/bootstrap/bootstrap+OpenBSD-amd64.sh
+++ b/mk/bootstrap/bootstrap+OpenBSD-amd64.sh
@@ -89,6 +89,7 @@ set -x
$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
diff --git a/mk/bootstrap/bootstrap+Plan9-amd64.sh b/mk/bootstrap/bootstrap+Plan9-amd64.sh
index 70fb6fc..4b6ad1a 100755
--- a/mk/bootstrap/bootstrap+Plan9-amd64.sh
+++ b/mk/bootstrap/bootstrap+Plan9-amd64.sh
@@ -85,6 +85,7 @@ set -x
$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