(* TEST: [-asc -tc -cg -ir] *) type string: 1 -> character type BooleanXBoolean: [Boolean: x; Boolean: y] type characterXcharacter: [character: x; character: y] type integerXinteger: [integer: x; integer: y] type Boolean2Boolean: Boolean -> Boolean type integer2integer: integer -> integer type character2integer: character -> integer type Boolean2integer0: Boolean -> integer type string2integer: string -> integer type integerXinteger2integer: integerXinteger -> integer type integerXinteger2Boolean: integerXinteger -> Boolean type characterXcharacter2Boolean: characterXcharacter -> Boolean type BooleanXBoolean2Boolean: BooleanXBoolean -> Boolean type integer2address: integer -> address type address2integer: address -> integer external function printInteger: integer2integer external function printCharacter: character2integer external function printBoolean: Boolean2integer function entry: string2integer entry (arg) := { [integer:x; integer:y; integer: result] y := 1; x := 3; y := x + y; result := printInteger(y); return y; }