Overview

This document contains an overview of the internals of the .NET EXE/DLL file to PIR translator. If you are looking to use the translator rather than hack on it, you're probably reading the wrong document; see contents.pod instead.

Process Overview

This describes the steps that take place in converting a .NET EXE or DLL file into Parrot bytecode, ready to execute natively in Parrot or write to a file for later loading by Parrot programs.

                   +----------------------------+
                   |  .NET CLI EXE or DLL File  |
                   +------------||--------------+
                                ||
                               _||_
                               \  /
                   +------------\/--------------+
                   |    Metadata Translator     |----------+
                   +------------||--------------+          |
                                ||                      +------+
                               _||_                     | PMCs |
                               \  /                     +------+
                   +------------\/--------------+          |
                   |   Instruction Translator   |----------+
                   +------------||--------------+
                                ||
                               _||_
                               \  /
                   +------------\/--------------+
                   |    Translated PIR Code     |
                   +------------||--------------+
                                ||
                               _||_
                               \  /
                   +------------\/--------------+
                   | Translated Parrot Bytecode |
                   +----------------------------+

PMCs

These are classes implemented in C. Method calls and operations can be performed on them from Parrot programs. In this translation system, they are being used to enable parts of the system to be written in C.

Details of them can be found in pmcs.pod and the source files are in the "pmc" directory and have file extension ".pmc". The .c and most of the .h files are generated, so should not be modified; "structures.h" and "tableinfo.h" are the two exceptions to this rule.

Metadata Translator

In .NET, A lot of data about classes and their methods and fields is not stored in the instruction stream but rather in a set of tables. This part of the system takes the data in the tables and turns it into Parrot intermediate code.

This module uses the PMCs extensively. It translates the class hierachy, fields and method headers with their parameter list and local variables. It delegates the translation of the method body to the instruction translator.

The source for this subsystem is found in the "src" directory. It is written in PIR.

Instruction Translator

This part of the system translates .NET method bodies into PIR. It maps .NET instructions to Parrot instructions and maps the stack onto some Parrot registers. This is easily the most complex part of the system.

Rules and stack to register mapping are specified in a number of files and a build tool (located in the "build" directory) turns them into PIR. This resultant PIR ends up in the "src" directory.

The PIR Compiler

This is a part of Parrot, not of the translation system. It simply turns Parrot Intermediate Representation into Parrot bytecode, which the Parrot virtual machine can execute.