Mit dem Erstellen eines Compilers für meine eigene Sprache versuche ich, einige MSIL-Code mit dem Reflection.Emit-Framework zu generieren. Es funktioniert gut, wenn ich int
verwende, wenn ich lokale Variablen deklariere. Wenn ich jedoch eine lokale Variable eines Typs deklarieren möchte, die ich noch nicht kompiliert habe, stehe ich in Schwierigkeiten, da die DeclareLocal()
eine Type
als Argument nimmt. Das ist meine kompilierten Klasse, sagt A
, noch definiert werden mussILGenerator.DeclareLocal() nimmt einen Typ einer Klasse, die noch nicht kompiliert wurde
assemblyBuilder = Thread.GetDomain().DefineDynamicAssembly(assemName, AssemblyBuilderAccess.RunAndSave);
module = assemblyBuilder.DefineDynamicModule(Filename);
module.DefineType(name, TypeAttributes.Public | TypeAttributes.Class)
mit So wie werde ich jemals in der Lage sein, das folgende Programm zu kompilieren
class A {
void M() { B b = new B(); }
}
class B
void M() { A a = new A(); }
}
Was würde das helfen? –
@phoog: Er könnte genauso gut auf jemanden warten, der seine Arbeit macht, dann ... –
Ich mache C# nicht wirklich .. es war nur ein Beispiel für zirkuläre Abhängigkeit –