[Mono-dev] Questions on Cecil
Jb Evain
mono at evain.net
Sun Aug 13 06:08:21 EDT 2006
Hello Bjarke,
Answers inline.
Bjarke Hammersholt Roune wrote:
> 1. I'm using ildasm and the largely uncommented Cecil source as
> documentation. Is there some actual documentation other than the FAQ?
No, sorry.
> 2. I need to know the types of the things on the stack. Can Cecil help
> with that? If not, is there some nice way to get .NET to handle the
> operations on the type lattice?
When you inspect the method body, you can deduce the stack. The OpCode
has all the details. Check the OperandType and the StackBehaviour
enumerations.
> 3. When emitting a Br (branch) instruction, Cecil insists on getting the
> target instruction immediately. The trouble is that when I am writing
> out CIL to Cecil from the CIL representation internal to my program, it
> is often the case that the target of the branch has not been emitted
> yet. Currently I get around this by passing it a dummy Nop instruction
> and then correcting the target in a second pass. Is there some way to
> avoid constructing a dummy instruction, such as by getting Cecil to
> accept a null as the (preliminary) target? (When I try to do that the
> obvious way I get an exception)
Well, I could eventually remove the null check, but if you forgot to
patch the operand, it will point to the end of the CIL stream.
> 4. Cecil requires that the type of a local variable be specified as a
> TypeReference, so I need to get those. Is there some way to get a
> TypeReference for built in types like System.Int32 without loading an
> assembly? The way I am doing it now is getting it as
> assembly.MainModule.TypeReferences["System.Int32"].
assembly.MainModule.Import("System.Int64") will do.
> 5. I would like to emit the short form of the Br instruction when this
> is possible. My initial idea is to always emit the short form, and then
> expand to the long form where necessary. That makes it necessary to take
> into account the possibility of a cascade where expanding one
> instruction increases the distance to the target of another Br
> instruction which then also needs to be expanded to the long form and so
> on. I would like to avoid this trouble, so is there some way to get
> Cecil to do this for me?
No, at least, not yet.
Feel free to ask if you have other questions,
Jb
More information about the Mono-devel-list
mailing list