深入理解Solidity——源文件映射

源文件映射(Source Mappings)

作为AST输出的一部分,编译器会提供AST某个节点以应的源代码的范围。这可以被用来做基于AST的静态代码错误分析,可以高亮本地变量,和他们对应使用的调试工具。

此外,编译器也可以生成字节码到生成指令源代码的范围映射。这对静态分析工具来说非常重要,它们在字节码级别分析,可以来在调试工具内显示对应代码位置,或支持断点操作。

这两种源映射都使用整数标识符来引用源文件。这些是常规数组索引,它们通常被称为“sourceList”的源文件列表,它是 combined-json和json / npm编译输出的一部分。

注解
在与任何特定源文件不相关的指令的情况下,源映射分配-1的整数标识符。这可能发生于编译器生成的内联汇编语句中的字节码部分。

映射的源内的AST使用以下符号:

s:l:f

其中,s是源文件中范围开始的字节偏移量,l是源范围的字节长度,f是上面提到的源索引。

字节码的源映射中的编码更为复杂:它是由;分隔的s:l:f的列表。这些元素中的每一个都对应于指令,即不能使用字节偏移,但必须使用指令偏移(推送指令比单个字节长)。字段slf与上面一样,j可以是io-表示jump 指令是否进入函数、从函数返回或是作为循环的一部分的常规跳转。

为了压缩这些源映射,特别是对于字节码,使用以下规则:

  • 如果字段为空,则使用前一个元素的值。
  • 如果缺少:,则所有以下字段都被认为是空的。

这意味着以下源映射表示相同的信息:

1:2:1;1:9:1;2:1:2;2:1:2;2:1:2

1:2:1;:9;2:1:2;;

上一篇:深入理解Solidity——内存布局

下一篇:深入理解Solidity——提示和技巧

猜你喜欢

转载自blog.csdn.net/qq_33829547/article/details/80418568