diff --git a/include/QF/Makefile.am b/include/QF/Makefile.am index ffb0ff56b..8bf956359 100644 --- a/include/QF/Makefile.am +++ b/include/QF/Makefile.am @@ -6,7 +6,8 @@ nobase_pkginclude_HEADERS = \ idparse.h image.h in_event.h info.h input.h iqm.h joystick.h keys.h \ link.h llist.h locs.h mathlib.h mdfour.h mersenne.h model.h modelgen.h \ msg.h object.h pak.h pakfile.h pcx.h png.h plugin.h pr_comp.h pr_debug.h \ - pr_obj.h progs.h qargs.h qdefs.h qendian.h qfplist.h qtypes.h quakefs.h \ + pr_obj.h pr_type.h progs.h qargs.h qdefs.h qendian.h qfplist.h qtypes.h \ + quakefs.h \ quakeio.h render.h riff.h ruamoko.h screen.h script.h segtext.h set.h \ sizebuf.h skin.h sound.h spritegn.h sys.h teamplay.h tga.h uint32.h va.h \ ver_check.h vid.h vrect.h view.h wad.h wadfile.h winding.h zone.h \ diff --git a/include/QF/pr_type.h b/include/QF/pr_type.h new file mode 100644 index 000000000..8e3f771df --- /dev/null +++ b/include/QF/pr_type.h @@ -0,0 +1,107 @@ +/* + pr_type.h + + object file type encoding support + + Copyright (C) 2011 Bill Currie + + Author: Bill Currie + Date: 2011/02/18 + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + + See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to: + + Free Software Foundation, Inc. + 59 Temple Place - Suite 330 + Boston, MA 02111-1307, USA + +*/ + +#ifndef __pr_type_h +#define __pr_type_h + +/** \defgroup qfcc_qfo_type Object file type encoding + \ingroup progs + + All \c pointer_t \c type fields are pointers within the type qfo_space. +*/ +//@{ + +#include "QF/pr_comp.h" + +typedef struct qfot_fldptr_s { + pr_int_t type; ///< ev_field or ev_pointer + pointer_t aux_type; ///< referenced type +} qfot_fldptr_t; + +typedef struct qfot_func_s { + pr_int_t type; ///< always ev_func + pointer_t return_type; ///< return type of the function + pr_int_t num_params; ///< ones compliment count of the + ///< parameters. -ve values indicate the + ///< number of real parameters before the + ///< ellipsis + pointer_t param_types[1]; ///< variable length list of parameter + ///< types +} qfot_func_t; + +typedef struct qfot_var_s { + pointer_t type; ///< type of field or self reference for + ///< enum + string_t name; ///< name of field/enumerator + pr_int_t offset; ///< value for enum, 0 for union +} qfot_var_t; + +typedef struct qfot_struct_s { + string_t tag; ///< struct/union/enum tag + pr_int_t num_fields; ///< number of fields/enumerators + qfot_var_t fields[1]; ///< variable length list of + ///< fields/enumerators +} qfot_struct_t; + +typedef struct qfot_array_s { + pointer_t type; ///< element type + pr_int_t base; ///< start index of array + pr_int_t size; ///< number of elements in array +} qfot_array_t; + +/** QFO type encoding. + + \note As this holds a union of all type representations, and those + representations may contain variable arrays, sizeof() will return only + one, rather useless, value. It is also not suitable for direct use in + arrays. +*/ +typedef struct qfot_type_s { + pr_int_t ty; ///< meta type: ty_meta_e + pr_int_t size; ///< total word size of this encoding + string_t encoding; ///< Objective-QC encoding + union { + pr_int_t type; ///< basic type: etype_t + qfot_fldptr_t fldptr; ///< ty_none, ev_pointer/ev_field + qfot_func_t func; ///< ty_none, ev_func + qfot_struct_t strct; ///< ty_struct/ty_union/ty_enum + qfot_array_t array; ///< ty_array + pointer_t class; ///< ty_class + } t; +} qfot_type_t; + +typedef struct qfot_type_encodings_s { + pointer_t types; + pr_int_t size; +} qfot_type_encodings_t; + +//@} + +#endif//__pr_type_h diff --git a/tools/qfcc/include/obj_type.h b/tools/qfcc/include/obj_type.h index 1e559f45e..d9c677641 100644 --- a/tools/qfcc/include/obj_type.h +++ b/tools/qfcc/include/obj_type.h @@ -31,79 +31,10 @@ #ifndef __obj_type_h #define __obj_type_h -/** \defgroup qfcc_qfo_type Object file type encoding - \ingroup qfcc_qfo - - All \c pointer_t \c type fields are pointers within the type qfo_space. -*/ -//@{ - -#include "QF/pr_comp.h" +#include "QF/pr_type.h" #include "type.h" -typedef struct qfot_fldptr_s { - pr_int_t type; ///< ev_field or ev_pointer - pointer_t aux_type; ///< referenced type -} qfot_fldptr_t; - -typedef struct qfot_func_s { - pr_int_t type; ///< always ev_func - pointer_t return_type; ///< return type of the function - pr_int_t num_params; ///< ones compliment count of the - ///< parameters. -ve values indicate the - ///< number of real parameters before the - ///< ellipsis - pointer_t param_types[1]; ///< variable length list of parameter - ///< types -} qfot_func_t; - -typedef struct qfot_var_s { - pointer_t type; ///< type of field or self reference for - ///< enum - string_t name; ///< name of field/enumerator - pr_int_t offset; ///< value for enum, 0 for union -} qfot_var_t; - -typedef struct qfot_struct_s { - string_t tag; ///< struct/union/enum tag - pr_int_t num_fields; ///< number of fields/enumerators - qfot_var_t fields[1]; ///< variable length list of - ///< fields/enumerators -} qfot_struct_t; - -typedef struct qfot_array_s { - pointer_t type; ///< element type - pr_int_t base; ///< start index of array - pr_int_t size; ///< number of elements in array -} qfot_array_t; - -/** QFO type encoding. - - \note As this holds a union of all type representations, and those - representations may contain variable arrays, sizeof() will return only - one, rather useless, value. It is also not suitable for direct use in - arrays. -*/ -typedef struct qfot_type_s { - pr_int_t ty; ///< meta type: ty_meta_e - pr_int_t size; ///< total word size of this encoding - string_t encoding; ///< Objective-QC encoding - union { - pr_int_t type; ///< basic type: etype_t - qfot_fldptr_t fldptr; ///< ty_none, ev_pointer/ev_field - qfot_func_t func; ///< ty_none, ev_func - qfot_struct_t strct; ///< ty_struct/ty_union/ty_enum - qfot_array_t array; ///< ty_array - pointer_t class; ///< ty_class - } t; -} qfot_type_t; - -typedef struct qfot_type_encodings_s { - pointer_t types; - pr_int_t size; -} qfot_type_encodings_t; - struct type_s; struct def_s *qfo_encode_type (struct type_s *type);