@@ -670,11 +670,13 @@ public LocalDate asDate(@Shared("getClassNode") @Cached GetLazyClassNode getClas
670
670
@ Shared ("readTypeNode" ) @ Cached ReadAttributeFromObjectNode readTypeNode ,
671
671
@ Shared ("isSubtypeNode" ) @ Cached IsSubtypeNode .IsSubtypeWithoutFrameNode isSubtypeNode ,
672
672
@ Shared ("castToIntNode" ) @ Cached CastToJavaIntNode castToIntNode ,
673
- @ CachedLibrary (limit = "1" ) InteropLibrary lib ) throws UnsupportedMessageException {
673
+ @ CachedLibrary ("this" ) InteropLibrary lib ,
674
+ @ Cached ("createBinaryProfile()" ) ConditionProfile dateTimeModuleLoaded ,
675
+ @ Cached ("createBinaryProfile()" ) ConditionProfile timeModuleLoaded ) throws UnsupportedMessageException {
674
676
LazyPythonClass objType = getClassNode .execute (this );
675
677
PDict importedModules = PythonLanguage .getContext ().getImportedModules ();
676
678
Object module = importedModules .getItem (DATETIME_MODULE_NAME );
677
- if (module != null ) {
679
+ if (dateTimeModuleLoaded . profile ( module != null ) ) {
678
680
if (isSubtypeNode .executeWithGlobalState (objType , readTypeNode .execute (module , DATETIME_TYPE )) || isSubtypeNode .executeWithGlobalState (objType , readTypeNode .execute (module , DATE_TYPE ))) {
679
681
try {
680
682
int year = castToIntNode .execute (lib .readMember (this , "year" ));
@@ -687,7 +689,7 @@ public LocalDate asDate(@Shared("getClassNode") @Cached GetLazyClassNode getClas
687
689
}
688
690
}
689
691
module = importedModules .getItem (TIME_MODULE_NAME );
690
- if (module != null ) {
692
+ if (timeModuleLoaded . profile ( module != null ) ) {
691
693
if (isSubtypeNode .executeWithGlobalState (objType , readTypeNode .execute (module , STRUCT_TIME_TYPE ))) {
692
694
try {
693
695
int year = castToIntNode .execute (lib .readMember (this , "tm_year" ));
@@ -705,17 +707,19 @@ public LocalDate asDate(@Shared("getClassNode") @Cached GetLazyClassNode getClas
705
707
@ ExportMessage
706
708
public boolean isTime (@ Shared ("getClassNode" ) @ Cached GetLazyClassNode getClassNode ,
707
709
@ Shared ("readTypeNode" ) @ Cached ReadAttributeFromObjectNode readTypeNode ,
708
- @ Shared ("isSubtypeNode" ) @ Cached IsSubtypeNode .IsSubtypeWithoutFrameNode isSubtype ) {
710
+ @ Shared ("isSubtypeNode" ) @ Cached IsSubtypeNode .IsSubtypeWithoutFrameNode isSubtype ,
711
+ @ Cached ("createBinaryProfile()" ) ConditionProfile dateTimeModuleLoaded ,
712
+ @ Cached ("createBinaryProfile()" ) ConditionProfile timeModuleLoaded ) {
709
713
LazyPythonClass objType = getClassNode .execute (this );
710
714
PDict importedModules = PythonLanguage .getContext ().getImportedModules ();
711
715
Object module = importedModules .getItem (DATETIME_MODULE_NAME );
712
- if (module != null ) {
716
+ if (dateTimeModuleLoaded . profile ( module != null ) ) {
713
717
if (isSubtype .executeWithGlobalState (objType , readTypeNode .execute (module , DATETIME_TYPE )) || isSubtype .executeWithGlobalState (objType , readTypeNode .execute (module , TIME_TYPE ))) {
714
718
return true ;
715
719
}
716
720
}
717
721
module = importedModules .getItem (TIME_MODULE_NAME );
718
- if (module != null ) {
722
+ if (timeModuleLoaded . profile ( module != null ) ) {
719
723
if (isSubtype .executeWithGlobalState (objType , readTypeNode .execute (module , STRUCT_TIME_TYPE ))) {
720
724
return true ;
721
725
}
@@ -728,11 +732,13 @@ public LocalTime asTime(@Shared("getClassNode") @Cached GetLazyClassNode getClas
728
732
@ Shared ("readTypeNode" ) @ Cached ReadAttributeFromObjectNode readTypeNode ,
729
733
@ Shared ("isSubtypeNode" ) @ Cached IsSubtypeNode .IsSubtypeWithoutFrameNode isSubtypeNode ,
730
734
@ Shared ("castToIntNode" ) @ Cached CastToJavaIntNode castToIntNode ,
731
- @ CachedLibrary (limit = "1" ) InteropLibrary lib ) throws UnsupportedMessageException {
735
+ @ CachedLibrary ("this" ) InteropLibrary lib ,
736
+ @ Cached ("createBinaryProfile()" ) ConditionProfile dateTimeModuleLoaded ,
737
+ @ Cached ("createBinaryProfile()" ) ConditionProfile timeModuleLoaded ) throws UnsupportedMessageException {
732
738
LazyPythonClass objType = getClassNode .execute (this );
733
739
PDict importedModules = PythonLanguage .getContext ().getImportedModules ();
734
740
Object module = importedModules .getItem (DATETIME_MODULE_NAME );
735
- if (module != null ) {
741
+ if (dateTimeModuleLoaded . profile ( module != null ) ) {
736
742
if (isSubtypeNode .executeWithGlobalState (objType , readTypeNode .execute (module , DATETIME_TYPE )) || isSubtypeNode .executeWithGlobalState (objType , readTypeNode .execute (module , TIME_TYPE ))) {
737
743
try {
738
744
int hour = castToIntNode .execute (lib .readMember (this , "hour" ));
@@ -746,7 +752,7 @@ public LocalTime asTime(@Shared("getClassNode") @Cached GetLazyClassNode getClas
746
752
}
747
753
}
748
754
module = importedModules .getItem (TIME_MODULE_NAME );
749
- if (module != null ) {
755
+ if (timeModuleLoaded . profile ( module != null ) ) {
750
756
if (isSubtypeNode .executeWithGlobalState (objType , readTypeNode .execute (module , STRUCT_TIME_TYPE ))) {
751
757
try {
752
758
int hour = castToIntNode .execute (lib .readMember (this , "tm_hour" ));
@@ -764,13 +770,15 @@ public LocalTime asTime(@Shared("getClassNode") @Cached GetLazyClassNode getClas
764
770
@ ExportMessage
765
771
public boolean isTimeZone (@ Shared ("getClassNode" ) @ Cached GetLazyClassNode getClassNode ,
766
772
@ Shared ("readTypeNode" ) @ Cached ReadAttributeFromObjectNode readTypeNode ,
767
- @ Shared ("isSubtypeNode" ) @ Cached IsSubtypeNode .IsSubtypeWithoutFrameNode isSubtype ) {
773
+ @ Shared ("isSubtypeNode" ) @ Cached IsSubtypeNode .IsSubtypeWithoutFrameNode isSubtype ,
774
+ @ CachedLibrary (limit = "2" ) InteropLibrary lib ,
775
+ @ Cached ("createBinaryProfile()" ) ConditionProfile dateTimeModuleLoaded ,
776
+ @ Cached ("createBinaryProfile()" ) ConditionProfile timeModuleLoaded ) {
768
777
LazyPythonClass objType = getClassNode .execute (this );
769
778
PDict importedModules = PythonLanguage .getContext ().getImportedModules ();
770
779
Object module = importedModules .getItem (DATETIME_MODULE_NAME );
771
- if (module != null ) {
780
+ if (dateTimeModuleLoaded . profile ( module != null ) ) {
772
781
if (isSubtype .executeWithGlobalState (objType , readTypeNode .execute (module , DATETIME_TYPE ))) {
773
- InteropLibrary lib = InteropLibrary .getFactory ().getUncached (this );
774
782
try {
775
783
Object tzinfo = lib .readMember (this , "tzinfo" );
776
784
if (tzinfo != PNone .NONE ) {
@@ -783,7 +791,6 @@ public boolean isTimeZone(@Shared("getClassNode") @Cached GetLazyClassNode getCl
783
791
return false ;
784
792
}
785
793
} else if (isSubtype .executeWithGlobalState (objType , readTypeNode .execute (module , TIME_TYPE ))) {
786
- InteropLibrary lib = InteropLibrary .getFactory ().getUncached (this );
787
794
try {
788
795
Object tzinfo = lib .readMember (this , "tzinfo" );
789
796
if (tzinfo != PNone .NONE ) {
@@ -798,9 +805,8 @@ public boolean isTimeZone(@Shared("getClassNode") @Cached GetLazyClassNode getCl
798
805
}
799
806
}
800
807
module = importedModules .getItem (TIME_MODULE_NAME );
801
- if (module != null ) {
808
+ if (timeModuleLoaded . profile ( module != null ) ) {
802
809
if (isSubtype .executeWithGlobalState (objType , readTypeNode .execute (module , STRUCT_TIME_TYPE ))) {
803
- InteropLibrary lib = InteropLibrary .getFactory ().getUncached (this );
804
810
try {
805
811
Object tm_zone = lib .readMember (this , "tm_zone" );
806
812
if (tm_zone != PNone .NONE ) {
@@ -819,14 +825,16 @@ public ZoneId asTimeZone(@Shared("getClassNode") @Cached GetLazyClassNode getCla
819
825
@ Shared ("readTypeNode" ) @ Cached ReadAttributeFromObjectNode readTypeNode ,
820
826
@ Shared ("isSubtypeNode" ) @ Cached IsSubtypeNode .IsSubtypeWithoutFrameNode isSubtypeNode ,
821
827
@ Shared ("castToIntNode" ) @ Cached CastToJavaIntNode castToIntNode ,
822
- @ CachedLibrary (limit = "1" ) InteropLibrary lib ) throws UnsupportedMessageException {
828
+ @ CachedLibrary (limit = "3" ) InteropLibrary lib ,
829
+ @ Cached ("createBinaryProfile()" ) ConditionProfile dateTimeModuleLoaded ,
830
+ @ Cached ("createBinaryProfile()" ) ConditionProfile timeModuleLoaded ) throws UnsupportedMessageException {
823
831
if (!lib .isTimeZone (this )) {
824
832
throw UnsupportedMessageException .create ();
825
833
}
826
834
LazyPythonClass objType = getClassNode .execute (this );
827
835
PDict importedModules = PythonLanguage .getContext ().getImportedModules ();
828
836
Object module = importedModules .getItem (DATETIME_MODULE_NAME );
829
- if (module != null ) {
837
+ if (dateTimeModuleLoaded . profile ( module != null ) ) {
830
838
if (isSubtypeNode .executeWithGlobalState (objType , readTypeNode .execute (module , "datetime" ))) {
831
839
try {
832
840
Object tzinfo = lib .readMember (this , "tzinfo" );
@@ -856,7 +864,7 @@ public ZoneId asTimeZone(@Shared("getClassNode") @Cached GetLazyClassNode getCla
856
864
}
857
865
}
858
866
module = importedModules .getItem (TIME_MODULE_NAME );
859
- if (module != null ) {
867
+ if (timeModuleLoaded . profile ( module != null ) ) {
860
868
if (isSubtypeNode .executeWithGlobalState (objType , readTypeNode .execute (module , "struct_time" ))) {
861
869
try {
862
870
Object tm_zone = lib .readMember (this , "tm_zone" );
0 commit comments