private CodeGenerator(CodeGeneratorHints generatorHints, ActionOnCodeGenerator action, int phase) { Instance=this; this.GeneratorHints=generatorHints; this.labelNameToAddress=generatorHints.LabelNameToAddress.ToHashtable(); var stars=new string('*', 78); Debug.Print(stars); Debug.Print(stars); Debug.Print("***** STARTING PHASE "+phase); Debug.Print(stars); Debug.Print(stars); action(this); }
public static CompiledCode Compile(ActionOnCodeGenerator build) { var hints=new CodeGeneratorHints(); var phaseIndex=0; while(true) { try { var result=new CodeGenerator(hints, build, phaseIndex++).Finish(); hints=result as CodeGeneratorHints; if(hints==null) { return (CompiledCode)result; } } finally { Instance=null; } } }