else if (parser->tok == TOKEN_DOTS)
{
ast_expression *va;
+ if (!OPTS_FLAG(VARIADIC_ARGS)) {
+ parseerror(parser, "cannot access varargs (try -fvariadic-args)");
+ goto onerr;
+ }
if (wantop) {
parseerror(parser, "expected operator or end of statement");
goto onerr;
* We should also consider adding correction tables for
* other things as well.
*/
- if (OPTS_FLAG(ENHANCED_DIAGNOSTICS)) {
+ if (opts.correction) {
correction_t corr;
correct_init(&corr);
return false;
}
- if (var->expression.flags & AST_FLAG_VARIADIC) {
+ if (!OPTS_FLAG(VARIADIC_ARGS) && var->expression.flags & AST_FLAG_VARIADIC) {
if (parsewarning(parser, WARN_VARIADIC_FUNCTION,
"variadic function with implementation will not be able to access additional parameters"))
{
}
vec_push(parser->functions, func);
- if (var->expression.flags & AST_FLAG_VARIADIC) {
+ if (var->argcounter) {
+ ast_value *argc = ast_value_new(ast_ctx(var), var->argcounter, TYPE_FLOAT);
+ parser_addlocal(parser, argc->name, (ast_expression*)argc);
+ func->argc = argc;
+ }
+
+ if (OPTS_FLAG(VARIADIC_ARGS) && var->expression.flags & AST_FLAG_VARIADIC) {
char name[1024];
ast_value *varargs = ast_value_new(ast_ctx(var), "reserved:va_args", TYPE_ARRAY);
varargs->expression.flags |= AST_FLAG_IS_VARARG;
if (!subscript)
return NULL;
+ subscript->expression.next = ast_type_copy(ast_ctx(subscript), (ast_expression*)subscript);
+ subscript->expression.vtype = TYPE_FIELD;
+
entfield = ast_entfield_new_force(ctx,
(ast_expression*)entity,
(ast_expression*)subscript,
goto cleanup;
*/
}
- if (opts.standard == COMPILER_QCC &&
+ if ((opts.standard == COMPILER_QCC || opts.standard == COMPILER_FTEQCC) &&
(old = parser_find_global(parser, var->name)))
{
parseerror(parser, "cannot declare a field and a global of the same name with -std=qcc");