shithub: scc

Download patch

ref: aabab2cdfb2cd0dc24ad55e4fff5d7f7ccd0de03
parent: 87fe94c89193c60d778a364c67f8885b58df3dec
author: Roberto E. Vargas Caballero <[email protected]>
date: Sun Mar 9 12:24:11 EDT 2014

Use a TQUALIFIER token

This token help us in order to know that the next token is the
name of a qualifier specifier, so it is easier to detect a declaration.

--- a/decl.c
+++ b/decl.c
@@ -178,8 +178,8 @@
 {
 	for (;; next()) {
 		switch (yytoken) {
-		case CONST:  case VOLATILE:
-			qlf = qualifier(qlf, yytoken);
+		case TQUALIFIER:
+			qlf = qualifier(qlf, yyval->c);
 			break;
 		case STORAGE:
 			store = storage(store, yyval->c);
--- a/lex.c
+++ b/lex.c
@@ -129,7 +129,7 @@
 		{"_Complex", TYPE, COMPLEX},
 		{"case", CASE, CASE},
 		{"char", TYPE, CHAR},
-		{"const", CONST, CONST},
+		{"const", TQUALIFIER, CONST},
 		{"continue", CONTINUE, CONTINUE},
 		{"default", DEFAULT, DEFAULT},
 		{"do", DO, DO},
@@ -157,7 +157,7 @@
 		{"union", UNION, UNION},
 		{"unsigned", TYPE, UNSIGNED},
 		{"void", TYPE, VOID},
-		{"volatile", VOLATILE, VOLATILE},
+		{"volatile", TQUALIFIER, VOLATILE},
 		{"while", WHILE, WHILE},
 		{NULL, 0, 0},
 	};
--- a/tokens.h
+++ b/tokens.h
@@ -15,7 +15,7 @@
 	/* storage specifier */
 	TYPEDEF, EXTERN, STATIC, AUTO, REGISTER, STORAGE,
 	/* type qualifier */
-	VOLATILE, CONST, RESTRICT,
+	VOLATILE, CONST, RESTRICT, TQUALIFIER,
 	/* sign specifier */
 	UNSIGNED, SIGNED,
 	/* other tokens */