2013-09-26 17:14:40 +02:00

110 lines
2.7 KiB
Plaintext

$NetBSD: patch-al,v 1.2 2013/03/28 21:25:52 joerg Exp $
--- libs/gib/gib_classes.c.orig 2003-11-29 02:01:31.000000000 +0000
+++ libs/gib/gib_classes.c
@@ -184,26 +184,32 @@ Object_Class_New_f (gib_object_t *obj, g
return 0;
}
+struct child_data {
+ const char **reply;
+ unsigned i;
+};
+
+static qboolean
+iterator (void *data_, gib_class_t *class, void *unused)
+{
+ struct child_data *data = data_;
+ data->reply[data->i++] = class->name;
+ return false;
+}
+
static int
Object_Class_Children_f (gib_object_t *obj, gib_method_t *method, void *data,
gib_object_t *sender, gib_message_t mesg)
{
- const char **reply;
+ struct child_data cb_data;
unsigned int size;
- unsigned int i = 0;
-
- static qboolean
- iterator (gib_class_t *class, void *unused)
- {
- reply[i++] = class->name;
- return false;
- }
-
+
size = llist_size (obj->class->children);
if (size) {
- reply = malloc (sizeof (char *) * size);
- llist_iterate (obj->class->children, LLIST_ICAST (iterator));
- GIB_Reply (obj, mesg, size, reply);
+ cb_data.reply = malloc (sizeof (char *) * size);
+ cb_data.i = 0;
+ llist_iterate (obj->class->children, iterator, &cb_data);
+ GIB_Reply (obj, mesg, size, cb_data.reply);
} else
GIB_Reply (obj, mesg, 0, NULL);
return 0;
@@ -600,6 +606,12 @@ Scrobj_Method_f (gib_object_t *obj, gib_
return 0;
}
+static void
+mtabfree (void *mtab, void *unused)
+{
+ free (mtab);
+}
+
void
GIB_Classes_Build_Scripted (const char *name, const char *parentname,
gib_tree_t *tree, gib_script_t *script)
@@ -610,21 +622,6 @@ GIB_Classes_Build_Scripted (const char *
gib_classdesc_t desc;
enum {CLASS, INSTANCE} mode = INSTANCE;
- static void
- mtabfree (void *mtab, void *unused)
- {
- free (mtab);
- }
-
- static const char *
- fname (const char *str)
- {
- if (mode == INSTANCE)
- return va ("__%s_%s__", name, str);
- else
- return va ("%s::%s", name, str);
- }
-
methods = llist_new (mtabfree, NULL, NULL);
cmethods = llist_new (mtabfree, NULL, NULL);
@@ -640,6 +637,7 @@ GIB_Classes_Build_Scripted (const char *
if (!strcmp (line->children->str,
"function")) {
gib_tree_t *cur, *last;
+ char *fname;
gib_methodtab_t *new = malloc (sizeof
(gib_methodtab_t));
Scrobj_method_t *data = malloc (sizeof
@@ -648,9 +646,13 @@ GIB_Classes_Build_Scripted (const char *
line->children->next->next;
last->next; last =
last->next);
+
+ if (mode == INSTANCE)
+ fname = va("__%s_%s__", name, line->children->next->str);
+ else
+ fname = va("%s::%s", name, line->children->next->str);
data->func = GIB_Function_Define
- (fname
- (line->children->next->str),
+ (fname,
last->str,
last->children,
script, NULL);