プログラミング言語SML#解説 4.0.0版
33 コンパイラの制御構造

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.smlcompileSML関数から呼び出され, 以下の表に示す通り,各コンパイルフェーズの関数を順に呼び出しソースファイ ルのコンパイルを行う.

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