• R/O
  • SSH

quipu: Commit

quipu mercurial repository


Commit MetaInfo

Revisioneaedbafecbae8ec7461544cd3a3cb592f0579c20 (tree)
Time2018-02-22 03:34:47
AuthorAgustina Arzille <avarzille@rise...>
CommiterAgustina Arzille

Log Message

Fix valref interface

Change Summary

Incremental Difference

diff -r 98ac4ae36b19 -r eaedbafecbae compiler.cpp
--- a/compiler.cpp Tue Feb 20 18:21:59 2018 -0300
+++ b/compiler.cpp Wed Feb 21 15:34:47 2018 -0300
@@ -2875,8 +2875,7 @@
28752875 if (!symbol_p (h))
28762876 qp_return (expr);
28772877 else if ((x = lookup_ctv (env, h)) == h)
2878- {
2879- // XXX: Rewrite once packages are working.
2878+ { // XXX: Rewrite once packages are working.
28802879 if (!(as_varobj(h)->flags & symbol::ctv_flag) ||
28812880 !fct_p (interp->retval = symval (h)))
28822881 qp_return (expr);
diff -r 98ac4ae36b19 -r eaedbafecbae interp.cpp
--- a/interp.cpp Tue Feb 20 18:21:59 2018 -0300
+++ b/interp.cpp Wed Feb 21 15:34:47 2018 -0300
@@ -13,14 +13,14 @@
1313
1414 QP_DECLS_BEGIN
1515
16-valref::valref (interpreter *interp, object val)
16+valref_base::valref_base (valref_base *headp, object val)
1717 {
18- this->next = interp->values.next;
19- this->prev = &interp->values;
20- interp->values.next->prev = this;
18+ this->next = headp->next;
19+ this->prev = headp;
20+ headp->next->prev = this;
21+ this->value = val;
2122 atomic_mfence_rel ();
22- interp->values.prev->next = this;
23- this->value = val;
23+ this->prev->next = this;
2424 }
2525
2626 void interpreter::init ()
@@ -452,7 +452,7 @@
452452 {
453453 object fn = get_sighandler (interp, sig);
454454 if (fn != UNBOUND)
455- call_fct (interp, intobj (sig));
455+ call_fct (interp, fn, intobj (sig));
456456 }
457457
458458 void interpreter::handle_intrs ()
diff -r 98ac4ae36b19 -r eaedbafecbae interp.h
--- a/interp.h Tue Feb 20 18:21:59 2018 -0300
+++ b/interp.h Wed Feb 21 15:34:47 2018 -0300
@@ -23,19 +23,16 @@
2323 INTERP_SUSPENDED
2424 };
2525
26-class interpreter;
27-
28-// Reference to a GC-visible value.
29-class valref
26+class valref_base
3027 {
3128 public:
32- valref *prev;
33- valref *next;
29+ valref_base *prev;
30+ valref_base *next;
3431 object value;
3532
36- valref () : prev (nullptr), next (nullptr), value (UNBOUND) {}
37-
38- valref (interpreter *__interp, object __value);
33+ valref_base () : prev (nullptr), next (nullptr), value (UNBOUND) {}
34+
35+ valref_base (valref_base *__headp, object __value);
3936
4037 object& operator* ()
4138 {
@@ -47,7 +44,7 @@
4744 return (this->value);
4845 }
4946
50- ~valref ()
47+ ~valref_base ()
5148 {
5249 this->prev->next = this->prev;
5350 this->next->prev = this->next;
@@ -84,7 +81,7 @@
8481 intptr_t sigpend_mask[QP_NSIG / (sizeof (intptr_t) * 8) +
8582 (QP_NSIG % (sizeof (intptr_t) * 8) != 0)];
8683 intptr_t nsigpend;
87- valref values;
84+ valref_base values;
8885
8986 // Internal constants.
9087 enum
@@ -224,6 +221,16 @@
224221 # define QP_TALLOC(interp, size) (interp)->talloc (size)
225222 #endif
226223
224+// Reference to a GC-visible value.
225+class valref : public valref_base
226+{
227+public:
228+ valref () = delete;
229+
230+ valref (interpreter *__interp, object __value) :
231+ valref_base (&__interp->values, __value) {}
232+};
233+
227234 // Main thread's interpreter.
228235 QP_EXPORT interpreter *main_interp;
229236
diff -r 98ac4ae36b19 -r eaedbafecbae memory.cpp
--- a/memory.cpp Tue Feb 20 18:21:59 2018 -0300
+++ b/memory.cpp Wed Feb 21 15:34:47 2018 -0300
@@ -854,7 +854,8 @@
854854 for (dlist::iterator lk (&thrp->locks); lk.valid (); lk.adv ())
855855 ((varobj *)lk.getp ())->flags |= mask;
856856
857- for (valref *vp = ip2->values.next; vp != &ip2->values; vp = vp->next)
857+ for (valref_base *vp = ip2->values.next;
858+ vp != &ip2->values; vp = vp->next)
858859 gc_mark (vp->value, mask);
859860 }
860861
Show on old repository browser