Skip to content

Upgrade frontend & libs to v2.112 #4949

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 117 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
117 commits
Select commit Hold shift + click to select a range
4809f0e
Accept __rvalue attribute on ref functions; which will force the resu…
TurkeyMan Mar 10, 2025
a5806ae
Fix dlang/dmd!17481 - free ctors before returning (dlang/dmd!20975)
Albert24GG Mar 11, 2025
5180c2b
Extracted Condition.include to visitor in expressionsem (dlang/dmd!20…
MatthewQiu-5 Mar 11, 2025
8afc932
fixup `mtype.h` for dlang/dmd!20946 (dlang/dmd!20971)
thewilsonator Mar 12, 2025
d24493c
Fixes the invariant not called on extern(C++) classes issue (dlang/dm…
abulgit Mar 13, 2025
0f7e85c
Fix dlang/dmd!20318 Compiler should explain why implicit conversion t…
abulgit Mar 14, 2025
5730e23
Reset global Loc table in initDMD (dlang/dmd!20995)
dkorpel Mar 15, 2025
ec3a534
Improve Fix dlang/dmd!20318 Compiler should explain why implicit conv…
dkorpel Mar 15, 2025
d5b8de8
Fix dlang/dmd!20075 - Improve error message for immutable constructor…
abulgit Mar 16, 2025
3e6745c
Don't parse lambda as UDA without parentheses (dlang/dmd!21009)
pbackus Mar 17, 2025
889d655
Fix : Improved error message on override mismatch (dlang/dmd!21023)
abulgit Mar 18, 2025
208cd23
Refactor: Remove Unused Hooks in dinterpret.d (dlang/dmd!21022)
shivangshukla7020 Mar 18, 2025
9fc5bad
Move ImportC enum semantic to importc.d (dlang/dmd!21027)
dkorpel Mar 18, 2025
915ec9d
Fix: Prevent ICE on final switch forward referencing its enum (dlang/…
abulgit Mar 20, 2025
99d1d37
Merge stable (dlang/dmd!21048)
dkorpel Mar 21, 2025
db58c84
Remove redundant GC allocation for _d_newarraymTX.dims (dlang/dmd!21051)
dkorpel Mar 21, 2025
2c09d76
Fix dlang/dmd!21052 - Missing @nogc check for enum variable initializ…
dkorpel Mar 21, 2025
d21a842
Fix dlang/dmd!21054 - No location for array literal sliced from init …
dkorpel Mar 22, 2025
c1f5ece
Require adjacent auto ref return as well (dlang/dmd!21061)
dkorpel Mar 22, 2025
dd4dd90
Use errorSupplemental for long errors with 2 sentences (dlang/dmd!21060)
dkorpel Mar 22, 2025
d086a10
Refactor checkGC (dlang/dmd!21058)
dkorpel Mar 22, 2025
cede53d
Don't raise "cannot return non-void" on Terror (dlang/dmd!21028)
dkorpel Mar 22, 2025
5cd3d0e
Fix dlang/dmd!20901: can escape stack pointer through indexed array l…
dkorpel Mar 23, 2025
b64b1d2
Fix hidden base constructor supplemental message (dlang/dmd!21069)
ntrel Mar 23, 2025
b8c8277
Refactored memcpy calls to D slices (dlang/dmd!21062)
AbhayPratap05 Mar 23, 2025
e436dd2
[druntime] core.int128: Don't support/test invalid shift-by values >=…
kinke Mar 24, 2025
4b80c0e
[druntime] core.int128: Extract nested udivmod128_64 as udivmod overload
kinke Mar 24, 2025
46f184e
[druntime] core.int128: Optimize new udivmod overload via inline asm …
kinke Mar 24, 2025
7e58a76
[druntime] core.int128: Add 64-bit mul() overload and optimize via in…
kinke Mar 25, 2025
8b6c788
Fix dlang#18262 - Fix expected error message for enum auto-increment …
solo-source Mar 25, 2025
50a7c14
Improve 'no property' error suggestions for pointers (dlang/dmd!21087)
dkorpel Mar 26, 2025
a057d3e
Fix error when struct initializer isn't accepted (dlang/dmd!21086)
ntrel Mar 26, 2025
5ab21f7
Optimize Loc Lookups (dlang/dmd!21088)
abulgit Mar 26, 2025
b6f5e77
size_t was wrong, sign extension omitted (dlang/dmd!21093)
WalterBright Mar 27, 2025
dc1be4d
Improve fix: dlang/dmd!20867 ICE on final switch forward referencing …
abulgit Mar 28, 2025
8f710e1
Turn macro translations into template functions (dlang/dmd!21108)
dkorpel Mar 28, 2025
46333a8
Fix dlang/dmd!21105: Is-expressions should not generate unnecessary c…
rainers Mar 29, 2025
6c00ee1
Fix dlang/dmd!21024 - Optimize x^^c expressions (dlang/dmd!21082) (dl…
dkorpel Mar 29, 2025
7489ac0
pow: Ensure side effects are evaluated in e1^^0 rewrite
ibuclaw Mar 29, 2025
24e3c4a
merge stable (dlang/dmd!21127)
dkorpel Mar 31, 2025
2d9a48a
Improve error message when cl.exe is missing on Windows (dlang/dmd!21…
solo-source Mar 31, 2025
f6fdb90
Extracted ClassDeclaration.isAbstract to dsymbolsem (dlang/dmd!21131)
MatthewQiu-5 Apr 2, 2025
b470998
add exe2.c exe3.c Import C test files (dlang/dmd!21146)
WalterBright Apr 4, 2025
732278f
Extracted AggregateDeclaration.finalizeSize into a visitor in dsymbol…
MatthewQiu-5 Apr 5, 2025
ee7b950
dmd: Remove all public C++ functions (dlang/dmd!21149)
ibuclaw Apr 5, 2025
817b253
Improve override suggestions to exclude final methods (dlang/dmd!21138)
abulgit Apr 7, 2025
36071f8
Moved the _isZeroInit function out from dstruct.d into dsymbolsem.d (…
nybzmr Apr 7, 2025
1a5d3da
Moved OverDeclaration.isUnique to funcsem (dlang/dmd!21174)
MatthewQiu-5 Apr 8, 2025
f40fe8b
Extracted Dsymbol.hasPointers to visitor in dsymbolsem (dlang/dmd!21140)
MatthewQiu-5 Apr 8, 2025
1222542
Fix dlang/dmd!21150 - ImportC: alignment value expected, not _Alignof…
drpriver Apr 9, 2025
6e4276a
ImportC: can't access members in static array (dlang/dmd!21185)
drpriver Apr 9, 2025
8209885
ImportC: improve error message for size_t (dlang/dmd!21187)
drpriver Apr 9, 2025
28dff4f
ImportC: allow `_Alignof expression` (dlang/dmd!21181)
drpriver Apr 9, 2025
38da1d3
Fix 20334: ImportC: enums created from string literal #defines don’t …
drpriver Apr 10, 2025
69afcee
ImportC: va_arg fails in working C code (dlang/dmd!21186)
drpriver Apr 10, 2025
62ba6c2
[NFC] outline class function semantic analysis out of `funcDeclaratio…
thewilsonator Apr 11, 2025
3261620
Merge remote-tracking branch 'origin/stable'
kinke Apr 10, 2025
cac6f1f
Merge remote-tracking branch 'origin/stable'
kinke Apr 12, 2025
945d2ae
druntime: add support for musl RISCV64 (dlang/dmd!21213)
fossdd Apr 12, 2025
31ea5b9
Merge pull request dlang/dmd!21202 from kinke/merge_stable
kinke Apr 12, 2025
3f3cd80
Fix dlang/dmd!21210 - ImportC: Initializing struct containing array w…
drpriver Apr 12, 2025
605cadf
fix dlang/dmd!21161 placement new fails on default-init struct (dlang…
WalterBright Apr 12, 2025
732ddbf
ImportC: Fix interaction of aligned and packed structs (dlang/dmd!21204)
drpriver Apr 12, 2025
7418e51
Changed author name to new one (dlang/dmd!21217)
EmilyCSh Apr 13, 2025
16f7cea
Fix 18127 - ImportC: redeclaration of struct in different translation…
drpriver Apr 14, 2025
51dab5b
Report correct location for undefined identifiers in function return …
abulgit Apr 14, 2025
701b955
Fix 21225: ImportC: macro interpreted as an enum conflicts with funct…
drpriver Apr 14, 2025
4482b13
Add Testcases For other Fixed issues (dlang/dmd!21231)
abulgit Apr 14, 2025
ee16898
Fix dlang/dmd!20499 - [ImportC] typedef struct with name as a pointer…
drpriver Apr 15, 2025
5b8a3e8
dcast.d: Improve pointer conversion error messages (dlang/dmd!21221)
AbhayPratap05 Apr 15, 2025
cfa2737
Templatize `_d_arraysetcapacity` hook (dlang/dmd!21143)
Albert24GG Apr 15, 2025
4381109
Moved _foreach and indirect dep getLocalClasses from dmodule to dsymb…
MatthewQiu-5 Apr 15, 2025
dbbbf9a
Moved VarDeclaration.checkNestedReference to funcsem (dlang/dmd!21237)
MatthewQiu-5 Apr 15, 2025
e9fb1c0
Moved Dsymbol.oneMembers to dsymbolsem (dlang/dmd!21238)
MatthewQiu-5 Apr 15, 2025
a95a151
Fix dlang/dmd!20502 - importc: macro conflicts with struct of same na…
drpriver Apr 15, 2025
199a6ed
Fix dlang/dmd!21241 - ImportC: wrong static function called after lin…
drpriver Apr 16, 2025
35733d7
fix dlang/dmd!21203 Placement new does not count as initialization (d…
WalterBright Apr 16, 2025
1bb5626
Fix error location for binary operations to point at operator instead…
abulgit Apr 17, 2025
f23bddb
Fix wrong 'not an lvalue' error when assigning to sequence (dlang/dmd…
ntrel Apr 18, 2025
2a9a339
Fix dlang/dmd!21267: ImportC: `__forceinline` ignored
drpriver Apr 19, 2025
5593c11
Fix dlang/dmd!21271 - ImportC: incorrect compatibility macro for __pr…
drpriver Apr 19, 2025
fa40f63
Template function named argument error messages
abulgit Apr 20, 2025
ad82e9e
druntime: Move syscall bindings in perf_event to own module
ibuclaw Apr 14, 2025
2344c0f
Fix dlang/dmd!21298 - Missing string literal for gcc asm not always d…
ibuclaw Apr 25, 2025
a08064c
dmd.dmodule: Fix typo in addDeferredSemantic3 deduplication logic
VPanteleev-S7 Apr 27, 2025
ad10614
Use internal bit flag for deferred semantics deduplication
VPanteleev-S7 Apr 27, 2025
4796f2a
Fix dlang/dmd!20855: -v command line switch should show import sources
dkorpel Feb 15, 2025
dffe7c6
Fix dlang/dmd!21317 : Wrong Location for error messages
Ay1nDas Apr 27, 2025
346f28a
Document risks of the `-nothrow` flag (dlang/dmd!21316)
dkorpel Apr 30, 2025
f88e7ac
Fix dlang/dmd!21280 - Add `__NR_getrandom` aka `SYS_getrandom`
0xEAB Apr 25, 2025
1404be2
Templatized arraysetlength{,i}T
shivangshukla7020 Mar 31, 2025
6d9d0e0
Merge remote-tracking branch 'upstream/master' into stable
dkorpel May 2, 2025
85c43b1
Fix hasNames rename after merging master into stable
dkorpel May 2, 2025
6870aaf
Fix C++ header regression after dlang/dmd!21297
kinke May 6, 2025
c31789b
fix issue dlang/dmd!21382: CodeView: final class functions are marked…
rainers May 16, 2025
69332a5
fix issue dlang/dmd!21384: function arguments are shown in the wrong …
rainers May 17, 2025
22dce4c
[stable] Fix dlang/dmd!21359 - Merge more types in `substWildTo()` (d…
kinke May 19, 2025
4615d72
Don't merge function types with unknown return type
kinke May 6, 2025
6622d5c
Fix issue dlang/dmd!21397 - Refcounting with Throwable is unsound (dl…
schveiguy May 22, 2025
c935535
fix dlang/dmd!21406: generating header with debug condition crashes c…
rainers May 26, 2025
15b603e
fix dlang/dmd!21414: `__rvalue` must be `@system`
tgehr May 27, 2025
3a73855
fix dlang/dmd!21416: `rvalue` ignored on call to `ref` function
tgehr May 27, 2025
21bdb8c
[stable] Try to fix dlang/dmd!21331 (dlang/dmd!21343)
kinke Jun 4, 2025
cdf4692
Merge remote-tracking branch 'origin/dmd-rewrite-stable' into merge-2…
kinke Jun 7, 2025
1b81435
Bump LDC version, frontend version, Phobos
kinke Jun 7, 2025
9b2a80d
[little merge-fixes wrt. now free-standing functions]
kinke Jun 7, 2025
d0996c9
Minimally adapt 2 new compiler tests for LDC
kinke Jun 7, 2025
06f566d
[eagerly fix little upstream druntime regressions]
kinke Jun 7, 2025
9d11450
core.internal.array.capacity: Fix compile-error regressions on non-x8…
kinke Jun 7, 2025
65cf2b6
windows druntime/shared test: avoid spurious failures by building to …
kinke Jun 7, 2025
59d3d80
Merge remote-tracking branch 'origin/dmd-rewrite-stable' into merge-2…
kinke Jun 8, 2025
b4d04ce
core.checkedint: Optimize mulu() via x86 inline assembly
kinke Jun 8, 2025
d1abd66
druntime: Avoid duplicate inline-asm optimizations in array helpers, …
kinke Jun 8, 2025
88dad84
Remove now-defunct LDC-specific set-array-length optimization
kinke Jun 14, 2025
fd4b0ca
Adapt runnable/testpdb.d extensions for LDC
kinke Jun 16, 2025
31dac3a
Adapt new runnable/test21241.d for LDC
kinke Jun 16, 2025
f2ad34d
FreeBSD: Fix C assert runtime function signature
kinke Jun 16, 2025
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
4 changes: 2 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -121,9 +121,9 @@ include(GetLinuxDistribution)
#

# Version information
set(LDC_VERSION "1.41.0") # May be overridden by git hash tag
set(LDC_VERSION "1.42.0") # May be overridden by git hash tag
set(DMDFE_MAJOR_VERSION 2)
set(DMDFE_MINOR_VERSION 111)
set(DMDFE_MINOR_VERSION 112)
set(DMDFE_PATCH_VERSION 0)

set(DMD_VERSION ${DMDFE_MAJOR_VERSION}.${DMDFE_MINOR_VERSION}.${DMDFE_PATCH_VERSION})
Expand Down
2 changes: 0 additions & 2 deletions dmd/aggregate.d
Original file line number Diff line number Diff line change
Expand Up @@ -187,8 +187,6 @@ extern (C++) abstract class AggregateDeclaration : ScopeDsymbol
return fields.length - isNested() - (vthis2 !is null);
}

abstract void finalizeSize();

override final uinteger_t size(Loc loc)
{
//printf("+AggregateDeclaration::size() %s, scope = %p, sizeok = %d\n", toChars(), _scope, sizeok);
Expand Down
6 changes: 1 addition & 5 deletions dmd/aggregate.h
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,6 @@ class AggregateDeclaration : public ScopeDsymbol
Sizeok sizeok; // set when structsize contains valid data

virtual Scope *newScope(Scope *sc);
virtual void finalizeSize() = 0;
uinteger_t size(Loc loc) override final;
Type *getType() override final;
bool isDeprecated() const override final; // is aggregate deprecated?
Expand Down Expand Up @@ -174,7 +173,6 @@ class StructDeclaration : public AggregateDeclaration
static StructDeclaration *create(Loc loc, Identifier *id, bool inObject);
StructDeclaration *syntaxCopy(Dsymbol *s) override;
const char *kind() const override;
void finalizeSize() override final;
bool isPOD();
bool zeroInit() const; // !=0 if initialize with 0 fill
bool zeroInit(bool v);
Expand All @@ -200,7 +198,7 @@ class StructDeclaration : public AggregateDeclaration

unsigned numArgTypes() const;
Type *argType(unsigned index);
bool hasRegularCtor(bool checkDisabled = false);
bool hasRegularCtor(bool ignoreDisabled = false);
};

class UnionDeclaration final : public StructDeclaration
Expand Down Expand Up @@ -293,13 +291,11 @@ class ClassDeclaration : public AggregateDeclaration
virtual bool isBaseOf(ClassDeclaration *cd, int *poffset);

bool isBaseInfoComplete();
void finalizeSize() override;
bool hasMonitor();
bool isCOMclass() const;
virtual bool isCOMinterface() const;
bool isCPPclass() const;
virtual bool isCPPinterface() const;
bool isAbstract();
virtual int vtblOffset() const;
const char *kind() const override;

Expand Down
5 changes: 0 additions & 5 deletions dmd/attrib.d
Original file line number Diff line number Diff line change
Expand Up @@ -110,11 +110,6 @@ extern (C++) abstract class AttribDeclaration : Dsymbol
return "attribute";
}

override final bool hasPointers()
{
return this.include(null).foreachDsymbol( (s) { return s.hasPointers(); } ) != 0;
}

/****************************************
*/
override final void addObjcSymbols(ClassDeclarations* classes, ClassDeclarations* categories)
Expand Down
1 change: 0 additions & 1 deletion dmd/attrib.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ class AttribDeclaration : public Dsymbol
public:
Dsymbols *decl; // array of Dsymbol's
const char *kind() const override;
bool hasPointers() override final;
void accept(Visitor *v) override { v->visit(this); }
};

Expand Down
9 changes: 7 additions & 2 deletions dmd/cli.d
Original file line number Diff line number Diff line change
Expand Up @@ -664,8 +664,13 @@ dmd -cov -unittest myprog.d
),
Option("nothrow",
"assume no Exceptions will be thrown",
`Turns off generation of exception stack unwinding code, enables
more efficient code for RAII objects.`,
"Turns off generation of exception stack unwinding code, enables
more efficient code for RAII objects. Note: this doesn't change
function mangling, so it is possible to link `-nothrow` code with
code that throws Exceptions, which can result in undefined behavior
without any protection from the type system. Prefer the `nothrow`
function attribute for partial disabling of Exceptions instead,
and only use this flag to globally disable Exceptions.",
),
Option("O",
"optimize",
Expand Down
116 changes: 2 additions & 114 deletions dmd/cond.d
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ import dmd.dscope;
import dmd.dsymbol;
import dmd.errors;
import dmd.expression;
import dmd.expressionsem : evalStaticCondition;
import dmd.globals;
import dmd.identifier;
import dmd.location;
Expand Down Expand Up @@ -71,8 +70,6 @@ extern (C++) abstract class Condition : ASTNode

abstract Condition syntaxCopy();

abstract int include(Scope* sc);

inout(DebugCondition) isDebugCondition() inout
{
return null;
Expand Down Expand Up @@ -324,39 +321,6 @@ extern (C++) final class DebugCondition : DVCondition
super(loc, mod, ident);
}

override int include(Scope* sc)
{
//printf("DebugCondition::include() level = %d, debuglevel = %d\n", level, global.params.debuglevel);
if (inc != Include.notComputed)
{
return inc == Include.yes;
}
inc = Include.no;
bool definedInModule = false;
if (ident)
{
if (mod.debugids && findCondition(*mod.debugids, ident))
{
inc = Include.yes;
definedInModule = true;
}
else if (findCondition(global.debugids, ident))
inc = Include.yes;
else
{
if (!mod.debugidsNot)
mod.debugidsNot = new Identifiers();
mod.debugidsNot.push(ident);
}
}
else if (global.params.debugEnabled)
inc = Include.yes;

if (!definedInModule)
printDepsConditional(sc, this, "depsDebug ");
return (inc == Include.yes);
}

override inout(DebugCondition) isDebugCondition() inout
{
return this;
Expand Down Expand Up @@ -390,7 +354,7 @@ extern (C++) final class VersionCondition : DVCondition
* Returns:
* `true` if it is reserved, `false` otherwise
*/
extern(D) private static bool isReserved(const(char)[] ident) @safe
extern(D) public static bool isReserved(const(char)[] ident) @safe
{
// This list doesn't include "D_*" versions, see the last return
switch (ident)
Expand Down Expand Up @@ -599,41 +563,6 @@ extern (C++) final class VersionCondition : DVCondition
super(loc, mod, ident);
}

override int include(Scope* sc)
{
//printf("VersionCondition::include() level = %d, versionlevel = %d\n", level, global.params.versionlevel);
//if (ident) printf("\tident = '%s'\n", ident.toChars());
if (inc != Include.notComputed)
{
return inc == Include.yes;
}

inc = Include.no;
bool definedInModule = false;
if (ident)
{
if (mod.versionids && findCondition(*mod.versionids, ident))
{
inc = Include.yes;
definedInModule = true;
}
else if (findCondition(global.versionids, ident))
inc = Include.yes;
else
{
if (!mod.versionidsNot)
mod.versionidsNot = new Identifiers();
mod.versionidsNot.push(ident);
}
}
if (!definedInModule &&
(!ident || (!isReserved(ident.toString()) && ident != Id._unittest && ident != Id._assert)))
{
printDepsConditional(sc, this, "depsVersion ");
}
return (inc == Include.yes);
}

override inout(VersionCondition) isVersionCondition() inout
{
return this;
Expand Down Expand Up @@ -662,47 +591,6 @@ extern (C++) final class StaticIfCondition : Condition
return new StaticIfCondition(loc, exp.syntaxCopy());
}

override int include(Scope* sc)
{
// printf("StaticIfCondition::include(sc = %p) this=%p inc = %d\n", sc, this, inc);

int errorReturn()
{
if (!global.gag)
inc = Include.no; // so we don't see the error message again
return 0;
}

if (inc != Include.notComputed)
{
return inc == Include.yes;
}

if (!sc)
{
error(loc, "`static if` conditional cannot be at global scope");
inc = Include.no;
return 0;
}

import dmd.staticcond;
bool errors;

bool result = evalStaticCondition(sc, exp, exp, errors);

// Prevent repeated condition evaluation.
// See: fail_compilation/fail7815.d
if (inc != Include.notComputed)
return (inc == Include.yes);
if (errors)
return errorReturn();
if (result)
inc = Include.yes;
else
inc = Include.no;
return (inc == Include.yes);
}

override void accept(Visitor v)
{
v.visit(this);
Expand Down Expand Up @@ -734,7 +622,7 @@ bool findCondition(ref Identifiers ids, Identifier ident) @safe nothrow pure
}

// Helper for printing dependency information
private void printDepsConditional(Scope* sc, DVCondition condition, const(char)[] depType)
public void printDepsConditional(Scope* sc, DVCondition condition, const(char)[] depType)
{
if (!global.params.moduleDeps.buffer || global.params.moduleDeps.name)
return;
Expand Down
4 changes: 0 additions & 4 deletions dmd/cond.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@ class Condition : public ASTNode
DYNCAST dyncast() const override final { return DYNCAST_CONDITION; }

virtual Condition *syntaxCopy() = 0;
virtual int include(Scope *sc) = 0;
virtual DebugCondition *isDebugCondition() { return nullptr; }
virtual VersionCondition *isVersionCondition() { return nullptr; }
void accept(Visitor *v) override { v->visit(this); }
Expand Down Expand Up @@ -70,7 +69,6 @@ class DebugCondition final : public DVCondition
public:
static void addGlobalIdent(const char *ident);

int include(Scope *sc) override;
void accept(Visitor *v) override { v->visit(this); }
};

Expand All @@ -80,7 +78,6 @@ class VersionCondition final : public DVCondition
static void addGlobalIdent(const char *ident);
static void addPredefinedGlobalIdent(const char *ident);

int include(Scope *sc) override;
void accept(Visitor *v) override { v->visit(this); }
};

Expand All @@ -90,6 +87,5 @@ class StaticIfCondition final : public Condition
Expression *exp;

StaticIfCondition *syntaxCopy() override;
int include(Scope *sc) override;
void accept(Visitor *v) override { v->visit(this); }
};
Loading