Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
77 changes: 6 additions & 71 deletions compiler/src/dmd/astbase.d
Original file line number Diff line number Diff line change
Expand Up @@ -4605,11 +4605,7 @@ struct ASTBase
inout(IdentityExp) isIdentityExp() { return (op == EXP.identity || op == EXP.notIdentity) ? cast(typeof(return))this : null; }
inout(CondExp) isCondExp() { return op == EXP.question ? cast(typeof(return))this : null; }
inout(GenericExp) isGenericExp() { return op == EXP._Generic ? cast(typeof(return))this : null; }
inout(FileInitExp) isFileInitExp() { return (op == EXP.file || op == EXP.fileFullPath) ? cast(typeof(return))this : null; }
inout(LineInitExp) isLineInitExp() { return op == EXP.line ? cast(typeof(return))this : null; }
inout(ModuleInitExp) isModuleInitExp() { return op == EXP.moduleString ? cast(typeof(return))this : null; }
inout(FuncInitExp) isFuncInitExp() { return op == EXP.functionString ? cast(typeof(return))this : null; }
inout(PrettyFuncInitExp) isPrettyFuncInitExp() { return op == EXP.prettyFunction ? cast(typeof(return))this : null; }
inout(DefaultInitExp) isDefaultInitExp() { return op == EXP.defaultInit ? cast(typeof(return))this : null; }
inout(AssignExp) isConstructExp() { return op == EXP.construct ? cast(typeof(return))this : null; }
inout(AssignExp) isBlitExp() { return op == EXP.blit ? cast(typeof(return))this : null; }

Expand Down Expand Up @@ -5139,9 +5135,12 @@ struct ASTBase

extern (C++) class DefaultInitExp : Expression
{
final extern (D) this(Loc loc, EXP op, int size)
TOK tok; /// which special token this is

final extern (D) this(Loc loc, TOK tok)
{
super(loc, op, size);
super(loc, EXP.defaultInit, __traits(classInstanceSize, DefaultInitExp));
this.tok = tok;
}

override void accept(Visitor v)
Expand Down Expand Up @@ -5681,70 +5680,6 @@ struct ASTBase
}
}

extern (C++) final class FuncInitExp : DefaultInitExp
{
extern (D) this(Loc loc)
{
super(loc, EXP.functionString, __traits(classInstanceSize, FuncInitExp));
}

override void accept(Visitor v)
{
v.visit(this);
}
}

extern (C++) final class PrettyFuncInitExp : DefaultInitExp
{
extern (D) this(Loc loc)
{
super(loc, EXP.prettyFunction, __traits(classInstanceSize, PrettyFuncInitExp));
}

override void accept(Visitor v)
{
v.visit(this);
}
}

extern (C++) final class FileInitExp : DefaultInitExp
{
extern (D) this(Loc loc, EXP tok)
{
super(loc, tok, __traits(classInstanceSize, FileInitExp));
}

override void accept(Visitor v)
{
v.visit(this);
}
}

extern (C++) final class LineInitExp : DefaultInitExp
{
extern (D) this(Loc loc)
{
super(loc, EXP.line, __traits(classInstanceSize, LineInitExp));
}

override void accept(Visitor v)
{
v.visit(this);
}
}

extern (C++) final class ModuleInitExp : DefaultInitExp
{
extern (D) this(Loc loc)
{
super(loc, EXP.moduleString, __traits(classInstanceSize, ModuleInitExp));
}

override void accept(Visitor v)
{
v.visit(this);
}
}

extern (C++) final class CommaExp : BinExp
{
Expand Down
7 changes: 1 addition & 6 deletions compiler/src/dmd/dfa/fast/expression.d
Original file line number Diff line number Diff line change
Expand Up @@ -1549,12 +1549,7 @@ struct ExpressionWalker

case EXP.traits:
case EXP.overloadSet:
case EXP.line:
case EXP.file:
case EXP.fileFullPath:
case EXP.moduleString: // __MODULE__
case EXP.functionString: // __FUNCTION__
case EXP.prettyFunction: // __PRETTY_FUNCTION__
case EXP.defaultInit:

case EXP.voidExpression:
case EXP.cantExpression:
Expand Down
2 changes: 2 additions & 0 deletions compiler/src/dmd/dscope.d
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import dmd.errorsink;
import dmd.func;
import dmd.globals;
import dmd.identifier;
import dmd.location : Loc;
import dmd.root.rmem;
import dmd.statement;

Expand Down Expand Up @@ -145,6 +146,7 @@ extern (C++) struct Scope
Statement scontinue; /// enclosing statement that supports "continue"
ForeachStatement fes; /// if nested function for ForeachStatement, this is it
Scope* callsc; /// used for __FUNCTION__, __PRETTY_FUNCTION__ and __MODULE__
Loc callLoc; /// call-site location for __FILE__, __LINE__, and __FILE_FULL_PATH__
Dsymbol inunion; /// != null if processing members of a union
VarDeclaration lastVar; /// Previous symbol used to prevent goto-skips-init
ErrorSink eSink; /// sink for error messages
Expand Down
107 changes: 8 additions & 99 deletions compiler/src/dmd/expression.d
Original file line number Diff line number Diff line change
Expand Up @@ -451,15 +451,7 @@ extern (C++) abstract class Expression : ASTNode
inout(IdentityExp) isIdentityExp() { return (op == EXP.identity || op == EXP.notIdentity) ? cast(typeof(return))this : null; }
inout(CondExp) isCondExp() { return op == EXP.question ? cast(typeof(return))this : null; }
inout(GenericExp) isGenericExp() { return op == EXP._Generic ? cast(typeof(return))this : null; }
inout(DefaultInitExp) isDefaultInitExp() { return
(op == EXP.prettyFunction || op == EXP.functionString ||
op == EXP.line || op == EXP.moduleString ||
op == EXP.file || op == EXP.fileFullPath ) ? cast(typeof(return))this : null; }
inout(FileInitExp) isFileInitExp() { return (op == EXP.file || op == EXP.fileFullPath) ? cast(typeof(return))this : null; }
inout(LineInitExp) isLineInitExp() { return op == EXP.line ? cast(typeof(return))this : null; }
inout(ModuleInitExp) isModuleInitExp() { return op == EXP.moduleString ? cast(typeof(return))this : null; }
inout(FuncInitExp) isFuncInitExp() { return op == EXP.functionString ? cast(typeof(return))this : null; }
inout(PrettyFuncInitExp) isPrettyFuncInitExp() { return op == EXP.prettyFunction ? cast(typeof(return))this : null; }
inout(DefaultInitExp) isDefaultInitExp() { return op == EXP.defaultInit ? cast(typeof(return))this : null; }
inout(ObjcClassReferenceExp) isObjcClassReferenceExp() { return op == EXP.objcClassReference ? cast(typeof(return))this : null; }
inout(ClassReferenceExp) isClassReferenceExp() { return op == EXP.classReference ? cast(typeof(return))this : null; }
inout(ThrownExceptionExp) isThrownExceptionExp() { return op == EXP.thrownException ? cast(typeof(return))this : null; }
Expand Down Expand Up @@ -3791,100 +3783,22 @@ extern (C++) final class CondExp : BinExp
*/
extern (C++) class DefaultInitExp : Expression
{
/*************************
* Params:
* loc = location
* op = EXP.prettyFunction, EXP.functionString, EXP.moduleString,
* EXP.line, EXP.file, EXP.fileFullPath
*/
extern (D) this(Loc loc, EXP op) @safe
{
super(loc, op);
}

override void accept(Visitor v)
{
v.visit(this);
}
}

/***********************************************************
* The `__FILE__` token as a default argument
*/
extern (C++) final class FileInitExp : DefaultInitExp
{
extern (D) this(Loc loc, EXP tok) @safe
{
super(loc, tok);
}

override void accept(Visitor v)
{
v.visit(this);
}
}

/***********************************************************
* The `__LINE__` token as a default argument
*/
extern (C++) final class LineInitExp : DefaultInitExp
{
extern (D) this(Loc loc) @safe
{
super(loc, EXP.line);
}

override void accept(Visitor v)
{
v.visit(this);
}
}
TOK tok; /// which special token this is

/***********************************************************
* The `__MODULE__` token as a default argument
*/
extern (C++) final class ModuleInitExp : DefaultInitExp
{
extern (D) this(Loc loc) @safe
extern (D) this(Loc loc, TOK tok) @safe
{
super(loc, EXP.moduleString);
}

override void accept(Visitor v)
{
v.visit(this);
}
}

/***********************************************************
* The `__FUNCTION__` token as a default argument
*/
extern (C++) final class FuncInitExp : DefaultInitExp
{
extern (D) this(Loc loc) @safe
{
super(loc, EXP.functionString);
super(loc, EXP.defaultInit);
this.tok = tok;
}

override void accept(Visitor v)
{
v.visit(this);
}
}

/***********************************************************
* The `__PRETTY_FUNCTION__` token as a default argument
*/
extern (C++) final class PrettyFuncInitExp : DefaultInitExp
{
extern (D) this(Loc loc) @safe
{
super(loc, EXP.prettyFunction);
}

override void accept(Visitor v)
override Expression syntaxCopy()
{
v.visit(this);
return new DefaultInitExp(loc, tok);
}
}

Expand Down Expand Up @@ -4221,12 +4135,7 @@ private immutable ubyte[EXP.max+1] expSize = [
EXP.scope_: __traits(classInstanceSize, ScopeExp),
EXP.traits: __traits(classInstanceSize, TraitsExp),
EXP.overloadSet: __traits(classInstanceSize, OverExp),
EXP.line: __traits(classInstanceSize, LineInitExp),
EXP.file: __traits(classInstanceSize, FileInitExp),
EXP.fileFullPath: __traits(classInstanceSize, FileInitExp),
EXP.moduleString: __traits(classInstanceSize, ModuleInitExp),
EXP.functionString: __traits(classInstanceSize, FuncInitExp),
EXP.prettyFunction: __traits(classInstanceSize, PrettyFuncInitExp),
EXP.defaultInit: __traits(classInstanceSize, DefaultInitExp),
EXP.pow: __traits(classInstanceSize, PowExp),
EXP.powAssign: __traits(classInstanceSize, PowAssignExp),
EXP.vector: __traits(classInstanceSize, VectorExp),
Expand Down
37 changes: 2 additions & 35 deletions compiler/src/dmd/expression.h
Original file line number Diff line number Diff line change
Expand Up @@ -217,11 +217,6 @@ class Expression : public ASTNode
CondExp* isCondExp();
GenericExp* isGenericExp();
DefaultInitExp* isDefaultInitExp();
FileInitExp* isFileInitExp();
LineInitExp* isLineInitExp();
ModuleInitExp* isModuleInitExp();
FuncInitExp* isFuncInitExp();
PrettyFuncInitExp* isPrettyFuncInitExp();
ClassReferenceExp* isClassReferenceExp();
ThrownExceptionExp* isThrownExceptionExp();
UnaExp* isUnaExp();
Expand Down Expand Up @@ -1263,37 +1258,9 @@ class GenericExp final : Expression
class DefaultInitExp : public Expression
{
public:
TOK tok;
void accept(Visitor *v) override { v->visit(this); }
};

class FileInitExp final : public DefaultInitExp
{
public:
void accept(Visitor *v) override { v->visit(this); }
};

class LineInitExp final : public DefaultInitExp
{
public:
void accept(Visitor *v) override { v->visit(this); }
};

class ModuleInitExp final : public DefaultInitExp
{
public:
void accept(Visitor *v) override { v->visit(this); }
};

class FuncInitExp final : public DefaultInitExp
{
public:
void accept(Visitor *v) override { v->visit(this); }
};

class PrettyFuncInitExp final : public DefaultInitExp
{
public:
void accept(Visitor *v) override { v->visit(this); }
Expression* syntaxCopy() override;
};

/****************************************************************/
Expand Down
Loading
Loading