On 17 Jan 2021, at 11:17, Damien Thiriet
wrote: Hi,
I have some troubles with understanding metafun's macro mechanism.
Given this MWE:
\starttext \startMPpage
vardef Test (expr ab,cd)= %numeric ab; %numeric cd; draw unitsquare scaled 10 xshifted ab; draw unitsquare scaled 10 yshifted cd; enddef;
Test (50,100); \stopMPpage \stoptext
Uncommenting the two declarations makes me run intro a silent error. I was lucky enough yesterday to get an explicit error message with a more complex macro. It made me figure out where my problems came from.
So here are my two questions: - Why shouldn't we tell metafun if expr is a path, a pair or so on?
You were (attempting to) redefine the macro’s arguments, but they are read-only. A somewhat longer answer: the type of macro arguments in this case is “expr”. Metapost argument types are based solely on what the internal language parser needs to interpret the code; the language is not strongly typed. Also, during macro expansion, your code is replaced by: %numeric (READONLY TEMP VALUE 1); %numeric (READONLY TEMP VALUE 2); draw unitsquare scaled 10 xshifted (READONLY TEMP VALUE 1); draw unitsquare scaled 10 yshifted (READONLY TEMP VALUE 2); Best wishes, Taco — Taco Hoekwater E: taco@bittext.nl genderfluid (all pronouns)