From 0a9e9c7532c3355d89e714b4699f3e735bee0b8d Mon Sep 17 00:00:00 2001 From: David Kopriva Date: Fri, 24 Jul 2026 17:05:00 -0700 Subject: [PATCH] Type/Class Mods Make class and type modifications to pass ifort compiler --- Source/FTObjects/FTDictionaryClass.f90 | 2 +- Source/FTObjects/FTExceptionClass.f90 | 22 ++++++++------ Source/FTObjects/FTLinkedListClass.f90 | 6 ++-- Source/FTObjects/FTMultiIndexTable.f90 | 10 +++---- Source/FTObjects/FTObjectArrayClass.f90 | 2 +- Source/FTObjects/FTObjectClass.f90 | 2 +- Source/FTObjects/FTSparseMatrixClass.f90 | 8 ++--- Source/FTObjects/FTValueClass.f90 | 2 +- Source/FTObjects/FTValueDictionaryClass.f90 | 6 ++-- Testing/Tests/DataTests.f90 | 2 +- Testing/Tests/DictionaryTests.f90 | 2 +- Testing/Tests/ExceptionTests.f90 | 33 +++++++++++++-------- Testing/Tests/LinkedListTests.f90 | 31 ++++++++++++------- Testing/Tests/MutableArrayTests.f90 | 2 +- Testing/Tests/StringSetTests.f90 | 4 +-- Testing/Tests/ValueClassTests.f90 | 2 +- Testing/Tests/ValueDictionaryTests.f90 | 2 +- 17 files changed, 79 insertions(+), 59 deletions(-) diff --git a/Source/FTObjects/FTDictionaryClass.f90 b/Source/FTObjects/FTDictionaryClass.f90 index 600bf789..3eae5730 100644 --- a/Source/FTObjects/FTDictionaryClass.f90 +++ b/Source/FTObjects/FTDictionaryClass.f90 @@ -571,7 +571,7 @@ SUBROUTINE castToDictionary(obj,cast) ! IMPLICIT NONE CLASS(FTObject) , POINTER :: obj - CLASS(FTDictionary), POINTER :: cast + TYPE (FTDictionary), POINTER :: cast cast => NULL() SELECT TYPE (e => obj) diff --git a/Source/FTObjects/FTExceptionClass.f90 b/Source/FTObjects/FTExceptionClass.f90 index b7c35392..85ab2307 100644 --- a/Source/FTObjects/FTExceptionClass.f90 +++ b/Source/FTObjects/FTExceptionClass.f90 @@ -417,7 +417,7 @@ SUBROUTINE castToException(obj,cast) ! IMPLICIT NONE CLASS(FTObject) , POINTER :: obj - CLASS(FTException), POINTER :: cast + TYPE (FTException), POINTER :: cast cast => NULL() SELECT TYPE (e => obj) @@ -611,7 +611,7 @@ SUBROUTINE throw(exceptionToThrow) !>Throws the exception: exceptionToThrow ! IMPLICIT NONE - TYPE (FTException), POINTER :: exceptionToThrow + CLASS(FTException), POINTER :: exceptionToThrow CLASS(FTObject) , POINTER :: ptr => NULL() IF ( .NOT.ASSOCIATED(errorStack) ) THEN @@ -702,9 +702,10 @@ LOGICAL FUNCTION catchErrorWithName(exceptionName) CHARACTER(LEN=*) :: exceptionName TYPE(FTLinkedListIterator) :: iterator - CLASS(FTLinkedList), POINTER :: ptr => NULL() - CLASS(FTObject) , POINTER :: obj => NULL() - CLASS(FTException) , POINTER :: e => NULL() + CLASS(FTLinkedList), POINTER :: ptr => NULL() + CLASS(FTObject) , POINTER :: obj => NULL() + TYPE (FTException) , POINTER :: e => NULL() + CLASS(FTException) , POINTER :: ePtr => NULL() catchErrorWithName = .false. @@ -725,7 +726,8 @@ LOGICAL FUNCTION catchErrorWithName(exceptionName) obj => iterator % object() CALL cast(obj,e) IF ( e % exceptionName() == exceptionName ) THEN - CALL setCurrentError(e) + ePtr => e + CALL setCurrentError(ePtr) catchErrorWithName = .true. CALL errorStack % remove(obj) EXIT @@ -795,7 +797,9 @@ FUNCTION popLastException() CALL initializeFTExceptions ELSE CALL errorStack % pop(obj) - IF(ASSOCIATED(obj)) CALL cast(obj,popLastException) + IF(ASSOCIATED(obj)) THEN + popLastException => exceptionFromObject(obj) + END IF END IF END FUNCTION popLastException @@ -819,7 +823,7 @@ FUNCTION peekLastException() peekLastException => NULL() obj => errorStack % peek() - CALL cast(obj,peekLastException) + peekLastException => exceptionFromObject(obj) END FUNCTION peekLastException ! @@ -842,7 +846,7 @@ SUBROUTINE printAllExceptions CALL iterator % setToStart DO WHILE (.NOT.iterator % isAtEnd()) objectPtr => iterator % object() - CALL cast(objectPtr,e) + e => exceptionFromObject(objectPtr) CALL e % printDescription(6) CALL iterator % moveToNext() END DO diff --git a/Source/FTObjects/FTLinkedListClass.f90 b/Source/FTObjects/FTLinkedListClass.f90 index a93d3959..7e3dcf53 100644 --- a/Source/FTObjects/FTLinkedListClass.f90 +++ b/Source/FTObjects/FTLinkedListClass.f90 @@ -579,7 +579,7 @@ END FUNCTION numberOfRecords ! SUBROUTINE releaseFTLinkedList(self) IMPLICIT NONE - CLASS (FTLinkedList), POINTER :: self + TYPE (FTLinkedList), POINTER :: self CLASS(FTObject) , POINTER :: obj IF(.NOT. ASSOCIATED(self)) RETURN @@ -777,7 +777,7 @@ SUBROUTINE castObjectToLinkedList(obj,cast) ! IMPLICIT NONE CLASS(FTObject) , POINTER :: obj - CLASS(FTLinkedList), POINTER :: cast + TYPE (FTLinkedList), POINTER :: cast cast => NULL() SELECT TYPE (e => obj) @@ -941,7 +941,7 @@ END SUBROUTINE initWithFTLinkedList SUBROUTINE releaseFTLinkedListIterator(self) IMPLICIT NONE TYPE(FTLinkedListIterator), POINTER :: self - CLASS(FTObject) , POINTER :: obj + CLASS(FTObject) , POINTER :: obj IF(.NOT. ASSOCIATED(self)) RETURN diff --git a/Source/FTObjects/FTMultiIndexTable.f90 b/Source/FTObjects/FTMultiIndexTable.f90 index 237fa16d..1855988a 100644 --- a/Source/FTObjects/FTMultiIndexTable.f90 +++ b/Source/FTObjects/FTMultiIndexTable.f90 @@ -124,8 +124,8 @@ SUBROUTINE castObjectToMultiIndexMatrixData(obj,cast) ! Cast the base class FTObject to the FTException class ! ----------------------------------------------------- ! - CLASS(FTObject) , POINTER :: obj - CLASS(MultiIndexMatrixData), POINTER :: cast + CLASS(FTObject) , POINTER :: obj + TYPE (MultiIndexMatrixData), POINTER :: cast cast => NULL() SELECT TYPE (e => obj) @@ -380,7 +380,7 @@ FUNCTION objectInMultiIndexTableForKeys(self,keys) RESULT(r) DO WHILE (ASSOCIATED(currentRecord)) obj => currentRecord % recordObject - CALL cast(obj,mData) + mData => MultiIndexMatrixDataCast(obj) IF ( keysMatch(key1 = mData % key,key2 = orderedKeys) ) THEN r => mData % object EXIT @@ -429,8 +429,8 @@ FUNCTION MultiIndexTableContainsKeys(self,keys) RESULT(r) currentRecord => self % table(i) % head DO WHILE (ASSOCIATED(currentRecord)) - obj => currentRecord % recordObject - CALL cast(obj,mData) + obj => currentRecord % recordObject + mData => MultiIndexMatrixDataCast(obj) IF ( keysMatch(key1 = mData % key,key2 = orderedKeys)) THEN r = .TRUE. EXIT diff --git a/Source/FTObjects/FTObjectArrayClass.f90 b/Source/FTObjects/FTObjectArrayClass.f90 index da67aedd..b455c063 100644 --- a/Source/FTObjects/FTObjectArrayClass.f90 +++ b/Source/FTObjects/FTObjectArrayClass.f90 @@ -487,7 +487,7 @@ SUBROUTINE castToMutableObjectArray(obj,cast) ! IMPLICIT NONE CLASS(FTObject) , POINTER :: obj - CLASS(FTMutableObjectArray), POINTER :: cast + TYPE (FTMutableObjectArray), POINTER :: cast cast => NULL() SELECT TYPE (e => obj) diff --git a/Source/FTObjects/FTObjectClass.f90 b/Source/FTObjects/FTObjectClass.f90 index a3bc0999..f23aab17 100644 --- a/Source/FTObjects/FTObjectClass.f90 +++ b/Source/FTObjects/FTObjectClass.f90 @@ -107,7 +107,7 @@ !> SUBROUTINE castToSubclass(obj,cast) !> IMPLICIT NONE !> CLASS(FTObject), POINTER :: obj -!> CLASS(SubClass), POINTER :: cast +!> TYPE (SubClass), POINTER :: cast !> !> cast => NULL() !> SELECT TYPE (e => obj) diff --git a/Source/FTObjects/FTSparseMatrixClass.f90 b/Source/FTObjects/FTSparseMatrixClass.f90 index af01e3fd..45e679da 100644 --- a/Source/FTObjects/FTSparseMatrixClass.f90 +++ b/Source/FTObjects/FTSparseMatrixClass.f90 @@ -128,7 +128,7 @@ SUBROUTINE castObjectToMatrixData(obj,cast) ! ----------------------------------------------------- ! CLASS(FTObject) , POINTER :: obj - CLASS(MatrixData), POINTER :: cast + TYPE (MatrixData), POINTER :: cast cast => NULL() SELECT TYPE (e => obj) @@ -382,7 +382,7 @@ FUNCTION objectInSparseMatrixForKeys(self,i,j) RESULT(r) DO WHILE (.NOT.self % iterator % isAtEnd()) obj => self % iterator % object() - CALL cast(obj,mData) + mData => matrixDataCast(obj) IF ( mData % key == j ) THEN r => mData % object EXIT @@ -428,8 +428,8 @@ FUNCTION SparseMatrixContainsKeys(self,i,j) RESULT(r) CALL self % iterator % setToStart() DO WHILE (.NOT.self % iterator % isAtEnd()) - obj => self % iterator % object() - CALL cast(obj,mData) + obj => self % iterator % object() + mData => matrixDataCast(obj) IF ( mData % key == j ) THEN r = .TRUE. RETURN diff --git a/Source/FTObjects/FTValueClass.f90 b/Source/FTObjects/FTValueClass.f90 index 11f0922a..86075502 100644 --- a/Source/FTObjects/FTValueClass.f90 +++ b/Source/FTObjects/FTValueClass.f90 @@ -768,7 +768,7 @@ SUBROUTINE castToValue(obj,cast) ! IMPLICIT NONE CLASS(FTObject), POINTER :: obj - CLASS(FTValue) , POINTER :: cast + TYPE (FTValue) , POINTER :: cast cast => NULL() SELECT TYPE (e => obj) diff --git a/Source/FTObjects/FTValueDictionaryClass.f90 b/Source/FTObjects/FTValueDictionaryClass.f90 index 610df2d7..2008023d 100644 --- a/Source/FTObjects/FTValueDictionaryClass.f90 +++ b/Source/FTObjects/FTValueDictionaryClass.f90 @@ -410,8 +410,8 @@ SUBROUTINE castDictionaryToValueDictionary(dict,valueDict) ! ----------------------------------------------------- ! IMPLICIT NONE - CLASS(FTDictionary) , POINTER :: dict - CLASS(FTValueDictionary), POINTER :: valueDict + CLASS (FTDictionary) , POINTER :: dict + TYPE (FTValueDictionary), POINTER :: valueDict valueDict => NULL() SELECT TYPE (dict) @@ -432,8 +432,8 @@ SUBROUTINE castObjectToValueDictionary(obj,valueDict) ! ----------------------------------------------------------- ! IMPLICIT NONE - CLASS(FTValueDictionary), POINTER :: valueDict CLASS(FTObject) , POINTER :: obj + TYPE (FTValueDictionary), POINTER :: valueDict valueDict => NULL() SELECT TYPE (obj) diff --git a/Testing/Tests/DataTests.f90 b/Testing/Tests/DataTests.f90 index 69a7ec65..0e872dec 100644 --- a/Testing/Tests/DataTests.f90 +++ b/Testing/Tests/DataTests.f90 @@ -59,7 +59,7 @@ SUBROUTINE DataTests IMPLICIT NONE CHARACTER(LEN=1), ALLOCATABLE :: enc(:) - CLASS(FTData) , POINTER :: dat, datPtr + TYPE (FTData) , POINTER :: dat, datPtr CLASS(FTObject) , POINTER :: obj CHARACTER(LEN=1), POINTER :: storedDat(:) CHARACTER(LEN=11) :: outString diff --git a/Testing/Tests/DictionaryTests.f90 b/Testing/Tests/DictionaryTests.f90 index 83013ab3..c467cf6f 100644 --- a/Testing/Tests/DictionaryTests.f90 +++ b/Testing/Tests/DictionaryTests.f90 @@ -42,7 +42,7 @@ SUBROUTINE FTDictionaryClassTests USE FTAssertions IMPLICIT NONE - CLASS(FTDictionary) , POINTER :: dict, dictFromObj + TYPE (FTDictionary) , POINTER :: dict, dictFromObj CLASS(FTObject) , POINTER :: obj TYPE (FTValue) , POINTER :: v TYPE (FTMutableObjectArray) , POINTER :: storedObjects diff --git a/Testing/Tests/ExceptionTests.f90 b/Testing/Tests/ExceptionTests.f90 index 5500d6a7..548a56da 100644 --- a/Testing/Tests/ExceptionTests.f90 +++ b/Testing/Tests/ExceptionTests.f90 @@ -42,7 +42,7 @@ FUNCTION testException() USE FTExceptionClass USE FTValueDictionaryClass IMPLICIT NONE - CLASS(FTException) , POINTER :: testException + TYPE (FTException) , POINTER :: testException TYPE (FTValueDictionary), POINTER :: userDictionary CLASS(FTDictionary) , POINTER :: ptr REAL :: r = 3.1416 @@ -71,9 +71,11 @@ SUBROUTINE subroutineThatThrowsError IMPLICIT NONE TYPE (FTException) , POINTER :: exception + CLASS(FTException) , POINTER :: ePtr exception => testException() - CALL throw(exception) + ePtr => exception + CALL throw(ePtr) CALL releaseFTException(exception) END SUBROUTINE subroutineThatThrowsError @@ -86,11 +88,12 @@ SUBROUTINE FTExceptionClassTests USE FTAssertions IMPLICIT NONE - CLASS(FTException) , POINTER :: e, ePtr - CLASS(FTDictionary) , POINTER :: d - CLASS(FTValueDictionary), POINTER :: userDictionary - CLASS(FTValue) , POINTER :: vGood, vBad - CLASS(FTObject) , POINTER :: obj + TYPE(FTException) , POINTER :: e, ePtr + CLASS(FTException) , POINTER :: eClassPtr + CLASS(FTDictionary) , POINTER :: d + TYPE(FTValueDictionary), POINTER :: userDictionary + CLASS(FTValue) , POINTER :: vGood, vBad + CLASS(FTObject) , POINTER :: obj REAL :: r CHARACTER(LEN=FTDICT_KWD_STRING_LENGTH) :: msg REAL :: singleTol = 2*EPSILON(1.0e0) @@ -111,7 +114,8 @@ SUBROUTINE FTExceptionClassTests CALL FTAssertEqual(expectedValue = FT_ERROR_WARNING, & actualValue = e % severity(), & msg = "Warning error level match") - CALL throw(e) + eClassPtr => e + CALL throw(eClassPtr) CALL releaseFTException(e) ALLOCATE(e) @@ -119,7 +123,8 @@ SUBROUTINE FTExceptionClassTests CALL FTAssertEqual(expectedValue = FT_ERROR_FATAL, & actualValue = e % severity(), & msg = "Fatal error level match") - CALL throw(e) + eClassPtr => e + CALL throw(eClassPtr) CALL releaseFTException(e) ALLOCATE(e) @@ -131,8 +136,10 @@ SUBROUTINE FTExceptionClassTests expectedValueObject = vGood, & ObservedValueObject = vBad, & level = FT_ERROR_WARNING) - CALL releaseFTValue(vBad) - CALL releaseFTValue(vGood) + obj => vBad + CALL release(obj) + obj => vGood + CALL release(obj) CALL FTAssertEqual(expectedValue = FT_ERROR_WARNING, & actualValue = e % severity(), & @@ -157,11 +164,11 @@ SUBROUTINE FTExceptionClassTests obj => e CALL cast(obj,ePtr) CALL FTAssert(ASSOCIATED(ePtr),msg = "Test casting of exception") - ePtr => NULL() ePtr => exceptionFromObject(obj) CALL FTAssert(ASSOCIATED(ePtr),msg = "Test casting of exception by function") - CALL throw(e) + eClassPtr => e + CALL throw(eClassPtr) CALL releaseFTException(e) ! ! ----------------------------- diff --git a/Testing/Tests/LinkedListTests.f90 b/Testing/Tests/LinkedListTests.f90 index 293e736e..a3cb5717 100644 --- a/Testing/Tests/LinkedListTests.f90 +++ b/Testing/Tests/LinkedListTests.f90 @@ -81,8 +81,9 @@ SUBROUTINE basicTests ! can be a non-pointer, too, like the iterator. ! ------------------------------------------------- ! - CLASS (FTLinkedList) , POINTER :: list, listPtr - TYPE (FTLinkedListIterator), POINTER :: iterator + TYPE (FTLinkedList) , POINTER :: list + CLASS (FTLinkedList) , POINTER :: listPtr + TYPE (FTLinkedListIterator) , POINTER :: iterator INTEGER :: i REAL :: singleTol = 2*EPSILON(1.0e0) @@ -176,7 +177,7 @@ SUBROUTINE basicTests ! ------- ! objectPtr => list - CALL cast(objectPtr, listPtr) + listPtr => linkedListFromObject(objectPtr) CALL FTAssert(ASSOCIATED(list,listPtr),msg = "Cast by subroutine call" ) listPtr => linkedListFromObject(obj = objectPtr) CALL FTAssert(ASSOCIATED(list,listPtr),msg = "Cast by function call" ) @@ -195,7 +196,8 @@ SUBROUTINE basicTests ! --------------------------------------------------------------------------------- ! ALLOCATE(iterator) - CALL iterator % initWithFTLinkedList(list) + listPtr => list + CALL iterator % initWithFTLinkedList(listPtr) CALL FTAssertEqual(2,list % refCount(),"Ref count increase on addition of list to iterator") CALL FTAssertEqual(expectedValue = "FTLinkedListIterator", & actualValue = iterator % className(), & @@ -304,7 +306,8 @@ SUBROUTINE TestAppendingLists ! TYPE (FTValue) , POINTER :: v CLASS(FTObject) , POINTER :: objectPtr - CLASS(FTLinkedList) , POINTER :: list1, list2 + TYPE (FTLinkedList) , POINTER :: list1, list2 + CLASS(FTLinkedList) , POINTER :: listClassPtr TYPE (FTMutableObjectArray), POINTER :: array TYPE (FTLinkedListIterator), POINTER :: iterator @@ -344,7 +347,8 @@ SUBROUTINE TestAppendingLists ! Add the elements of list2 to list 1 ! ----------------------------------- ! - CALL list1 % addObjectsFromList(list2) + listClassPtr => list2 + CALL list1 % addObjectsFromList(listClassPtr) CALL FTAssertEqual(10, list1 % COUNT(),"Append list increases list size") ! ! ------------------------------------------- @@ -352,7 +356,8 @@ SUBROUTINE TestAppendingLists ! Note that objects are owned by both lists. ! ------------------------------------------- ! - CALL iterator % initWithFTLinkedList(list1) + listClassPtr => list1 + CALL iterator % initWithFTLinkedList(listClassPtr) j = 1 DO WHILE (.NOT.iterator % isAtEnd()) v => valueFromObject(iterator % object()) @@ -451,7 +456,8 @@ SUBROUTINE TestDeletingObjects ! TYPE (FTValue) , POINTER :: v CLASS(FTObject) , POINTER :: obj - CLASS(FTLinkedList) , POINTER :: list + TYPE (FTLinkedList) , POINTER :: list + CLASS(FTLinkedList) , POINTER :: listClassPtr CLASS(FTLinkedListRecord), POINTER :: recordPtr TYPE(FTLinkedListIterator), POINTER :: iterator @@ -481,7 +487,8 @@ SUBROUTINE TestDeletingObjects ! ------------------------------------------------------------ ! ALLOCATE(iterator) - CALL iterator % initwithFTLinkedList(list) + listClassPtr => list + CALL iterator % initwithFTLinkedList(listClassPtr) ! ! --------------- ! Delete the tail @@ -562,7 +569,8 @@ SUBROUTINE TestInsertingObjects TYPE (FTValue) , POINTER :: v CLASS(FTObject) , POINTER :: obj, savObj - CLASS(FTLinkedList) , POINTER :: list + TYPE (FTLinkedList) , POINTER :: list + CLASS(FTLinkedList) , POINTER :: listClassPtr INTEGER :: j TYPE(FTLinkedListIterator), POINTER :: iterator @@ -604,7 +612,8 @@ SUBROUTINE TestInsertingObjects ! --------------------------------- ! ALLOCATE(iterator) - CALL iterator % initwithFTLinkedList(list) + listClassPtr => list + CALL iterator % initwithFTLinkedList(listClassPtr) CALL releaseFTLinkedList(list) CALL iterator % setToStart() diff --git a/Testing/Tests/MutableArrayTests.f90 b/Testing/Tests/MutableArrayTests.f90 index 86a22197..dd063ff2 100644 --- a/Testing/Tests/MutableArrayTests.f90 +++ b/Testing/Tests/MutableArrayTests.f90 @@ -50,7 +50,7 @@ SUBROUTINE MutableArrayClassTests ! ------------ ! TYPE (FTMutableObjectArray) , POINTER :: array - CLASS (FTMutableObjectArray), POINTER :: arrayPtr + TYPE (FTMutableObjectArray), POINTER :: arrayPtr INTEGER :: i INTEGER, DIMENSION(10) :: values = [(i,i=1,10)] diff --git a/Testing/Tests/StringSetTests.f90 b/Testing/Tests/StringSetTests.f90 index 510476b6..d9d087a4 100644 --- a/Testing/Tests/StringSetTests.f90 +++ b/Testing/Tests/StringSetTests.f90 @@ -46,7 +46,7 @@ SUBROUTINE FTStringSetTests TYPE(FTStringSet) :: set1, set2 TYPE(FTStringSet) , POINTER :: intersectionSet, differenceSet, setPtr - CLASS(FTStringSet), POINTER :: unionSet + TYPE(FTStringSet) , POINTER :: unionSet CHARACTER(LEN=5) :: s1(5) = ['one ','two ','three','four ','five '] CHARACTER(LEN=5) :: s2(5) = ['one ','two ','six ','seven','eight'] CHARACTER(LEN=5) :: s3(6) = ['one ','two ','three','four ','five ','six '] @@ -150,7 +150,7 @@ SUBROUTINE FTStringSetTests actualValue = unionSet % COUNT(), & msg = "union set count") - CALL releaseFTStringSet(self = unionSet) + CALL releaseFTStringSet(unionSet) CALL FTAssert(test = .NOT.ASSOCIATED(unionSet),msg = 'Release of pointer to set') ! ! ---------------------- diff --git a/Testing/Tests/ValueClassTests.f90 b/Testing/Tests/ValueClassTests.f90 index c26f8385..939be32a 100644 --- a/Testing/Tests/ValueClassTests.f90 +++ b/Testing/Tests/ValueClassTests.f90 @@ -61,7 +61,7 @@ SUBROUTINE FTValueClassTests ! TYPE(FTValue) , POINTER :: v CLASS(FTObject), POINTER :: obj - CLASS(FTValue) , POINTER :: vFromObj + TYPE (FTValue) , POINTER :: vFromObj ! ! ------------------------------------------- ! Some values to convert into FTValue objects diff --git a/Testing/Tests/ValueDictionaryTests.f90 b/Testing/Tests/ValueDictionaryTests.f90 index bee8c0fc..dc57d145 100644 --- a/Testing/Tests/ValueDictionaryTests.f90 +++ b/Testing/Tests/ValueDictionaryTests.f90 @@ -42,7 +42,7 @@ SUBROUTINE FTValueDictionaryClassTests IMPLICIT NONE TYPE(FTValueDictionary) :: dict, dict2 - CLASS(FTValueDictionary), POINTER :: dict3, valDict + TYPE(FTValueDictionary) , POINTER :: dict3, valDict CLASS(FTDictionary) , POINTER :: plainDict CLASS(FTObject) , POINTER :: obj !