Построение собственного callstack - PullRequest
0 голосов
/ 08 декабря 2018

Я пытаюсь перехватить все вызовы в моей библиотеке в одной точке и поделиться настроенным стеком вызовов (массивом) между функциями моей библиотеки.

Это библиотека FP, где трубопровод / компоновкамного функций является обычной практикой.Встроенный стек вызовов отслеживает все вызовы (содержит шум), в то время как я хочу пренебрегать внутренними вызовами и просто записывать пользовательские вызовы в библиотеку и управлять трассировкой внутренних вызовов вручную, как я хочу в моем собственном стеке.Кажется, частью решения является apply trap, но я не знаю, с чего начать.

// Ramda FP library
// Abbreviate input string: 'some input' -> 'S.I'
const app = R.pipe(R.w, R.x, R.y, R.z)
const output = app('some input')

// Sample actual call stack (including internal calls):
// w -> __w0 -> _t2 -> x -> _x1 -> _x2 -> y -> _y -> z -> _z9

// Desired call stack without internal calls (noise)
// x -> y -> z

Если у меня есть своя собственная структура данных для стека вызовов внутри моей библиотеки, тогда можно получить следующеевывод приведенного выше примера в виде:

pipe:    w      ->      x     ->     y    ->    z
    'some input'    ['s','i']   ['S','I']    'S.I'

и в случае ошибки:

const output = app('')


// desired output
pipe:  w   ->   x   ->    y   ->    z
      ''       []       Error

Error: Array is empty!

Сводка : мне нужно реализовать собственный стек виртуальных вызовов, который является умным и используется для предоставления полезных данных пользователям библиотеки.Учитывая, что в библиотеках FP каррирование, частичное применение ... являются частыми случаями использования, становится труднее решить проблему.

...