Доступ к вложенным областям в 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, я проследил оценку и обнаружил, что отдельные макросы не оцениваются как вложенные. Как я могу установить значение в одном макросе и затем получить доступ к этому значению из любых макросов, которые являются лексическими дочерними элементами этого макроса?

0 ответов

Другие вопросы по тегам