Skip to content

Commit 2ea8318

Browse files
List of fixes (#155)
* added logic to provide path for default dll library * more fixes * more fixes * fixed issue with comparing nullable types and nulls * more fixes to merging si64 and i32 * more fixes to get type from union type * public visibility fixes for constructors * added option to control decl export * updated export for public access level * update private flag for declarations * update build script
1 parent 8daca47 commit 2ea8318

File tree

16 files changed

+185
-62
lines changed

16 files changed

+185
-62
lines changed

tag.bat

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
git tag -a v0.0-pre-alpha66 -m "pre alpha v0.0-66"
1+
git tag -a v0.0-pre-alpha67 -m "pre alpha v0.0-67"
22
git push origin --tags

tag_del.bat

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
git push --delete origin v0.0-pre-alpha66
2-
git tag -d v0.0-pre-alpha66
1+
git push --delete origin v0.0-pre-alpha67
2+
git tag -d v0.0-pre-alpha67

tsc/include/TypeScript/DataStructs.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ struct CompileOptions
2222
bool isExecutable;
2323
bool isDLL;
2424
enum Exports exportOpt;
25+
bool embedExportDeclarations;
2526
std::string outputFolder;
2627
bool appendGCtorsToMethod;
2728
bool strictNullChecks;

tsc/include/TypeScript/LowerToLLVM/CastLogicHelper.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ class CastLogicHelper
124124
return castF64ToString(in);
125125
}
126126

127+
// TODO: should be in LLVM cast?
127128
if (inType.isIndex())
128129
{
129130
if (resType.isSignedInteger() || isFloat(resType))
@@ -136,6 +137,7 @@ class CastLogicHelper
136137
}
137138
}
138139

140+
// TODO: should be in LLVM cast?
139141
if (inType.isSignedInteger() && resType.isSignedInteger() && resType.getIntOrFloatBitWidth() > inType.getIntOrFloatBitWidth())
140142
{
141143
return rewriter.create<LLVM::SExtOp>(loc, resLLVMType, in);

tsc/include/TypeScript/LowerToLLVM/UnaryBinLogicalOrHelper.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,8 +150,9 @@ mlir::Value LogicOp(Operation *binOp, SyntaxKind op, mlir::Value left, mlir::Typ
150150

151151
return value;
152152
}
153-
else if (isa<mlir_ts::AnyType>(leftType) || isa<mlir_ts::ClassType>(leftType) ||
154-
isa<mlir_ts::OpaqueType>(leftType) || isa<mlir_ts::NullType>(leftType))
153+
else if (MLIRTypeCore::isNullableTypeNoUnion(leftType)
154+
&& !isa<mlir_ts::InterfaceType>(leftType)
155+
&& !isa<mlir_ts::StringType>(leftType))
155156
{
156157
// in case of UnionType
157158
if (auto unionType = dyn_cast<mlir_ts::UnionType>(rightType))

tsc/include/TypeScript/MLIRLogic/MLIRCodeLogic.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -961,7 +961,13 @@ class MLIRCustomMethods
961961
ValueOrLogicalResult mlirGenReferenceOf(const mlir::Location &location, ArrayRef<mlir::Value> operands)
962962
{
963963
MLIRCodeLogic mcl(builder, compileOptions);
964-
auto refValue = mcl.GetReferenceFromValue(location, operands.front());
964+
auto refValue = mcl.GetReferenceFromValue(location, operands.front());
965+
if (!refValue)
966+
{
967+
emitError(location, "Are you trying to get reference of constant object or variable?");
968+
return mlir::failure();
969+
}
970+
965971
return V(refValue);
966972
}
967973

tsc/include/TypeScript/MLIRLogic/MLIRTypeCore.h

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ namespace typescript
1515
class MLIRTypeCore
1616
{
1717
public:
18-
static bool isNullableType(mlir::Type typeIn)
18+
19+
static bool isNullableTypeNoUnion(mlir::Type typeIn)
1920
{
2021
if (isa<mlir_ts::NullType>(typeIn)
2122
|| isa<mlir_ts::StringType>(typeIn)
@@ -30,6 +31,16 @@ class MLIRTypeCore
3031
return true;
3132
}
3233

34+
return false;
35+
}
36+
37+
static bool isNullableType(mlir::Type typeIn)
38+
{
39+
if (MLIRTypeCore::isNullableTypeNoUnion(typeIn))
40+
{
41+
return true;
42+
}
43+
3344
if (auto unionType = dyn_cast<mlir_ts::UnionType>(typeIn))
3445
{
3546
return llvm::any_of(unionType.getTypes(), [&](mlir::Type t) { return isNullableType(t); });

tsc/include/TypeScript/MLIRLogic/MLIRTypeHelper.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1880,7 +1880,7 @@ class MLIRTypeHelper
18801880
return true;
18811881
}
18821882

1883-
if (destIntType.getIntOrFloatBitWidth() - srcIntType.getIntOrFloatBitWidth() > 1)
1883+
if (destIntType.getIntOrFloatBitWidth() > srcIntType.getIntOrFloatBitWidth() && (destIntType.getIntOrFloatBitWidth() - srcIntType.getIntOrFloatBitWidth()) > 1)
18841884
{
18851885
return true;
18861886
}

tsc/lib/TypeScript/LowerToLLVM.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1699,7 +1699,7 @@ struct GetTypeInfoFromUnionOpLowering : public TsLlvmPattern<mlir_ts::GetTypeInf
16991699
}
17001700
else
17011701
{
1702-
auto typeOfValue = rewriter.create<mlir_ts::TypeOfOp>(loc, baseType, transformed.getIn());
1702+
auto typeOfValue = rewriter.create<mlir_ts::TypeOfOp>(loc, mlir_ts::StringType::get(rewriter.getContext()), transformed.getIn());
17031703

17041704
rewriter.replaceOp(op, ValueRange{typeOfValue});
17051705
}

tsc/lib/TypeScript/MLIRGen.cpp

Lines changed: 84 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)