星期一, 5月 19, 2008

[Boo]booc 的 49 道工法

從 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
只應用了繼承的威力...

沒有留言: