aboutsummaryrefslogtreecommitdiff
path: root/gcc/d/dmd/parse.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/d/dmd/parse.c')
-rw-r--r--gcc/d/dmd/parse.c36
1 files changed, 20 insertions, 16 deletions
diff --git a/gcc/d/dmd/parse.c b/gcc/d/dmd/parse.c
index 7d858d7..e983501 100644
--- a/gcc/d/dmd/parse.c
+++ b/gcc/d/dmd/parse.c
@@ -1603,10 +1603,10 @@ Dsymbol *Parser::parseCtor(PrefixAttributes *pAttrs)
/* Just a regular constructor
*/
- int varargs;
+ VarArg varargs;
Parameters *parameters = parseParameters(&varargs);
stc = parsePostfix(stc, &udas);
- if (varargs != 0 || Parameter::dim(parameters) != 0)
+ if (varargs != VARARGnone || Parameter::dim(parameters) != 0)
{
if (stc & STCstatic)
error(loc, "constructor cannot be static");
@@ -1621,7 +1621,8 @@ Dsymbol *Parser::parseCtor(PrefixAttributes *pAttrs)
Expression *constraint = tpl ? parseConstraint() : NULL;
- Type *tf = new TypeFunction(parameters, NULL, varargs, linkage, stc); // RetrunType -> auto
+ Type *tf = new TypeFunction(ParameterList(parameters, varargs),
+ NULL, linkage, stc); // ReturnType -> auto
tf = tf->addSTC(stc);
CtorDeclaration *f = new CtorDeclaration(loc, Loc(), stc, tf);
@@ -1929,7 +1930,7 @@ Dsymbol *Parser::parseNew(PrefixAttributes *pAttrs)
nextToken();
- int varargs;
+ VarArg varargs;
Parameters *parameters = parseParameters(&varargs);
NewDeclaration *f = new NewDeclaration(loc, Loc(), stc, parameters, varargs);
if (pAttrs)
@@ -1951,9 +1952,9 @@ Dsymbol *Parser::parseDelete(PrefixAttributes *pAttrs)
nextToken();
- int varargs;
+ VarArg varargs;
Parameters *parameters = parseParameters(&varargs);
- if (varargs)
+ if (varargs != VARARGnone)
error("... not allowed in delete function parameter list");
DeleteDeclaration *f = new DeleteDeclaration(loc, Loc(), stc, parameters);
if (pAttrs)
@@ -1966,10 +1967,10 @@ Dsymbol *Parser::parseDelete(PrefixAttributes *pAttrs)
* Parse parameter list.
*/
-Parameters *Parser::parseParameters(int *pvarargs, TemplateParameters **tpl)
+Parameters *Parser::parseParameters(VarArg *pvarargs, TemplateParameters **tpl)
{
Parameters *parameters = new Parameters();
- int varargs = 0;
+ VarArg varargs = VARARGnone;
int hasdefault = 0;
check(TOKlparen);
@@ -1989,7 +1990,7 @@ Parameters *Parser::parseParameters(int *pvarargs, TemplateParameters **tpl)
break;
case TOKdotdotdot:
- varargs = 1;
+ varargs = VARARGvariadic;
nextToken();
break;
@@ -2076,7 +2077,7 @@ Parameters *Parser::parseParameters(int *pvarargs, TemplateParameters **tpl)
if (storageClass & (STCout | STCref))
error("variadic argument cannot be out or ref");
- varargs = 2;
+ varargs = VARARGtypesafe;
parameters->push(new Parameter(storageClass, at, ai, ae));
nextToken();
break;
@@ -3406,11 +3407,12 @@ Type *Parser::parseBasicType2(Type *t)
TOK save = token.value;
nextToken();
- int varargs;
+ VarArg varargs;
Parameters *parameters = parseParameters(&varargs);
StorageClass stc = parsePostfix(STCundefined, NULL);
- TypeFunction *tf = new TypeFunction(parameters, t, varargs, linkage, stc);
+ TypeFunction *tf = new TypeFunction(ParameterList(parameters, varargs),
+ t, linkage, stc);
if (stc & (STCconst | STCimmutable | STCshared | STCwild | STCreturn))
{
if (save == TOKfunction)
@@ -3572,14 +3574,15 @@ Type *Parser::parseDeclarator(Type *t, int *palt, Identifier **pident,
}
}
- int varargs;
+ VarArg varargs;
Parameters *parameters = parseParameters(&varargs);
/* Parse const/immutable/shared/inout/nothrow/pure/return postfix
*/
StorageClass stc = parsePostfix(storageClass, pudas);
// merge prefix storage classes
- Type *tf = new TypeFunction(parameters, t, varargs, linkage, stc);
+ Type *tf = new TypeFunction(ParameterList(parameters, varargs),
+ t, linkage, stc);
tf = tf->addSTC(stc);
if (pdisable)
*pdisable = stc & STCdisable ? 1 : 0;
@@ -4159,7 +4162,7 @@ Dsymbol *Parser::parseFunctionLiteral()
TemplateParameters *tpl = NULL;
Parameters *parameters = NULL;
- int varargs = 0;
+ VarArg varargs = VARARGnone;
Type *tret = NULL;
StorageClass stc = 0;
TOK save = TOKreserved;
@@ -4235,7 +4238,8 @@ Dsymbol *Parser::parseFunctionLiteral()
if (!parameters)
parameters = new Parameters();
- TypeFunction *tf = new TypeFunction(parameters, tret, varargs, linkage, stc);
+ TypeFunction *tf = new TypeFunction(ParameterList(parameters, varargs),
+ tret, linkage, stc);
tf = (TypeFunction *)tf->addSTC(stc);
FuncLiteralDeclaration *fd = new FuncLiteralDeclaration(loc, Loc(), tf, save, NULL);