* us to use the array [] to access individual elements from the vector
* opposed to using set/get methods.
*/
-typedef struct {
+struct vector_t {
size_t allocated;
size_t used;
/* can be extended now! whoot */
-} vector_t;
+};
/* hidden interface */
void _util_vec_grow(void **a, size_t i, size_t s);
extern const uint16_t type_ne_instr [TYPE_COUNT];
extern const uint16_t type_not_instr [TYPE_COUNT];
-typedef struct {
+struct prog_section_t {
uint32_t offset; /* Offset in file of where data begins */
uint32_t length; /* Length of section (how many of) */
-} prog_section_t;
+};
-typedef struct {
+struct prog_header_t {
uint32_t version; /* Program version (6) */
uint16_t crc16;
uint16_t skip;
prog_section_t strings;
prog_section_t globals;
uint32_t entfield; /* Number of entity fields */
-} prog_header_t;
+};
/*
* Each paramater incerements by 3 since vector types hold
#define OFS_PARM6 (OFS_PARM5 +3)
#define OFS_PARM7 (OFS_PARM6 +3)
-typedef union {
+union operand_t {
int16_t s1;
uint16_t u1;
-} operand_t;
+};
-typedef struct {
+struct prog_section_statement_t {
uint16_t opcode;
operand_t o1;
operand_t o2;
operand_t o3;
-} prog_section_statement_t;
+};
-typedef struct {
+struct prog_section_both_t {
/*
* The types:
* 0 = ev_void
uint16_t type;
uint16_t offset;
uint32_t name;
-} prog_section_both_t;
+};
typedef prog_section_both_t prog_section_def_t;
typedef prog_section_both_t prog_section_field_t;
#define DEF_SAVEGLOBAL (1<<15)
#define DEF_TYPEMASK ((1<<15)-1)
-typedef struct {
+struct prog_section_function_t {
int32_t entry; /* in statement table for instructions */
uint32_t firstlocal; /* First local in local table */
uint32_t locals; /* Total ints of params + locals */
uint32_t file; /* file of the source file */
int32_t nargs; /* number of arguments */
uint8_t argsize[8]; /* size of arguments (keep 8 always?) */
-} prog_section_function_t;
+};
/*
* Instructions
typedef int32_t qcint_t;
typedef uint32_t qcuint_t;
-typedef struct {
+struct code_t {
prog_section_statement_t *statements;
int *linenums;
int *columnnums;
uint32_t entfields;
ht string_cache;
qcint_t string_cached_empty;
-} code_t;
+};
/*
* A shallow copy of a lex_file to remember where which ast node
* came from.
*/
-typedef struct {
+struct lex_ctx_t {
const char *file;
size_t line;
size_t column;
-} lex_ctx_t;
+};
/*
* code_write -- writes out the compiled file
store_return /* unassignable, at OFS_RETURN */
};
-typedef struct {
+struct vec3_t {
qcfloat_t x, y, z;
-} vec3_t;
+};
/* exec.c */
#define VMXF_TRACE 0x0001 /* trace: print statements before executing */
#define VMXF_PROFILE 0x0002 /* profile: increment the profile counters */
-struct qc_program_s;
-typedef int (*prog_builtin_t)(struct qc_program_s *prog);
+struct qc_program_t;
+typedef int (*prog_builtin_t)(qc_program_t *prog);
-typedef struct {
- qcint_t stmt;
- size_t localsp;
+struct qc_exec_stack_t {
+ qcint_t stmt;
+ size_t localsp;
prog_section_function_t *function;
-} qc_exec_stack_t;
+};
-typedef struct qc_program_s {
+struct qc_program_t {
char *filename;
prog_section_statement_t *code;
prog_section_def_t *defs;
} cached_globals;
bool supports_state; /* is INSTR_STATE supported? */
-} qc_program_t;
+};
qc_program_t* prog_load (const char *filename, bool ignoreversion);
void prog_delete (qc_program_t *prog);
prog_section_def_t* prog_entfield (qc_program_t *prog, qcint_t off);
prog_section_def_t* prog_getdef (qc_program_t *prog, qcint_t off);
qcany_t* prog_getedict (qc_program_t *prog, qcint_t e);
-qcint_t prog_tempstring(qc_program_t *prog, const char *_str);
+qcint_t prog_tempstring(qc_program_t *prog, const char *_str);
/* parser.c */
-struct parser_s;
-struct parser_s *parser_create (void);
-bool parser_compile_file (struct parser_s *parser, const char *);
-bool parser_compile_string(struct parser_s *parser, const char *, const char *, size_t);
-bool parser_finish (struct parser_s *parser, const char *);
-void parser_cleanup (struct parser_s *parser);
+struct parser_t;
+parser_t *parser_create(void);
+bool parser_compile_file(parser_t *parser, const char *);
+bool parser_compile_string(parser_t *parser, const char *, const char *, size_t);
+bool parser_finish(parser_t *parser, const char *);
+void parser_cleanup(parser_t *parser);
/* ftepp.c */
-struct ftepp_s;
-struct ftepp_s *ftepp_create (void);
-bool ftepp_preprocess_file (struct ftepp_s *ftepp, const char *filename);
-bool ftepp_preprocess_string(struct ftepp_s *ftepp, const char *name, const char *str);
-void ftepp_finish (struct ftepp_s *ftepp);
-const char *ftepp_get (struct ftepp_s *ftepp);
-void ftepp_flush (struct ftepp_s *ftepp);
-void ftepp_add_define (struct ftepp_s *ftepp, const char *source, const char *name);
-void ftepp_add_macro (struct ftepp_s *ftepp, const char *name, const char *value);
+struct ftepp_t;
+ftepp_t *ftepp_create (void);
+bool ftepp_preprocess_file (ftepp_t *ftepp, const char *filename);
+bool ftepp_preprocess_string(ftepp_t *ftepp, const char *name, const char *str);
+void ftepp_finish(ftepp_t *ftepp);
+const char *ftepp_get(ftepp_t *ftepp);
+void ftepp_flush(ftepp_t *ftepp);
+void ftepp_add_define(ftepp_t *ftepp, const char *source, const char *name);
+void ftepp_add_macro(ftepp_t *ftepp, const char *name, const char *value);
/* main.c */
/* Helpers to allow for a whole lot of flags. Otherwise we'd limit
* to 32 or 64 -f options...
*/
-typedef struct {
+struct longbit {
size_t idx; /* index into an array of 32 bit words */
uint8_t bit; /* bit index for the 8 bit group idx points to */
-} longbit;
+};
#define LONGBIT(bit) { ((bit)/32), ((bit)%32) }
#define LONGBIT_SET(B, I) ((B).idx = (I)/32, (B).bit = ((I)%32))
#else
int utf8_to(utf8ch_t *, const unsigned char *, size_t);
/* opts.c */
-typedef struct {
+struct opts_flag_def_t {
const char *name;
longbit bit;
-} opts_flag_def_t;
+};
bool opts_setflag (const char *, bool);
bool opts_setwarn (const char *, bool);
extern unsigned int opts_optimizationcount[COUNT_OPTIMIZATIONS];
/* other options: */
-typedef enum {
+enum {
COMPILER_QCC, /* circa QuakeC */
COMPILER_FTEQCC, /* fteqcc QuakeC */
COMPILER_QCCX, /* qccx QuakeC */
COMPILER_GMQCC /* this QuakeC */
-} opts_std_t;
+};
-typedef struct {
+struct opt_value_t {
union {
- bool b;
+ bool b;
uint16_t u16;
uint32_t u32;
-
union {
- char *p;
+ char *p;
const char *c;
} str;
} data;
-
bool allocated;
-} opt_value_t;
-
+};
-typedef struct {
+struct opts_cmd_t {
opt_value_t options [OPTION_COUNT];
uint32_t flags [1 + (COUNT_FLAGS / 32)];
uint32_t warn [1 + (COUNT_WARNINGS / 32)];
uint32_t werror_backup[1 + (COUNT_WARNINGS / 32)];
uint32_t optimization [1 + (COUNT_OPTIMIZATIONS / 32)];
bool optimizeoff; /* True when -O0 */
-} opts_cmd_t;
+};
extern opts_cmd_t opts;