Skip to content

Commit 22383a6

Browse files
committed
Collapse DefaultInit subclasses
1 parent ec7ccf4 commit 22383a6

File tree

11 files changed

+89
-420
lines changed

11 files changed

+89
-420
lines changed

compiler/src/dmd/astbase.d

Lines changed: 6 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -4605,11 +4605,7 @@ struct ASTBase
46054605
inout(IdentityExp) isIdentityExp() { return (op == EXP.identity || op == EXP.notIdentity) ? cast(typeof(return))this : null; }
46064606
inout(CondExp) isCondExp() { return op == EXP.question ? cast(typeof(return))this : null; }
46074607
inout(GenericExp) isGenericExp() { return op == EXP._Generic ? cast(typeof(return))this : null; }
4608-
inout(FileInitExp) isFileInitExp() { return (op == EXP.file || op == EXP.fileFullPath) ? cast(typeof(return))this : null; }
4609-
inout(LineInitExp) isLineInitExp() { return op == EXP.line ? cast(typeof(return))this : null; }
4610-
inout(ModuleInitExp) isModuleInitExp() { return op == EXP.moduleString ? cast(typeof(return))this : null; }
4611-
inout(FuncInitExp) isFuncInitExp() { return op == EXP.functionString ? cast(typeof(return))this : null; }
4612-
inout(PrettyFuncInitExp) isPrettyFuncInitExp() { return op == EXP.prettyFunction ? cast(typeof(return))this : null; }
4608+
inout(DefaultInitExp) isDefaultInitExp() { return op == EXP.defaultInit ? cast(typeof(return))this : null; }
46134609
inout(AssignExp) isConstructExp() { return op == EXP.construct ? cast(typeof(return))this : null; }
46144610
inout(AssignExp) isBlitExp() { return op == EXP.blit ? cast(typeof(return))this : null; }
46154611

@@ -5139,9 +5135,12 @@ struct ASTBase
51395135

51405136
extern (C++) class DefaultInitExp : Expression
51415137
{
5142-
final extern (D) this(Loc loc, EXP op, int size)
5138+
TOK tok; /// which special token this is
5139+
5140+
final extern (D) this(Loc loc, TOK tok)
51435141
{
5144-
super(loc, op, size);
5142+
super(loc, EXP.defaultInit, __traits(classInstanceSize, DefaultInitExp));
5143+
this.tok = tok;
51455144
}
51465145

51475146
override void accept(Visitor v)
@@ -5681,70 +5680,6 @@ struct ASTBase
56815680
}
56825681
}
56835682

5684-
extern (C++) final class FuncInitExp : DefaultInitExp
5685-
{
5686-
extern (D) this(Loc loc)
5687-
{
5688-
super(loc, EXP.functionString, __traits(classInstanceSize, FuncInitExp));
5689-
}
5690-
5691-
override void accept(Visitor v)
5692-
{
5693-
v.visit(this);
5694-
}
5695-
}
5696-
5697-
extern (C++) final class PrettyFuncInitExp : DefaultInitExp
5698-
{
5699-
extern (D) this(Loc loc)
5700-
{
5701-
super(loc, EXP.prettyFunction, __traits(classInstanceSize, PrettyFuncInitExp));
5702-
}
5703-
5704-
override void accept(Visitor v)
5705-
{
5706-
v.visit(this);
5707-
}
5708-
}
5709-
5710-
extern (C++) final class FileInitExp : DefaultInitExp
5711-
{
5712-
extern (D) this(Loc loc, EXP tok)
5713-
{
5714-
super(loc, tok, __traits(classInstanceSize, FileInitExp));
5715-
}
5716-
5717-
override void accept(Visitor v)
5718-
{
5719-
v.visit(this);
5720-
}
5721-
}
5722-
5723-
extern (C++) final class LineInitExp : DefaultInitExp
5724-
{
5725-
extern (D) this(Loc loc)
5726-
{
5727-
super(loc, EXP.line, __traits(classInstanceSize, LineInitExp));
5728-
}
5729-
5730-
override void accept(Visitor v)
5731-
{
5732-
v.visit(this);
5733-
}
5734-
}
5735-
5736-
extern (C++) final class ModuleInitExp : DefaultInitExp
5737-
{
5738-
extern (D) this(Loc loc)
5739-
{
5740-
super(loc, EXP.moduleString, __traits(classInstanceSize, ModuleInitExp));
5741-
}
5742-
5743-
override void accept(Visitor v)
5744-
{
5745-
v.visit(this);
5746-
}
5747-
}
57485683

57495684
extern (C++) final class CommaExp : BinExp
57505685
{

compiler/src/dmd/dfa/fast/expression.d

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1549,12 +1549,7 @@ struct ExpressionWalker
15491549

15501550
case EXP.traits:
15511551
case EXP.overloadSet:
1552-
case EXP.line:
1553-
case EXP.file:
1554-
case EXP.fileFullPath:
1555-
case EXP.moduleString: // __MODULE__
1556-
case EXP.functionString: // __FUNCTION__
1557-
case EXP.prettyFunction: // __PRETTY_FUNCTION__
1552+
case EXP.defaultInit:
15581553

15591554
case EXP.voidExpression:
15601555
case EXP.cantExpression:

compiler/src/dmd/expression.d

Lines changed: 7 additions & 128 deletions
Original file line numberDiff line numberDiff line change
@@ -451,15 +451,7 @@ extern (C++) abstract class Expression : ASTNode
451451
inout(IdentityExp) isIdentityExp() { return (op == EXP.identity || op == EXP.notIdentity) ? cast(typeof(return))this : null; }
452452
inout(CondExp) isCondExp() { return op == EXP.question ? cast(typeof(return))this : null; }
453453
inout(GenericExp) isGenericExp() { return op == EXP._Generic ? cast(typeof(return))this : null; }
454-
inout(DefaultInitExp) isDefaultInitExp() { return
455-
(op == EXP.prettyFunction || op == EXP.functionString ||
456-
op == EXP.line || op == EXP.moduleString ||
457-
op == EXP.file || op == EXP.fileFullPath ) ? cast(typeof(return))this : null; }
458-
inout(FileInitExp) isFileInitExp() { return (op == EXP.file || op == EXP.fileFullPath) ? cast(typeof(return))this : null; }
459-
inout(LineInitExp) isLineInitExp() { return op == EXP.line ? cast(typeof(return))this : null; }
460-
inout(ModuleInitExp) isModuleInitExp() { return op == EXP.moduleString ? cast(typeof(return))this : null; }
461-
inout(FuncInitExp) isFuncInitExp() { return op == EXP.functionString ? cast(typeof(return))this : null; }
462-
inout(PrettyFuncInitExp) isPrettyFuncInitExp() { return op == EXP.prettyFunction ? cast(typeof(return))this : null; }
454+
inout(DefaultInitExp) isDefaultInitExp() { return op == EXP.defaultInit ? cast(typeof(return))this : null; }
463455
inout(ObjcClassReferenceExp) isObjcClassReferenceExp() { return op == EXP.objcClassReference ? cast(typeof(return))this : null; }
464456
inout(ClassReferenceExp) isClassReferenceExp() { return op == EXP.classReference ? cast(typeof(return))this : null; }
465457
inout(ThrownExceptionExp) isThrownExceptionExp() { return op == EXP.thrownException ? cast(typeof(return))this : null; }
@@ -3791,120 +3783,12 @@ extern (C++) final class CondExp : BinExp
37913783
*/
37923784
extern (C++) class DefaultInitExp : Expression
37933785
{
3794-
/*************************
3795-
* Params:
3796-
* loc = location
3797-
* op = EXP.prettyFunction, EXP.functionString, EXP.moduleString,
3798-
* EXP.line, EXP.file, EXP.fileFullPath
3799-
*/
3800-
extern (D) this(Loc loc, EXP op) @safe
3801-
{
3802-
super(loc, op);
3803-
}
3804-
3805-
override void accept(Visitor v)
3806-
{
3807-
v.visit(this);
3808-
}
3809-
3810-
override Expression syntaxCopy()
3811-
{
3812-
return new DefaultInitExp(loc, op);
3813-
}
3814-
}
3815-
3816-
/***********************************************************
3817-
* The `__FILE__` token as a default argument
3818-
*/
3819-
extern (C++) final class FileInitExp : DefaultInitExp
3820-
{
3821-
extern (D) this(Loc loc, EXP tok) @safe
3822-
{
3823-
super(loc, tok);
3824-
}
3825-
3826-
override void accept(Visitor v)
3827-
{
3828-
v.visit(this);
3829-
}
3830-
3831-
override Expression syntaxCopy()
3832-
{
3833-
return new FileInitExp(loc, op);
3834-
}
3835-
}
3836-
3837-
/***********************************************************
3838-
* The `__LINE__` token as a default argument
3839-
*/
3840-
extern (C++) final class LineInitExp : DefaultInitExp
3841-
{
3842-
extern (D) this(Loc loc) @safe
3843-
{
3844-
super(loc, EXP.line);
3845-
}
3846-
3847-
override void accept(Visitor v)
3848-
{
3849-
v.visit(this);
3850-
}
3786+
TOK tok; /// which special token this is
38513787

3852-
override Expression syntaxCopy()
3853-
{
3854-
return new LineInitExp(loc);
3855-
}
3856-
}
3857-
3858-
/***********************************************************
3859-
* The `__MODULE__` token as a default argument
3860-
*/
3861-
extern (C++) final class ModuleInitExp : DefaultInitExp
3862-
{
3863-
extern (D) this(Loc loc) @safe
3864-
{
3865-
super(loc, EXP.moduleString);
3866-
}
3867-
3868-
override void accept(Visitor v)
3869-
{
3870-
v.visit(this);
3871-
}
3872-
3873-
override Expression syntaxCopy()
3874-
{
3875-
return new ModuleInitExp(loc);
3876-
}
3877-
}
3878-
3879-
/***********************************************************
3880-
* The `__FUNCTION__` token as a default argument
3881-
*/
3882-
extern (C++) final class FuncInitExp : DefaultInitExp
3883-
{
3884-
extern (D) this(Loc loc) @safe
3885-
{
3886-
super(loc, EXP.functionString);
3887-
}
3888-
3889-
override void accept(Visitor v)
3890-
{
3891-
v.visit(this);
3892-
}
3893-
3894-
override Expression syntaxCopy()
3788+
extern (D) this(Loc loc, TOK tok) @safe
38953789
{
3896-
return new FuncInitExp(loc);
3897-
}
3898-
}
3899-
3900-
/***********************************************************
3901-
* The `__PRETTY_FUNCTION__` token as a default argument
3902-
*/
3903-
extern (C++) final class PrettyFuncInitExp : DefaultInitExp
3904-
{
3905-
extern (D) this(Loc loc) @safe
3906-
{
3907-
super(loc, EXP.prettyFunction);
3790+
super(loc, EXP.defaultInit);
3791+
this.tok = tok;
39083792
}
39093793

39103794
override void accept(Visitor v)
@@ -3914,7 +3798,7 @@ extern (C++) final class PrettyFuncInitExp : DefaultInitExp
39143798

39153799
override Expression syntaxCopy()
39163800
{
3917-
return new PrettyFuncInitExp(loc);
3801+
return new DefaultInitExp(loc, tok);
39183802
}
39193803
}
39203804

@@ -4251,12 +4135,7 @@ private immutable ubyte[EXP.max+1] expSize = [
42514135
EXP.scope_: __traits(classInstanceSize, ScopeExp),
42524136
EXP.traits: __traits(classInstanceSize, TraitsExp),
42534137
EXP.overloadSet: __traits(classInstanceSize, OverExp),
4254-
EXP.line: __traits(classInstanceSize, LineInitExp),
4255-
EXP.file: __traits(classInstanceSize, FileInitExp),
4256-
EXP.fileFullPath: __traits(classInstanceSize, FileInitExp),
4257-
EXP.moduleString: __traits(classInstanceSize, ModuleInitExp),
4258-
EXP.functionString: __traits(classInstanceSize, FuncInitExp),
4259-
EXP.prettyFunction: __traits(classInstanceSize, PrettyFuncInitExp),
4138+
EXP.defaultInit: __traits(classInstanceSize, DefaultInitExp),
42604139
EXP.pow: __traits(classInstanceSize, PowExp),
42614140
EXP.powAssign: __traits(classInstanceSize, PowAssignExp),
42624141
EXP.vector: __traits(classInstanceSize, VectorExp),

compiler/src/dmd/expression.h

Lines changed: 1 addition & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -217,11 +217,6 @@ class Expression : public ASTNode
217217
CondExp* isCondExp();
218218
GenericExp* isGenericExp();
219219
DefaultInitExp* isDefaultInitExp();
220-
FileInitExp* isFileInitExp();
221-
LineInitExp* isLineInitExp();
222-
ModuleInitExp* isModuleInitExp();
223-
FuncInitExp* isFuncInitExp();
224-
PrettyFuncInitExp* isPrettyFuncInitExp();
225220
ClassReferenceExp* isClassReferenceExp();
226221
ThrownExceptionExp* isThrownExceptionExp();
227222
UnaExp* isUnaExp();
@@ -1263,41 +1258,7 @@ class GenericExp final : Expression
12631258
class DefaultInitExp : public Expression
12641259
{
12651260
public:
1266-
void accept(Visitor *v) override { v->visit(this); }
1267-
Expression* syntaxCopy() override;
1268-
};
1269-
1270-
class FileInitExp final : public DefaultInitExp
1271-
{
1272-
public:
1273-
void accept(Visitor *v) override { v->visit(this); }
1274-
Expression* syntaxCopy() override;
1275-
};
1276-
1277-
class LineInitExp final : public DefaultInitExp
1278-
{
1279-
public:
1280-
void accept(Visitor *v) override { v->visit(this); }
1281-
Expression* syntaxCopy() override;
1282-
};
1283-
1284-
class ModuleInitExp final : public DefaultInitExp
1285-
{
1286-
public:
1287-
void accept(Visitor *v) override { v->visit(this); }
1288-
Expression* syntaxCopy() override;
1289-
};
1290-
1291-
class FuncInitExp final : public DefaultInitExp
1292-
{
1293-
public:
1294-
void accept(Visitor *v) override { v->visit(this); }
1295-
Expression* syntaxCopy() override;
1296-
};
1297-
1298-
class PrettyFuncInitExp final : public DefaultInitExp
1299-
{
1300-
public:
1261+
TOK tok;
13011262
void accept(Visitor *v) override { v->visit(this); }
13021263
Expression* syntaxCopy() override;
13031264
};

0 commit comments

Comments
 (0)