Bawiąc się przy tworzeniu kompilatora dla mojego własnego języka, próbuję wygenerować kod MSIL za pomocą struktury Reflection.Emit. Działa dobrze podczas używania int
, gdy deklaruję zmienne lokalne. Jednakże, gdy chcę zadeklarować zmienną lokalną typu, którego jeszcze nie skompilowałem, wpadam w kłopoty, ponieważ DeclareLocal()
przyjmuje argument jako Type
. To jest mój Nieskompilowany klasy, powiedzmy A
, nadal musi być określona przy użyciuILGenerator.DeclareLocal() przyjmuje typ klasy, która nie została jeszcze skompilowana
assemblyBuilder = Thread.GetDomain().DefineDynamicAssembly(assemName, AssemblyBuilderAccess.RunAndSave);
module = assemblyBuilder.DefineDynamicModule(Filename);
module.DefineType(name, TypeAttributes.Public | TypeAttributes.Class)
więc jak kiedykolwiek będę w stanie skompilować następujący program
class A {
void M() { B b = new B(); }
}
class B
void M() { A a = new A(); }
}
Co by to pomogło? –
@phoog: mógłby równie dobrze poczekać, aż ktoś wykona swoją pracę, a następnie .. –
Nie robię faktycznie C# tutaj .. był to tylko przykład zależności cyklicznej –