diff options
Diffstat (limited to 'source/slang/slang-ast-builder.cpp')
| -rw-r--r-- | source/slang/slang-ast-builder.cpp | 25 |
1 files changed, 12 insertions, 13 deletions
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<Val*>(typeParam)); + auto rsType = DeclRefType::create(this, declRef); + return rsType; +} + PtrType* ASTBuilder::getPtrType(Type* valueType) { return dynamicCast<PtrType>(getPtrType(valueType, "PtrType")); @@ -233,23 +240,15 @@ RefType* ASTBuilder::getRefType(Type* valueType) return dynamicCast<RefType>(getPtrType(valueType, "RefType")); } -PtrTypeBase* ASTBuilder::getPtrType(Type* valueType, char const* ptrTypeName) +OptionalType* ASTBuilder::getOptionalType(Type* valueType) { - auto genericDecl = dynamicCast<GenericDecl>(m_sharedASTBuilder->findMagicDecl(ptrTypeName)); - return getPtrType(valueType, genericDecl); + auto rsType = getSpecializedBuiltinType(valueType, "OptionalType"); + return as<OptionalType>(rsType); } -PtrTypeBase* ASTBuilder::getPtrType(Type* valueType, GenericDecl* genericDecl) +PtrTypeBase* ASTBuilder::getPtrType(Type* valueType, char const* ptrTypeName) { - auto typeDecl = genericDecl->inner; - - auto substitutions = create<GenericSubstitution>(); - substitutions->genericDecl = genericDecl; - substitutions->args.add(valueType); - - auto declRef = DeclRef<Decl>(typeDecl, substitutions); - auto rsType = DeclRefType::create(this, declRef); - return as<PtrTypeBase>(rsType); + return as<PtrTypeBase>(getSpecializedBuiltinType(valueType, ptrTypeName)); } ArrayExpressionType* ASTBuilder::getArrayType(Type* elementType, IntVal* elementCount) |
