/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 8 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ċ Ġ* Ġthat Ġcan Ġbe Ġfound Ġin Ġthe Ġlicense / LICENSE . txt Ġfile . Ċ Ġ*/ Ċ Ċ package Ġorg . jetbrains . kotlin . contracts . context ual . resolution Ċ Ċ import Ġorg . jetbrains . kotlin . contracts . description . Effect Declaration Ċ import Ġorg . jetbrains . kotlin . contracts . description . expressions . Contract Description Value Ċ import Ġorg . jetbrains . kotlin . contracts . description . expressions . Function Reference Ċ import Ġorg . jetbrains . kotlin . contracts . description . expressions . Receiver Reference Ċ import Ġorg . jetbrains . kotlin . contracts . description . expressions . Variable Reference Ċ import Ġorg . jetbrains . kotlin . contracts . interpret ation . Contract Inter pretation Dispatcher Ċ import Ġorg . jetbrains . kotlin . contracts . interpret ation . Effect Declaration Interpreter Ċ import Ġorg . jetbrains . kotlin . contracts . model . E SE ffect Ċ Ċ class ĠContract Effect Declaration Interpreter ( private Ġval Ġdispatcher : ĠContract Inter pretation Dispatcher ) Ġ: ĠEffect Declaration Interpreter Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġtry Inter pret ( effect Declaration : ĠEffect Declaration ): ĠE SE ffect ? Ġ= Ġwhen Ġ( effect Declaration ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠContext Provider Effect Declaration Ġ-> Ġinterpret Context Provider Effect ( effect Declaration ) ĊĠĠĠĠĠĠĠ Ġis ĠLambda Context Provider Effect Declaration Ġ-> Ġinterpret Lambda Context Provider Effect ( effect Declaration ) ĊĠĠĠĠĠĠĠ Ġis ĠContext Verifier Effect Declaration Ġ-> Ġinterpret Context Verifier Effect ( effect Declaration ) ĊĠĠĠĠĠĠĠ Ġis ĠLambda Context Verifier Effect Declaration Ġ-> Ġinterpret Lambda Context Verifier Effect ( effect Declaration ) ĊĠĠĠĠĠĠĠ Ġis ĠContext Clean er Effect Declaration Ġ-> Ġinterpret Context Clean er ( effect Declaration ) ĊĠĠĠĠĠĠĠ Ġis ĠLambda Context Clean er Effect Declaration Ġ-> Ġinterpret Lambda Context Clean er ( effect Declaration ) ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinterpret Context Provider Effect ( effect Declaration : ĠContext Provider Effect Declaration ): ĠE SE ffect ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( factory , Ġreferences , Ġowner ) Ġ= Ġeffect Declaration ĊĊĠĠĠĠĠĠĠ Ġval Ġinterpreted References Ġ= Ġinterpret References ( references ) ĊĠĠĠĠĠĠĠ Ġval Ġinterpreted Function Ġ= Ġdispatcher . interpret Function ( owner ) Ġ?: Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġreturn ĠContext Provider Effect ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfactory , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinterpreted References , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinterpreted Function ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinterpret Lambda Context Provider Effect ( effect Declaration : ĠLambda Context Provider Effect Declaration ): ĠE SE ffect ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( factory , Ġreferences , Ġowner ) Ġ= Ġeffect Declaration ĊĊĠĠĠĠĠĠĠ Ġval Ġinterpreted References Ġ= Ġinterpret References ( references ) ĊĠĠĠĠĠĠĠ Ġval Ġinterpreted Function Ġ= Ġdispatcher . interpret Variable ( owner ) Ġ?: Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġreturn ĠContext Provider Effect ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfactory , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinterpreted References , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinterpreted Function ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinterpret Context Verifier Effect ( effect Declaration : ĠContext Verifier Effect Declaration ): ĠE SE ffect ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( factory , Ġreferences , Ġowner ) Ġ= Ġeffect Declaration ĊĊĠĠĠĠĠĠĠ Ġval Ġinterpreted References Ġ= Ġinterpret References ( references ) ĊĠĠĠĠĠĠĠ Ġval Ġinterpreted Function Ġ= Ġdispatcher . interpret Function ( owner ) Ġ?: Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġreturn ĠContext Verifier Effect ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfactory , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinterpreted References , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinterpreted Function ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinterpret Lambda Context Verifier Effect ( effect Declaration : ĠLambda Context Verifier Effect Declaration ): ĠE SE ffect ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( factory , Ġreferences , Ġowner ) Ġ= Ġeffect Declaration ĊĊĠĠĠĠĠĠĠ Ġval Ġinterpreted References Ġ= Ġinterpret References ( references ) ĊĠĠĠĠĠĠĠ Ġval Ġinterpreted Function Ġ= Ġdispatcher . interpret Variable ( owner ) Ġ?: Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġreturn ĠContext Verifier Effect ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfactory , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinterpreted References , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinterpreted Function ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinterpret Context Clean er ( effect Declaration : ĠContext Clean er Effect Declaration ): ĠE SE ffect ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( factory , Ġreferences , Ġowner ) Ġ= Ġeffect Declaration ĊĊĠĠĠĠĠĠĠ Ġval Ġinterpreted References Ġ= Ġinterpret References ( references ) ĊĠĠĠĠĠĠĠ Ġval Ġinterpreted Function Ġ= Ġdispatcher . interpret Function ( owner ) Ġ?: Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġreturn ĠContext Clean er Effect ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfactory , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinterpreted References , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinterpreted Function ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinterpret Lambda Context Clean er ( effect Declaration : ĠLambda Context Clean er Effect Declaration ): ĠE SE ffect ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( factory , Ġreferences , Ġowner ) Ġ= Ġeffect Declaration ĊĊĠĠĠĠĠĠĠ Ġval Ġinterpreted References Ġ= Ġinterpret References ( references ) ĊĠĠĠĠĠĠĠ Ġval Ġinterpreted Function Ġ= Ġdispatcher . interpret Variable ( owner ) Ġ?: Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġreturn ĠContext Clean er Effect ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfactory , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinterpreted References , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinterpreted Function ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinterpret References ( references : ĠList < Contract Description Value >) Ġ= Ġreferences . map Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠVariable Reference Ġ-> Ġdispatcher . interpret Variable ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFunction Reference Ġ-> Ġdispatcher . interpret Function ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠReceiver Reference Ġ-> Ġdispatcher . interpret Receiver Reference ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠAssertionError (" Illegal Ġtype Ġof ĠContract Description Value Ġtype : Ġ${ it :: class }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }