package Ġdev . ss ch . mini java . compiler Ċ Ċ import Ġdev . ss ch . mini java . compiler . symbol table . Class Symbol Table Ċ import Ġdev . ss ch . mini java . grammar . Mini Java Parser Ċ import Ġdev . ss ch . mini java . wasm . ast . Instruction Ċ import Ġdev . ss ch . mini java . wasm . ast . ValueType Ċ Ċ fun Ġ< T > ĠMutable List < T >. remove First OrNull (): ĠT ? Ġ{ ĊĠĠĠ Ġreturn Ġif Ġ( this . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġnull ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . remove At ( 0 ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠDataType . to Web Assembly Type (): ĠValueType Ġ{ ĊĠĠĠ Ġreturn Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠ ĠDataType . Primitive Type . Integer Ġ-> ĠValueType . I 3 2 ĊĠĠĠĠĠĠĠ ĠDataType . Primitive Type . Boolean Ġ-> ĠValueType . I 3 2 ĊĠĠĠĠĠĠĠ ĠDataType . Primitive Type . Float Ġ-> ĠValueType . F 3 2 ĊĠĠĠĠĠĠĠ ĠDataType . Primitive Type . Char Ġ-> ĠValueType . I 3 2 ĊĠĠĠĠĠĠĠ Ġis ĠDataType . Array Ġ-> ĠValueType . I 3 2 ĊĠĠĠĠĠĠĠ Ġis ĠDataType . Reference Type Ġ-> ĠValueType . I 3 2 ĊĠĠĠĠĠĠĠ ĠDataType . Null Type Ġ-> Ġthrow ĠIllegalStateException (" Equivalent ĠWeb Assembly Ġtype Ġfor ĠDataType . Null Type Ġdoes Ġnot Ġexist ") ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠString . get DataType ( class Symbol Table : ĠClass Symbol Table ): ĠDataType ? Ġ{ ĊĠĠĠ Ġfun Ġas Reference Type ( name : ĠString ): ĠDataType ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( class Symbol Table . classes . containsKey ( name )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDataType . Reference Type ( name ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġprimitive Type Ġ= ĠDataType . Primitive Type . fromString ( this ) ĊĠĠĠ Ġreturn Ġprimitive Type Ġ?: Ġas Reference Type ( this ) Ċ } Ċ Ċ fun ĠMini Java Parser . Type Definition Context . get DataType ( class Symbol Table : ĠClass Symbol Table ): ĠDataType ? Ġ{ ĊĠĠĠ Ġreturn Ġwhen Ġ( val Ġctx Ġ= Ġthis ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠMini Java Parser . Simple Type Context Ġ-> Ġctx . IDENT (). text . get DataType ( class Symbol Table ) ĊĠĠĠĠĠĠĠ Ġis ĠMini Java Parser . ArrayType Context Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġctx . IDENT (). text . get DataType ( class Symbol Table ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype ?. let Ġ{ ĠDataType . Array ( type ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠ Ġ} Ċ } Ċ Ċ val ĠdataType W id ening Conversions Ġ= Ġhash Map Of ( ĊĠĠĠ ĠPair ( Pair ( DataType . Primitive Type . Integer , ĠDataType . Primitive Type . Float ), ĠlistOf ( Instruction . f 3 2 _ convert _ i 3 2 _ s )), ĊĠĠĠ ĠPair ( Pair ( DataType . Primitive Type . Char , ĠDataType . Primitive Type . Integer ), ĠlistOf ()), ĊĠĠĠ ĠPair ( Pair ( DataType . Primitive Type . Char , ĠDataType . Primitive Type . Float ), ĠlistOf ( Instruction . f 3 2 _ convert _ i 3 2 _ s )) Ċ ) Ċ Ċ val ĠdataType Cast ing Conversions Ġ= Ġhash Map Of ( ĊĠĠĠ ĠPair ( Pair ( DataType . Primitive Type . Integer , ĠDataType . Primitive Type . Float ), ĠlistOf ( Instruction . f 3 2 _ convert _ i 3 2 _ s )), ĊĠĠĠ ĠPair ( Pair ( DataType . Primitive Type . Integer , ĠDataType . Primitive Type . Char ), ĠlistOf ()), ĊĠĠĠ ĠPair ( Pair ( DataType . Primitive Type . Float , ĠDataType . Primitive Type . Integer ), ĠlistOf ( Instruction . i 3 2 _ trunc _ f 3 2 _ s )), ĊĠĠĠ ĠPair ( Pair ( DataType . Primitive Type . Float , ĠDataType . Primitive Type . Char ), ĠlistOf ( Instruction . i 3 2 _ trunc _ f 3 2 _ s )), ĊĠĠĠ ĠPair ( Pair ( DataType . Primitive Type . Char , ĠDataType . Primitive Type . Integer ), ĠlistOf ()), ĊĠĠĠ ĠPair ( Pair ( DataType . Primitive Type . Char , ĠDataType . Primitive Type . Float ), ĠlistOf ( Instruction . f 3 2 _ convert _ i 3 2 _ s )) Ċ ) Ċ Ċ fun ĠDataType . assign Type To ( other : ĠDataType ): ĠList < Instruction >? Ġ{ ĊĠĠĠ Ġreturn Ġif Ġ( this Ġ== Ġother ) Ġ{ ĊĠĠĠĠĠĠĠ ĠlistOf () ĊĠĠĠ Ġ} Ġelse Ġif Ġ( this Ġ== ĠDataType . Null Type Ġ&& Ġ( other Ġis ĠDataType . Reference Type Ġ|| Ġother Ġis ĠDataType . Array )) Ġ{ ĊĠĠĠĠĠĠĠ ĠlistOf () ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ ĠdataType W id ening Conversions [ Pair ( this , Ġother )] ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠDataType . cast Type To ( other : ĠDataType ): ĠList < Instruction >? Ġ{ ĊĠĠĠ Ġreturn Ġif Ġ( this Ġ== Ġother ) Ġ{ ĊĠĠĠĠĠĠĠ ĠlistOf () ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ ĠdataType Cast ing Conversions [ Pair ( this , Ġother )] ĊĠĠĠ Ġ} Ċ } Ċ