Skip to content

Commit da8ae1d

Browse files
committed
Sema: Remove PackExpr
1 parent a5453f1 commit da8ae1d

File tree

9 files changed

+1
-176
lines changed

9 files changed

+1
-176
lines changed

include/swift/AST/Expr.h

Lines changed: 0 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -359,11 +359,6 @@ class alignas(8) Expr : public ASTAllocated<Expr> {
359359
IsPlaceholder : 1
360360
);
361361

362-
SWIFT_INLINE_BITFIELD_FULL(PackExpr, Expr, 32,
363-
: NumPadBits,
364-
NumElements : 32
365-
);
366-
367362
SWIFT_INLINE_BITFIELD_FULL(TypeJoinExpr, Expr, 32,
368363
: NumPadBits,
369364
NumElements : 32
@@ -5908,55 +5903,6 @@ class OneWayExpr : public Expr {
59085903
}
59095904
};
59105905

5911-
/// An expression node that aggregates a set of heterogeneous arguments into a
5912-
/// parameter pack suitable for passing off to a variadic generic function
5913-
/// argument.
5914-
///
5915-
/// There is no user-visible way to spell a pack expression, they are always
5916-
/// implicitly created at applies. As such, any appearance of pack types outside
5917-
/// of applies are illegal.
5918-
class PackExpr final : public Expr,
5919-
private llvm::TrailingObjects<PackExpr, Expr *> {
5920-
friend TrailingObjects;
5921-
5922-
size_t numTrailingObjects() const {
5923-
return getNumElements();
5924-
}
5925-
5926-
PackExpr(ArrayRef<Expr *> SubExprs, Type Ty);
5927-
5928-
public:
5929-
/// Create a pack.
5930-
static PackExpr *create(ASTContext &ctx, ArrayRef<Expr *> SubExprs, Type Ty);
5931-
5932-
/// Create an empty pack.
5933-
static PackExpr *createEmpty(ASTContext &ctx);
5934-
5935-
SourceLoc getLoc() const { return SourceLoc(); }
5936-
SourceRange getSourceRange() const { return SourceRange(); }
5937-
5938-
/// Retrieve the elements of this pack.
5939-
MutableArrayRef<Expr *> getElements() {
5940-
return { getTrailingObjects<Expr *>(), getNumElements() };
5941-
}
5942-
5943-
/// Retrieve the elements of this pack.
5944-
ArrayRef<Expr *> getElements() const {
5945-
return { getTrailingObjects<Expr *>(), getNumElements() };
5946-
}
5947-
5948-
unsigned getNumElements() const { return Bits.PackExpr.NumElements; }
5949-
5950-
Expr *getElement(unsigned i) const {
5951-
return getElements()[i];
5952-
}
5953-
void setElement(unsigned i, Expr *e) {
5954-
getElements()[i] = e;
5955-
}
5956-
5957-
static bool classof(const Expr *E) { return E->getKind() == ExprKind::Pack; }
5958-
};
5959-
59605906
class TypeJoinExpr final : public Expr,
59615907
private llvm::TrailingObjects<TypeJoinExpr, Expr *> {
59625908
friend TrailingObjects;

include/swift/AST/ExprNodes.def

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,6 @@ EXPR(KeyPath, Expr)
206206
UNCHECKED_EXPR(KeyPathDot, Expr)
207207
UNCHECKED_EXPR(OneWay, Expr)
208208
EXPR(Tap, Expr)
209-
EXPR(Pack, Expr)
210209
UNCHECKED_EXPR(TypeJoin, Expr)
211210
LAST_EXPR(TypeJoin)
212211

lib/AST/ASTDumper.cpp

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2140,15 +2140,6 @@ class PrintExpr : public ExprVisitor<PrintExpr> {
21402140
}
21412141
PrintWithColorRAII(OS, ParenthesisColor) << ')';
21422142
}
2143-
void visitPackExpr(PackExpr *E) {
2144-
printCommon(E, "pack_expr");
2145-
2146-
for (unsigned i = 0, e = E->getNumElements(); i != e; ++i) {
2147-
OS << '\n';
2148-
printRec(E->getElement(i));
2149-
}
2150-
PrintWithColorRAII(OS, ParenthesisColor) << ')';
2151-
}
21522143
void visitArrayExpr(ArrayExpr *E) {
21532144
printCommon(E, "array_expr");
21542145
PrintWithColorRAII(OS, LiteralValueColor) << " initializer=";

lib/AST/ASTPrinter.cpp

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4583,9 +4583,6 @@ void PrintAST::visitTupleExpr(TupleExpr *expr) {
45834583
Printer << ")";
45844584
}
45854585

4586-
void PrintAST::visitPackExpr(PackExpr *expr) {
4587-
}
4588-
45894586
void PrintAST::visitTypeJoinExpr(TypeJoinExpr *expr) {
45904587
}
45914588

lib/AST/ASTWalker.cpp

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -625,16 +625,6 @@ class Traversal : public ASTVisitor<Traversal, Expr*, Stmt*,
625625
}
626626
return E;
627627
}
628-
Expr *visitPackExpr(PackExpr *E) {
629-
for (unsigned i = 0, e = E->getNumElements(); i != e; ++i)
630-
if (E->getElement(i)) {
631-
if (Expr *Elt = doIt(E->getElement(i)))
632-
E->setElement(i, Elt);
633-
else
634-
return nullptr;
635-
}
636-
return E;
637-
}
638628
Expr *visitSubscriptExpr(SubscriptExpr *E) {
639629
if (Expr *Base = doIt(E->getBase()))
640630
E->setBase(Base);

lib/AST/Expr.cpp

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -461,7 +461,6 @@ ConcreteDeclRef Expr::getReferencedDecl(bool stopAtParenExpr) const {
461461
NO_REFERENCE(KeyPathDot);
462462
PASS_THROUGH_REFERENCE(OneWay, getSubExpr);
463463
NO_REFERENCE(Tap);
464-
NO_REFERENCE(Pack);
465464
NO_REFERENCE(TypeJoin);
466465

467466
#undef SIMPLE_REFERENCE
@@ -810,7 +809,6 @@ bool Expr::canAppendPostfixExpression(bool appendingPostfixOperator) const {
810809
case ExprKind::UnresolvedPattern:
811810
case ExprKind::EditorPlaceholder:
812811
case ExprKind::KeyPathDot:
813-
case ExprKind::Pack:
814812
case ExprKind::TypeJoin:
815813
return false;
816814

@@ -981,7 +979,6 @@ bool Expr::isValidParentOfTypeExpr(Expr *typeExpr) const {
981979
case ExprKind::KeyPathDot:
982980
case ExprKind::OneWay:
983981
case ExprKind::Tap:
984-
case ExprKind::Pack:
985982
case ExprKind::TypeJoin:
986983
return false;
987984
}
@@ -2431,30 +2428,6 @@ RegexLiteralExpr::createParsed(ASTContext &ctx, SourceLoc loc,
24312428
/*implicit*/ false);
24322429
}
24332430

2434-
PackExpr::PackExpr(ArrayRef<Expr *> SubExprs, Type Ty)
2435-
: Expr(ExprKind::Pack, /*implicit*/ true, Ty) {
2436-
Bits.PackExpr.NumElements = SubExprs.size();
2437-
2438-
// Copy elements.
2439-
std::uninitialized_copy(SubExprs.begin(), SubExprs.end(),
2440-
getTrailingObjects<Expr *>());
2441-
}
2442-
2443-
PackExpr *PackExpr::create(ASTContext &ctx,
2444-
ArrayRef<Expr *> SubExprs,
2445-
Type Ty) {
2446-
assert(Ty->castTo<PackType>());
2447-
2448-
size_t size =
2449-
totalSizeToAlloc<Expr *>(SubExprs.size());
2450-
void *mem = ctx.Allocate(size, alignof(PackExpr));
2451-
return new (mem) PackExpr(SubExprs, Ty);
2452-
}
2453-
2454-
PackExpr *PackExpr::createEmpty(ASTContext &ctx) {
2455-
return create(ctx, {}, PackType::getEmpty(ctx));
2456-
}
2457-
24582431
TypeJoinExpr::TypeJoinExpr(DeclRefExpr *varRef, ArrayRef<Expr *> elements)
24592432
: Expr(ExprKind::TypeJoin, /*implicit=*/true, Type()), Var(varRef) {
24602433
assert(Var);

lib/SILGen/SILGenExpr.cpp

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -474,7 +474,6 @@ namespace {
474474
RValue visitCoerceExpr(CoerceExpr *E, SGFContext C);
475475
RValue visitUnderlyingToOpaqueExpr(UnderlyingToOpaqueExpr *E, SGFContext C);
476476
RValue visitTupleExpr(TupleExpr *E, SGFContext C);
477-
RValue visitPackExpr(PackExpr *E, SGFContext C);
478477
RValue visitMemberRefExpr(MemberRefExpr *E, SGFContext C);
479478
RValue visitDynamicMemberRefExpr(DynamicMemberRefExpr *E, SGFContext C);
480479
RValue visitDotSyntaxBaseIgnoredExpr(DotSyntaxBaseIgnoredExpr *E,
@@ -2302,10 +2301,6 @@ RValue RValueEmitter::visitTupleExpr(TupleExpr *E, SGFContext C) {
23022301
return result;
23032302
}
23042303

2305-
RValue RValueEmitter::visitPackExpr(PackExpr *E, SGFContext C) {
2306-
llvm_unreachable("Unimplemented!");
2307-
}
2308-
23092304
RValue RValueEmitter::visitMemberRefExpr(MemberRefExpr *e,
23102305
SGFContext resultCtx) {
23112306
assert(!e->getType()->is<LValueType>() &&

lib/Sema/CSApply.cpp

Lines changed: 1 addition & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -3591,10 +3591,6 @@ namespace {
35913591
return simplifyExprType(expr);
35923592
}
35933593

3594-
Expr *visitPackExpr(PackExpr *expr) {
3595-
return simplifyExprType(expr);
3596-
}
3597-
35983594
Expr *visitSubscriptExpr(SubscriptExpr *expr) {
35993595
auto *memberLocator =
36003596
cs.getConstraintLocator(expr, ConstraintLocator::SubscriptMember);
@@ -5851,57 +5847,7 @@ ArgumentList *ExprRewriter::coerceCallArguments(
58515847
const auto &param = params[paramIdx];
58525848
auto paramLabel = param.getLabel();
58535849

5854-
// Handle variadic generic parameters.
5855-
if (ctx.LangOpts.hasFeature(Feature::VariadicGenerics) &&
5856-
paramInfo.isVariadicGenericParameter(paramIdx)) {
5857-
assert(!param.isInOut());
5858-
5859-
SmallVector<Expr *, 4> variadicArgs;
5860-
5861-
// The first argument of this vararg parameter may have had a label;
5862-
// save its location.
5863-
auto &varargIndices = parameterBindings[paramIdx];
5864-
SourceLoc labelLoc;
5865-
if (!varargIndices.empty())
5866-
labelLoc = args->getLabelLoc(varargIndices[0]);
5867-
5868-
auto packExpansionType = param.getPlainType()->castTo<PackExpansionType>();
5869-
5870-
// Convert the arguments.
5871-
auto paramTuple = packExpansionType->getPatternType()->castTo<PackType>();
5872-
for (auto varargIdx : indices(varargIndices)) {
5873-
auto argIdx = varargIndices[varargIdx];
5874-
auto *arg = args->getExpr(argIdx);
5875-
auto argType = cs.getType(arg);
5876-
5877-
// If the argument type exactly matches, this just works.
5878-
auto paramTy = paramTuple->getElementType(varargIdx);
5879-
if (argType->isEqual(paramTy)) {
5880-
variadicArgs.push_back(arg);
5881-
continue;
5882-
}
5883-
5884-
// Convert the argument.
5885-
auto convertedArg = coerceToType(
5886-
arg, paramTy,
5887-
getArgLocator(argIdx, paramIdx, param.getParameterFlags()));
5888-
if (!convertedArg)
5889-
return nullptr;
5890-
5891-
// Add the converted argument.
5892-
variadicArgs.push_back(convertedArg);
5893-
}
5894-
5895-
// Collect them into a PackExpr.
5896-
auto *packExpr = PackExpr::create(ctx, variadicArgs, paramTuple);
5897-
packExpr->setType(paramTuple);
5898-
cs.cacheType(packExpr);
5899-
5900-
newArgs.push_back(Argument(labelLoc, paramLabel, packExpr));
5901-
continue;
5902-
}
5903-
5904-
// Handle plain variadic parameters.
5850+
// Handle variadic parameters.
59055851
if (param.isVariadic()) {
59065852
assert(!param.isInOut());
59075853

lib/Sema/CSGen.cpp

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1789,18 +1789,6 @@ namespace {
17891789
return TupleType::get(elements, CS.getASTContext());
17901790
}
17911791

1792-
Type visitPackExpr(PackExpr *expr) {
1793-
// The type of a pack expression is simply a pack of the types of
1794-
// its subexpressions.
1795-
SmallVector<Type, 4> elements;
1796-
elements.reserve(expr->getNumElements());
1797-
for (unsigned i = 0, n = expr->getNumElements(); i != n; ++i) {
1798-
elements.emplace_back(CS.getType(expr->getElement(i)));
1799-
}
1800-
1801-
return PackType::get(CS.getASTContext(), elements);
1802-
}
1803-
18041792
Type visitSubscriptExpr(SubscriptExpr *expr) {
18051793
ValueDecl *decl = nullptr;
18061794
if (expr->hasDecl()) {

0 commit comments

Comments
 (0)