- fixed GC protection.
This commit is contained in:
parent
8fcb56c399
commit
2f1b033618
|
@ -3,15 +3,15 @@
|
|||
|
||||
#define ECAST(name, type) type* name = (type*)e
|
||||
#define sidx 4
|
||||
#define SET(i, v) S48_VECTOR_SET(r, i, v)
|
||||
#define SET(i, v) temp2 = v; S48_VECTOR_SET(r, i, temp2)
|
||||
#define SETSIZE(i) r = s48_make_vector(sidx+i, S48_FALSE)
|
||||
|
||||
s48_value scx_enter_event(XEvent* e) {
|
||||
s48_value r = S48_FALSE;
|
||||
s48_value temp = S48_FALSE;
|
||||
s48_value temp, temp2 = S48_FALSE;
|
||||
int i;
|
||||
S48_DECLARE_GC_PROTECT(2);
|
||||
S48_GC_PROTECT_2(r, temp);
|
||||
S48_DECLARE_GC_PROTECT(3);
|
||||
S48_GC_PROTECT_3(r, temp, temp2);
|
||||
|
||||
switch (e->type) {
|
||||
|
||||
|
@ -281,7 +281,7 @@ s48_value scx_enter_event(XEvent* e) {
|
|||
}
|
||||
|
||||
SET(sidx+1, temp);
|
||||
}
|
||||
} break;
|
||||
|
||||
case MappingNotify : {
|
||||
ECAST(q, XMappingEvent);
|
||||
|
@ -291,6 +291,10 @@ s48_value scx_enter_event(XEvent* e) {
|
|||
SET(sidx+2, s48_enter_integer(q->count));
|
||||
} break;
|
||||
|
||||
default: {
|
||||
SETSIZE(0);
|
||||
} break;
|
||||
|
||||
} // switch end
|
||||
|
||||
// XAnyEvent entries
|
||||
|
@ -304,7 +308,8 @@ s48_value scx_enter_event(XEvent* e) {
|
|||
// more??
|
||||
|
||||
// And the Event-Name
|
||||
r = s48_cons( Bit_To_Symbol(e->type, Event_Syms), r );
|
||||
temp2 = Bit_To_Symbol(e->type, Event_Syms);
|
||||
r = s48_cons(temp2, r);
|
||||
|
||||
S48_GC_UNPROTECT();
|
||||
return r;
|
||||
|
@ -335,17 +340,20 @@ s48_value scx_Get_Motion_Events(s48_value Xdisplay, s48_value Xwindow,
|
|||
SCX_EXTRACT_TIME(to),
|
||||
&n);
|
||||
s48_value v = s48_make_vector(n, S48_FALSE);
|
||||
s48_value l = S48_NULL;
|
||||
S48_DECLARE_GC_PROTECT(2);
|
||||
S48_GC_PROTECT_2(v,l);
|
||||
s48_value l = S48_NULL; s48_value t = S48_FALSE;
|
||||
S48_DECLARE_GC_PROTECT(3);
|
||||
|
||||
S48_GC_PROTECT_3(v, l, t);
|
||||
for (i = 0; i < n; i++) {
|
||||
l = s48_cons(SCX_ENTER_TIME(p[i].time),
|
||||
s48_cons(s48_enter_integer(p[i].x),
|
||||
s48_cons(s48_enter_integer(p[i].y), S48_NULL)));
|
||||
t = s48_enter_integer(p[i].y); l = s48_cons(t, S48_NULL);
|
||||
t = s48_enter_integer(p[i].x); l = s48_cons(t, l);
|
||||
t = SCX_ENTER_TIME(p[i].time); l = s48_cons(t, l);
|
||||
|
||||
S48_VECTOR_SET(v, i, l);
|
||||
}
|
||||
S48_GC_UNPROTECT();
|
||||
XFree((char*)p);
|
||||
S48_GC_UNPROTECT();
|
||||
|
||||
return v;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue