【发布时间】:2016-04-04 12:27:06
【问题描述】:
有谁知道评估字符串的方法,以便如果它(或它定义的函数)产生错误,堆栈跟踪中显示的行号和列号将被预先指定的数量偏移? 或者,假设我想将一个长的源字符串分成多个块并分别评估它们,但仍然获得看起来好像整个字符串都被一次性评估的堆栈跟踪。除了使用空行和空列之外,有什么方法可以达到这种效果? (我需要一个基于浏览器的解决方案,最好是跨浏览器,但我可以满足于至少在一个主要浏览器上工作的东西。)
【问题讨论】:
-
可能源图是要走的路,但我不知道它们是否适用于
eval。 -
我认为源映射必须由将块连接成单个字符串以进行评估的工具生成,但我特别需要单独评估块,因为在某个块中定义的函数可能在生成以后的块的过程中使用。
-
你为什么要这样做?
-
我有一种自定义编程语言,可以编译成 javascript 的子集。它有一个 lispy 宏系统,因此可以在任何给定点定义一个宏并在后续代码中使用它,这意味着它必须在其他任何事情之前进行评估。更糟糕的是,宏还可以使用先前定义的普通函数,因此必须在宏之前对它们进行评估。问题是堆栈跟踪中的源位置以这种方式变得无用,因为它们重叠,我无法明确地将它们映射回原始源代码。
-
如果您不需要同步,则将代码转换为数据/blob URL 并将其添加为脚本标签将允许错误消息显示正确的行号和列号,不像一个原始的
eval
标签: javascript eval