Let the grammar accept unsigned integer constants

This commit is contained in:
Randy Heit 2013-09-10 21:44:32 -05:00
parent 33344201fa
commit 1b4851224e
2 changed files with 17 additions and 1 deletions

View File

@ -449,7 +449,7 @@ type_name(X) ::= DOT dottable_id(A).
* straight away.)
*/
vector_size(X) ::= . { X.Int = ZCC_Vector3; X.SourceLoc = stat->sc.GetMessageLine(); }
vector_size(X) ::= LT INTCONST(A) GT.
vector_size(X) ::= LT intconst(A) GT.
{
if (A.Int >= 2 && A.Int <= 4)
{
@ -462,6 +462,8 @@ vector_size(X) ::= LT INTCONST(A) GT.
}
X.SourceLoc = A.SourceLoc;
}
intconst(X) ::= INTCONST(A). { X = A; }
intconst(X) ::= UINTCONST(A). { X = A; }
/* Type names can also be used as identifiers in contexts where type names
* are not normally allowed. */
@ -1123,6 +1125,14 @@ constant(X) ::= INTCONST(A).
intconst->IntVal = A.Int;
X = intconst;
}
constant(X) ::= UINTCONST(A).
{
NEW_AST_NODE(ExprConstant, intconst, A);
intconst->Operation = PEX_ConstValue;
intconst->Type = TypeUInt32;
intconst->IntVal = A.Int;
X = intconst;
}
constant(X) ::= FLOATCONST(A).
{
NEW_AST_NODE(ExprConstant, floatconst, A);

View File

@ -140,6 +140,7 @@ static void InitTokenMap()
TOKENDEF (TK_Identifier, ZCC_IDENTIFIER);
TOKENDEF (TK_StringConst, ZCC_STRCONST);
TOKENDEF (TK_IntConst, ZCC_INTCONST);
TOKENDEF (TK_UIntConst, ZCC_UINTCONST);
TOKENDEF (TK_FloatConst, ZCC_FLOATCONST);
TOKENDEF (TK_NonWhitespace, ZCC_NWS);
}
@ -197,6 +198,11 @@ static void DoParse(const char *filename)
value.Int = sc.Number;
tokentype = ZCC_INTCONST;
}
else if (sc.TokenType == TK_UIntConst)
{
value.Int = sc.Number;
tokentype = ZCC_UINTCONST;
}
else if (sc.TokenType == TK_FloatConst)
{
value.Float = sc.Float;