*/
#ifndef GMQCC_HDR
#define GMQCC_HDR
-#include <limits.h>
-#include <stdlib.h>
-#include <string.h>
#include <stdarg.h>
-#include <stdio.h>
-#include <ctype.h>
+#include <stdio.h> /* TODO: remove this */
/*
* Disable some over protective warnings in visual studio because fixing them is a waste
/*===================================================================*/
/*=========================== stat.c ================================*/
/*===================================================================*/
-void stat_info();
+void stat_info (void);
char *stat_mem_strdup (const char *, size_t, const char *, bool);
void *stat_mem_reallocate(void *, size_t, size_t, const char *);
void stat_mem_deallocate(void *);
/*===================================================================*/
/*=========================== util.c ================================*/
/*===================================================================*/
+
+/*
+ * Microsoft implements against the spec versions of ctype.h. Which
+ * means what ever the current set locale is will render the actual
+ * results of say isalpha('A') wrong for what ever retarded locale
+ * is used. Simalerly these are also implemented inefficently on
+ * some toolchains and end up becoming actual library calls. Perhaps
+ * this is why tools like yacc provide their own? Regardless implementing
+ * these as functions is equally as silly, the call overhead is not
+ * justified when this could happen on every character from an input
+ * stream. We provide our own as macros for absolute inlinability.
+ */
+#define util_isupper(C) ((C) >= 'A' && (C) <= 'Z')
+#define util_islower(C) ((C) >= 'a' && (C) <= 'z')
+#define util_isdigit(C) ((C) >= '0' && (C) <= '9')
+#define util_isprint(C) ((C) >= 32 && (C) <= 126)
+#define util_isspace(C) ((C) == ' ' || (C) == '\f' || \
+ (C) == '\n'|| (C) == '\r' || \
+ (C) == '\t'|| (C) == '\v')
+
+#define util_isalpha(C) (util_islower(C) || util_isupper(C))
+
bool util_filexists (const char *);
bool util_strupper (const char *);
bool util_strdigit (const char *);
uint16_t util_crc16(uint16_t crc, const char *data, size_t len);
void util_seed(uint32_t);
-uint32_t util_rand();
+uint32_t util_rand(void);
/*
* String functions (formatting, copying, concatenating, errors). These are wrapped
struct trie_s *entries;
} correct_trie_t;
-correct_trie_t* correct_trie_new();
+correct_trie_t* correct_trie_new(void);
typedef struct hash_table_t {
size_t size;
* code_genstrin -- generates string for code
* code_alloc_field -- allocated a field
* code_push_statement -- keeps statements and linenumbers together
- * code_pop_statement -- keeps statements and linenumbers together
+ * code_pop_statement -- keeps statements and linenumbers together
*/
bool code_write (code_t *, const char *filename, const char *lno);
GMQCC_WARN
LVL_ERROR
};
-FILE *con_default_out();
-FILE *con_default_err();
+FILE *con_default_out(void);
+FILE *con_default_err(void);
void con_vprintmsg (int level, const char *name, size_t line, size_t column, const char *msgtype, const char *msg, va_list ap);
void con_printmsg (int level, const char *name, size_t line, size_t column, const char *msgtype, const char *msg, ...);
void con_cvprintmsg(void *ctx, int lvl, const char *msgtype, const char *msg, va_list ap);
void con_cprintmsg (void *ctx, int lvl, const char *msgtype, const char *msg, ...);
-void con_close ();
-void con_init ();
-void con_reset ();
+void con_close (void);
+void con_init (void);
+void con_reset (void);
void con_color (int);
int con_change(const char *, const char *);
int con_verr (const char *, va_list);
void /********/ vcompile_error (lex_ctx ctx, /*LVL_ERROR*/ const char *msg, va_list ap);
bool GMQCC_WARN compile_warning (lex_ctx ctx, int warntype, const char *fmt, ...);
bool GMQCC_WARN vcompile_warning(lex_ctx ctx, int warntype, const char *fmt, va_list ap);
-void compile_show_werrors();
+void compile_show_werrors(void);
/*===================================================================*/
/*========================= assembler.c =============================*/
/*===================== parser.c commandline ========================*/
/*===================================================================*/
struct parser_s;
-
-struct parser_s *parser_create ();
+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 *);
/*====================== ftepp.c commandline ========================*/
/*===================================================================*/
struct ftepp_s;
-struct ftepp_s *ftepp_create ();
+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);
void opts_ini_init (const char *);
/* Saner flag handling */
-void opts_backup_non_Wall();
-void opts_restore_non_Wall();
-void opts_backup_non_Werror_all();
-void opts_restore_non_Werror_all();
+void opts_backup_non_Wall(void);
+void opts_restore_non_Wall(void);
+void opts_backup_non_Werror_all(void);
+void opts_restore_non_Werror_all(void);
enum {
# define GMQCC_TYPE_FLAGS