@@ -365,3 +365,81 @@ class DynamicallyCreatedClass extends ClassObjectInternal, TDynamicClass {
365
365
366
366
}
367
367
368
+ class SubscriptedTypeInternal extends ObjectInternal , TSubscriptedType {
369
+
370
+ ObjectInternal getGeneric ( ) {
371
+ this = TSubscriptedType ( result , _)
372
+ }
373
+
374
+ ObjectInternal getSpecializer ( ) {
375
+ this = TSubscriptedType ( _, result )
376
+ }
377
+
378
+ override string getName ( ) { result = this .getGeneric ( ) .getName ( ) }
379
+
380
+ override string toString ( ) { result = this .getGeneric ( ) .toString ( ) + "[" + this .getSpecializer ( ) .toString ( ) + "]" }
381
+
382
+ override predicate introducedAt ( ControlFlowNode node , PointsToContext context ) {
383
+ exists ( ObjectInternal generic , ObjectInternal index |
384
+ this = TSubscriptedType ( generic , index ) and
385
+ Expressions:: subscriptPartsPointsTo ( node , context , generic , index )
386
+ )
387
+ }
388
+
389
+ /** Gets the class declaration for this object, if it is a class with a declaration. */
390
+ override ClassDecl getClassDeclaration ( ) {
391
+ result = this .getGeneric ( ) .getClassDeclaration ( )
392
+ }
393
+
394
+ /** True if this "object" is a class. That is, its class inherits from `type` */
395
+ override boolean isClass ( ) { result = true }
396
+
397
+ override ObjectInternal getClass ( ) {
398
+ result = this .getGeneric ( ) .getClass ( )
399
+ }
400
+
401
+ override predicate notTestableForEquality ( ) { none ( ) }
402
+
403
+ override Builtin getBuiltin ( ) { none ( ) }
404
+
405
+ override ControlFlowNode getOrigin ( ) { none ( ) }
406
+
407
+ override predicate callResult ( ObjectInternal obj , CfgOrigin origin ) { none ( ) }
408
+
409
+ override predicate callResult ( PointsToContext callee , ObjectInternal obj , CfgOrigin origin ) { none ( ) }
410
+
411
+ override predicate calleeAndOffset ( Function scope , int paramOffset ) { none ( ) }
412
+
413
+ override predicate attribute ( string name , ObjectInternal value , CfgOrigin origin ) { none ( ) }
414
+
415
+ override predicate attributesUnknown ( ) { none ( ) }
416
+
417
+ override boolean isDescriptor ( ) { result = false }
418
+
419
+ override predicate descriptorGetClass ( ObjectInternal cls , ObjectInternal value , CfgOrigin origin ) { none ( ) }
420
+
421
+ override predicate descriptorGetInstance ( ObjectInternal instance , ObjectInternal value , CfgOrigin origin ) { none ( ) }
422
+
423
+ override predicate binds ( ObjectInternal instance , string name , ObjectInternal descriptor ) { none ( ) }
424
+
425
+ override int length ( ) { none ( ) }
426
+
427
+ override boolean booleanValue ( ) { result = true }
428
+
429
+ override int intValue ( ) { none ( ) }
430
+
431
+ override string strValue ( ) { none ( ) }
432
+
433
+ override predicate subscriptUnknown ( ) { none ( ) }
434
+
435
+ override predicate contextSensitiveCallee ( ) { none ( ) }
436
+
437
+ override predicate useOriginAsLegacyObject ( ) { none ( ) }
438
+
439
+ /* Classes aren't usually iterable, but can e.g. Enums */
440
+ override ObjectInternal getIterNext ( ) { result = ObjectInternal:: unknown ( ) }
441
+
442
+ }
443
+
444
+
445
+
0 commit comments