從 Visual Studio debugger 裡面截出來的…想不到編譯需要這麼多步驟…
- _items {維度:[64]} object[] + [0] {Boo.Lang.Parser.BooParsingStep} object {Boo.Lang.Parser.BooParsingStep} + [1] {Boo.Lang.Compiler.Steps.InitializeTypeSystemServices} object {Boo.Lang.Compiler.Steps.InitializeTypeSystemServices} + [2] {Boo.Lang.Compiler.Steps.PreErrorChecking} object {Boo.Lang.Compiler.Steps.PreErrorChecking} + [3] {Boo.Lang.Compiler.Steps.ExpandAstLiterals} object {Boo.Lang.Compiler.Steps.ExpandAstLiterals} + [4] {Boo.Lang.Compiler.Steps.MergePartialClasses} object {Boo.Lang.Compiler.Steps.MergePartialClasses} + [5] {Boo.Lang.Compiler.Steps.InitializeNameResolutionService} object {Boo.Lang.Compiler.Steps.InitializeNameResolutionService} + [6] {Boo.Lang.Compiler.Steps.IntroduceGlobalNamespaces} object {Boo.Lang.Compiler.Steps.IntroduceGlobalNamespaces} + [7] {Boo.Lang.Compiler.Steps.TransformCallableDefinitions} object {Boo.Lang.Compiler.Steps.TransformCallableDefinitions} + [8] {Boo.Lang.Compiler.Steps.BindTypeDefinitions} object {Boo.Lang.Compiler.Steps.BindTypeDefinitions} + [9] {Boo.Lang.Compiler.Steps.BindGenericParameters} object {Boo.Lang.Compiler.Steps.BindGenericParameters} + [10] {Boo.Lang.Compiler.Steps.BindNamespaces} object {Boo.Lang.Compiler.Steps.BindNamespaces} + [11] {Boo.Lang.Compiler.Steps.BindBaseTypes} object {Boo.Lang.Compiler.Steps.BindBaseTypes} + [12] {Boo.Lang.Compiler.Steps.BindAndApplyAttributes} object {Boo.Lang.Compiler.Steps.BindAndApplyAttributes} + [13] {Boo.Lang.Compiler.Steps.ExpandMacros} object {Boo.Lang.Compiler.Steps.ExpandMacros} + [14] {Boo.Lang.Compiler.Steps.IntroduceModuleClasses} object {Boo.Lang.Compiler.Steps.IntroduceModuleClasses} + [15] {Boo.Lang.Compiler.Steps.NormalizeStatementModifiers} object {Boo.Lang.Compiler.Steps.NormalizeStatementModifiers} + [16] {Boo.Lang.Compiler.Steps.NormalizeTypeAndMemberDefinitions} object {Boo.Lang.Compiler.Steps.NormalizeTypeAndMemberDefinitions} + [17] {Boo.Lang.Compiler.Steps.BindTypeDefinitions} object {Boo.Lang.Compiler.Steps.BindTypeDefinitions} + [18] {Boo.Lang.Compiler.Steps.BindGenericParameters} object {Boo.Lang.Compiler.Steps.BindGenericParameters} + [19] {Boo.Lang.Compiler.Steps.BindEnumMembers} object {Boo.Lang.Compiler.Steps.BindEnumMembers} + [20] {Boo.Lang.Compiler.Steps.BindBaseTypes} object {Boo.Lang.Compiler.Steps.BindBaseTypes} + [21] {Boo.Lang.Compiler.Steps.BindMethods} object {Boo.Lang.Compiler.Steps.BindMethods} + [22] {Boo.Lang.Compiler.Steps.ResolveTypeReferences} object {Boo.Lang.Compiler.Steps.ResolveTypeReferences} + [23] {Boo.Lang.Compiler.Steps.BindTypeMembers} object {Boo.Lang.Compiler.Steps.BindTypeMembers} + [24] {Boo.Lang.Compiler.Steps.ProcessInheritedAbstractMembers} object {Boo.Lang.Compiler.Steps.ProcessInheritedAbstractMembers} + [25] {Boo.Lang.Compiler.Steps.CheckMemberNames} object {Boo.Lang.Compiler.Steps.CheckMemberNames} + [26] {Boo.Lang.Compiler.Steps.ProcessMethodBodiesWithDuckTyping} object {Boo.Lang.Compiler.Steps.ProcessMethodBodiesWithDuckTyping} + [27] {Boo.Lang.Compiler.Steps.PreProcessExtensionMethods} object {Boo.Lang.Compiler.Steps.PreProcessExtensionMethods} + [28] {Boo.Lang.Compiler.Steps.UnfoldConstants} object {Boo.Lang.Compiler.Steps.UnfoldConstants} + [29] {Boo.Lang.Compiler.Steps.OptimizeIterationStatements} object {Boo.Lang.Compiler.Steps.OptimizeIterationStatements} + [30] {Boo.Lang.Compiler.Steps.BranchChecking} object {Boo.Lang.Compiler.Steps.BranchChecking} + [31] {Boo.Lang.Compiler.Steps.CheckIdentifiers} object {Boo.Lang.Compiler.Steps.CheckIdentifiers} + [32] {Boo.Lang.Compiler.Steps.StricterErrorChecking} object {Boo.Lang.Compiler.Steps.StricterErrorChecking} + [33] {Boo.Lang.Compiler.Steps.CheckAttributesUsage} object {Boo.Lang.Compiler.Steps.CheckAttributesUsage} + [34] {Boo.Lang.Compiler.Steps.ExpandDuckTypedExpressions} object {Boo.Lang.Compiler.Steps.ExpandDuckTypedExpressions} + [35] {Boo.Lang.Compiler.Steps.ProcessAssignmentsToValueTypeMembers} object {Boo.Lang.Compiler.Steps.ProcessAssignmentsToValueTypeMembers} + [36] {Boo.Lang.Compiler.Steps.ExpandProperties} object {Boo.Lang.Compiler.Steps.ExpandProperties} + [37] {Boo.Lang.Compiler.Steps.RemoveDeadCode} object {Boo.Lang.Compiler.Steps.RemoveDeadCode} + [38] {Boo.Lang.Compiler.Steps.CheckMembersProtectionLevel} object {Boo.Lang.Compiler.Steps.CheckMembersProtectionLevel} + [39] {Boo.Lang.Compiler.Steps.NormalizeIterationStatements} object {Boo.Lang.Compiler.Steps.NormalizeIterationStatements} + [40] {Boo.Lang.Compiler.Steps.ProcessSharedLocals} object {Boo.Lang.Compiler.Steps.ProcessSharedLocals} + [41] {Boo.Lang.Compiler.Steps.ProcessClosures} object {Boo.Lang.Compiler.Steps.ProcessClosures} + [42] {Boo.Lang.Compiler.Steps.ProcessGenerators} object {Boo.Lang.Compiler.Steps.ProcessGenerators} + [43] {Boo.Lang.Compiler.Steps.ExpandVarArgsMethodInvocations} object {Boo.Lang.Compiler.Steps.ExpandVarArgsMethodInvocations} + [44] {Boo.Lang.Compiler.Steps.InjectCallableConversions} object {Boo.Lang.Compiler.Steps.InjectCallableConversions} + [45] {Boo.Lang.Compiler.Steps.ImplementICallableOnCallableDefinitions} object {Boo.Lang.Compiler.Steps.ImplementICallableOnCallableDefinitions} + [46] {Boo.Lang.Compiler.Steps.CheckNeverUsedMembers} object {Boo.Lang.Compiler.Steps.CheckNeverUsedMembers} + [47] {Boo.Lang.Compiler.Steps.EmitAssembly} object {Boo.Lang.Compiler.Steps.EmitAssembly} + [48] {Boo.Lang.Compiler.Steps.SaveAssembly} object {Boo.Lang.Compiler.Steps.SaveAssembly}
第 0 步由 Boo.Lang.Compiler.Pipelines.Parse (src\Boo.Lang.Compiler\Pipelines\Parse.cs) 加入。
第 1~27 步由 Boo.Lang.Compiler.Pipelines.ResolveExpressions (src\Boo.Lang.Compiler\Pipelines\ResolveExpressions.cs) 加入。
第 28~46 步由 Boo.Lang.Compiler.Pipelines.Compile (src\Boo.Lang.Compiler\Pipelines\Compile.cs)加入。
第 47 步由 Boo.Lang.Compiler.Pipelines.CompileToMemory (src\Boo.Lang.Compiler\Pipelines\CompileToMemory.cs) 加入。
第 48 步由 Boo.Lang.Compiler.Pipelines.CompileToFile (src\Boo.Lang.Compiler\Pipelines\CompileToFile.cs)加入。
這些步驟都是利用繼承的關係建立起來的:CompileToFile -> CompileToMemory -> Compile -> ResolveExpressions -> Parse
只應用了繼承的威力…