/* Ċ Ġ* ĠCopyright ĠL WJ GL . ĠAll Ġrights Ġreserved . Ċ Ġ* ĠLicense Ġterms : Ġhttps :// www . lwjgl . org / license Ċ Ġ*/ Ċ package Ġorg . lwjgl . extract Ċ Ċ import Ġorg . lwjgl . llvm .* Ċ import Ġorg . lwjgl . llvm . C lang Index .* Ċ import Ġorg . lwjgl . system .* Ċ import Ġorg . lwjgl . system . Memory Stack .* Ċ import Ġorg . lwjgl . system . Memory Util .* Ċ import Ġjava . io .* Ċ Ċ internal Ġval ĠMemory Stack . str : ĠCX String Ġget () Ġ= ĠCX String . malloc Stack ( this ) Ċ internal Ġval ĠCX String . str : ĠString ĊĠĠĠ Ġget () Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġclang _ getC String ( this ) !! ĊĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠ Ġclang _ dispose String ( this ) ĊĠĠĠ Ġ} Ċ Ċ internal Ġval ĠCX Cursor . spell ing : ĠString ĊĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġstack Push (). use Ġ{ Ġstack Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclang _ get Cursor Spell ing ( this , ĠCX String . malloc Stack ( stack )). str ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ internal Ġval ĠCX Type . spell ing : ĠString ĊĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġstack Push (). use Ġ{ Ġstack Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclang _ getType Spell ing ( this , ĠCX String . malloc Stack ( stack )). str ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ internal Ġfun Ġdump ( root : ĠCX Cursor , Ġstream : ĠPrint Stream Ġ= ĠSystem . out ) Ġ{ ĊĠĠĠ Ġstack Push (). use Ġ{ Ġstack Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġpp Ġ= Ġstack . malloc Pointer ( 1 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġlocation Ġ= Ġclang _ get Cursor Location ( root , ĠCX Source Location . malloc Stack ( stack )) ĊĠĠĠĠĠĠĠ Ġclang _ getFile Location ( location , Ġpp , Ġnull , Ġnull , Ġnull ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtu Ġ= Ġclang _ Cursor _ get Translation Unit ( root ) ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġpp [ 0 ] ĊĊĠĠĠĠĠĠĠ Ġstream . println ( root . text ( mem UTF 8 ( clang _ getFile Contents ( tu , Ġfile ) !! ))) ĊĊĠĠĠĠĠĠĠ Ġdump ( root , Ġstream , Ġ 0 ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġfun Ġdump ( root : ĠCX Cursor , Ġstream : ĠPrint Stream , Ġdepth : ĠInt ) Ġ{ ĊĠĠĠ Ġstack Push (). use Ġ{ Ġstack Ġ-> ĊĠĠĠĠĠĠĠ Ġstream . printf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ t |% s Cursor Ġ% s Ġof Ġkind Ġ% s \ n ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġ". repeat ( depth Ġ* Ġ 4 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot . spell ing , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclang _ get Cursor Kind Spell ing ( clang _ get Cursor Kind ( root ), Ġstack . str ). str ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ ĠCX Cursor Visitor . create Ġ{ Ġchild , Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠ Ġdump ( child , Ġstream , Ġdepth Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠ ĠCX Child Visit _ Continue ĊĠĠĠ Ġ}. use Ġ{ Ġclang _ visit Children ( root , Ġit , ĠNULL ) Ġ} Ċ } Ċ Ċ internal Ġfun ĠCX Cursor . text ( source : ĠString ): ĠString Ġ{ ĊĠĠĠ Ġstack Push (). use Ġ{ Ġstack Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġstart Ġ= Ġstack . malloc Int ( 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġend Ġ= Ġstack . malloc Int ( 1 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġloc Ġ= ĠCX Source Location . malloc Stack ( stack ) ĊĊĠĠĠĠĠĠĠ Ġval Ġrange Ġ= Ġclang _ get Cursor Extent ( this , ĠCX Source Range . malloc Stack ( stack )) ĊĠĠĠĠĠĠĠ Ġclang _ get Spell ing Location ( clang _ get Range Start ( range , Ġloc ), Ġnull , Ġnull , Ġnull , Ġstart ) ĊĠĠĠĠĠĠĠ Ġclang _ get Spell ing Location ( clang _ get Range End ( range , Ġloc ), Ġnull , Ġnull , Ġnull , Ġend ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsource . substring ( start [ 0 ], Ġend [ 0 ]) ĊĠĠĠ Ġ} Ċ } Ċ Ċ // ĠUse Ġre definition Ġwith ĠEX ACT LY _ ON CE Ġcontract Ċ Ċ /* private Ġinline Ġfun Ġ< T Ġ: ĠAuto Closeable ?, ĠR > ĠT . use ( block : Ġ( T ) Ġ-> ĠR ): ĠR Ġ{ ĊĠĠĠ Ġcontract Ġ{ ĊĠĠĠĠĠĠĠ Ġcalls In Place ( block , ĠInvocation Kind . EX ACT LY _ ON CE ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġvar Ġexception : ĠThrowable ? Ġ= Ġnull ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġblock ( this ) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġexception Ġ= Ġe ĊĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . close Finally ( exception ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠAuto Closeable ?. close Finally ( cause : ĠThrowable ?) Ġ= Ġwhen Ġ{ ĊĠĠĠ Ġthis Ġ== Ġnull Ġ Ġ-> Ġ{ ĊĠĠĠ Ġ} ĊĠĠĠ Ġcause Ġ== Ġnull Ġ-> Ġclose () ĊĠĠĠ Ġelse ĠĠĠĠĠĠĠĠĠ Ġ-> ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclose () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( close Exception : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcause . add Sup pressed ( close Exception ) ĊĠĠĠĠĠĠĠ Ġ} Ċ }*/ Ċ