Hi,

>So char, the integer types and bool are all interchangable?

Technically, yes. The CLR treats bools and chars as 32-bit integers
(even if a char really is only 16 bits and a bool 8 bits).

>How about the 'ceq' instruction? Does it only work on the types above (lets 
>call them 'numeric types'), or does it have some magic way of comparing other 
>types?

All such instructions only operate on primitive types that the VES
knows how to compare. Object.Equals(), IEquatable<T>, etc are all
independent of CIL and must be called manually.

Regards,
Alex

On Mon, Jun 27, 2011 at 4:17 PM, Gábor Kozár <[email protected]> wrote:
> So char, the integer types and bool are all interchangable?
> How about the 'ceq' instruction? Does it only work on the types above (lets
> call them 'numeric types'), or does it have some magic way of comparing
> other types?
> Thanks for the book recommendation, I have ordered it! :)
> 2011/6/26 Alex <[email protected]>
>>
>> Hello,
>>
>> >So apparently, the int32 value of '1' is bool 'true' as far as CIL is
>> > concerned. So what are the rules here? Are there any other such 'implicit
>> > conversions' I should be aware of?
>>
>> The only other case I can think of is 'char'.
>>
>> >Another thing that's not quite clear for me are the 'add', 'div', 'rem',
>> > 'clt' etc. instructions, specifically, the values they use. Do they work
>> > only on Int32? What happens if they get Int16 or Int64?
>>
>> In CIL, types are not encoded in instructions, but rather in local
>> variables, parameters, fields, etc. So, the instructions you mention
>> operate on both integers and floats (don't misunderstand; they're
>> still type-safe).
>>
>> >Is there a site or a tutorial or a book, or whatever that can teach me
>> > CIL? I did some searches, but only found some very basic examples - nothing
>> > too useful.
>>
>> I would recommend Expert .NET 2.0 IL Assembler and generally ECMA 335
>> Partition II and III.
>>
>> Regards,
>> Alex
>>
>> On Sun, Jun 26, 2011 at 5:19 PM, Gábor Kozár <[email protected]> wrote:
>> > Hey,
>> >
>> > I'm writing a stack analyzer using Mono.Cecil: ideally it should be able
>> > to
>> > tell me what is on the evaluation stack at the given instruction of a
>> > method
>> > body.
>> > For this, I need to be able to tell the type of the values pushed to /
>> > pulled from the evaluation stack by the instructions.
>> > This is mostly fine, however, there are some things around the native
>> > CIL
>> > types that are confusing.
>> > For example, when I write this in C#:
>> > return true;
>> > this is the CIL emitted:
>> > ldc.i4.1
>> > ret
>> > So apparently, the int32 value of '1' is bool 'true' as far as CIL is
>> > concerned. So what are the rules here? Are there any other such
>> > 'implicit
>> > conversions' I should be aware of?
>> > Another thing that's not quite clear for me are the 'add', 'div', 'rem',
>> > 'clt' etc. instructions, specifically, the values they use. Do they work
>> > only on Int32? What happens if they get Int16 or Int64?
>> > Is there a site or a tutorial or a book, or whatever that can teach me
>> > CIL?
>> > I did some searches, but only found some very basic examples - nothing
>> > too
>> > useful.
>> > Thank you very much!
>> >
>> > --
>> > --
>> > mono-cecil
>>
>> --
>> --
>> mono-cecil
>
> --
> --
> mono-cecil

-- 
--
mono-cecil

Reply via email to