commit 74c56b2b2f206bd532aaa3f03aa55143e250a64d
parent 3d703128f1d04ad705dc0f8f7d6ea2de36c9dac8
Author: Alexander Burger <abu@software-lab.de>
Date: Tue, 17 Jul 2012 11:38:11 +0200
Namespace support also in Ersatz PicoLisp
Diffstat:
10 files changed, 235 insertions(+), 179 deletions(-)
diff --git a/CHANGES b/CHANGES
@@ -1,4 +1,5 @@
* DDmmm12 picoLisp-3.1.1
+ Namespace support also in Ersatz PicoLisp
JavaScript 'lisp' calls
'+DbHint' gui prefix class
Stack alignments (64-bit)
diff --git a/ersatz/fun.src b/ersatz/fun.src
@@ -1,4 +1,4 @@
-# 28jan12abu
+# 17jul12abu
# (c) Software Lab. Alexander Burger
# Ersatz PicoLisp Functions
@@ -1640,7 +1640,7 @@ name (x y s)
y = (x = ex.Cdr).Car.eval();
if (!((x = x.Cdr) instanceof Cell))
return mkStr(y.name());
- if ((s = ((Symbol)y)).Name != null && Intern.get(s.Name) == s)
+ if ((s = ((Symbol)y)).Name != null && Env.intern().get(s.Name) == s)
err(ex, s, "Can't rename");
if (Transient.get(((Symbol)y).Name) == y)
Transient.remove(((Symbol)y).Name);
@@ -1667,16 +1667,36 @@ getd (x)
# (all ['T]) -> lst
all ()
- return all(ex.Cdr.Car.eval() == Nil? Intern : Transient);
+ return all(ex.Cdr.Car.eval() == Nil? Env.intern() : Transient);
+
+# (symbols) -> sym
+# (symbols 'sym1) -> sym2
+# (symbols 'sym1 'sym2) -> sym3
+symbols (s t)
+ if (ex.Cdr instanceof Cell) {
+ s = (Symbol)ex.Cdr.Car.eval();
+ if (ex.Cdr.Cdr instanceof Cell) {
+ t = (Symbol)ex.Cdr.Cdr.Car.eval();
+ if (!(t.Car instanceof Symbol) || !(((Symbol)t.Car).Obj instanceof Namespace))
+ symNsError(ex, t);
+ s.Car = new Symbol(((Namespace)(((Symbol)t.Car).Obj)).clone());
+ }
+ else if (!(s.Car instanceof Symbol) || !(((Symbol)s.Car).Obj instanceof Namespace))
+ symNsError(ex, s);
+ t = Env.Intern;
+ Env.Intern = s;
+ return t;
+ }
+ return Env.Intern;
# (intern 'sym) -> sym
intern (s t str)
s = (Symbol)ex.Cdr.Car.eval();
if ((str = s.name()).length() == 0 || str.equals("NIL"))
return Nil;
- if ((t = Intern.get(str)) != null)
+ if ((t = Env.intern().get(str)) != null)
return t;
- Intern.put(str, s);
+ Env.intern().put(str, s);
return s;
# (==== ['sym ..]) -> NIL
@@ -1694,7 +1714,7 @@ box? (x)
# (str? 'any) -> sym | NIL
str? (x)
- return ((x = ex.Cdr.Car.eval()) instanceof Symbol) && Intern.get(x.name()) != x? x : Nil;
+ return ((x = ex.Cdr.Car.eval()) instanceof Symbol) && Env.intern().get(x.name()) != x? x : Nil;
# (ext? 'any) -> sym | NIL
ext? T
@@ -1703,8 +1723,8 @@ ext? T
# (zap 'sym) -> sym
zap (s)
s = (Symbol)ex.Cdr.Car.eval();
- if (Intern.get(s.Name) == s)
- Intern.remove(s.Name);
+ if (Env.intern().get(s.Name) == s)
+ Env.intern().remove(s.Name);
return s;
# (chop 'any) -> lst
diff --git a/ersatz/lib.l b/ersatz/lib.l
@@ -1,4 +1,4 @@
-# 09jul12abu
+# 16jul12abu
# (c) Software Lab. Alexander Burger
(setq *OS (java (java "java.lang.System" "getProperty" "os.name")))
@@ -197,6 +197,14 @@
(loc S (car X))
(loc S (cdr X)) ) ) ) )
+(de local Lst
+ (mapc zap Lst) )
+
+(de import Lst
+ (for Sym Lst
+ (unless (== Sym (intern Sym))
+ (quit "Import conflict" Sym) ) ) )
+
### OOP ###
(de class Lst
(let L (val (setq *Class (car Lst)))
@@ -1306,6 +1314,10 @@
############ lib/debug.l ############
+# Prompt
+(de *Prompt
+ (unless (== (symbols) 'pico) (symbols)) )
+
# Browsing
(de doc (Sym Browser)
(call (or Browser (sys "BROWSER") 'w3m)
diff --git a/ersatz/mkJar b/ersatz/mkJar
@@ -1,12 +1,12 @@
#!./pil
-# 20may11abu
+# 17jul12abu
# (c) Software Lab. Alexander Burger
(load "../src64/version.l")
# Build Ersatz PicoLisp
-(de local (Vars Typ Lst)
+(de declLocal (Vars Typ Lst)
(when (filter '((S) (memq S Lst)) Vars)
(prinl " " Typ " " (glue ", " @) ";") ) )
@@ -25,7 +25,7 @@
(inc 'Cnt)
"\"), \""
Name
- "\", Intern);" ) )
+ "\", Pico);" ) )
(while (line))
(prin " ")
(NIL (skip "#")) ) )
@@ -67,17 +67,17 @@
Cnt
"(Any ex) { // "
Name )
- (local Vars "int" '(i j k))
- (local Vars "char" '(c))
- (local Vars "long" '(n))
- (local Vars "Any" '(w x y z lst))
- (local Vars "Symbol" '(s t))
- (local Vars "Number" '(num))
- (local Vars "String" '(str txt))
- (local Vars "StringBuilder" '(sb))
- (local Vars "Any[]" '(v))
- (local Vars "Bind" '(bnd))
- (local Vars "Object" '(o))
+ (declLocal Vars "int" '(i j k))
+ (declLocal Vars "char" '(c))
+ (declLocal Vars "long" '(n))
+ (declLocal Vars "Any" '(w x y z lst))
+ (declLocal Vars "Symbol" '(s t))
+ (declLocal Vars "Number" '(num))
+ (declLocal Vars "String" '(str txt))
+ (declLocal Vars "StringBuilder" '(sb))
+ (declLocal Vars "Any[]" '(v))
+ (declLocal Vars "Bind" '(bnd))
+ (declLocal Vars "Object" '(o))
(while (line)
(prinl " " @) )
(prinl " }")
diff --git a/ersatz/picolisp.jar b/ersatz/picolisp.jar
Binary files differ.
diff --git a/ersatz/sys.src b/ersatz/sys.src
@@ -1,4 +1,4 @@
-// 17oct11abu
+// 17jul12abu
// (c) Software Lab. Alexander Burger
import java.util.*;
@@ -14,8 +14,8 @@ import java.lang.reflect.*;
public class PicoLisp {
final static Console Term = System.console();
final static StringBuffer Line = new StringBuffer();
- final static HashMap<String,Symbol> Intern = new HashMap<String,Symbol>();
- final static HashMap<String,Symbol> Transient = new HashMap<String,Symbol>();
+ final static Namespace Pico = new Namespace();
+ final static Namespace Transient = new Namespace();
final static byte MonLen[] = new byte[] {31,31,28,31,30,31,30,31,31,30,31,30,31};
final static byte Version[] = new byte[] {<VERSION>};
@@ -24,26 +24,27 @@ public class PicoLisp {
final static Number Two = new Number(2);
final static NilSym Nil = new NilSym();
- final static Symbol T = mkSymbol(null, "T", Intern);
- final static Symbol Pid = mkSymbol(new Number(System.getProperty("PID")), "*Pid", Intern);
- final static Symbol At = mkSymbol(Nil, "@", Intern);
- final static Symbol At2 = mkSymbol(Nil, "@@", Intern);
- final static Symbol At3 = mkSymbol(Nil, "@@@", Intern);
- final static Symbol This = mkSymbol(Nil, "This", Intern);
- final static Symbol Prompt = mkSymbol(Nil, "*Prompt", Intern);
- final static Symbol Dbg = mkSymbol(Nil, "*Dbg", Intern);
- final static Symbol Scl = mkSymbol(Zero, "*Scl", Intern);
- final static Symbol Class = mkSymbol(Nil, "*Class", Intern);
- final static Symbol Run = mkSymbol(Nil, "*Run", Intern);
- final static Symbol Up = mkSymbol(Nil, "^", Intern);
- final static Symbol Err = mkSymbol(Nil, "*Err", Intern);
- final static Symbol Msg = mkSymbol(Nil, "*Msg", Intern);
- final static Symbol Uni = mkSymbol(Nil, "*Uni", Intern);
- final static Symbol Adr = mkSymbol(Nil, "*Adr", Intern);
- final static Symbol Bye = mkSymbol(Nil, "*Bye", Intern);
-
- final static Symbol Quote = mkSymbol(Zero, "quote", Intern);
- final static Symbol Meth = mkSymbol(One, "meth", Intern);
+ final static Symbol pico = mkSymbol(new Symbol(Pico), "pico", Pico);
+ final static Symbol T = mkSymbol(null, "T", Pico);
+ final static Symbol Pid = mkSymbol(new Number(System.getProperty("PID")), "*Pid", Pico);
+ final static Symbol At = mkSymbol(Nil, "@", Pico);
+ final static Symbol At2 = mkSymbol(Nil, "@@", Pico);
+ final static Symbol At3 = mkSymbol(Nil, "@@@", Pico);
+ final static Symbol This = mkSymbol(Nil, "This", Pico);
+ final static Symbol Prompt = mkSymbol(Nil, "*Prompt", Pico);
+ final static Symbol Dbg = mkSymbol(Nil, "*Dbg", Pico);
+ final static Symbol Scl = mkSymbol(Zero, "*Scl", Pico);
+ final static Symbol Class = mkSymbol(Nil, "*Class", Pico);
+ final static Symbol Run = mkSymbol(Nil, "*Run", Pico);
+ final static Symbol Up = mkSymbol(Nil, "^", Pico);
+ final static Symbol Err = mkSymbol(Nil, "*Err", Pico);
+ final static Symbol Msg = mkSymbol(Nil, "*Msg", Pico);
+ final static Symbol Uni = mkSymbol(Nil, "*Uni", Pico);
+ final static Symbol Adr = mkSymbol(Nil, "*Adr", Pico);
+ final static Symbol Bye = mkSymbol(Nil, "*Bye", Pico);
+
+ final static Symbol Quote = mkSymbol(Zero, "quote", Pico);
+ final static Symbol Meth = mkSymbol(One, "meth", Pico);
final static String Delim = " \t\n\r\"'(),[]`~{}";
@@ -395,6 +396,7 @@ public class PicoLisp {
load(null, '?', Nil);
}
unwind(null);
+ Env.Intern = pico;
Env.Args = null;
Env.Next = 0;
Env.Task = Env.Make = Env.Yoke = null;
@@ -449,6 +451,7 @@ public class PicoLisp {
final static Any execError(Any x) {return err(null, x, "Can't execute");}
final static Any protError(Any x) {return err(null, x, "Protected symbol");}
final static Any symError(Any x) {return err(null, x, "Symbol expected");}
+ final static Any symNsError(Any ex, Any x) {return err(ex, x, "Bad symbol namespace");}
final static Any argError(Any ex, Any x) {return err(ex, x, "Bad argument");}
final static Any cntError(Any ex, Any x) {return err(ex, x, "Small number expected");}
final static void needVar(Any ex, Any x) {if (x instanceof Number) err(ex, x, "Variable expected");}
@@ -459,6 +462,7 @@ public class PicoLisp {
final static Any load(Any ex, char pr, Any x) {
if (x instanceof Symbol && firstChar(x) == '-')
return ((Symbol)x).parse(true,null).eval();
+ Symbol ns = Env.Intern;
Env.pushInFile(x.rdOpen(ex));
Transient.clear();
x = Nil;
@@ -477,6 +481,7 @@ public class PicoLisp {
InFile.Chr = 0;
}
if (y == Nil) {
+ Env.Intern = ns;
Env.popInFiles();
Transient.clear();
return x;
@@ -580,7 +585,7 @@ public class PicoLisp {
final static Any mkStr(StringBuilder sb) {return mkStr(sb.toString());}
final static Symbol mkSymbol(Any val) {return new Symbol(val, null);}
- final static Symbol mkSymbol(Any val, String nm, HashMap<String,Symbol> table) {
+ final static Symbol mkSymbol(Any val, String nm, Namespace table) {
Symbol sym;
if ((sym = table.get(nm)) == null) {
sym = new Symbol(val, nm);
@@ -597,13 +602,6 @@ public class PicoLisp {
return new Number((new BigDecimal(s)).setScale(scl, RoundingMode.HALF_UP).unscaledValue());
}
- final static Any strToAtom(String s) {
- if (s.equals("NIL"))
- return Nil;
- try {return strToNum(s, ((Number)Scl.Car).Cnt);}
- catch (NumberFormatException e) {return mkSymbol(Nil, s, Intern);}
- }
-
final static Any format(Any z, int scl, Any x) {
char sep = '.', ign = '\0';
if (x instanceof Cell) {
@@ -638,7 +636,7 @@ public class PicoLisp {
return res;
}
- final static Any all(HashMap<String,Symbol> table) {
+ final static Any all(Namespace table) {
Any x = Nil;
for (Iterator<Symbol> it = table.values().iterator(); it.hasNext();)
x = new Cell(it.next(), x);
@@ -1446,15 +1444,31 @@ public class PicoLisp {
}
final Any rdAtom(int c) {
+ Namespace table = Env.intern();
StringBuilder sb = new StringBuilder();
sb.append((char)c);
- while (Chr > 0 && Delim.indexOf(Chr) < 0) {
- if (Chr == '\\')
- get();
- sb.append((char)Chr);
+ while (Chr > 0) {
+ if (Chr == '~') {
+ Symbol s = mkSymbol(null, sb.toString(), table);
+ if (!(((Symbol)s.Car).Obj instanceof Namespace))
+ symNsError(null, s);
+ table = (Namespace)((Symbol)s.Car).Obj;
+ sb = new StringBuilder();
+ }
+ else {
+ if (Delim.indexOf(Chr) >= 0)
+ break;
+ if (Chr == '\\')
+ get();
+ sb.append((char)Chr);
+ }
get();
}
- return strToAtom(sb.toString());
+ String s = sb.toString();
+ if (s.equals("NIL"))
+ return Nil;
+ try {return strToNum(s, ((Number)Scl.Car).Cnt);}
+ catch (NumberFormatException e) {return mkSymbol(Nil, s, table);}
}
final Any rdList() {
@@ -1609,7 +1623,8 @@ public class PicoLisp {
sb.append((char)Chr);
while (get() >= '0' && Chr <= '9' || Chr == '.')
sb.append((char)Chr);
- return strToAtom(sb.toString());
+ try {return strToNum(sb.toString(), ((Number)Scl.Car).Cnt);}
+ catch (NumberFormatException e) {}
}
String s = x.name();
if (Chr >= 'A' && Chr <= 'Z' || Chr == '\\' || Chr >= 'a' && Chr <= 'z' || s.indexOf(Chr) >= 0) {
@@ -1623,7 +1638,7 @@ public class PicoLisp {
sb.append((char)Chr);
}
s = sb.toString();
- return s.equals("NIL")? Nil : mkSymbol(Nil, s, Intern);
+ return s.equals("NIL")? Nil : mkSymbol(Nil, s, Env.intern());
}
c = (char)Chr;
get();
@@ -1690,15 +1705,17 @@ public class PicoLisp {
final static class Env {
int Next, ArgC, Trace;
Bind Bind;
+ Symbol Intern;
Any Arg, Args[], Cls, Key, Task, Make, Yoke;
InFrame InFrames;
OutFrame OutFrames;
- Env() {}
+ Env() {Intern = pico;}
Env(Env env) {
Next = env.Next; ArgC = env.ArgC; Trace = env.Trace;
Bind = env.Bind;
+ Intern = env.Intern;
Arg = env.Arg; Args = env.Args;
Cls = env.Cls; Key = env.Key;
Task = env.Task;
@@ -1706,6 +1723,10 @@ public class PicoLisp {
InFrames = env.InFrames; OutFrames = env.OutFrames;
}
+ final Namespace intern() {
+ return (Namespace)((Symbol)Intern.Car).Obj;
+ }
+
final void pushInFile(InFrame in) {
InFrames = in;
InFile = InFiles[in.Rd.Fd];
@@ -1777,6 +1798,8 @@ public class PicoLisp {
}
}
+ final static class Namespace extends HashMap<String,Symbol> {}
+
static abstract class Any {
Any Car, Cdr;
@@ -2400,7 +2423,7 @@ public class PicoLisp {
return '$' + s;
}
- if (Intern.get(Name) == this) {
+ if (Env.intern().get(Name) == this) {
if (Name.equals("."))
return "\\.";
StringBuilder sb = new StringBuilder();
diff --git a/lib/map b/lib/map
@@ -29,7 +29,7 @@ adr (585 . "@src64/main.l")
alarm (471 . "@src64/main.l")
all (788 . "@src64/sym.l")
and (1613 . "@src64/flow.l")
-any (3965 . "@src64/io.l")
+any (3964 . "@src64/io.l")
append (1338 . "@src64/subr.l")
apply (713 . "@src64/apply.l")
arg (2365 . "@src64/main.l")
@@ -82,12 +82,12 @@ cdddr (245 . "@src64/subr.l")
cddr (79 . "@src64/subr.l")
cdr (17 . "@src64/subr.l")
chain (1141 . "@src64/subr.l")
-char (3447 . "@src64/io.l")
+char (3446 . "@src64/io.l")
chop (1219 . "@src64/sym.l")
circ (816 . "@src64/subr.l")
circ? (2402 . "@src64/subr.l")
clip (1799 . "@src64/subr.l")
-close (4378 . "@src64/io.l")
+close (4377 . "@src64/io.l")
cmd (2967 . "@src64/main.l")
cnt (1413 . "@src64/apply.l")
co (2537 . "@src64/flow.l")
@@ -98,7 +98,7 @@ cond (1908 . "@src64/flow.l")
connect (224 . "@src64/net.l")
cons (747 . "@src64/subr.l")
copy (1225 . "@src64/subr.l")
-ctl (4251 . "@src64/io.l")
+ctl (4250 . "@src64/io.l")
ctty (2765 . "@src64/main.l")
cut (1922 . "@src64/sym.l")
date (2479 . "@src64/main.l")
@@ -115,14 +115,14 @@ dir (2898 . "@src64/main.l")
dm (545 . "@src64/flow.l")
do (2130 . "@src64/flow.l")
e (2911 . "@src64/flow.l")
-echo (4409 . "@src64/io.l")
+echo (4408 . "@src64/io.l")
env (597 . "@src64/main.l")
-eof (3524 . "@src64/io.l")
-eol (3515 . "@src64/io.l")
-err (4231 . "@src64/io.l")
+eof (3523 . "@src64/io.l")
+eol (3514 . "@src64/io.l")
+err (4230 . "@src64/io.l")
errno (1368 . "@src64/main.l")
eval (175 . "@src64/flow.l")
-ext (5143 . "@src64/io.l")
+ext (5142 . "@src64/io.l")
ext? (1157 . "@src64/sym.l")
extern (1023 . "@src64/sym.l")
extra (1258 . "@src64/flow.l")
@@ -137,13 +137,13 @@ find (1322 . "@src64/apply.l")
fish (1613 . "@src64/apply.l")
flg? (2445 . "@src64/subr.l")
flip (1699 . "@src64/subr.l")
-flush (5118 . "@src64/io.l")
+flush (5117 . "@src64/io.l")
fold (3512 . "@src64/sym.l")
for (2219 . "@src64/flow.l")
fork (3253 . "@src64/flow.l")
format (2089 . "@src64/big.l")
free (2055 . "@src64/db.l")
-from (3543 . "@src64/io.l")
+from (3542 . "@src64/io.l")
full (1075 . "@src64/subr.l")
fun? (750 . "@src64/sym.l")
gc (435 . "@src64/gc.l")
@@ -156,14 +156,14 @@ gt0 (2718 . "@src64/big.l")
hash (2976 . "@src64/big.l")
head (1820 . "@src64/subr.l")
heap (517 . "@src64/main.l")
-hear (3228 . "@src64/io.l")
+hear (3227 . "@src64/io.l")
host (190 . "@src64/net.l")
id (1028 . "@src64/db.l")
idx (2162 . "@src64/sym.l")
if (1794 . "@src64/flow.l")
if2 (1813 . "@src64/flow.l")
ifn (1854 . "@src64/flow.l")
-in (4191 . "@src64/io.l")
+in (4190 . "@src64/io.l")
inc (2256 . "@src64/big.l")
index (2637 . "@src64/subr.l")
info (2802 . "@src64/main.l")
@@ -172,7 +172,7 @@ ipid (3198 . "@src64/flow.l")
isa (961 . "@src64/flow.l")
job (1418 . "@src64/flow.l")
journal (971 . "@src64/db.l")
-key (3376 . "@src64/io.l")
+key (3375 . "@src64/io.l")
kill (3230 . "@src64/flow.l")
last (2044 . "@src64/subr.l")
le0 (2693 . "@src64/big.l")
@@ -180,14 +180,14 @@ length (2741 . "@src64/subr.l")
let (1468 . "@src64/flow.l")
let? (1529 . "@src64/flow.l")
lieu (1157 . "@src64/db.l")
-line (3699 . "@src64/io.l")
-lines (3852 . "@src64/io.l")
+line (3698 . "@src64/io.l")
+lines (3851 . "@src64/io.l")
link (1172 . "@src64/subr.l")
lisp (2037 . "@src64/main.l")
list (887 . "@src64/subr.l")
listen (157 . "@src64/net.l")
lit (150 . "@src64/flow.l")
-load (4168 . "@src64/io.l")
+load (4167 . "@src64/io.l")
lock (1185 . "@src64/db.l")
loop (2162 . "@src64/flow.l")
low? (3378 . "@src64/sym.l")
@@ -237,30 +237,30 @@ offset (2677 . "@src64/subr.l")
on (1708 . "@src64/sym.l")
onOff (1738 . "@src64/sym.l")
one (1771 . "@src64/sym.l")
-open (4335 . "@src64/io.l")
+open (4334 . "@src64/io.l")
opid (3214 . "@src64/flow.l")
opt (3088 . "@src64/main.l")
or (1629 . "@src64/flow.l")
-out (4211 . "@src64/io.l")
+out (4210 . "@src64/io.l")
pack (1270 . "@src64/sym.l")
pair (2394 . "@src64/subr.l")
pass (754 . "@src64/apply.l")
pat? (736 . "@src64/sym.l")
path (1244 . "@src64/io.l")
-peek (3431 . "@src64/io.l")
+peek (3430 . "@src64/io.l")
pick (1369 . "@src64/apply.l")
-pipe (4272 . "@src64/io.l")
-poll (3320 . "@src64/io.l")
+pipe (4271 . "@src64/io.l")
+poll (3319 . "@src64/io.l")
pool (651 . "@src64/db.l")
pop (1898 . "@src64/sym.l")
port (5 . "@src64/net.l")
-pr (5226 . "@src64/io.l")
+pr (5225 . "@src64/io.l")
pre? (1536 . "@src64/sym.l")
-prin (5042 . "@src64/io.l")
-prinl (5056 . "@src64/io.l")
-print (5082 . "@src64/io.l")
-println (5113 . "@src64/io.l")
-printsp (5098 . "@src64/io.l")
+prin (5041 . "@src64/io.l")
+prinl (5055 . "@src64/io.l")
+print (5081 . "@src64/io.l")
+println (5112 . "@src64/io.l")
+printsp (5097 . "@src64/io.l")
prior (2713 . "@src64/subr.l")
prog (1749 . "@src64/flow.l")
prog1 (1757 . "@src64/flow.l")
@@ -280,12 +280,12 @@ rand (3003 . "@src64/big.l")
range (997 . "@src64/subr.l")
rank (3036 . "@src64/subr.l")
raw (449 . "@src64/main.l")
-rd (5160 . "@src64/io.l")
-read (2656 . "@src64/io.l")
+rd (5159 . "@src64/io.l")
+read (2655 . "@src64/io.l")
replace (1499 . "@src64/subr.l")
rest (2394 . "@src64/main.l")
reverse (1678 . "@src64/subr.l")
-rewind (5126 . "@src64/io.l")
+rewind (5125 . "@src64/io.l")
rollback (1898 . "@src64/db.l")
rot (848 . "@src64/subr.l")
run (306 . "@src64/flow.l")
@@ -298,33 +298,33 @@ set (1607 . "@src64/sym.l")
setq (1640 . "@src64/sym.l")
sigio (487 . "@src64/main.l")
size (2809 . "@src64/subr.l")
-skip (3501 . "@src64/io.l")
+skip (3500 . "@src64/io.l")
sort (3965 . "@src64/subr.l")
sp? (727 . "@src64/sym.l")
-space (5060 . "@src64/io.l")
+space (5059 . "@src64/io.l")
split (1592 . "@src64/subr.l")
stack (546 . "@src64/main.l")
state (1998 . "@src64/flow.l")
stem (1989 . "@src64/subr.l")
-str (4019 . "@src64/io.l")
+str (4018 . "@src64/io.l")
str? (1136 . "@src64/sym.l")
strip (1576 . "@src64/subr.l")
struct (1828 . "@src64/main.l")
sub? (1569 . "@src64/sym.l")
sum (1460 . "@src64/apply.l")
super (1214 . "@src64/flow.l")
-sym (4005 . "@src64/io.l")
+sym (4004 . "@src64/io.l")
sym? (2434 . "@src64/subr.l")
symbols (942 . "@src64/sym.l")
-sync (3188 . "@src64/io.l")
+sync (3187 . "@src64/io.l")
sys (3050 . "@src64/flow.l")
t (1740 . "@src64/flow.l")
tail (1911 . "@src64/subr.l")
-tell (3260 . "@src64/io.l")
+tell (3259 . "@src64/io.l")
text (1398 . "@src64/sym.l")
throw (2482 . "@src64/flow.l")
tick (3166 . "@src64/flow.l")
-till (3610 . "@src64/io.l")
+till (3609 . "@src64/io.l")
time (2612 . "@src64/main.l")
touch (1172 . "@src64/sym.l")
trim (1759 . "@src64/subr.l")
@@ -341,12 +341,12 @@ use (1562 . "@src64/flow.l")
usec (2717 . "@src64/main.l")
val (1588 . "@src64/sym.l")
version (3102 . "@src64/main.l")
-wait (3150 . "@src64/io.l")
+wait (3149 . "@src64/io.l")
when (1873 . "@src64/flow.l")
while (2050 . "@src64/flow.l")
wipe (3253 . "@src64/sym.l")
with (1321 . "@src64/flow.l")
-wr (5243 . "@src64/io.l")
+wr (5242 . "@src64/io.l")
xchg (1663 . "@src64/sym.l")
xor (1690 . "@src64/flow.l")
x| (2887 . "@src64/big.l")
diff --git a/src/vers.h b/src/vers.h
@@ -1 +1 @@
-static byte Version[4] = {3,1,0,9};
+static byte Version[4] = {3,1,0,10};
diff --git a/src64/tags b/src64/tags
@@ -559,7 +559,7 @@ doAdr main.l 585
doAlarm main.l 471
doAll sym.l 788
doAnd flow.l 1613
-doAny io.l 3965
+doAny io.l 3964
doAppend subr.l 1338
doApply apply.l 713
doArg main.l 2365
@@ -617,12 +617,12 @@ doCdddr subr.l 245
doCddr subr.l 79
doCdr subr.l 17
doChain subr.l 1141
-doChar io.l 3447
+doChar io.l 3446
doChop sym.l 1219
doCirc subr.l 816
doCircQ subr.l 2402
doClip subr.l 1799
-doClose io.l 4378
+doClose io.l 4377
doCmd main.l 2967
doCnt apply.l 1413
doCo flow.l 2537
@@ -634,7 +634,7 @@ doCond flow.l 1908
doConnect net.l 224
doCons subr.l 747
doCopy subr.l 1225
-doCtl io.l 4251
+doCtl io.l 4250
doCtty main.l 2765
doCut sym.l 1922
doDate main.l 2479
@@ -652,18 +652,18 @@ doDiv big.l 2513
doDm flow.l 545
doDo flow.l 2130
doE flow.l 2911
-doEcho io.l 4409
+doEcho io.l 4408
doEnv main.l 597
-doEof io.l 3524
-doEol io.l 3515
+doEof io.l 3523
+doEol io.l 3514
doEq subr.l 2059
doEq0 subr.l 2173
doEqT subr.l 2181
doEqual subr.l 2115
-doErr io.l 4231
+doErr io.l 4230
doErrno main.l 1368
doEval flow.l 175
-doExt io.l 5143
+doExt io.l 5142
doExtQ sym.l 1157
doExtern sym.l 1023
doExtra flow.l 1258
@@ -678,13 +678,13 @@ doFind apply.l 1322
doFish apply.l 1613
doFlgQ subr.l 2445
doFlip subr.l 1699
-doFlush io.l 5118
+doFlush io.l 5117
doFold sym.l 3512
doFor flow.l 2219
doFork flow.l 3253
doFormat big.l 2089
doFree db.l 2055
-doFrom io.l 3543
+doFrom io.l 3542
doFull subr.l 1075
doFunQ sym.l 750
doGc gc.l 435
@@ -699,7 +699,7 @@ doGt0 big.l 2718
doHash big.l 2976
doHead subr.l 1820
doHeap main.l 517
-doHear io.l 3228
+doHear io.l 3227
doHide sym.l 1090
doHost net.l 190
doId db.l 1028
@@ -707,7 +707,7 @@ doIdx sym.l 2162
doIf flow.l 1794
doIf2 flow.l 1813
doIfn flow.l 1854
-doIn io.l 4191
+doIn io.l 4190
doInc big.l 2256
doIndex subr.l 2637
doInfo main.l 2802
@@ -716,7 +716,7 @@ doIpid flow.l 3198
doIsa flow.l 961
doJob flow.l 1418
doJournal db.l 971
-doKey io.l 3376
+doKey io.l 3375
doKill flow.l 3230
doLast subr.l 2044
doLe subr.l 2237
@@ -725,14 +725,14 @@ doLength subr.l 2741
doLet flow.l 1468
doLetQ flow.l 1529
doLieu db.l 1157
-doLine io.l 3699
-doLines io.l 3852
+doLine io.l 3698
+doLines io.l 3851
doLink subr.l 1172
doLisp main.l 2037
doList subr.l 887
doListen net.l 157
doLit flow.l 150
-doLoad io.l 4168
+doLoad io.l 4167
doLock db.l 1185
doLoop flow.l 2162
doLowQ sym.l 3378
@@ -786,30 +786,30 @@ doOffset subr.l 2677
doOn sym.l 1708
doOnOff sym.l 1738
doOne sym.l 1771
-doOpen io.l 4335
+doOpen io.l 4334
doOpid flow.l 3214
doOpt main.l 3088
doOr flow.l 1629
-doOut io.l 4211
+doOut io.l 4210
doPack sym.l 1270
doPair subr.l 2394
doPass apply.l 754
doPatQ sym.l 736
doPath io.l 1244
-doPeek io.l 3431
+doPeek io.l 3430
doPick apply.l 1369
-doPipe io.l 4272
-doPoll io.l 3320
+doPipe io.l 4271
+doPoll io.l 3319
doPool db.l 651
doPop sym.l 1898
doPort net.l 5
-doPr io.l 5226
+doPr io.l 5225
doPreQ sym.l 1536
-doPrin io.l 5042
-doPrinl io.l 5056
-doPrint io.l 5082
-doPrintln io.l 5113
-doPrintsp io.l 5098
+doPrin io.l 5041
+doPrinl io.l 5055
+doPrint io.l 5081
+doPrintln io.l 5112
+doPrintsp io.l 5097
doPrior subr.l 2713
doProg flow.l 1749
doProg1 flow.l 1757
@@ -830,13 +830,13 @@ doRand big.l 3003
doRange subr.l 997
doRank subr.l 3036
doRaw main.l 449
-doRd io.l 5160
-doRead io.l 2656
+doRd io.l 5159
+doRead io.l 2655
doRem big.l 2572
doReplace subr.l 1499
doRest main.l 2394
doReverse subr.l 1678
-doRewind io.l 5126
+doRewind io.l 5125
doRollback db.l 1898
doRot subr.l 848
doRun flow.l 306
@@ -852,15 +852,15 @@ doSetq sym.l 1640
doShift big.l 2627
doSigio main.l 487
doSize subr.l 2809
-doSkip io.l 3501
+doSkip io.l 3500
doSort subr.l 3965
doSpQ sym.l 727
-doSpace io.l 5060
+doSpace io.l 5059
doSplit subr.l 1592
doStack main.l 546
doState flow.l 1998
doStem subr.l 1989
-doStr io.l 4019
+doStr io.l 4018
doStrQ sym.l 1136
doStrip subr.l 1576
doStruct main.l 1828
@@ -868,18 +868,18 @@ doSub big.l 2209
doSubQ sym.l 1569
doSum apply.l 1460
doSuper flow.l 1214
-doSym io.l 4005
+doSym io.l 4004
doSymQ subr.l 2434
doSymbols sym.l 942
-doSync io.l 3188
+doSync io.l 3187
doSys flow.l 3050
doT flow.l 1740
doTail subr.l 1911
-doTell io.l 3260
+doTell io.l 3259
doText sym.l 1398
doThrow flow.l 2482
doTick flow.l 3166
-doTill io.l 3610
+doTill io.l 3609
doTime main.l 2612
doTouch sym.l 1172
doTrace flow.l 2950
@@ -897,12 +897,12 @@ doUse flow.l 1562
doUsec main.l 2717
doVal sym.l 1588
doVersion main.l 3102
-doWait io.l 3150
+doWait io.l 3149
doWhen flow.l 1873
doWhile flow.l 2050
doWipe sym.l 3253
doWith flow.l 1321
-doWr io.l 5243
+doWr io.l 5242
doXchg sym.l 1663
doXor flow.l 1690
doYield flow.l 2706
@@ -911,7 +911,7 @@ doZap sym.l 1186
doZero sym.l 1756
endString_E main.l 2314
eofErr err.l 534
-eolA_F io.l 3684
+eolA_F io.l 3683
equalAE_F main.l 770
erOpenEXY io.l 1628
errEXYZ err.l 33
@@ -932,10 +932,10 @@ extErrEX err.l 434
extNmCE_X db.l 64
externX_E sym.l 266
extraXY_FCYZ flow.l 1285
-fdRdSetCZL io.l 2718
-fdSetCL_X io.l 2706
-fdSetC_Y io.l 3309
-fdWrSetCZL io.l 2725
+fdRdSetCZL io.l 2717
+fdSetCL_X io.l 2705
+fdSetC_Y io.l 3308
+fdWrSetCZL io.l 2724
fetchCharC_AC main.l 1871
fileObjE_AC db.l 237
fileObjX_AC db.l 211
@@ -974,7 +974,7 @@ idxDelXY_E sym.l 2292
idxGetXY_E sym.l 2205
idxPutXY_E sym.l 2222
ignLog db.l 924
-inReadyC_F io.l 2694
+inReadyC_F io.l 2693
incE_A big.l 1491
initInFileAC_A io.l 65
initInFileA_A io.l 63
@@ -998,7 +998,7 @@ jnlFileno_A db.l 344
joinLocalCX flow.l 2837
lisp main.l 2080
loadAllX_E main.l 162
-loadBEX_E io.l 4072
+loadBEX_E io.l 4071
lockErr err.l 607
lockFileAC io.l 28
lockJnl db.l 352
@@ -1038,7 +1038,7 @@ needVarAX err.l 346
needVarEX err.l 356
newBlock_X db.l 449
newIdEX_X db.l 492
-newline io.l 4665
+newline io.l 4664
noFdErrX err.l 529
nonblockingA_A io.l 51
numErrAX err.l 412
@@ -1046,20 +1046,20 @@ numErrEX err.l 414
oct3C_CA db.l 180
openErrEX err.l 500
oruAE_A big.l 394
-outAoA io.l 4714
-outNameE io.l 4738
-outNumE io.l 4674
-outOctA io.l 4701
-outStringC io.l 4728
-outStringS io.l 4726
-outWordA io.l 4681
+outAoA io.l 4713
+outNameE io.l 4737
+outNumE io.l 4673
+outOctA io.l 4700
+outStringC io.l 4727
+outStringS io.l 4725
+outWordA io.l 4680
packAoACX_CX db.l 108
packECX_CX sym.l 1303
packExtNmX_E db.l 87
packOctACX_CX db.l 120
pairErrAX err.l 438
pairErrEX err.l 440
-parseBCE_E io.l 3893
+parseBCE_E io.l 3892
pathStringE_SZ io.l 1172
pico glob.l 142
pipeErrX err.l 510
@@ -1070,14 +1070,14 @@ popOutFiles io.l 1914
prByteCEXY io.l 680
prCntCE io.l 703
prE io.l 728
-prExtNmX io.l 4693
-prNameX io.l 4746
+prExtNmX io.l 4692
+prNameX io.l 4745
prTellEZ io.l 722
preCEXY_F sym.l 1470
-prinE io.l 4987
-prinE_E io.l 4978
-printE io.l 4765
-printE_E io.l 4756
+prinE io.l 4986
+prinE_E io.l 4977
+printE io.l 4764
+printE_E io.l 4755
propEC_E sym.l 2745
protErrEX err.l 386
pushCtlFilesY io.l 1858
@@ -1087,7 +1087,7 @@ pushOutFilesY io.l 1842
putACE sym.l 2491
putBlockBZ db.l 612
putSrcEC_E flow.l 25
-putStdoutB io.l 4622
+putStdoutB io.l 4621
putStringB main.l 2291
putTellBZ io.l 996
putUdpBZ net.l 377
@@ -1098,14 +1098,14 @@ rdBlockZ_Z db.l 380
rdBytesCEX_F io.l 246
rdBytesNbCEX_F io.l 267
rdHear_FE io.l 1075
-rdList_E io.l 2170
+rdList_E io.l 2169
rdLockDb db.l 255
rdLockFileC io.l 26
rdOpenEXY io.l 1354
-rdSetCL_F io.l 2732
-rdSetRdyCL_F io.l 2742
-readA_E io.l 2308
-readC_E io.l 2492
+rdSetCL_F io.l 2731
+rdSetRdyCL_F io.l 2741
+readA_E io.l 2307
+readC_E io.l 2491
redefMsgEC flow.l 4
redefineCE flow.l 109
reentErrEX err.l 476
@@ -1150,7 +1150,7 @@ sizeCE_C subr.l 2929
skipC_A io.l 2007
slowNbC_FA io.l 207
slowZ_F io.l 185
-space io.l 4669
+space io.l 4668
stdinByte_A io.l 425
stkErr err.l 395
stkErrE err.l 397
@@ -1177,7 +1177,7 @@ testEscA_F io.l 2050
throwErrZX flow.l 2507
tmDateC_E main.l 2408
tmTimeY_E main.l 2595
-tokenCE_E io.l 2522
+tokenCE_E io.l 2521
trSyncErrX err.l 602
traceCY flow.l 3022
trimE_E subr.l 1769
@@ -1199,7 +1199,7 @@ unsync io.l 1058
unwindC_Z err.l 165
varErrAX err.l 456
varErrEX err.l 458
-waitFdCEX_A io.l 2764
+waitFdCEX_A io.l 2763
waitPidErrX err.l 520
wifsignaledS_F sys/x86-64.linux.code.l 27
wifstoppedS_F sys/x86-64.linux.code.l 22
@@ -1214,7 +1214,7 @@ wrLockDb db.l 262
wrLockFileC io.l 23
wrLogErr err.l 586
wrOpenEXY io.l 1495
-wrSetCL_F io.l 2737
+wrSetCL_F io.l 2736
wrSyncErrX err.l 575
wtermsigS_A sys/x86-64.linux.code.l 34
xCntAX_FA main.l 2262
diff --git a/src64/version.l b/src64/version.l
@@ -1,6 +1,6 @@
-# 09jul12abu
+# 17jul12abu
# (c) Software Lab. Alexander Burger
-(de *Version 3 1 0 9)
+(de *Version 3 1 0 10)
# vi:et:ts=3:sw=3