• R/O
  • SSH

quipu: 提交

quipu mercurial repository


Commit MetaInfo

修訂4e914212d0dfbb3fd94b7157024526a81b1e795f (tree)
時間2018-12-06 03:51:25
作者Agustina Arzille <avarzille@rise...>
CommiterAgustina Arzille

Log Message

Some fixes to the tuple interfaces

Change Summary

差異

diff -r db7bd4390ef9 -r 4e914212d0df builtins.cpp
--- a/builtins.cpp Wed Dec 05 03:37:49 2018 +0000
+++ b/builtins.cpp Wed Dec 05 15:51:25 2018 -0300
@@ -1343,7 +1343,7 @@
13431343
13441344 static inline void
13451345 import_sym (interpreter *interp, package *p,
1346- object sym, object as = UNBOUND)
1346+ object sym, object as = UNBOUND, bool locked = false)
13471347 {
13481348 object snam;
13491349
@@ -1362,7 +1362,7 @@
13621362
13631363 if (as == UNBOUND)
13641364 {
1365- inherit_sym (interp, *sv, interp->xpkg);
1365+ inherit_sym (interp, *sv, interp->xpkg, locked);
13661366 return;
13671367 }
13681368
@@ -1452,6 +1452,8 @@
14521452 import_sym (interp, p, syms, as);
14531453 else
14541454 {
1455+ lwlock_guard g (&as_package(interp->xpkg)->lock);
1456+
14551457 for (*sym_d = syms, *al_d = as; *sym_d != NIL;
14561458 *sym_d = xcdr (*sym_d), *al_d = xcdr (*al_d))
14571459 {
@@ -1459,7 +1461,7 @@
14591461 import_alias_error (interp, "not be dotted");
14601462
14611463 import_sym (interp, p, *sym_a = xcar (*sym_d),
1462- *al_d == NIL ? UNBOUND : (*al_a = xcar (*al_d)));
1464+ *al_d == NIL ? UNBOUND : (*al_a = xcar (*al_d)), true);
14631465 }
14641466 }
14651467 }
diff -r db7bd4390ef9 -r 4e914212d0df symbol.cpp
--- a/symbol.cpp Wed Dec 05 03:37:49 2018 +0000
+++ b/symbol.cpp Wed Dec 05 15:51:25 2018 -0300
@@ -141,10 +141,10 @@
141141 return (interp->retval);
142142 }
143143
144-object inherit_sym (interpreter *interp, object sym, object pkg)
144+object inherit_sym (interpreter *interp, object sym, object pkg, bool locked)
145145 {
146146 package *p = as_package (pkg);
147- bool tst = singlethr_p ();
147+ bool tst = locked || singlethr_p ();
148148
149149 if (!tst)
150150 lwlock_grab (&p->lock);
diff -r db7bd4390ef9 -r 4e914212d0df symbol.h
--- a/symbol.h Wed Dec 05 03:37:49 2018 +0000
+++ b/symbol.h Wed Dec 05 15:51:25 2018 -0300
@@ -136,7 +136,7 @@
136136 }
137137
138138 QP_EXPORT object inherit_sym (interpreter *__interp,
139- object __symbol, object __pkg);
139+ object __symbol, object __pkg, bool __locked = false);
140140
141141 struct string;
142142 struct reader;
diff -r db7bd4390ef9 -r 4e914212d0df tuple.cpp
--- a/tuple.cpp Wed Dec 05 03:37:49 2018 +0000
+++ b/tuple.cpp Wed Dec 05 15:51:25 2018 -0300
@@ -535,7 +535,7 @@
535535
536536 return (interp->retval);
537537 }
538- else if (!array_p (token) || as_array(token)->len < 2)
538+ else if (!array_p (token) || as_array(token)->len <= NODE_OVERHEAD)
539539 interp->raise2 ("arg-error", "%iter:tuple: invalid token");
540540 else if (!adv)
541541 qp_return (xaref (token, 0));
@@ -545,7 +545,7 @@
545545 {
546546 if (*tmp == UNBOUND)
547547 break;
548- else if (!array_p (*tmp) || as_array(*tmp)->len < 2)
548+ else if (!array_p (*tmp) || as_array(*tmp)->len <= NODE_OVERHEAD)
549549 interp->raise2 ("arg-error", "%iter:tuple: invalid token");
550550
551551 *tmp = xaref (*tmp, NODE_OVERHEAD);
@@ -672,7 +672,6 @@
672672 tuple *tp1;
673673 tuple *tp2;
674674 tuple *ret;
675- object space[SP_SIZE];
676675 tuple_args args;
677676 tuple::iterator i1;
678677 tuple::iterator i2;
Show on old repository browser