Because Math.PI is a constant, the compiler will just copy its value to the location of where it's used. So, if your code says "double pi = Math.PI;", the compiler will translate it to "double pi = 3.1415926...;". That's why there are no references to Math.PI.
2010/1/10 Wee Li Yen <[email protected]> > Sorry to bother you on this issue again. > > I print out all the instructions from VisitInstruction (BaseCodeVisitor) in > this way: > > OpCode opCode = instr.OpCode; > object operand = instr.Operand; > Console.Write("###" + opCode + " " + ((operand != null)? > operand.ToString() : "") + "###"); > Console.WriteLine(); > > But I don't see ldc.r8 Math.PI... > > Do you know why? Thanks... > > > > > -------------------------------------------------- > From: "Jb Evain" <[email protected]> > Sent: Friday, January 08, 2010 5:58 PM > To: <[email protected]> > Subject: Re: [mono-cecil] Field read and write > > 2010/1/8 Li Yen Wee <[email protected]>: >> >>> But how has it got to do with me not being able to detect the field >>> PIValue >>> as written and Math.PI as read? >>> >> >> Again, if you had bothered to investigate a little bit you would know. >> PI is defined as a constant, so the compiler will inline its value >> everywhere it's used >> >> var pi = Math.PI is compiled as: >> >> ldc.r8 3.1415926535897931 >> stloc pi >> >> So if you want to detect where PI is used, you have to check for the >> `ldc.r8 Math.PI` pattern. >> >> -- >> Jb Evain <[email protected]> >> >> > > > -- >> -- >> mono-cecil >> > > > -- > -- > mono-cecil >
-- -- mono-cecil
