ref: ad4d1397fb08b0d205e623f9a7c74fa19afb1c8c
parent: 0205329e24d0e078a8150020843586cbd12613c8
author: Ori Bernstein <ori@eigenstate.org>
date: Tue Feb 2 06:30:24 EST 2016
Make slpush take an address.
--- a/lib/regex/compile.myr
+++ b/lib/regex/compile.myr
@@ -194,8 +194,8 @@
n = rt.ranges.len
if n == 0
- rt.ranges = std.slpush(rt.ranges, (lo[0], hi[0]))
- rt.link = std.slpush(rt.link, std.zalloc())
+ std.slpush(&rt.ranges, (lo[0], hi[0]))
+ std.slpush(&rt.link, std.zalloc())
else
/*
this is a safe way to compare because we know that ranges
@@ -204,8 +204,8 @@
*/
(a, b) = rt.ranges[n - 1]
if a != lo[0] || b != hi[0]
- rt.ranges = std.slpush(rt.ranges, (lo[0], hi[0]))
- rt.link = std.slpush(rt.link, std.zalloc())
+ std.slpush(&rt.ranges, (lo[0], hi[0]))
+ std.slpush(&rt.link, std.zalloc())
;;
;;
@@ -551,7 +551,7 @@
| '+': -> `Fail `Badrep '+'
| '?': -> `Fail `Badrep '?'
| '[': -> chrclass(re)
- | '.': getc(re); ret = std.mk(`Ranges std.slpush([][:], [0, std.Maxcharval]))
+ | '.': getc(re); ret = std.mk(`Ranges std.sldup([[0, std.Maxcharval]][:]))
| '^': getc(re); ret = std.mk(`Bol)
| '$': getc(re); ret = std.mk(`Eol)
| '(':
@@ -719,12 +719,12 @@
if matchc(re, '-')
hi = getc(re)
if lo <= hi
- -> std.slpush(sl, [lo, hi])
+ -> std.slpush(&sl, [lo, hi])
else
- -> std.slpush(sl, [hi, lo])
+ -> std.slpush(&sl, [hi, lo])
;;
else
- -> std.slpush(sl, [lo, lo])
+ -> std.slpush(&sl, [lo, lo])
;;
}
@@ -737,10 +737,10 @@
next = 0 /* if we have no ranges */
for r in rng
(end, next) = (r[0], r[1])
- neg = std.slpush(neg, [start, end - 1])
+ std.slpush(&neg, [start, end - 1])
start = next + 1
;;
- neg = std.slpush(neg, [next + 1, std.Maxcharval])
+ std.slpush(&neg, [next + 1, std.Maxcharval])
-> neg
}
@@ -760,12 +760,12 @@
if r[0] <= hi + 1
hi = r[1]
else
- ret = std.slpush(ret, [lo, hi])
+ std.slpush(&ret, [lo, hi])
lo = r[0]
hi = r[1]
;;
;;
- -> std.slpush(ret, [lo, hi])
+ -> std.slpush(&ret, [lo, hi])
}
--- a/lib/std/bigint.myr
+++ b/lib/std/bigint.myr
@@ -79,9 +79,9 @@
a.sign = 1
;;
val = v castto(uint64)
- a.dig = slpush([][:], val castto(uint32))
+ slpush(&a.dig, val castto(uint32))
if val > Base
- a.dig = slpush(a.dig, (val/Base) castto(uint32))
+ slpush(&a.dig, (val/Base) castto(uint32))
;;
-> trim(a)
}
--- a/lib/std/bld.sub
+++ b/lib/std/bld.sub
@@ -7,6 +7,7 @@
bigint.myr
bitset.myr
blat.myr
+ byzip.myr
chartype.myr
clear.myr
cmp.myr
--- a/lib/std/fmt.myr
+++ b/lib/std/fmt.myr
@@ -229,7 +229,7 @@
;;
ha = hasarg
if ha == gotarg
- opts = std.slpush(opts, (o, a))
+ std.slpush(&opts, (o, a))
else
std.fatal("invalid option {}", o)
;;
--- a/lib/std/hashfuncs.myr
+++ b/lib/std/hashfuncs.myr
@@ -64,7 +64,7 @@
chars = [][:]
while s.len != 0
(c, s) = std.strstep(s)
- chars = std.slpush(chars, c)
+ std.slpush(&chars, c)
;;
h = murmurhash2(slbytes(chars), Seed)
slfree(chars)
--- a/lib/std/optparse.myr
+++ b/lib/std/optparse.myr
@@ -64,7 +64,7 @@
]
optinit(&ctx, args, def)
while !optdone(&ctx)
- parsed.opts = slpush(parsed.opts, optnext(&ctx))
+ slpush(&parsed.opts, optnext(&ctx))
;;
if ctx.args.len < def.minargs
put("error: expected at least {} args, got {}\n", def.minargs, ctx.args.len)
@@ -164,7 +164,7 @@
goto foundopt
;;
else
- ctx.args = slpush(ctx.args, ctx.optargs[i])
+ slpush(&ctx.args, ctx.optargs[i])
;;
;;
:finishedopt
--- a/lib/std/resolve+posixy.myr
+++ b/lib/std/resolve+posixy.myr
@@ -78,7 +78,7 @@
const resolverec = {host, t
match hostfind(host)
| `Some hinf:
- -> `Ok slpush([][:], hinf)
+ -> `Ok sldup([hinf][:])
| `None:
-> dnsresolve(host, rectype(`DnsA))
;;
@@ -186,7 +186,7 @@
| `Some (name, _):
match ipparse(name)
| `Some addr:
- nameservers = slpush(nameservers, addr)
+ slpush(&nameservers, addr)
| `None:
/* nothing */
;;
--- a/lib/std/slpush.myr
+++ b/lib/std/slpush.myr
@@ -2,7 +2,7 @@
use "alloc"
pkg std =
- generic slpush : (sl : @a[:], elt : @a -> @a[:])
+ generic slpush : (sl : @a[:]#, elt : @a -> @a[:])
;;
generic slpush = {sl, elt
@@ -14,7 +14,7 @@
a bucket boundary, this is effectively
growing the slice by powers of two.
*/
- sl = slgrow(sl, sl.len + 1)
- sl[sl.len - 1] = elt
- -> sl
+ sl# = slgrow(sl#, sl#.len + 1)
+ sl#[sl#.len - 1] = elt
+ -> sl#
}
--- a/lib/std/strsplit.myr
+++ b/lib/std/strsplit.myr
@@ -27,7 +27,7 @@
while true
match strfind(s, delim)
| `Some i:
- sp = slpush(sp, s[:i])
+ slpush(&sp, s[:i])
s = s[i + delim.len:]
| `None:
goto donesplit
@@ -34,7 +34,7 @@
;;
;;
:donesplit
- sp = slpush(sp, s[:])
+ slpush(&sp, s[:])
-> sp
}
@@ -53,7 +53,7 @@
j++
;;
if i != j
- toks = slpush(toks, s[i:j])
+ slpush(&toks, s[i:j])
;;
i = j
;;
--- a/mbld/build.myr
+++ b/mbld/build.myr
@@ -134,7 +134,7 @@
incs = std.sldup(targ.incpath)
if opt_instbase.len > 0 && !std.sleq(opt_instbase, "none")
libpath = std.pathcat(bld.opt_instbase, config.Libpath)
- incs = std.slpush(incs, libpath)
+ std.slpush(&incs, libpath)
;;
linkbin(dg, targ.name, src, targ.ldscript, targ.runtime, incs, targ.libdeps)
std.slfree(incs)
@@ -247,36 +247,36 @@
cmd = [][:]
if std.hassuffix(src, ".myr")
- cmd = std.slpush(cmd, opt_mc)
+ std.slpush(&cmd, opt_mc)
for inc in incs
- cmd = std.slpush(cmd, "-I")
- cmd = std.slpush(cmd, inc)
+ std.slpush(&cmd, "-I")
+ std.slpush(&cmd, inc)
;;
if opt_genasm
- cmd = std.slpush(cmd, "-S")
+ std.slpush(&cmd, "-S")
;;
- cmd = std.slpush(cmd, src)
+ std.slpush(&cmd, src)
run(cmd)
std.slfree(cmd)
elif std.hassuffix(src, ".s")
o = srcswapsuffix(src, config.Objsuffix)
for c in config.Ascmd
- cmd = std.slpush(cmd, c)
+ std.slpush(&cmd, c)
;;
- cmd = std.slpush(cmd,"-o")
- cmd = std.slpush(cmd, o)
- cmd = std.slpush(cmd, src)
+ std.slpush(&cmd,"-o")
+ std.slpush(&cmd, o)
+ std.slpush(&cmd, src)
run(cmd)
std.slfree(o)
elif std.hassuffix(src, ".glue.c")
o = srcswapsuffix(src, config.Objsuffix)
- cmd = std.slpush(cmd, "cc")
- cmd = std.slpush(cmd,"-c")
- cmd = std.slpush(cmd,"-o")
- cmd = std.slpush(cmd, o)
- cmd = std.slpush(cmd, src)
+ std.slpush(&cmd, "cc")
+ std.slpush(&cmd,"-c")
+ std.slpush(&cmd,"-o")
+ std.slpush(&cmd, o)
+ std.slpush(&cmd, src)
for flg in std.htgetv(dg.cflags, src, [][:])
- cmd = std.slpush(cmd, flg)
+ std.slpush(&cmd, flg)
;;
run(cmd)
else
@@ -291,27 +291,27 @@
/* ld -o bin */
for c in config.Linkcmd
- cmd = std.slpush(cmd, std.sldup(c))
+ std.slpush(&cmd, std.sldup(c))
;;
- cmd = std.slpush(cmd, std.sldup(bin))
+ std.slpush(&cmd, std.sldup(bin))
/* [-T script] */
if ldscript.len > 0
- cmd = std.slpush(cmd, std.sldup("-T"))
- cmd = std.slpush(cmd, std.sldup(ldscript))
+ std.slpush(&cmd, std.sldup("-T"))
+ std.slpush(&cmd, std.sldup(ldscript))
;;
if rt.len != 0
if !std.sleq(rt, "none")
- cmd = std.slpush(cmd, std.sldup(rt))
+ std.slpush(&cmd, std.sldup(rt))
;;
else
- cmd = std.slpush(cmd, std.sldup(opt_runtime))
+ std.slpush(&cmd, std.sldup(opt_runtime))
;;
/* input.o list.o... */
for f in srcfiles
- cmd = std.slpush(cmd, srcswapsuffix(f, config.Objsuffix))
+ std.slpush(&cmd, srcswapsuffix(f, config.Objsuffix))
;;
/* -L path -l lib... */
@@ -320,16 +320,16 @@
/* add extra libs */
for l in dg.extlibs
- cmd = std.slpush(cmd, std.fmt("-l{}", l))
+ std.slpush(&cmd, std.fmt("-l{}", l))
;;
/* special for OSX: it warns if we don't add this */
if std.sleq(opt_sys, "osx")
- cmd = std.slpush(cmd, std.sldup("-macosx_version_min"))
- cmd = std.slpush(cmd, std.sldup("10.6"))
+ std.slpush(&cmd, std.sldup("-macosx_version_min"))
+ std.slpush(&cmd, std.sldup("10.6"))
elif std.sleq(opt_sys, "linux") && dg.dynamic
- cmd = std.slpush(cmd, std.sldup("-dynamic-linker"))
- cmd = std.slpush(cmd, std.sldup("/lib64/ld-linux-x86-64.so.2"))
+ std.slpush(&cmd, std.sldup("-dynamic-linker"))
+ std.slpush(&cmd, std.sldup("/lib64/ld-linux-x86-64.so.2"))
;;
run(cmd)
@@ -342,12 +342,12 @@
cmd = [][:]
for c in config.Arcmd
- cmd = std.slpush(cmd, std.sldup(c))
+ std.slpush(&cmd, std.sldup(c))
;;
- cmd = std.slpush(cmd, std.fmt("lib{}.a", lib))
+ std.slpush(&cmd, std.fmt("lib{}.a", lib))
for f in files
obj = srcswapsuffix(f, config.Objsuffix)
- cmd = std.slpush(cmd, obj)
+ std.slpush(&cmd, obj)
;;
run(cmd)
strlistfree(cmd)
@@ -357,18 +357,18 @@
var cmd
cmd = [][:]
- cmd = std.slpush(cmd, std.sldup(opt_muse))
- cmd = std.slpush(cmd, std.sldup("-o"))
- cmd = std.slpush(cmd, std.sldup(lib))
+ std.slpush(&cmd, std.sldup(opt_muse))
+ std.slpush(&cmd, std.sldup("-o"))
+ std.slpush(&cmd, std.sldup(lib))
for f in files
if std.hassuffix(f, ".myr")
- cmd = std.slpush(cmd, srcswapsuffix(f, ".use"))
+ std.slpush(&cmd, srcswapsuffix(f, ".use"))
elif !std.hassuffix(f, ".s") && !std.hassuffix(f, ".glue.c")
std.fatal("unknown file type for {}\n", f)
;;
;;
for l in dg.extlibs
- cmd = std.slpush(cmd, std.fmt("-l{}", l))
+ std.slpush(&cmd, std.fmt("-l{}", l))
;;
run(cmd)
strlistfree(cmd)
@@ -383,7 +383,7 @@
/* -L incpath... */
if !config.Directlib
for inc in incs
- cmd = std.slpush(cmd, std.fmt("-L{}", inc))
+ std.slpush(&cmd, std.fmt("-L{}", inc))
;;
;;
--- a/mbld/deps.myr
+++ b/mbld/deps.myr
@@ -112,7 +112,7 @@
sl = [][:]
for s in srcs
- sl = std.slpush(sl, srcswapsuffix(s, suff))
+ std.slpush(&sl, srcswapsuffix(s, suff))
;;
-> sl
}
@@ -140,7 +140,7 @@
-> void
;;
- ds.depstk = std.slpush(ds.depstk, path)
+ std.slpush(&ds.depstk, path)
if std.htgetv(g.seen, path, false)
std.fput(1, "dependency loop involving {}:\n", path)
for d in ds.depstk
@@ -234,7 +234,7 @@
| `std.Some m:
flags = std.strtok(m[1])
for fl in flags
- cflags = std.slpush(cflags, std.sldup(fl))
+ std.slpush(&cflags, std.sldup(fl))
;;
std.slfree(flags)
regex.matchfree(m)
@@ -245,7 +245,7 @@
| `std.Some m:
flags = std.strtok(m[1])
for fl in flags
- libs = std.slpush(libs, std.sldup(fl))
+ std.slpush(&libs, std.sldup(fl))
;;
std.slfree(flags)
regex.matchfree(m)
@@ -297,9 +297,9 @@
match regex.exec(usepat, ln)
| `std.Some uses:
if uses[2].len > 0
- deps = std.slpush(deps, `Lib (std.sldup(uses[2]), lnum))
+ std.slpush(&deps, `Lib (std.sldup(uses[2]), lnum))
else
- deps = std.slpush(deps, `Local (std.sldup(uses[3]), lnum))
+ std.slpush(&deps, `Local (std.sldup(uses[3]), lnum))
;;
regex.matchfree(uses)
| `std.None:
@@ -343,10 +343,10 @@
match bio.getc(f)
| `bio.Ok 'L':
d = rdstr(f)
- deps = std.slpush(deps, d)
+ std.slpush(&deps, d)
| `bio.Ok 'X':
d = rdstr(f)
- dg.extlibs = std.slpush(dg.extlibs, d)
+ std.slpush(&dg.extlibs, d)
| `bio.Ok _: done = true
| `bio.Eof: done = true
| `bio.Err e: std.fatal("io error reading {}: {}", lib, e)
@@ -389,7 +389,7 @@
std.put("{} <= {}\n", dst, src)
;;
sl = std.htgetv(dg.deps, dst, [][:])
- sl = std.slpush(sl, src)
+ std.slpush(&sl, src)
std.htput(dg.deps, dst, sl)
}
--- a/mbld/main.myr
+++ b/mbld/main.myr
@@ -58,9 +58,9 @@
| ('T', ""): dumponly = true
| ('S', ""): bld.opt_genasm = true
| ('c', ""): cleanfirst = true
- | ('I', arg): bld.opt_incpaths = std.slpush(bld.opt_incpaths, arg)
+ | ('I', arg): std.slpush(&bld.opt_incpaths, arg)
| ('B', arg): bld.opt_instbase = arg
- | ('t', tag): tags = std.slpush(tags, tag)
+ | ('t', tag): std.slpush(&tags, tag)
| ('R', arg): runsrc = arg
| ('b', arg):
targname = arg
--- a/mbld/parse.myr
+++ b/mbld/parse.myr
@@ -39,7 +39,7 @@
targs = sysselfin(sel)
for (name, targ) in targs
- b.all = std.slpush(b.all, name)
+ std.slpush(&b.all, name)
std.htput(b.targs, name, targ)
;;
@@ -121,7 +121,7 @@
match gettarg(b.targs, dep)
| `Bin _: all = visit(all, b, "all", dep, looped, marked)
| `Lib _: all = visit(all, b, "all", dep, looped, marked)
- | targ: all = std.slpush(all, dep)
+ | targ: std.slpush(&all, dep)
;;
;;
std.slfree(b.all)
@@ -142,7 +142,7 @@
;;
std.htdel(looped, targ)
std.htput(marked, targ, true)
- -> std.slpush(all, targ)
+ -> std.slpush(&all, targ)
}
const getdeps = {b, parent, targname
@@ -280,7 +280,7 @@
subs = anontarget(p, "sub")
for s in subs
- p.subdirs = std.slpush(p.subdirs, std.pathcat(p.fdir, s))
+ std.slpush(&p.subdirs, std.pathcat(p.fdir, s))
;;
}
@@ -334,8 +334,8 @@
| ("durable", ""): durable = true
| ("test", ""): istest = true
| ("notest", ""): istest = false
- | ("dep", depname): deplist = std.slpush(deplist, depname)
- | ("tag", tag): tags = std.slpush(tags, tag)
+ | ("dep", depname): std.slpush(&deplist, depname)
+ | ("tag", tag): std.slpush(&tags, tag)
| (attr, ""):
failparse(p, "attribute {} not valid on {} targets\n", attr, cmd)
| (attr, val):
@@ -415,7 +415,7 @@
ldscript = p.ldscript
incpath = [][:]
for path in p.incpath
- incpath = std.slpush(incpath, path)
+ std.slpush(&incpath, path)
;;
tags = [][:]
for elt in attrs
@@ -422,8 +422,8 @@
match elt
| ("ldscript", lds): ldscript = std.sldup(lds)
| ("runtime", rt): runtime = std.sldup(rt)
- | ("inc", path): incpath = std.slpush(incpath, std.sldup(path))
- | ("tag", tag): tags = std.slpush(tags, tag)
+ | ("inc", path): std.slpush(&incpath, std.sldup(path))
+ | ("tag", tag): std.slpush(&tags, tag)
| ("inst", ""): install = true
| ("noinst", ""): install = false
| ("test", ""): istest = true
@@ -435,7 +435,7 @@
;;
;;
for inc in bld.opt_incpaths
- incpath = std.slpush(incpath, std.sldup(inc))
+ std.slpush(&incpath, std.sldup(inc))
;;
-> std.mk([
/* target */
@@ -492,7 +492,7 @@
tags = [][:]
for elt in attrs
match elt
- | ("tag", tag): tags = std.slpush(tags, tag)
+ | ("tag", tag): std.slpush(&tags, tag)
| ("path", pathdir): path = pathdir
| (invalid, ""):
std.fatal("{}: got invalid attr '{}'\n", targ, invalid)
@@ -551,12 +551,12 @@
if matchc(p, '=')
match word(p)
| `std.Some v:
- al = std.slpush(al, (k, v))
+ std.slpush(&al, (k, v))
| `std.None:
failparse(p, "invalid attr in attribute list\n")
;;
else
- al = std.slpush(al, (k, [][:]))
+ std.slpush(&al, (k, [][:]))
;;
if !matchc(p, ',')
break
@@ -593,11 +593,11 @@
match word(p)
| `std.Some l:
(dir, lib, targ) = libpath(p, l)
- libs = std.slpush(libs, (dir, lib, targ))
+ std.slpush(&libs, (dir, lib, targ))
| `std.None:
failparse(p, "expected lib name after 'lib'\n")
;;
- | `std.Some w: wl = std.slpush(wl, w)
+ | `std.Some w: std.slpush(&wl, w)
| `std.None: break
;;
;;
@@ -615,7 +615,7 @@
wl = [][:]
while true
match word(p)
- | `std.Some w: wl = std.slpush(wl, w)
+ | `std.Some w: std.slpush(&wl, w)
| `std.None: break
;;
;;
--- a/mbld/syssel.myr
+++ b/mbld/syssel.myr
@@ -88,7 +88,7 @@
if nmatch == -1
std.fatal("{}:{}: target {}, no applicable file for '{}'\n", syssel.file, syssel.line, syssel.targ, k)
;;
- ret = std.slpush(ret, std.get(std.htget(syssel._best, k)))
+ std.slpush(&ret, std.get(std.htget(syssel._best, k)))
;;
std.htfree(syssel._match)
std.htfree(syssel._best)
--- a/mbld/test.myr
+++ b/mbld/test.myr
@@ -41,12 +41,12 @@
;;
buildbin(b, t, false)
bincmd = std.sldup([std.strcat("./", t.name)][:])
- tests = std.slpush(tests, (bincmd, std.sldup(t.dir)))
+ std.slpush(&tests, (bincmd, std.sldup(t.dir)))
| `Cmd t:
if !t.istest
continue
;;
- tests = std.slpush(tests, (dupcmd(t.cmd), std.sldup(t.dir)))
+ std.slpush(&tests, (dupcmd(t.cmd), std.sldup(t.dir)))
| _:
/* skip */
;;
@@ -59,7 +59,7 @@
if !runtest(b, c)
ok = false
p = std.pathcat(b.curdir, c[0])
- failed = std.slpush(failed, p)
+ std.slpush(&failed, p)
;;
;;
@@ -101,7 +101,7 @@
ret = [][:]
for c in cmd
- ret = std.slpush(ret, std.sldup(c))
+ std.slpush(&ret, std.sldup(c))
;;
-> ret
}
@@ -135,7 +135,7 @@
buildbin(b, &tt, true)
cmd = std.sldup([std.strcat("./", bin)][:])
- tests = std.slpush(tests, (cmd, std.sldup(targ.dir)))
+ std.slpush(&tests, (cmd, std.sldup(targ.dir)))
std.slfree(tt.libdeps)
std.slfree(tt.incpath)
std.slfree(path)