源文件映射(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;;

本文探讨了源文件映射(SourceMappings)在编译过程中的作用,包括其如何帮助进行静态代码分析、调试及字节码级别的源代码定位。通过整数标识符引用源文件,并详细介绍了AST及字节码映射的具体格式。

被折叠的 条评论
为什么被折叠?



