From 88f04c29244af23c1cdd472d8d1ae3e5a650494e Mon Sep 17 00:00:00 2001 From: Yong He Date: Wed, 10 Aug 2022 14:11:27 -0700 Subject: `is` and `as` operator and `Optional`. (#2355) * `is` and `as` operator and `Optional`. * Fix. Co-authored-by: Yong He --- source/slang/slang-ast-builder.cpp | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) (limited to 'source/slang/slang-ast-builder.cpp') diff --git a/source/slang/slang-ast-builder.cpp b/source/slang/slang-ast-builder.cpp index 868763f76..2acdc26d3 100644 --- a/source/slang/slang-ast-builder.cpp +++ b/source/slang/slang-ast-builder.cpp @@ -212,6 +212,13 @@ NodeBase* ASTBuilder::createByNodeType(ASTNodeType nodeType) return (NodeBase*)createFunc(this); } +Type* ASTBuilder::getSpecializedBuiltinType(Type* typeParam, char const* magicTypeName) +{ + auto declRef = getBuiltinDeclRef(magicTypeName, makeConstArrayViewSingle(typeParam)); + auto rsType = DeclRefType::create(this, declRef); + return rsType; +} + PtrType* ASTBuilder::getPtrType(Type* valueType) { return dynamicCast(getPtrType(valueType, "PtrType")); @@ -233,23 +240,15 @@ RefType* ASTBuilder::getRefType(Type* valueType) return dynamicCast(getPtrType(valueType, "RefType")); } -PtrTypeBase* ASTBuilder::getPtrType(Type* valueType, char const* ptrTypeName) +OptionalType* ASTBuilder::getOptionalType(Type* valueType) { - auto genericDecl = dynamicCast(m_sharedASTBuilder->findMagicDecl(ptrTypeName)); - return getPtrType(valueType, genericDecl); + auto rsType = getSpecializedBuiltinType(valueType, "OptionalType"); + return as(rsType); } -PtrTypeBase* ASTBuilder::getPtrType(Type* valueType, GenericDecl* genericDecl) +PtrTypeBase* ASTBuilder::getPtrType(Type* valueType, char const* ptrTypeName) { - auto typeDecl = genericDecl->inner; - - auto substitutions = create(); - substitutions->genericDecl = genericDecl; - substitutions->args.add(valueType); - - auto declRef = DeclRef(typeDecl, substitutions); - auto rsType = DeclRefType::create(this, declRef); - return as(rsType); + return as(getSpecializedBuiltinType(valueType, ptrTypeName)); } ArrayExpressionType* ASTBuilder::getArrayType(Type* elementType, IntVal* elementCount) -- cgit v1.2.3