(* 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 Boolean2integer: 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 type integer2string: integer -> string type integer2character: integer -> character type integer2Boolean: integer -> Boolean external function printInteger: integer2integer external function printCharacter: character2integer external function printBoolean: Boolean2integer external function printS: string2integer external function printI: integer2integer external function printC: character2integer external function printB: Boolean2integer external function inS: integer2string external function inI: integer2integer external function inC: integer2character function entry: string2integer type rec: [integer: x; integer: y; integer: z; integer: a; integer: b; integer: c; integer: d] type T2: rec -> integer type T: integer -> integer function bar: T2 function ahh: T ahh (a) := { a := printInteger(a); return -1; } bar (a, b, c,d,e,f,g) := { a := printInteger(g); return b; } entry (arg) := { [integer:x; integer:y; integer: result; character: a] a := 'a'; x := printCharacter(a); result := bar(1,2,3,4,5,6,7); return 1; }