summaryrefslogtreecommitdiffstats
path: root/source
diff options
context:
space:
mode:
Diffstat (limited to 'source')
-rw-r--r--source/slang/core.meta.slang6
-rw-r--r--source/slang/slang-check-conversion.cpp4
2 files changed, 8 insertions, 2 deletions
diff --git a/source/slang/core.meta.slang b/source/slang/core.meta.slang
index adb7470dd..f0324ba1a 100644
--- a/source/slang/core.meta.slang
+++ b/source/slang/core.meta.slang
@@ -1463,6 +1463,11 @@ struct String
__intrinsic_op($(kIROp_MakeString))
__init(double val);
+ [require(cpp)]
+ __implicit_conversion($(kConversionCost_None))
+ __intrinsic_op($(kIROp_MakeString))
+ __init(NativeString value);
+
/// Returns the length of the string.
[require(cpp)]
int64_t getLength();
@@ -1502,6 +1507,7 @@ struct NativeString
property int length { [__unsafeForceInlineEarly] get{return getLength();} }
+ __implicit_conversion($(kConversionCost_None))
__intrinsic_op($(kIROp_getNativeStr))
__init(String value);
};
diff --git a/source/slang/slang-check-conversion.cpp b/source/slang/slang-check-conversion.cpp
index 7cb71a1bd..248c83fe5 100644
--- a/source/slang/slang-check-conversion.cpp
+++ b/source/slang/slang-check-conversion.cpp
@@ -785,8 +785,8 @@ bool SemanticsVisitor::_coerce(
return true;
}
- // If both are string types we assume they are convertable in both directions
- if (as<StringTypeBase>(fromType) && as<StringTypeBase>(toType))
+ // Assume string literals are convertible to any string type.
+ if (as<StringLiteralExpr>(fromExpr) && as<StringTypeBase>(toType))
{
if (outToExpr)
*outToExpr = fromExpr;