package Ġim f Ċ Ċ sealed Ġclass ĠOperation Ġ{ ĊĠĠĠ Ġabstract Ġval Ġtype : ĠType ? ĊĊĠĠĠ Ġdata Ġclass ĠInvoke ( ĊĠĠĠĠĠĠĠ Ġval Ġfunction : ĠOperation , ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġtype : ĠType ? Ġ= Ġnull ĊĠĠĠ Ġ) Ġ: ĠOperation () ĊĊĠĠĠ Ġdata Ġclass ĠLoad Named Value ( ĊĠĠĠĠĠĠĠ Ġval Ġname : ĠString , ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġtype : ĠType ? Ġ= Ġnull ĊĠĠĠ Ġ) Ġ: ĠOperation () ĊĊĠĠĠ Ġdata Ġclass ĠConst Int 3 2 ( ĊĠĠĠĠĠĠĠ Ġval Ġvalue : ĠInt ĊĠĠĠ Ġ) Ġ: ĠOperation () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġtype : ĠPrimitive Ġ= ĠPrimitive . INT 3 2 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠConst Int 6 4 ( ĊĠĠĠĠĠĠĠ Ġval Ġvalue : ĠLong ĊĠĠĠ Ġ) Ġ: ĠOperation () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġtype : ĠPrimitive Ġ= ĠPrimitive . INT 6 4 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠConst Float 3 2 ( ĊĠĠĠĠĠĠĠ Ġval Ġvalue : ĠFloat ĊĠĠĠ Ġ) Ġ: ĠOperation () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġtype : ĠPrimitive Ġ= ĠPrimitive . FLOAT 3 2 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠConst Float 6 4 ( ĊĠĠĠĠĠĠĠ Ġval Ġvalue : ĠDouble ĊĠĠĠ Ġ) Ġ: ĠOperation () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġtype : ĠPrimitive Ġ= ĠPrimitive . FLOAT 6 4 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠBinary ( ĊĠĠĠĠĠĠĠ Ġval Ġop : ĠBinary Op Type , ĊĠĠĠĠĠĠĠ Ġval Ġleft : ĠOperation , ĊĠĠĠĠĠĠĠ Ġval Ġright : ĠOperation , ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġtype : ĠType ? Ġ= Ġnull ĊĠĠĠ Ġ) Ġ: ĠOperation () ĊĊĠĠĠ Ġdata Ġclass ĠCast Primitive ( ĊĠĠĠĠĠĠĠ Ġval Ġinput : ĠOperation , ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġtype : ĠPrimitive ĊĠĠĠ Ġ) Ġ: ĠOperation () ĊĊĊĠĠĠ Ġ// ĠInner Ġfunctions Ġare Ġmove Ġto Ġouter Ġscope Ġby Ġimplicitly ĊĠĠĠ Ġ// ĠĠĠĠ Ġpassing Ġouter Ġscope Ġvalue Ġaccess Ġas Ġthe Ġfirst Ġparameters Ċ }