Optional syntax
Created by: retorquere
I have a macro
macro iterate {
// iterate (value: index from items)
rule { ($($key:ident : $value:ident from $dict:expr)) { $body... } } => {
let dict = $dict;
let keys = Object.keys(dict);
let length = keys.length;
let index = 0;
while (index < length) {
let $key = keys[index];
if (!dict.hasOwnProperty($key)) { continue; }
let $value = dict[$key];
$body...
index++;
}
dict = undefined;
keys = undefined;
}
}
which allows for
iterate (key:value from {a: 1, b: 2}) {
...
}
If I use this twice in a row however, jshint complains that I'm re-declaring the variable, and Firefox (this is code for an extension, so it's chrome-javascript, not web-javascript) complains TypeError: redeclaration of variable key
. Is there a way to rewrite this so I could do
iterate (var key: var value from {a: 1, b: 2})
iterate (key: let value from {a: 1, b: 2})
and follow the hints provided by the var
/let
to declare (or not) key
and value
using these?