diff --git a/dmd/expression.c b/dmd/expression.c index 5207288b..4914515c 100644 --- a/dmd/expression.c +++ b/dmd/expression.c @@ -5283,7 +5283,8 @@ Expression *AssertExp::semantic(Scope *sc) if (e1->isBool(FALSE)) { FuncDeclaration *fd = sc->parent->isFuncDeclaration(); - fd->hasReturnExp |= 4; + if (fd) + fd->hasReturnExp |= 4; if (!global.params.useAssert) { Expression *e = new HaltExp(loc); @@ -9697,6 +9698,14 @@ RemoveExp::RemoveExp(Loc loc, Expression *e1, Expression *e2) type = Type::tvoid; } +void RemoveExp::toCBuffer(OutBuffer *buf, HdrGenState *hgs) +{ + expToCBuffer(buf, hgs, e1, PREC_primary); + buf->writestring(".remove("); + expToCBuffer(buf, hgs, e2, PREC_assign); + buf->writestring(")"); +} + /************************************************************/ CmpExp::CmpExp(enum TOK op, Loc loc, Expression *e1, Expression *e2) diff --git a/dmd/expression.h b/dmd/expression.h index a540f792..c38dfdef 100644 --- a/dmd/expression.h +++ b/dmd/expression.h @@ -1806,6 +1806,7 @@ struct InExp : BinExp struct RemoveExp : BinExp { RemoveExp(Loc loc, Expression *e1, Expression *e2); + void toCBuffer(OutBuffer *buf, HdrGenState *hgs); #if IN_DMD elem *toElem(IRState *irs); #endif diff --git a/dmd/parse.c b/dmd/parse.c index 0db1d62e..f50b8799 100644 --- a/dmd/parse.c +++ b/dmd/parse.c @@ -5485,35 +5485,53 @@ void initPrecedence() precedence[TOKsuper] = PREC_primary; precedence[TOKint64] = PREC_primary; precedence[TOKfloat64] = PREC_primary; + precedence[TOKcomplex80] = PREC_primary; precedence[TOKnull] = PREC_primary; precedence[TOKstring] = PREC_primary; precedence[TOKarrayliteral] = PREC_primary; + precedence[TOKassocarrayliteral] = PREC_primary; +#if DMDV2 + precedence[TOKfile] = PREC_primary; + precedence[TOKline] = PREC_primary; +#endif precedence[TOKtypeid] = PREC_primary; precedence[TOKis] = PREC_primary; precedence[TOKassert] = PREC_primary; + precedence[TOKhalt] = PREC_primary; + precedence[TOKtemplate] = PREC_primary; + precedence[TOKdsymbol] = PREC_primary; precedence[TOKfunction] = PREC_primary; precedence[TOKvar] = PREC_primary; precedence[TOKsymoff] = PREC_primary; precedence[TOKstructliteral] = PREC_primary; precedence[TOKarraylength] = PREC_primary; + precedence[TOKremove] = PREC_primary; precedence[TOKtuple] = PREC_primary; #if DMDV2 precedence[TOKtraits] = PREC_primary; precedence[TOKdefault] = PREC_primary; + precedence[TOKoverloadset] = PREC_primary; #endif // post precedence[TOKdotti] = PREC_primary; precedence[TOKdot] = PREC_primary; precedence[TOKdottd] = PREC_primary; + precedence[TOKdotexp] = PREC_primary; + precedence[TOKdottype] = PREC_primary; // precedence[TOKarrow] = PREC_primary; precedence[TOKplusplus] = PREC_primary; precedence[TOKminusminus] = PREC_primary; +#if DMDV2 + precedence[TOKpreplusplus] = PREC_primary; + precedence[TOKpreminusminus] = PREC_primary; +#endif precedence[TOKcall] = PREC_primary; precedence[TOKslice] = PREC_primary; precedence[TOKarray] = PREC_primary; precedence[TOKindex] = PREC_primary; + precedence[TOKdelegate] = PREC_unary; precedence[TOKaddress] = PREC_unary; precedence[TOKstar] = PREC_unary; precedence[TOKneg] = PREC_unary; @@ -5523,8 +5541,13 @@ void initPrecedence() precedence[TOKtilde] = PREC_unary; precedence[TOKdelete] = PREC_unary; precedence[TOKnew] = PREC_unary; + precedence[TOKnewanonclass] = PREC_unary; precedence[TOKcast] = PREC_unary; +#if DMDV2 + precedence[TOKpow] = PREC_pow; +#endif + precedence[TOKmul] = PREC_mul; precedence[TOKdiv] = PREC_mul; precedence[TOKmod] = PREC_mul; @@ -5587,6 +5610,9 @@ void initPrecedence() precedence[TOKmulass] = PREC_assign; precedence[TOKdivass] = PREC_assign; precedence[TOKmodass] = PREC_assign; +#if DMDV2 + precedence[TOKpowass] = PREC_assign; +#endif precedence[TOKshlass] = PREC_assign; precedence[TOKshrass] = PREC_assign; precedence[TOKushrass] = PREC_assign;