プログラミング言語SML#解説 4.0.0版
33.3 コンパイラのトップレベル
SML#コンパイラのトップレベル関数は, comiler/compilePhases/toplevel/main/の Top.smlファイルに書かれた以下の型を持つcompile関数である.
val compile : : LLVMUtils.compile_options -> options -> toplevelContext -> Parser.input -> InterfaceName.dependency * result
この関数は,LLVMコード生成オプション,コンパイルオプション, コンパイル環境,ソースファイルのインプットストリームを受け取り, ソースファイルをコンパイルし,ソースファイルが依存するインタフェイスファイルのリスト (InterfaceName.dependency)と コンパイル結果のオブジェクトファイル (result) を返す.
この関数は,Main.smlのcompileSML関数から呼び出され, 以下の表に示す通り,各コンパイルフェーズの関数を順に呼び出しソースファイ ルのコンパイルを行う.
Compile step | Compile Phase Function | Source Language | Target Language |
---|---|---|---|
1 | Parser.parse | (input stream) | Absyn.absyn |
2 | LoadFile.load | Absyn.absyn | AbsynInterface.compile_unit |
3 | Elaborator.elaborate | AbsynInterface.compile_unit | PatternCalcInterface.compile_unit |
4 | NameEval.nameEval | PatternCalcInterface.compile_unit | IDCalc.topdecl |
5 | TypedElaboration.elaborate | IDCalc.topdecl | IDCalc.topdecl |
6 | VALREC_Optimizer.optimize | IDCalc.topdecl | IDCalc.topdecl |
7 | InferTypes.typeinf | IDCalc.topdecl | TypedCalc.tpdecl list |
8 | UncurryFundecl.optimize | TypedCalc.tpdecl list | TypedCalc.tpdecl list |
9 | PolyTyElimination.compile | TypedCalc.tpdecl list | TypedCalc.tpdecl list |
10 | TPOptimize.optimize | TypedCalc.tpdecl list | TypedCalc.tpdecl list |
11 | MatchCompiler.compile | TypedCalc.tpdecl list | RecordCalc.rcdecl list |
12 | FFICompilation.compile | RecordCalc.rcdecl list | RecordCalc.rcdecl list |
13 | RecordCompilation.compile | RecordCalc.rcdecl list | RecordCalc.rcdecl list |
13 | DatatypeCompilation.compile | RecordCalc.rcdecl list | TypedLambda.tldecl list |
14 | BitmapCompilation2.compile | TypedCalc.tpdecl list | BitmapCalc2.bcdecl list |
15 | ClosureConversion2.convert | BitmapCalc2.bcdecl list | ClosureCalc.program |
16 | CallingConventionCompile.compile | ClosureCalc.program | RuntimeCalc.program |
17 | ANormalize.compile | RuntimeCalc.program | ANormal.program |
18 | MachineCodeGen.compile | ANormal.program | MachineCode.program |
18 | ConcurrencySupport.insertCheckGC | MachineCode.program | MachineCode.program |
19 | StackAllocation.compile | MachineCode.program | MachineCode.program |
19 | LLVMGen.compile | MachineCode.program | LLVMIR.program |
20 | LLVMEmit.emit | LLVMIR.program | LLVM.LLVMModuleRef |