package Ġorg . move . lang . core . types . ty Ċ Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġorg . move . ide . presentation . ty ToString ĊĊ Ċ abstract Ġclass ĠTy Primitive ( val Ġname : ĠString ): ĠTy Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġabilities () Ġ= Ġset Of ( Ability . DROP , ĠAbility . COPY , ĠAbility . STORE ) Ċ } Ċ Ċ object ĠTy Bool : ĠTy Primitive (" bool ") Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġty ToString ( this ) Ċ } Ċ Ċ object ĠTy Address : ĠTy Primitive (" address ") Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġty ToString ( this ) Ċ } Ċ Ċ object ĠTy Signer : ĠTy Primitive (" signer ") Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġabilities () Ġ= Ġset Of ( Ability . DROP ) ĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġty ToString ( this ) Ċ } Ċ Ċ object ĠTy Unit : ĠTy Primitive (" () ") Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġabilities () Ġ= ĠAbility . none () ĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġty ToString ( this ) Ċ } Ċ Ċ data Ġclass ĠTy Integer ( val Ġkind : ĠKind ): ĠTy Primitive ( kind . name . lowercase ()) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġabilities () Ġ= ĠAbility . all () ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfrom Name ( name : ĠString ): ĠTy Integer ? Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKind . values (). find Ġ{ Ġit . name Ġ== Ġname Ġ} ?. let (:: Ty Integer ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġfrom S uff ixed Literal ( literal : ĠPsi Element ): ĠTy Integer ? Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKind . values (). find Ġ{ Ġliteral . text . endsWith ( it . name ) Ġ} ?. let (:: Ty Integer ) ĊĊĠĠĠĠĠĠĠ Ġval ĠDEFAULT _ KIND Ġ= ĠKind . No Precision ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġenum Ġclass ĠKind Ġ{ ĊĠĠĠĠĠĠĠ ĠNo Precision , Ġu 8 , Ġu 6 4 , Ġu 1 2 8 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġty ToString ( this ) Ċ } Ċ