package Ġcom . pal ml ang . pal m . frontend . builtin . pre pro data Ċ Ċ import Ġcom . pal ml ang . pal m . common . Module Path Ċ import Ġcom . pal ml ang . pal m . common . STL Paths Ċ import Ġcom . pal ml ang . pal m . frontend . com on . Modal ity Ċ import Ġcom . pal ml ang . pal m . frontend . com on . Visibility Ċ import Ġcom . pal ml ang . pal m . util . multi HashMap Of Ċ Ċ class ĠFile Builder Ġ{ ĊĠĠĠ Ġprivate Ġval Ġmap Ġ= Ġmutable Map Of < String , ĠBuiltin Class >() ĊĊĠĠĠ Ġfun Ġklass ( ĊĠĠĠĠĠĠĠ Ġname : ĠString , ĊĠĠĠĠĠĠĠ Ġtype Params : ĠList < String > Ġ= Ġempty List (), ĊĠĠĠĠĠĠĠ Ġsuperclass : ĠModule Path Ġ= ĠST L Paths . any , ĊĠĠĠĠĠĠĠ Ġvisibility : ĠVisibility Ġ= ĠVisibility . Public , ĊĠĠĠĠĠĠĠ Ġabstract : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġmod ality : ĠMod ality Ġ= Ġif Ġ( abstract ) ĠMod ality . Open Ġelse ĠMod ality . Final , ĊĠĠĠĠĠĠĠ Ġfn : ĠClass Builder . () Ġ-> ĠUnit , ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmap [ name ] Ġ= ĠClass Builder ( name , Ġtype Params , Ġsuperclass , Ġvisibility , Ġmod ality , Ġabstract ). apply ( fn ). build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbuild () Ġ= ĠBuiltin Pre Pro Data ( map ) Ċ } Ċ Ċ fun Ġfile ( fn : ĠFile Builder . () Ġ-> ĠUnit ) Ġ= ĠFile Builder (). apply Ġ{ Ġfn () Ġ}. build () Ċ Ċ class ĠClass Builder ( ĊĠĠĠ Ġprivate Ġval Ġname : ĠString , ĊĠĠĠ Ġprivate Ġval Ġtype Params : ĠList < String >, ĊĠĠĠ Ġprivate Ġval Ġsuperclass : ĠModule Path , ĊĠĠĠ Ġprivate Ġval Ġvisibility : ĠVisibility , ĊĠĠĠ Ġprivate Ġval Ġmod ality : ĠMod ality , ĊĠĠĠ Ġprivate Ġval Ġabstract : ĠBoolean Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġconstructors Ġ= Ġmutable ListOf < Builtin Constructor >() ĊĠĠĠ Ġprivate Ġval Ġfunctions Ġ= Ġmulti HashMap Of < String , ĠBuiltin Function >() ĊĠĠĠ Ġprivate Ġval Ġproperties Ġ= Ġmutable ListOf < Builtin Property >() ĊĊĠĠĠ Ġfun Ġproperty ( ĊĠĠĠĠĠĠĠ Ġname : ĠString , ĊĠĠĠĠĠĠĠ ĠreturnType : ĠType Reference , ĊĠĠĠĠĠĠĠ Ġvisibility : ĠVisibility Ġ= ĠVisibility . Public , ĊĠĠĠĠĠĠĠ Ġstatic : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġoverrides : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġabstract : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġmod ality : ĠMod ality Ġ= Ġif Ġ( abstract ) ĠMod ality . Open Ġelse ĠMod ality . Final , ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġproperties . add ( Builtin Property ( static , Ġvisibility , Ġmod ality , Ġoverrides , Ġabstract , Ġname , ĠreturnType )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġparams : ĠList < Pair < String , ĠType Reference >> Ġ= Ġempty List (), ĊĠĠĠĠĠĠĠ Ġvisibility : ĠVisibility Ġ= ĠVisibility . Public , ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġconstructors . add ( Builtin Constructor ( visibility , Ġparams )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfunction ( ĊĠĠĠĠĠĠĠ Ġname : ĠString , ĊĠĠĠĠĠĠĠ Ġparams : ĠList < Pair < String , ĠType Reference >> Ġ= Ġempty List (), ĊĠĠĠĠĠĠĠ ĠreturnType : ĠType Reference Ġ= ĠType Reference . Path ( STL Paths . tuples [ 0 ]), ĊĠĠĠĠĠĠĠ Ġvisibility : ĠVisibility Ġ= ĠVisibility . Public , ĊĠĠĠĠĠĠĠ Ġoverrides : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġin fix : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġoperator : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġstatic : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġabstract : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġmod ality : ĠMod ality Ġ= Ġif Ġ( abstract ) ĠMod ality . Open Ġelse ĠMod ality . Final , ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfunctions [ name ] Ġ+= ĠBuiltin Function ( static , Ġvisibility , Ġmod ality , Ġoverrides , Ġoperator , Ġin fix , Ġabstract , Ġparams , ĠreturnType ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbuild () Ġ= ĠBuiltin Class ( visibility , Ġmod ality , Ġabstract , Ġname , Ġtype Params , Ġsuperclass , Ġconstructors , Ġfunctions , Ġproperties ) Ċ }