Allow c-style arrays
This commit is contained in:
parent
25f0d93b90
commit
9753afcb54
|
@ -1176,6 +1176,8 @@ public:
|
||||||
}
|
}
|
||||||
/** */ Token name;
|
/** */ Token name;
|
||||||
/** */ Initializer initializer;
|
/** */ Initializer initializer;
|
||||||
|
/** */ TypeSuffix[] cstyle;
|
||||||
|
|
||||||
mixin OpEquals;
|
mixin OpEquals;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2152,6 +2154,8 @@ public:
|
||||||
/** */ Token name;
|
/** */ Token name;
|
||||||
/** */ bool vararg;
|
/** */ bool vararg;
|
||||||
/** */ AssignExpression default_;
|
/** */ AssignExpression default_;
|
||||||
|
/** */ TypeSuffix[] cstyle;
|
||||||
|
|
||||||
mixin OpEquals;
|
mixin OpEquals;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1910,11 +1910,20 @@ class ClassFive(A, B) : Super if (someTest()) {}}c;
|
||||||
auto id = expect(tok!"identifier");
|
auto id = expect(tok!"identifier");
|
||||||
if (id is null) return null;
|
if (id is null) return null;
|
||||||
node.name = *id;
|
node.name = *id;
|
||||||
if (currentIsOneOf(tok!"[", tok!"*"))
|
if (currentIs(tok!"[")) // dmd doesn't accept pointer after identifier
|
||||||
{
|
{
|
||||||
error("C-style variable declarations are not supported.");
|
warn("C-style array declaration.");
|
||||||
|
TypeSuffix[] typeSuffixes;
|
||||||
|
while (moreTokens() && currentIs(tok!"["))
|
||||||
|
{
|
||||||
|
auto suffix = parseTypeSuffix();
|
||||||
|
if (suffix !is null)
|
||||||
|
typeSuffixes ~= suffix;
|
||||||
|
else
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
node.cstyle = ownArray(typeSuffixes);
|
||||||
|
}
|
||||||
if (currentIs(tok!"="))
|
if (currentIs(tok!"="))
|
||||||
{
|
{
|
||||||
advance();
|
advance();
|
||||||
|
@ -3932,7 +3941,7 @@ invariant() foo();
|
||||||
* Parses a Parameter
|
* Parses a Parameter
|
||||||
*
|
*
|
||||||
* $(GRAMMAR $(RULEDEF parameter):
|
* $(GRAMMAR $(RULEDEF parameter):
|
||||||
* $(RULE parameterAttribute)* $(RULE type) ($(LITERAL Identifier)? $(LITERAL '...') | ($(LITERAL Identifier)? ($(LITERAL '=') $(RULE assignExpression))?))?
|
* $(RULE parameterAttribute)* $(RULE type) (($(LITERAL Identifier) $(RULE typeSuffix)*)? $(LITERAL '...') | ($(LITERAL Identifier)? ($(LITERAL '=') $(RULE assignExpression))?))?
|
||||||
* ;)
|
* ;)
|
||||||
*/
|
*/
|
||||||
Parameter parseParameter()
|
Parameter parseParameter()
|
||||||
|
@ -3964,6 +3973,19 @@ invariant() foo();
|
||||||
advance();
|
advance();
|
||||||
node.default_ = parseAssignExpression();
|
node.default_ = parseAssignExpression();
|
||||||
}
|
}
|
||||||
|
else if (currentIs(tok!"["))
|
||||||
|
{
|
||||||
|
TypeSuffix[] typeSuffixes;
|
||||||
|
while(moreTokens() && currentIs(tok!"["))
|
||||||
|
{
|
||||||
|
auto suffix = parseTypeSuffix();
|
||||||
|
if (suffix !is null)
|
||||||
|
typeSuffixes ~= suffix;
|
||||||
|
else
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
node.cstyle = ownArray(typeSuffixes);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (currentIs(tok!"..."))
|
else if (currentIs(tok!"..."))
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue