mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2025-05-11 02:00:51 +00:00
Beat __obj_exec_class into submission.
This commit is contained in:
parent
006c16807d
commit
01a7af17e5
4 changed files with 29 additions and 16 deletions
|
@ -113,6 +113,7 @@ class_t *extract_class (class_type_t *class_type);
|
||||||
const char *get_class_name (class_type_t *class_type, int pretty);
|
const char *get_class_name (class_type_t *class_type, int pretty);
|
||||||
struct symbol_s *class_symbol (class_type_t *class_type, int external);
|
struct symbol_s *class_symbol (class_type_t *class_type, int external);
|
||||||
void class_init (void);
|
void class_init (void);
|
||||||
|
void class_init_obj_module (void);
|
||||||
class_t *get_class (struct symbol_s *sym, int create);
|
class_t *get_class (struct symbol_s *sym, int create);
|
||||||
void class_add_methods (class_t *class, struct methodlist_s *methods);
|
void class_add_methods (class_t *class, struct methodlist_s *methods);
|
||||||
void class_add_protocols (class_t *class, protocollist_t *protocols);
|
void class_add_protocols (class_t *class, protocollist_t *protocols);
|
||||||
|
|
|
@ -75,15 +75,16 @@ type_t type_IMP = { ev_func, "IMP", ty_none,
|
||||||
{{&type_id, -3, {&type_id, &type_SEL}}}};
|
{{&type_id, -3, {&type_id, &type_SEL}}}};
|
||||||
type_t type_supermsg = { ev_func, ".supermsg", ty_none,
|
type_t type_supermsg = { ev_func, ".supermsg", ty_none,
|
||||||
{{&type_id, -3, {0, &type_SEL}}}};
|
{{&type_id, -3, {0, &type_SEL}}}};
|
||||||
type_t type_obj_exec_class = { ev_func, "function", ty_none,
|
|
||||||
{{&type_void, 1, { 0 }}}};
|
|
||||||
type_t type_Method = { ev_invalid, "Method" };
|
type_t type_Method = { ev_invalid, "Method" };
|
||||||
type_t type_Super = { ev_invalid, "Super" };
|
type_t type_Super = { ev_invalid, "Super" };
|
||||||
type_t type_method_description = { ev_invalid, "obj_method_description",
|
type_t type_method_description = { ev_invalid, "obj_method_description",
|
||||||
ty_struct };
|
ty_struct };
|
||||||
type_t type_category = { ev_invalid, "category", ty_struct};
|
type_t type_category = { ev_invalid, "category", ty_struct};
|
||||||
type_t type_ivar = { ev_invalid, "ivar", ty_struct};
|
type_t type_ivar = { ev_invalid, "ivar", ty_struct};
|
||||||
type_t type_module = { ev_invalid, "module", ty_struct};
|
type_t type_module = { ev_invalid, 0, ty_struct};
|
||||||
|
type_t type_moduleptr = { ev_pointer, 0, ty_none, {{&type_module}}};
|
||||||
|
type_t type_obj_exec_class = { ev_func, 0, ty_none,
|
||||||
|
{{&type_void, 1, { &type_moduleptr }}}};
|
||||||
|
|
||||||
type_t type_object = {ev_invalid, "object", ty_class};
|
type_t type_object = {ev_invalid, "object", ty_class};
|
||||||
type_t type_id = { ev_pointer, "id", ty_none, {{&type_object}}};
|
type_t type_id = { ev_pointer, "id", ty_none, {{&type_object}}};
|
||||||
|
@ -231,13 +232,9 @@ init_objective_structs (void)
|
||||||
chain_type (&type_Super);
|
chain_type (&type_Super);
|
||||||
|
|
||||||
make_structure ("obj_module_s", 's', module_struct, &type_module);
|
make_structure ("obj_module_s", 's', module_struct, &type_module);
|
||||||
chain_type (&type_module);
|
|
||||||
|
|
||||||
type_supermsg.t.func.param_types[0] = pointer_type (&type_Super);
|
type_supermsg.t.func.param_types[0] = pointer_type (&type_Super);
|
||||||
chain_type (&type_supermsg);
|
chain_type (&type_supermsg);
|
||||||
|
|
||||||
type_obj_exec_class.t.func.param_types[0] = pointer_type (&type_module);
|
|
||||||
chain_type (&type_obj_exec_class);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -275,14 +272,26 @@ init_classes (void)
|
||||||
void
|
void
|
||||||
class_init (void)
|
class_init (void)
|
||||||
{
|
{
|
||||||
symbol_t *sym;
|
|
||||||
|
|
||||||
if (!current_symtab)
|
if (!current_symtab)
|
||||||
current_symtab = pr.symtab;
|
current_symtab = pr.symtab;
|
||||||
init_classes ();
|
init_classes ();
|
||||||
init_objective_structs ();
|
init_objective_structs ();
|
||||||
|
}
|
||||||
|
|
||||||
sym = new_symbol_type ("obj_module_t", &type_module);
|
void
|
||||||
|
class_init_obj_module (void)
|
||||||
|
{
|
||||||
|
symbol_t *sym;
|
||||||
|
|
||||||
|
sym = new_symbol ("obj_module_s");
|
||||||
|
sym = find_struct ('s', sym, &type_module);
|
||||||
|
chain_type (&type_module);
|
||||||
|
chain_type (&type_moduleptr);
|
||||||
|
chain_type (&type_obj_exec_class);
|
||||||
|
if (!sym->table)
|
||||||
|
symtab_addsymbol (pr.symtab, sym);
|
||||||
|
|
||||||
|
sym = new_symbol_type ("obj_module_t", sym->type);
|
||||||
sym->sy_type = sy_type;
|
sym->sy_type = sy_type;
|
||||||
symtab_addsymbol (pr.symtab, sym);
|
symtab_addsymbol (pr.symtab, sym);
|
||||||
}
|
}
|
||||||
|
|
|
@ -111,9 +111,11 @@ new_def (const char *name, type_t *type, defspace_t *space,
|
||||||
|
|
||||||
if (storage != st_extern) {
|
if (storage != st_extern) {
|
||||||
def->space = space;
|
def->space = space;
|
||||||
|
def->offset = defspace_new_loc (space, type_size (type));
|
||||||
|
}
|
||||||
|
if (space) {
|
||||||
*space->def_tail = def;
|
*space->def_tail = def;
|
||||||
space->def_tail = &def->next;
|
space->def_tail = &def->next;
|
||||||
def->offset = defspace_new_loc (space, type_size (type));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
def->file = pr.source_file;
|
def->file = pr.source_file;
|
||||||
|
|
|
@ -471,6 +471,8 @@ print_type (type_t *type)
|
||||||
dstring_delete (str);
|
dstring_delete (str);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void _encode_type (dstring_t *encoding, type_t *type, int level);
|
||||||
|
|
||||||
const char *
|
const char *
|
||||||
encode_params (type_t *type)
|
encode_params (type_t *type)
|
||||||
{
|
{
|
||||||
|
@ -483,7 +485,7 @@ encode_params (type_t *type)
|
||||||
else
|
else
|
||||||
count = type->t.func.num_params;
|
count = type->t.func.num_params;
|
||||||
for (i = 0; i < count; i++)
|
for (i = 0; i < count; i++)
|
||||||
encode_type (encoding, type->t.func.param_types[i]);
|
_encode_type (encoding, type->t.func.param_types[i], 1);
|
||||||
if (type->t.func.num_params < 0)
|
if (type->t.func.num_params < 0)
|
||||||
dasprintf (encoding, ".");
|
dasprintf (encoding, ".");
|
||||||
|
|
||||||
|
@ -492,8 +494,6 @@ encode_params (type_t *type)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _encode_type (dstring_t *encoding, type_t *type, int level);
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
encode_struct_fields (dstring_t *encoding, symtab_t *strct, int level)
|
encode_struct_fields (dstring_t *encoding, symtab_t *strct, int level)
|
||||||
{
|
{
|
||||||
|
@ -526,9 +526,9 @@ encode_struct (dstring_t *encoding, type_t *type, int level)
|
||||||
|
|
||||||
if (type->name) // FIXME
|
if (type->name) // FIXME
|
||||||
name = type->name;
|
name = type->name;
|
||||||
if (strct && strct->type == stab_union)
|
if (type->ty == ty_union)
|
||||||
su = '-';
|
su = '-';
|
||||||
if (strct && strct->type != stab_union)
|
else
|
||||||
su = '=';
|
su = '=';
|
||||||
dasprintf (encoding, "{%s%c", name, su);
|
dasprintf (encoding, "{%s%c", name, su);
|
||||||
if (strct && level < 2)
|
if (strct && level < 2)
|
||||||
|
@ -1010,4 +1010,5 @@ chain_initial_types (void)
|
||||||
chain_type (&type_quaternion);
|
chain_type (&type_quaternion);
|
||||||
chain_type (&type_integer);
|
chain_type (&type_integer);
|
||||||
chain_type (&type_short);
|
chain_type (&type_short);
|
||||||
|
class_init_obj_module ();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue