Skip to content

Commit 1efbd79

Browse files
committed
Completely removed deprecated vararg syntax
1 parent 04daea8 commit 1efbd79

File tree

5 files changed

+25
-29
lines changed

5 files changed

+25
-29
lines changed

src/asar/asar_math.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -473,7 +473,7 @@ static double asar_structsize_wrapper()
473473
string symbol = get_symbol_argument();
474474
if(symbol == "..."){
475475
if(!inmacro) asar_throw_error(2, error_type_block, error_id_vararg_sizeof_nomacro);
476-
if(numvarargs == -1) asar_throw_error(2, error_type_block, error_id_macro_not_varadic);
476+
if(numvarargs == -1) asar_throw_error(2, error_type_block, error_id_macro_not_varadic, "sizeof(...)");
477477
return numvarargs;
478478
}
479479
return (double)struct_size(symbol);

src/asar/errors.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,7 @@ static asar_error_mapping asar_errors[] =
252252

253253
{ ERR(negative_shift), "Bitshift amount is negative." },
254254

255-
{ ERR(macro_not_varadic), "Invalid use of sizeof(...), active macro is not variadic." },
255+
{ ERR(macro_not_varadic), "Invalid use of %s, active macro is not variadic." },
256256
{ ERR(vararg_sizeof_nomacro), "Invalid use of sizeof(...), no active macro." },
257257
{ ERR(macro_wrong_min_params), "Variadic macro call with too few parameters" },
258258
{ ERR(vararg_out_of_bounds), "Variadic macro parameter requested is out of bounds." },

src/asar/macro.cpp

Lines changed: 20 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -354,49 +354,47 @@ string replace_macro_args(const char* line) {
354354
if (depth > 0 && !inmacro) asar_throw_error(0, error_type_line, error_id_invalid_depth_resolve, "macro parameter", "macro parameter", depth, in_macro_def-1);
355355
in += depth+1;
356356

357-
bool proper_variadic = false;
357+
bool is_variadic_arg = false;
358358
if (in[0] == '.' && in[1] == '.' && in[2] == '.' && in[3] == '[')
359359
{
360360
if (end[-1] != ']')
361361
asar_throw_error(0, error_type_block, error_id_unclosed_vararg);
362362

363-
proper_variadic = true;
363+
is_variadic_arg = true;
364364
in += 4;
365365
end--;
366366
}
367367

368368
if(!inmacro) asar_throw_error(0, error_type_block, error_id_macro_param_outside_macro);
369+
if(is_variadic_arg && !current_macro->variadic) asar_throw_error(0, error_type_block, error_id_macro_not_varadic, "<...[math]>");
369370
//*end=0;
370371
string param;
371372
string temp(in, end-in);
372373
resolvedefines(param, temp);
373374
in = param.data();
374375
bool valid_named_param = confirmname(in);
375-
if (!valid_named_param && !current_macro->variadic) asar_throw_error(0, error_type_block, error_id_invalid_macro_param_name);
376-
bool found=false;
377-
for (int j=0;current_macro->arguments[j]&&!proper_variadic;j++)
376+
if (!is_variadic_arg)
378377
{
379-
if (!strcmp(in, current_macro->arguments[j]))
378+
if (!valid_named_param) asar_throw_error(0, error_type_block, error_id_invalid_macro_param_name);
379+
bool found=false;
380+
for (int j=0;current_macro->arguments[j];j++)
380381
{
381-
found=true;
382-
out+=current_macro_args[j];
383-
break;
382+
if (!strcmp(in, current_macro->arguments[j]))
383+
{
384+
found=true;
385+
out+=current_macro_args[j];
386+
break;
387+
}
388+
}
389+
if (!found)
390+
{
391+
asar_throw_error(0, error_type_block, error_id_macro_param_not_found, generate_macro_arg_string(in, depth).raw(), generate_macro_hint_string(in, current_macro, depth).raw());
384392
}
385393
}
386-
if (!found)
394+
else
387395
{
388396
snes_label ret;
389-
if(valid_named_param && !current_macro->variadic)
390-
{
391-
if (proper_variadic) asar_throw_error(0, error_type_block, error_id_invalid_vararg, in);
392-
else asar_throw_error(0, error_type_block, error_id_macro_param_not_found, generate_macro_arg_string(in, depth).raw(), generate_macro_hint_string(in, current_macro, depth).raw());
393-
}
394-
if(current_macro->variadic && valid_named_param && !labelval(in, &ret, false))
395-
{
396-
if (proper_variadic) asar_throw_error(0, error_type_block, error_id_invalid_vararg, in);
397-
else asar_throw_error(0, error_type_block, error_id_macro_param_not_found, generate_macro_arg_string(in, depth).raw(), generate_macro_hint_string(in, current_macro, depth).raw());
398-
}
399-
if(!proper_variadic) asar_throw_warning(0, warning_id_feature_deprecated, "'<math>' syntax for variadic macro parameters", "Use '<...[math]>' instead.");
397+
if(valid_named_param && !labelval(in, &ret, false)) asar_throw_error(0, error_type_block, error_id_invalid_vararg, in);
400398
int arg_num = getnum(in);
401399

402400
if(forwardlabel) asar_throw_error(0, error_type_block, error_id_label_forward);
@@ -406,7 +404,7 @@ string replace_macro_args(const char* line) {
406404
out+=current_macro_args[arg_num+current_macro->numargs-1];
407405
}
408406
in=end+1;
409-
if (proper_variadic) in++;
407+
if (is_variadic_arg) in++;
410408
}
411409
else out+=*(in++);
412410
}

tests/variadic_errors.asm

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
;`errEvararg_must_be_last
22
;`errEinvalid_macro_param_name
3-
;`warnWfeature_deprecated
3+
;`errEinvalid_macro_param_name
44
;`errEunclosed_vararg
55
;`errEinvalid_vararg
6-
;`errEinvalid_vararg
6+
;`errEmacro_not_varadic
77
;`errEvararg_out_of_bounds
88
;`errEvararg_out_of_bounds
99
;`errEmacro_wrong_min_params

tests/variadic_syntax.asm

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
;`01 01 01 FF FF 05 01 01 FF FF 01 02 03 04 05 06 07 FF FF 02 03 04 05 06 07 01 01 02 03
2-
;`warnWfeature_deprecated
3-
;`warnWfeature_deprecated
42
lorom
53
org $008000
64

75
!a = 0
86
macro asd(...)
9-
db sizeof(...), <...[0]>, <!a> ; Intentionally uses deprecated syntax, to make sure it still works
7+
db sizeof(...), <...[0]>, <...[!a]>
108
endmacro
119

1210
macro sorry(...)

0 commit comments

Comments
 (0)