@@ -460,7 +460,7 @@ class MLIRGenImpl
460460
461461 mlir::LogicalResult createDeclarationExportGlobalVar(const GenContext &genContext)
462462 {
463- if (!declExports.rdbuf()->in_avail())
463+ if (!declExports.rdbuf()->in_avail() || !compileOptions.embedExportDeclarations )
464464 {
465465 return mlir::success();
466466 }
@@ -5871,23 +5871,35 @@ class MLIRGenImpl
58715871 }
58725872
58735873 // set visibility index
5874- auto isPublic = getExportModifier(functionLikeDeclarationBaseAST)
5875- || ((functionLikeDeclarationBaseAST->internalFlags & InternalFlags::DllExport) == InternalFlags::DllExport)
5876- /* we need to forcebly set to Public to prevent SymbolDCEPass to remove unsed name */
5877- || hasModifier(functionLikeDeclarationBaseAST, SyntaxKind::ExportKeyword)
5874+ auto isPublic =
5875+ getExportModifier(functionLikeDeclarationBaseAST)
5876+ /* we need to forcebly set to Public to prevent SymbolDCEPass to remove unused name */
5877+ || hasModifier(functionLikeDeclarationBaseAST, SyntaxKind::ExportKeyword);
5878+
5879+ // force public
5880+ isPublic |=
5881+ ((functionLikeDeclarationBaseAST->internalFlags & InternalFlags::DllExport) == InternalFlags::DllExport)
58785882 || ((functionLikeDeclarationBaseAST->internalFlags & InternalFlags::IsPublic) == InternalFlags::IsPublic)
58795883 || funcProto->getName() == MAIN_ENTRY_NAME;
58805884
5881- if (isPublic)
5885+ // if explicit public/protected - set public visibility
5886+ if (hasModifier(functionLikeDeclarationBaseAST, SyntaxKind::PublicKeyword)
5887+ || hasModifier(functionLikeDeclarationBaseAST, SyntaxKind::ProtectedKeyword))
58825888 {
5883- funcOp.setPublic() ;
5889+ isPublic = true ;
58845890 }
5885- else
5891+
5892+ // if explicit private - do not set public visibility
5893+ if (hasModifier(functionLikeDeclarationBaseAST, SyntaxKind::PrivateKeyword))
58865894 {
5887- funcOp.setPrivate() ;
5895+ isPublic = false ;
58885896 }
58895897
5890- if (declarationMode && !funcDeclGenContext.dummyRun && funcProto->getNoBody())
5898+ if (isPublic && !funcProto->getNoBody() && !declarationMode)
5899+ {
5900+ funcOp.setPublic();
5901+ }
5902+ else
58915903 {
58925904 funcOp.setPrivate();
58935905 }
@@ -18410,7 +18422,7 @@ genContext);
1841018422 isAbstract = hasModifier(classMember, SyntaxKind::AbstractKeyword);
1841118423 auto isPrivate = hasModifier(classMember, SyntaxKind::PrivateKeyword);
1841218424 auto isProtected = hasModifier(classMember, SyntaxKind::ProtectedKeyword);
18413- auto isPublic = hasModifier(classMember, SyntaxKind::PublicKeyword);
18425+ // auto isPublic = hasModifier(classMember, SyntaxKind::PublicKeyword);
1841418426
1841518427 accessLevel = mlir_ts::AccessLevel::Public;
1841618428 if (isPrivate)
@@ -18422,8 +18434,8 @@ genContext);
1842218434 accessLevel = mlir_ts::AccessLevel::Protected;
1842318435 }
1842418436
18425- isExport = newClassPtr->isExport && (isConstructor || isPublic );
18426- isImport = newClassPtr->isImport && (isConstructor || isPublic );
18437+ isExport = newClassPtr->isExport && (isConstructor || accessLevel == mlir_ts::AccessLevel::Public );
18438+ isImport = newClassPtr->isImport && (isConstructor || accessLevel == mlir_ts::AccessLevel::Public );
1842718439 isForceVirtual = (classMember->internalFlags & InternalFlags::ForceVirtual) == InternalFlags::ForceVirtual;
1842818440 #ifdef ALL_METHODS_VIRTUAL
1842918441 isForceVirtual |= !isConstructor;
@@ -18694,7 +18706,7 @@ genContext);
1869418706 //MLIRHelper::addDecoratorIfNotPresent(funcLikeDeclaration, DLL_IMPORT);
1869518707 }
1869618708
18697- if (newClassPtr->isPublic && hasModifier(classMember, SyntaxKind::PublicKeyword) )
18709+ if (newClassPtr->isPublic && accessLevel != mlir_ts::AccessLevel::Private )
1869818710 {
1869918711 funcLikeDeclaration->internalFlags |= InternalFlags::IsPublic;
1870018712 }
@@ -22257,20 +22269,35 @@ genContext);
2225722269 auto translate = llvm::StringSwitch<std::function<mlir::Type(NodeArray<TypeNode> &, const GenContext &)>>(name)
2225822270 .Case("TypeOf", [&] (auto typeArguments, auto genContext) {
2225922271 auto type = getFirstTypeFromTypeArguments(typeArguments, genContext);
22272+ if (!type)
22273+ {
22274+ return mlir::Type();
22275+ }
22276+
2226022277 type = mth.wideStorageType(type);
2226122278 return type;
2226222279 })
2226322280 .Case("Reference", [&] (auto typeArguments, auto genContext) {
2226422281 auto type = getFirstTypeFromTypeArguments(typeArguments, genContext);
22265- return mlir_ts::RefType::get(type);
22282+ if (!type)
22283+ {
22284+ return mlir::Type();
22285+ }
22286+
22287+ return mlir::Type(mlir_ts::RefType::get(type));
2226622288 })
2226722289 .Case("Readonly", std::bind(&MLIRGenImpl::getFirstTypeFromTypeArguments, this, std::placeholders::_1, std::placeholders::_2))
2226822290 .Case("Partial", std::bind(&MLIRGenImpl::getFirstTypeFromTypeArguments, this, std::placeholders::_1, std::placeholders::_2))
2226922291 .Case("Required", std::bind(&MLIRGenImpl::getFirstTypeFromTypeArguments, this, std::placeholders::_1, std::placeholders::_2))
2227022292 .Case("ThisType", std::bind(&MLIRGenImpl::getFirstTypeFromTypeArguments, this, std::placeholders::_1, std::placeholders::_2))
2227122293 .Case("NonNullable", [&] (auto typeArguments, auto genContext) {
22272- auto elemnentType = getFirstTypeFromTypeArguments(typeArguments, genContext);
22273- return NonNullableTypes(elemnentType);
22294+ auto elementType = getFirstTypeFromTypeArguments(typeArguments, genContext);
22295+ if (!elementType)
22296+ {
22297+ return mlir::Type();
22298+ }
22299+
22300+ return NonNullableTypes(elementType);
2227422301 })
2227522302#ifdef ARRAY_TYPE_AS_ARRAY_CLASS
2227622303 .Case("Array", [&] (auto typeArguments, auto genContext) {
@@ -22279,12 +22306,17 @@ genContext);
2227922306 })
2228022307#endif
2228122308 .Case("ReadonlyArray", [&] (auto typeArguments, auto genContext) {
22282- auto elemnentType = getFirstTypeFromTypeArguments(typeArguments, genContext);
22283- return getArrayType(elemnentType);
22309+ auto elementType = getFirstTypeFromTypeArguments(typeArguments, genContext);
22310+ if (!elementType)
22311+ {
22312+ return mlir::Type();
22313+ }
22314+
22315+ return getArrayType(elementType);
2228422316 })
2228522317 .Case("ReturnType", [&] (auto typeArguments, auto genContext) {
2228622318 auto elementType = getFirstTypeFromTypeArguments(typeArguments, genContext);
22287- if (genContext.allowPartialResolve && !elementType)
22319+ if (!elementType)
2228822320 {
2228922321 return mlir::Type();
2229022322 }
@@ -22296,7 +22328,7 @@ genContext);
2229622328 })
2229722329 .Case("Parameters", [&] (auto typeArguments, auto genContext) {
2229822330 auto elementType = getFirstTypeFromTypeArguments(typeArguments, genContext);
22299- if (genContext.allowPartialResolve && !elementType)
22331+ if (!elementType)
2230022332 {
2230122333 return mlir::Type();
2230222334 }
@@ -22308,7 +22340,7 @@ genContext);
2230822340 })
2230922341 .Case("ConstructorParameters", [&] (auto typeArguments, auto genContext) {
2231022342 auto elementType = getFirstTypeFromTypeArguments(typeArguments, genContext);
22311- if (genContext.allowPartialResolve && !elementType)
22343+ if (!elementType)
2231222344 {
2231322345 return mlir::Type();
2231422346 }
@@ -22320,7 +22352,7 @@ genContext);
2232022352 })
2232122353 .Case("ThisParameterType", [&] (auto typeArguments, auto genContext) {
2232222354 auto elementType = getFirstTypeFromTypeArguments(typeArguments, genContext);
22323- if (genContext.allowPartialResolve && !elementType)
22355+ if (!elementType)
2232422356 {
2232522357 return mlir::Type();
2232622358 }
@@ -22332,7 +22364,7 @@ genContext);
2233222364 })
2233322365 .Case("OmitThisParameter", [&] (auto typeArguments, auto genContext) {
2233422366 auto elementType = getFirstTypeFromTypeArguments(typeArguments, genContext);
22335- if (genContext.allowPartialResolve && !elementType)
22367+ if (!elementType)
2233622368 {
2233722369 return mlir::Type();
2233822370 }
@@ -22343,20 +22375,40 @@ genContext);
2234322375 return retType;
2234422376 })
2234522377 .Case("Uppercase", [&] (auto typeArguments, auto genContext) {
22346- auto elemnentType = getFirstTypeFromTypeArguments(typeArguments, genContext);
22347- return UppercaseType(elemnentType);
22378+ auto elementType = getFirstTypeFromTypeArguments(typeArguments, genContext);
22379+ if (!elementType)
22380+ {
22381+ return mlir::Type();
22382+ }
22383+
22384+ return UppercaseType(elementType);
2234822385 })
2234922386 .Case("Lowercase", [&] (auto typeArguments, auto genContext) {
22350- auto elemnentType = getFirstTypeFromTypeArguments(typeArguments, genContext);
22351- return LowercaseType(elemnentType);
22387+ auto elementType = getFirstTypeFromTypeArguments(typeArguments, genContext);
22388+ if (!elementType)
22389+ {
22390+ return mlir::Type();
22391+ }
22392+
22393+ return LowercaseType(elementType);
2235222394 })
2235322395 .Case("Capitalize", [&] (auto typeArguments, auto genContext) {
22354- auto elemnentType = getFirstTypeFromTypeArguments(typeArguments, genContext);
22355- return CapitalizeType(elemnentType);
22396+ auto elementType = getFirstTypeFromTypeArguments(typeArguments, genContext);
22397+ if (!elementType)
22398+ {
22399+ return mlir::Type();
22400+ }
22401+
22402+ return CapitalizeType(elementType);
2235622403 })
2235722404 .Case("Uncapitalize", [&] (auto typeArguments, auto genContext) {
22358- auto elemnentType = getFirstTypeFromTypeArguments(typeArguments, genContext);
22359- return UncapitalizeType(elemnentType);
22405+ auto elementType = getFirstTypeFromTypeArguments(typeArguments, genContext);
22406+ if (!elementType)
22407+ {
22408+ return mlir::Type();
22409+ }
22410+
22411+ return UncapitalizeType(elementType);
2236022412 })
2236122413 .Default([] (auto, auto) {
2236222414 return mlir::Type();
0 commit comments