/* Ċ Ġ* ĠP _ Bootstrap Super Cast Macro . kt Ċ Ġ* ĠCopyright ĠÂ© Ġ 1 9 9 3 - 2 0 2 0 , ĠThe ĠAv ail ĠFoundation , ĠLLC . Ċ Ġ* ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠRedistribution Ġand Ġuse Ġin Ġsource Ġand Ġbinary Ġforms , Ġwith Ġor Ġwithout Ċ Ġ* Ġmodification , Ġare Ġpermitted Ġprovided Ġthat Ġthe Ġfollowing Ġconditions Ġare Ġmet : Ċ Ġ* Ċ Ġ* Ġ* ĠRedistributions Ġof Ġsource Ġcode Ġmust Ġretain Ġthe Ġabove Ġcopyright Ġnotice , Ġthis Ċ Ġ* ĠĠ Ġlist Ġof Ġconditions Ġand Ġthe Ġfollowing Ġdisclaimer . Ċ Ġ* Ċ Ġ* Ġ* ĠRedistributions Ġin Ġbinary Ġform Ġmust Ġreproduce Ġthe Ġabove Ġcopyright Ġnotice , Ċ Ġ* ĠĠ Ġthis Ġlist Ġof Ġconditions Ġand Ġthe Ġfollowing Ġdisclaimer Ġin Ġthe Ġdocumentation Ċ Ġ* ĠĠ Ġand / or Ġother Ġmaterials Ġprovided Ġwith Ġthe Ġdistribution . Ċ Ġ* Ċ Ġ* Ġ* ĠNeither Ġthe Ġname Ġof Ġthe Ġcopyright Ġholder Ġnor Ġthe Ġnames Ġof Ġthe Ġcontributors Ċ Ġ* ĠĠ Ġmay Ġbe Ġused Ġto Ġendorse Ġor Ġpromote Ġproducts Ġderived Ġfrom Ġthis Ġsoftware Ċ Ġ* ĠĠ Ġwithout Ġspecific Ġprior Ġwritten Ġpermission . Ċ Ġ* Ċ Ġ* ĠTHIS ĠSOFTWARE ĠIS ĠPROVIDED ĠBY ĠTHE ĠCOPYRIGHT ĠHOLDERS ĠAND ĠCONTRIBUTORS Ġ" AS ĠIS " Ċ Ġ* ĠAND ĠANY ĠEXPRESS ĠOR ĠIMPLIED ĠWARRANTIES , ĠINCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , ĠTHE Ċ Ġ* ĠIMPLIED ĠWARRANTIES ĠOF ĠMERCHANTABILITY ĠAND ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE Ċ Ġ* ĠARE ĠDISCLAIMED . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE ĠCOPYRIGHT ĠHOLDER ĠOR ĠCONTRIBUTORS ĠBE Ċ Ġ* ĠLIABLE ĠFOR ĠANY ĠDIRECT , ĠINDIRECT , ĠINCIDENTAL , ĠSPECIAL , ĠEXEMPLARY , ĠOR Ċ Ġ* ĠCONSEQUENTIAL ĠDAMAGES Ġ( INCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , ĠPROCUREMENT ĠOF Ċ Ġ* ĠSUBSTITUTE ĠGOODS ĠOR ĠSERVICES ; ĠLOSS ĠOF ĠUSE , ĠDATA , ĠOR ĠPROFITS ; ĠOR ĠBUSINESS Ċ Ġ* ĠINTERRUPTION ) ĠHOWEVER ĠCAUSED ĠAND ĠON ĠANY ĠTHEORY ĠOF ĠLIABILITY , ĠWHETHER ĠIN Ċ Ġ* ĠCONTRACT , ĠSTRICT ĠLIABILITY , ĠOR ĠTORT Ġ( INCLUDING ĠNEGLIGENCE ĠOR ĠOTHERWISE ) Ċ Ġ* ĠARISING ĠIN ĠANY ĠWAY ĠOUT ĠOF ĠTHE ĠUSE ĠOF ĠTHIS ĠSOFTWARE , ĠEVEN ĠIF ĠADVISED ĠOF ĠTHE Ċ Ġ* ĠPOSSIBILITY ĠOF ĠSUCH ĠDAMAGE . Ċ Ġ*/ Ċ Ċ package Ġcom . avail . interpreter . primitive . bootstrap . syntax Ċ Ċ import Ġcom . avail . compiler . Avail Rejected ParseException Ċ import Ġcom . avail . compiler . problems . Compiler Diagnostics . Parse Notification Level . STRONG Ċ import Ġcom . avail . descriptor . ph rases . A _ Phrase . Companion . phrase Expression Type Ċ import Ġcom . avail . descriptor . ph rases . A _ Phrase . Companion . token Ċ import Ġcom . avail . descriptor . ph rases . Super Cast Phrase Descriptor Ċ import Ġcom . avail . descriptor . ph rases . Super Cast Phrase Descriptor . Companion . new Super Cast Node Ċ import Ġcom . avail . descriptor . tuples . Object Tuple Descriptor . Companion . tuple Ċ import Ġcom . avail . descriptor . types . A _ Type Ċ import Ġcom . avail . descriptor . types . A _ Type . Companion . is Subtype Of Ċ import Ġcom . avail . descriptor . types . FunctionType Descriptor . Companion . function Type Ċ import Ġcom . avail . descriptor . types . Instance Meta Descriptor . Companion . any Meta Ċ import Ġcom . avail . descriptor . types . Phrase TypeDescriptor . Phrase Kind . EXPRESSION _ PH R ASE Ċ import Ġcom . avail . descriptor . types . Phrase TypeDescriptor . Phrase Kind . LITERAL _ PH R ASE Ċ import Ġcom . avail . descriptor . types . Phrase TypeDescriptor . Phrase Kind . SUPER _ CAST _ PH R ASE Ċ import Ġcom . avail . descriptor . types . TypeDescriptor . Types . ANY Ċ import Ġcom . avail . interpreter . Primitive Ċ import Ġcom . avail . interpreter . Primitive . Flag . Bootstrap Ċ import Ġcom . avail . interpreter . Primitive . Flag . Can Inline Ċ import Ġcom . avail . interpreter . Primitive . Flag . Cannot Fail Ċ import Ġcom . avail . interpreter . execution . Interpreter Ċ Ċ /** Ċ Ġ* ĠThe Ġ` P _ Bootstrap Super Cast Macro ` Ġprimitive Ġis Ġused Ġto Ġcreate Ġa Ċ Ġ* Ġ[ super - cast &# 3 2 ; phrase ][ Super Cast Phrase Descriptor ]. Ġ ĠThis Ġis Ġused Ġto Ġcontrol Ċ Ġ* Ġmethod Ġlookup , Ġand Ġis Ġa Ġgeneral ization Ġof Ġthe Ġconcept Ġof Ġ` super ` Ġfound Ġin Ċ Ġ* Ġsome Ġobject - oriented Ġlanguages . Ċ Ġ* Ċ Ġ* Ġ@ author ĠMark Ġvan ĠG ul ik Ġ& lt ; mark @ avail lang . org & gt ; Ċ Ġ*/ Ċ @ Suppress (" unused ") Ċ object ĠP _ Bootstrap Super Cast Macro Ċ ĉ : ĠPrimitive ( 2 , ĠCannot Fail , ĠCan Inline , ĠBootstrap ) Ċ { Ċ ĉ override Ġfun Ġattempt ( interpreter : ĠInterpreter ): ĠResult Ċ ĉ { Ċĉ ĉ interpreter . check Argument Count ( 2 ) Ċĉ ĉ val Ġexpression Node Ġ= Ġinterpreter . argument ( 0 ) Ċĉ ĉ val Ġtype Literal Ġ= Ġinterpreter . argument ( 1 ) ĊĊĉ ĉ val Ġtype Ġ= Ġtype Literal . token (). literal () Ċĉ ĉ if Ġ( type . is Top Ġ|| Ġtype . is Bottom ) Ċĉ ĉ { Ċĉĉ ĉ throw ĠAv ail Rejected ParseException ( Ċĉĉĉ ĉ STRONG , Ċĉĉĉ ĉ " super cast Ġtype Ġto Ġbe Ġsomething Ġother Ġthan Ġ$ type ") Ċĉ ĉ } Ċĉ ĉ val Ġexpression Type Ġ= Ġexpression Node . phrase Expression Type () Ċĉ ĉ if Ġ(! expression Type . is Subtype Of ( type )) Ċĉ ĉ { Ċĉĉ ĉ throw ĠAv ail Rejected ParseException ( Ċĉĉĉ ĉ STRONG , Ċĉĉĉ ĉ " super cast Ġtype Ġ($ type ) Ġto Ġbe Ġa Ġsup ertype Ġof Ġthe Ġ" Ċĉĉĉĉ ĉ + Ġ" expression 's Ġtype Ġ($ expression Type )") Ċĉ ĉ } Ċĉ ĉ val Ġsuper Cast Ġ= Ġnew Super Cast Node ( expression Node , Ġtype ) Ċĉ ĉ return Ġinterpreter . primitive Success ( super Cast . make Immutable ()) Ċ ĉ } ĊĊ ĉ override Ġfun Ġprivate BlockType Restriction (): ĠA _ Type Ġ= Ċĉ ĉ function Type ( Ċĉĉ ĉ tuple ( Ċĉĉĉ ĉ EXPRESSION _ PH R ASE . create ( ANY . o ), Ċĉĉĉ ĉ LITERAL _ PH R ASE . create ( any Meta ())), Ċĉĉ ĉ SUPER _ CAST _ PH R ASE . most General Type ()) Ċ } Ċ