@@ -523,6 +523,93 @@ module ObjectInternal {
523523
524524}
525525
526+ class DecoratedFunction extends ObjectInternal , TDecoratedFunction {
527+
528+
529+ CallNode getDecoratorCall ( ) {
530+ this = TDecoratedFunction ( result )
531+ }
532+
533+ override Builtin getBuiltin ( ) {
534+ none ( )
535+ }
536+
537+ private ObjectInternal decoratedObject ( ) {
538+ PointsTo:: pointsTo ( this .getDecoratorCall ( ) .getArg ( 0 ) , _, result , _)
539+ }
540+
541+ override string getName ( ) {
542+ result = this .decoratedObject ( ) .getName ( )
543+ }
544+
545+ override string toString ( ) {
546+ result = "Decorated " + this .decoratedObject ( ) .toString ( )
547+ }
548+
549+ override boolean booleanValue ( ) { result = true }
550+
551+ override ClassDecl getClassDeclaration ( ) {
552+ none ( )
553+ }
554+
555+ override boolean isClass ( ) { result = false }
556+
557+ override ObjectInternal getClass ( ) { result = TUnknownClass ( ) }
558+
559+ override predicate introducedAt ( ControlFlowNode node , PointsToContext context ) {
560+ none ( )
561+ }
562+
563+ override predicate notTestableForEquality ( ) { none ( ) }
564+
565+ override predicate callResult ( PointsToContext callee , ObjectInternal obj , CfgOrigin origin ) {
566+ none ( )
567+ }
568+
569+ override predicate callResult ( ObjectInternal obj , CfgOrigin origin ) {
570+ obj = ObjectInternal:: unknown ( ) and origin = CfgOrigin:: unknown ( )
571+ }
572+
573+ override ControlFlowNode getOrigin ( ) {
574+ result = this .getDecoratorCall ( )
575+ }
576+
577+ override int intValue ( ) {
578+ none ( )
579+ }
580+
581+ override string strValue ( ) {
582+ none ( )
583+ }
584+
585+ override predicate calleeAndOffset ( Function scope , int paramOffset ) {
586+ none ( )
587+ }
588+
589+ override predicate attribute ( string name , ObjectInternal value , CfgOrigin origin ) {
590+ none ( )
591+ }
592+
593+ override predicate attributesUnknown ( ) { none ( ) }
594+
595+ override predicate subscriptUnknown ( ) { none ( ) }
596+
597+ override boolean isDescriptor ( ) { result = false }
598+
599+ pragma [ noinline] override predicate descriptorGetClass ( ObjectInternal cls , ObjectInternal value , CfgOrigin origin ) { none ( ) }
600+
601+ pragma [ noinline] override predicate descriptorGetInstance ( ObjectInternal instance , ObjectInternal value , CfgOrigin origin ) { none ( ) }
602+
603+ pragma [ noinline] override predicate binds ( ObjectInternal instance , string name , ObjectInternal descriptor ) { none ( ) }
604+
605+ override int length ( ) { none ( ) }
606+
607+ override ObjectInternal getIterNext ( ) { none ( ) }
608+
609+ override predicate contextSensitiveCallee ( ) { none ( ) }
610+
611+ }
612+
526613/** Helper for boolean predicates returning both `true` and `false` */
527614boolean maybe ( ) {
528615 result = true or result = false
0 commit comments