diff options
| author | Yong He <yonghe@outlook.com> | 2022-08-10 15:37:19 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-08-10 15:37:19 -0700 |
| commit | a083a37ee58dc48d92cf2b844466a295eb3e643e (patch) | |
| tree | 69028f3d9f92fa7e2085c76bc234e1949ef645c5 /source/slang/slang-check-conversion.cpp | |
| parent | 88f04c29244af23c1cdd472d8d1ae3e5a650494e (diff) | |
Add `none` literal that is convertible to `Optional`. (#2356)
* Add `none` literal that is convertible to `Optional`.
* Fix cpu code gen.
* Include vk and cpu test for is-as operator test.
* Inline comparison operators.
Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'source/slang/slang-check-conversion.cpp')
| -rw-r--r-- | source/slang/slang-check-conversion.cpp | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/source/slang/slang-check-conversion.cpp b/source/slang/slang-check-conversion.cpp index 6290acbd9..4bcf07b2b 100644 --- a/source/slang/slang-check-conversion.cpp +++ b/source/slang/slang-check-conversion.cpp @@ -773,13 +773,28 @@ namespace Slang { if (outCost) { - *outCost = kConversionCost_None; + *outCost = kConversionCost_NullPtrToPtr; } if (outToExpr) *outToExpr = fromExpr; return true; } - + // none_t can be cast into any Optional<T> type. + if (as<NoneType>(fromType) && as<OptionalType>(toType)) + { + if (outCost) + { + *outCost = kConversionCost_NoneToOptional; + } + if (outToExpr) + { + auto resultExpr = getASTBuilder()->create<MakeOptionalExpr>(); + resultExpr->loc = fromExpr->loc; + resultExpr->type = toType; + *outToExpr = resultExpr; + } + return true; + } // If we are casting to an interface type, then that will succeed // if the "from" type conforms to the interface. // |
