25
25
#include " swift/Runtime/Casting.h"
26
26
#include " swift/Runtime/Concurrent.h"
27
27
#include " swift/Runtime/Debug.h"
28
+ #include " swift/Runtime/EnvironmentVariables.h"
28
29
#include " swift/Runtime/HeapObject.h"
29
30
#include " swift/Runtime/Metadata.h"
30
31
#include " swift/Strings.h"
@@ -1942,14 +1943,26 @@ swift_getTypeByMangledNameInEnvironment(
1942
1943
const void * const *genericArgs) {
1943
1944
llvm::StringRef typeName (typeNameStart, typeNameLength);
1944
1945
SubstGenericParametersFromMetadata substitutions (environment, genericArgs);
1945
- return swift_getTypeByMangledName (MetadataState::Complete, typeName,
1946
+ TypeLookupErrorOr<TypeInfo> result = swift_getTypeByMangledName (
1947
+ MetadataState::Complete, typeName,
1946
1948
genericArgs,
1947
1949
[&substitutions](unsigned depth, unsigned index) {
1948
1950
return substitutions.getMetadata (depth, index);
1949
1951
},
1950
1952
[&substitutions](const Metadata *type, unsigned index) {
1951
1953
return substitutions.getWitnessTable (type, index);
1952
- }).getType ().getMetadata ();
1954
+ });
1955
+ if (result.isError ()
1956
+ && runtime::environment::SWIFT_DEBUG_FAILED_TYPE_LOOKUP ()) {
1957
+ TypeLookupError *error = result.getError ();
1958
+ char *errorString = error->copyErrorString ();
1959
+ swift::warning (0 , " failed type lookup for %.*s: %s\n " ,
1960
+ (int )typeNameLength, typeNameStart,
1961
+ errorString);
1962
+ error->freeErrorString (errorString);
1963
+ return nullptr ;
1964
+ }
1965
+ return result.getType ().getMetadata ();
1953
1966
}
1954
1967
1955
1968
SWIFT_CC (swift) SWIFT_RUNTIME_EXPORT
@@ -1962,14 +1975,26 @@ swift_getTypeByMangledNameInEnvironmentInMetadataState(
1962
1975
const void * const *genericArgs) {
1963
1976
llvm::StringRef typeName (typeNameStart, typeNameLength);
1964
1977
SubstGenericParametersFromMetadata substitutions (environment, genericArgs);
1965
- return swift_getTypeByMangledName ((MetadataState)metadataState, typeName,
1978
+ TypeLookupErrorOr<TypeInfo> result = swift_getTypeByMangledName (
1979
+ (MetadataState)metadataState, typeName,
1966
1980
genericArgs,
1967
1981
[&substitutions](unsigned depth, unsigned index) {
1968
1982
return substitutions.getMetadata (depth, index);
1969
1983
},
1970
1984
[&substitutions](const Metadata *type, unsigned index) {
1971
1985
return substitutions.getWitnessTable (type, index);
1972
- }).getType ().getMetadata ();
1986
+ });
1987
+ if (result.isError ()
1988
+ && runtime::environment::SWIFT_DEBUG_FAILED_TYPE_LOOKUP ()) {
1989
+ TypeLookupError *error = result.getError ();
1990
+ char *errorString = error->copyErrorString ();
1991
+ swift::warning (0 , " failed type lookup for %.*s: %s\n " ,
1992
+ (int )typeNameLength, typeNameStart,
1993
+ errorString);
1994
+ error->freeErrorString (errorString);
1995
+ return nullptr ;
1996
+ }
1997
+ return result.getType ().getMetadata ();
1973
1998
}
1974
1999
1975
2000
SWIFT_CC (swift) SWIFT_RUNTIME_EXPORT
@@ -1981,14 +2006,26 @@ swift_getTypeByMangledNameInContext(
1981
2006
const void * const *genericArgs) {
1982
2007
llvm::StringRef typeName (typeNameStart, typeNameLength);
1983
2008
SubstGenericParametersFromMetadata substitutions (context, genericArgs);
1984
- return swift_getTypeByMangledName (MetadataState::Complete, typeName,
2009
+ TypeLookupErrorOr<TypeInfo> result = swift_getTypeByMangledName (
2010
+ MetadataState::Complete, typeName,
1985
2011
genericArgs,
1986
2012
[&substitutions](unsigned depth, unsigned index) {
1987
2013
return substitutions.getMetadata (depth, index);
1988
2014
},
1989
2015
[&substitutions](const Metadata *type, unsigned index) {
1990
2016
return substitutions.getWitnessTable (type, index);
1991
- }).getType ().getMetadata ();
2017
+ });
2018
+ if (result.isError ()
2019
+ && runtime::environment::SWIFT_DEBUG_FAILED_TYPE_LOOKUP ()) {
2020
+ TypeLookupError *error = result.getError ();
2021
+ char *errorString = error->copyErrorString ();
2022
+ swift::warning (0 , " failed type lookup for %.*s: %s\n " ,
2023
+ (int )typeNameLength, typeNameStart,
2024
+ errorString);
2025
+ error->freeErrorString (errorString);
2026
+ return nullptr ;
2027
+ }
2028
+ return result.getType ().getMetadata ();
1992
2029
}
1993
2030
1994
2031
SWIFT_CC (swift) SWIFT_RUNTIME_EXPORT
@@ -2001,14 +2038,27 @@ swift_getTypeByMangledNameInContextInMetadataState(
2001
2038
const void * const *genericArgs) {
2002
2039
llvm::StringRef typeName (typeNameStart, typeNameLength);
2003
2040
SubstGenericParametersFromMetadata substitutions (context, genericArgs);
2004
- return swift_getTypeByMangledName ((MetadataState)metadataState, typeName,
2041
+ TypeLookupErrorOr<TypeInfo> result = swift_getTypeByMangledName (
2042
+ (MetadataState)metadataState, typeName,
2005
2043
genericArgs,
2006
2044
[&substitutions](unsigned depth, unsigned index) {
2007
2045
return substitutions.getMetadata (depth, index);
2008
2046
},
2009
2047
[&substitutions](const Metadata *type, unsigned index) {
2010
2048
return substitutions.getWitnessTable (type, index);
2011
- }).getType ().getMetadata ();
2049
+ });
2050
+ if (result.isError ()
2051
+ && runtime::environment::SWIFT_DEBUG_FAILED_TYPE_LOOKUP ()) {
2052
+ TypeLookupError *error = result.getError ();
2053
+ char *errorString = error->copyErrorString ();
2054
+ swift::warning (0 , " failed type lookup for %.*s: %s\n " ,
2055
+ (int )typeNameLength, typeNameStart,
2056
+ errorString);
2057
+ error->freeErrorString (errorString);
2058
+ return nullptr ;
2059
+ }
2060
+ return result.getType ().getMetadata ();
2061
+
2012
2062
}
2013
2063
2014
2064
// / Demangle a mangled name, but don't allow symbolic references.
0 commit comments