源文件映射(Source Mappings)
作为AST输出的一部分,编译器会提供AST某个节点以应的源代码的范围。这可以被用来做基于AST的静态代码错误分析,可以高亮本地变量,和他们对应使用的调试工具。
此外,编译器也可以生成字节码到生成指令源代码的范围映射。这对静态分析工具来说非常重要,它们在字节码级别分析,可以来在调试工具内显示对应代码位置,或支持断点操作。
这两种源映射都使用整数标识符来引用源文件。这些是常规数组索引,它们通常被称为“sourceList
”的源文件列表,它是 combined-json和json / npm编译输出的一部分。
注解 |
---|
在与任何特定源文件不相关的指令的情况下,源映射分配-1 的整数标识符。这可能发生于编译器生成的内联汇编语句中的字节码部分。 |
映射的源内的AST使用以下符号:
s:l:f
其中,s
是源文件中范围开始的字节偏移量,l
是源范围的字节长度,f
是上面提到的源索引。
字节码的源映射中的编码更为复杂:它是由;
分隔的s:l:f
的列表。这些元素中的每一个都对应于指令,即不能使用字节偏移,但必须使用指令偏移(推送指令比单个字节长)。字段s
、l
和f
与上面一样,j
可以是i
、o
或-
表示jump 指令是否进入函数、从函数返回或是作为循环的一部分的常规跳转。
为了压缩这些源映射,特别是对于字节码,使用以下规则:
- 如果字段为空,则使用前一个元素的值。
- 如果缺少
:
,则所有以下字段都被认为是空的。
这意味着以下源映射表示相同的信息:
1:2:1;1:9:1;2:1:2;2:1:2;2:1:2
1:2:1;:9;2:1:2;;
扫描二维码关注公众号,回复:
1698377 查看本文章