I didn't see any constant PI value. If I hv seen that I would hv noticed that.

I am on Windows... What do u mean by "open that compiled application in 
Reflector"? I never used that before.

I am writing an application using Visual Studio. Nothing wrong with my code 
right?


From: Tommy Carlier 
Sent: Sunday, January 10, 2010 9:19 PM
To: [email protected] 
Subject: Re: [mono-cecil] Field read and write


That's right. Try this (if you're on Windows): compile an application that 
references a constant (like Math.PI), and open that compiled application in 
Reflector. The call the Math.PI will have been replaced by a constant value.


2010/1/10 Wee Li Yen <[email protected]>

  Tommy, so what u mean is there is no way I can detect field read and write in 
this case?

  But how come Jb said "So if you want to detect where PI is used, you have to 
check for the `ldc.r8 Math.PI` pattern."? My previous post was trying to say 
that I can't find this.



  From: Tommy Carlier 
  Sent: Sunday, January 10, 2010 8:21 PM
  To: [email protected] 
  Subject: Re: [mono-cecil] Field read and write


  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

Reply via email to