我正在制作一个。net兼容的编译器,今天我遇到了一个非常奇怪的bug。我正在测试字段getter,有时我得到MissingFieldException
与一些内置类型的字段。
我所困扰的字段是:
- 所有数字的
MaxValue
- 所有数值的
MinValue
-
double.PositiveInfinity
-
double.NegativeInfinity
-
double.NaN
代码编译得很好:在编译过程中,找到FieldInfo
并发出相应的ldsfld
。然而,在运行阶段,会抛出上述异常。这种情况只发生在一些字段: Type.EmptyTypes
编译和工作就像预期的那样!
我试图调查csc
为这些字段发出的il代码,但它做了一些优化,程序只是将实际值推送到堆栈而不是调用字段。虽然这显然是一种更有效的方法,但现在我想让我的编译器尽可能简单。
有人遇到过类似的问题吗?
我试图调查
csc
为这些字段发出的il代码,但是它做了一些优化程序只是把实际的值返回栈,而不是调用该字段。
列表中的所有字段都是常量字段。因此,它们的值将被复制到由引用它们的代码生成的IL中。