[Mono-dev] Questions on Cecil
Bjarke Hammersholt Roune
bjarke.roune at gmail.com
Sat Aug 12 19:47:33 EDT 2006
I've begun writing the interface layer to Cecil for my CIL optimizer,
and I have some questions on using Cecil that I have not been able to
find an answer to on my own. Any help would be appreciated.
0. I assume Cecil is sufficiently related to Mono for questions about it
to be on-topic on this list, especially as I don't see any
Cecil-specific mailing list. Am I correct? (if not: sorry! :-) )
1. I'm using ildasm and the largely uncommented Cecil source as
documentation. Is there some actual documentation other than the FAQ?
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?
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)
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"].
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?
/Bjarke Roune
More information about the Mono-devel-list
mailing list