Доступ к вложенным областям в sweet.js
Я пытаюсь определить некоторые макросы, которые позволяют объявлять последовательность вызовов функций для функций, которые действительно асинхронны. Макросы преобразуют эту последовательность вызовов в продолжения; а именно, функция, которая принимает два параметра: местоположение в функции для продолжения и локальное состояние функции.
Итак, идея заключается в следующем:
function test() {
f(1)
f(2)
}
=>
function test(_,local) {
switch (_) {
case 0: f(1,function() { test(1,local) }); return
case 1: f(2,function() { test(2,local) }); return
}
}
Для этого у меня определены два макроса, function
а также f
, Однако в общем случае будет целый список функций, кроме f
который может быть произвольно использован и смешан с другим (не макро) кодом в определениях функций. Этот вопрос, по-видимому, задает гораздо более узкую версию вопроса, и я не уверен, будет ли работать принятый ответ (именованные шаблоны) (я не вижу, как заставить его работать), из-за необходимости разрешить произвольное количество последовательных суб-макросов, выбранных из множества вариантов.
Проблема в том, что это должно работать для вложенных анонимных функций, поэтому мне нужен какой-то способ присвоения этих последовательных номеров операторов в операторах case относительно текущей функции. Как мне это сделать?
У меня есть пример здесь.
В первом случае все работает нормально: каждый оператор case передает номер следующего оператора case в функцию обратного вызова. Но для второго случая это не удается, например, первый оператор case пытается получить доступ к номеру первого оператора case во вложенной функции. Это потому, что мы используем глобальную переменную для отслеживания номера дела, но я не знаю, как отслеживать эту переменную относительно текущей области. Используя console.log, я проследил оценку и обнаружил, что отдельные макросы не оцениваются как вложенные. Как я могу установить значение в одном макросе и затем получить доступ к этому значению из любых макросов, которые являются лексическими дочерними элементами этого макроса?