mirror of
https://github.com/DarkPlacesEngine/gmqcc.git
synced 2024-11-27 14:12:36 +00:00
Actually works now
This commit is contained in:
parent
f023b7097f
commit
daa1487aef
3 changed files with 27 additions and 12 deletions
1
gmqcc.h
1
gmqcc.h
|
@ -1129,6 +1129,7 @@ typedef enum {
|
|||
COMPILER_QCC, /* circa QuakeC */
|
||||
COMPILER_FTEQCC, /* fteqcc QuakeC */
|
||||
COMPILER_QCCX, /* qccx QuakeC */
|
||||
COMPILER_HCODE, /* hcode QuakeC */
|
||||
COMPILER_GMQCC /* this QuakeC */
|
||||
} opts_std_t;
|
||||
|
||||
|
|
7
main.c
7
main.c
|
@ -74,6 +74,7 @@ static int usage(void) {
|
|||
con_out(" -std=standard select one of the following standards\n"
|
||||
" -std=qcc original QuakeC\n"
|
||||
" -std=fteqcc fteqcc QuakeC\n"
|
||||
" -std=hcode hexgen2 QuakeC\n"
|
||||
" -std=gmqcc this compiler (default)\n");
|
||||
con_out(" -f<flag> enable a flag\n"
|
||||
" -fno-<flag> disable a flag\n"
|
||||
|
@ -204,6 +205,12 @@ static bool options_parse(int argc, char **argv) {
|
|||
opts_set(opts.flags, ADJUST_VECTOR_FIELDS, false);
|
||||
OPTS_OPTION_U32(OPTION_STANDARD) = COMPILER_QCCX;
|
||||
|
||||
} else if (!strcmp(argarg, "hcode")) {
|
||||
|
||||
opts_set(opts.flags, ADJUST_VECTOR_FIELDS, false);
|
||||
opts_set(opts.flags, ASSIGN_FUNCTION_TYPES, true);
|
||||
|
||||
OPTS_OPTION_U32(OPTION_STANDARD) = COMPILER_HCODE;
|
||||
} else {
|
||||
con_out("Unknown standard: %s\n", argarg);
|
||||
return false;
|
||||
|
|
31
parser.c
31
parser.c
|
@ -5770,22 +5770,29 @@ skipvar:
|
|||
}
|
||||
}
|
||||
|
||||
if (parser->tok != '{' || var->expression.vtype != TYPE_FUNCTION) {
|
||||
if (parser->tok != '=') {
|
||||
parseerror(parser, "missing semicolon or initializer, got: `%s`", parser_tokval(parser));
|
||||
break;
|
||||
}
|
||||
if ((OPTS_OPTION_U32(OPTION_STANDARD) == COMPILER_HCODE)
|
||||
? parser->tok != ':'
|
||||
: true
|
||||
){
|
||||
if (parser->tok != '{' || var->expression.vtype != TYPE_FUNCTION) {
|
||||
if (parser->tok != '=') {
|
||||
parseerror(parser, "missing semicolon or initializer, got: `%s`", parser_tokval(parser));
|
||||
break;
|
||||
}
|
||||
|
||||
if (!parser_next(parser)) {
|
||||
parseerror(parser, "error parsing initializer");
|
||||
break;
|
||||
if (!parser_next(parser)) {
|
||||
parseerror(parser, "error parsing initializer");
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (OPTS_OPTION_U32(OPTION_STANDARD) == COMPILER_QCC) {
|
||||
parseerror(parser, "expected '=' before function body in this standard");
|
||||
}
|
||||
}
|
||||
else if (OPTS_OPTION_U32(OPTION_STANDARD) == COMPILER_QCC) {
|
||||
parseerror(parser, "expected '=' before function body in this standard");
|
||||
}
|
||||
|
||||
if (parser->tok == '#') {
|
||||
if (parser->tok == '#' ||
|
||||
(OPTS_OPTION_U32(OPTION_STANDARD) == COMPILER_HCODE && parser->tok == ':'))
|
||||
{
|
||||
ast_function *func = NULL;
|
||||
ast_value *number = NULL;
|
||||
float fractional;
|
||||
|
|
Loading…
Reference in a new issue