@@ -101,6 +101,7 @@ cached
101101private module Cached {
102102 cached
103103 newtype TScope =
104+ TGlobalScope ( ) or
104105 TTopLevelScope ( Generated:: Program node ) or
105106 TModuleScope ( Generated:: Module node ) or
106107 TClassScope ( AstNode cls ) {
@@ -110,6 +111,7 @@ private module Cached {
110111
111112 cached
112113 newtype TVariable =
114+ TGlobalVariable ( string name ) { name = any ( Generated:: GlobalVariable var ) .getValue ( ) } or
113115 TLocalVariable ( VariableScope scope , string name , Generated:: Identifier i ) {
114116 scopeDefinesParameterVariable ( scope , name , i )
115117 or
@@ -153,6 +155,14 @@ module VariableScope {
153155 }
154156}
155157
158+ module GlobalScope {
159+ class Range extends VariableScope:: Range , TGlobalScope {
160+ override string toString ( ) { result = "global scope" }
161+
162+ override AstNode getScopeElement ( ) { none ( ) }
163+ }
164+ }
165+
156166module TopLevelScope {
157167 class Range extends VariableScope:: Range , TTopLevelScope {
158168 override string toString ( ) { result = "top-level scope" }
@@ -211,7 +221,7 @@ module Variable {
211221}
212222
213223module LocalVariable {
214- class Range extends Variable:: Range {
224+ class Range extends Variable:: Range , TLocalVariable {
215225 private VariableScope scope ;
216226 private string name ;
217227 private Generated:: Identifier i ;
@@ -226,21 +236,43 @@ module LocalVariable {
226236 }
227237}
228238
239+ module GlobalVariable {
240+ class Range extends Variable:: Range , TGlobalVariable {
241+ private string name ;
242+
243+ Range ( ) { this = TGlobalVariable ( name ) }
244+
245+ final override string getName ( ) { result = name }
246+
247+ final override Location getLocation ( ) { none ( ) }
248+
249+ final override VariableScope getDeclaringScope ( ) { result = TGlobalScope ( ) }
250+ }
251+ }
252+
229253module VariableAccess {
230- class Range extends Expr:: Range , @token_identifier {
254+ abstract class Range extends Expr:: Range {
255+ abstract Variable getVariable ( ) ;
256+ }
257+ }
258+
259+ module LocalVariableAccess {
260+ class Range extends VariableAccess:: Range , @token_identifier {
231261 override Generated:: Identifier generated ;
232- Variable variable ;
262+ LocalVariable variable ;
233263
234264 Range ( ) { access ( this , variable ) }
235265
236- Variable getVariable ( ) { result = variable }
266+ final override LocalVariable getVariable ( ) { result = variable }
237267 }
238268}
239269
240- module LocalVariableAccess {
241- class Range extends VariableAccess:: Range {
242- override LocalVariable variable ;
270+ module GlobalVariableAccess {
271+ class Range extends VariableAccess:: Range , @token_global_variable {
272+ GlobalVariable variable ;
273+
274+ Range ( ) { this .( Generated:: GlobalVariable ) .getValue ( ) = variable .getName ( ) }
243275
244- override LocalVariable getVariable ( ) { result = variable }
276+ final override GlobalVariable getVariable ( ) { result = variable }
245277 }
246278}
0 commit comments