Recognize the new keywords from C99 and C11 as such.

Specifically, the following will now be tokenized as keywords:

_Alignas
_Alignof
_Atomic
_Bool
_Complex
_Generic
_Imaginary
_Noreturn
_Static_assert
_Thread_local
restrict

('inline' was also added as a standard keyword in C99, but ORCA/C already treated it as such.)

The parser currently has no support for any of these keywords, so for now errors will still be generated if they are used, but this is a first step toward adding support for them.
This commit is contained in:
Stephen Heumann 2020-01-03 22:47:53 -06:00
parent 9030052616
commit 0184e3db7b
6 changed files with 104 additions and 62 deletions

View File

@ -158,14 +158,16 @@ type
intconst,uintconst,longconst,ulongconst,doubleconst,
stringconst,
{reserved words}
_Alignassy,_Alignofsy,_Atomicsy,_Boolsy,_Complexsy,
_Genericsy,_Imaginarysy,_Noreturnsy,_Static_assertsy,_Thread_localsy,
autosy,asmsy,breaksy,casesy,charsy,
continuesy,constsy,compsy,defaultsy,dosy,
doublesy,elsesy,enumsy,externsy,extendedsy,
floatsy,forsy,gotosy,ifsy,intsy,
inlinesy,longsy,pascalsy,registersy,returnsy,
shortsy,sizeofsy,staticsy,structsy,switchsy,
segmentsy,signedsy,typedefsy,unionsy,unsignedsy,
voidsy,volatilesy,whilesy,
inlinesy,longsy,pascalsy,registersy,restrictsy,
returnsy,shortsy,sizeofsy,staticsy,structsy,
switchsy,segmentsy,signedsy,typedefsy,unionsy,
unsignedsy,voidsy,volatilesy,whilesy,
{reserved symbols}
excch,percentch,carotch,andch,asteriskch,
minusch,plusch,eqch,tildech,barch,

View File

@ -18,7 +18,7 @@ uses CCommon, MM, Scanner, Symbol, CGI;
{$segment 'SCANNER'}
const
symFileVersion = 3; {version number of .sym file format}
symFileVersion = 4; {version number of .sym file format}
var
inhibitHeader: boolean; {should .sym includes be blocked?}

View File

@ -723,14 +723,16 @@ case token.kind of
write('"');
end;
_Alignassy,_Alignofsy,_Atomicsy,_Boolsy,_Complexsy,
_Genericsy,_Imaginarysy,_Noreturnsy,_Static_assertsy,_Thread_localsy,
autosy,asmsy,breaksy,casesy,charsy,
continuesy,constsy,compsy,defaultsy,dosy,
doublesy,elsesy,enumsy,externsy,extendedsy,
floatsy,forsy,gotosy,ifsy,intsy,
inlinesy,longsy,pascalsy,registersy,returnsy,
shortsy,sizeofsy,staticsy,structsy,switchsy,
segmentsy,signedsy,typedefsy,unionsy,unsignedsy,
voidsy,volatilesy,whilesy:
inlinesy,longsy,pascalsy,registersy,restrictsy,
returnsy,shortsy,sizeofsy,staticsy,structsy,
switchsy,segmentsy,signedsy,typedefsy,unionsy,
unsignedsy,voidsy,volatilesy,whilesy:
write(reservedWords[token.kind]);
tildech,questionch,lparench,rparench,lbrackch,rbrackch,lbracech,
@ -3641,9 +3643,9 @@ if expandMacros then {handle macro expansions}
end;
end; {if}
{see if it's a reserved word}
if workString[1] in ['a'..'g','i','l','p','r'..'w'] then
for rword := wordHash[ord(workString[1])-ord('a')] to
pred(wordHash[ord(succ(workString[1]))-ord('a')]) do
if workString[1] in ['_','a'..'g','i','l','p','r'..'w'] then
for rword := wordHash[ord(workString[1])-ord('_')] to
pred(wordHash[ord(succ(workString[1]))-ord('_')]) do
if reservedWords[rword] = workString then begin
token.kind := rword;
token.class := reservedWord;

130
Table.asm
View File

@ -286,14 +286,16 @@ charSym start single character symbols
enum (intconst,uintconst,longconst,ulongconst,doubleconst)
enum stringconst
! reserved words
enum (_Alignassy,_Alignofsy,_Atomicsy,_Boolsy,_Complexsy)
enum (_Genericsy,_Imaginarysy,_Noreturnsy,_Static_assertsy,_Thread_localsy)
enum (autosy,asmsy,breaksy,casesy,charsy)
enum (continuesy,constsy,compsy,defaultsy,dosy)
enum (doublesy,elsesy,enumsy,externsy,extendedsy)
enum (floatsy,forsy,gotosy,ifsy,intsy)
enum (inlinesy,longsy,pascalsy,registersy,returnsy)
enum (shortsy,sizeofsy,staticsy,structsy,switchsy)
enum (segmentsy,signedsy,typedefsy,unionsy,unsignedsy)
enum (voidsy,volatilesy,whilesy)
enum (inlinesy,longsy,pascalsy,registersy,restrictsy)
enum (returnsy,shortsy,sizeofsy,staticsy,structsy)
enum (switchsy,segmentsy,signedsy,typedefsy,unionsy)
enum (unsignedsy,voidsy,volatilesy,whilesy)
! reserved symbols
enum (excch,percentch,carotch,andch,asteriskch)
enum (minusch,plusch,eqch,tildech,barch)
@ -355,6 +357,16 @@ icp start in comming priority for expression
dc i1'200' ulongconst
dc i1'200' doubleconst
dc i1'200' stringconst
dc i1'200' _Alignassy
dc i1'200' _Alignofsy
dc i1'200' _Atomicsy
dc i1'200' _Boolsy
dc i1'200' _Complexsy
dc i1'200' _Genericsy
dc i1'200' _Imaginarysy
dc i1'200' _Noreturnsy
dc i1'200' _Static_assertsy
dc i1'200' _Thread_localsy
dc i1'200' autosy
dc i1'200' asmsy
dc i1'200' breaksy
@ -379,6 +391,7 @@ icp start in comming priority for expression
dc i1'200' longsy
dc i1'200' pascalsy
dc i1'200' registersy
dc i1'200' restrictsy
dc i1'200' returnsy
dc i1'200' shortsy
dc i1'16' sizeofsy
@ -509,6 +522,16 @@ isp start in stack priority for expression
dc i1'0' ulongconst
dc i1'0' doubleconst
dc i1'0' stringconst
dc i1'0' _Alignassy
dc i1'0' _Alignofsy
dc i1'0' _Atomicsy
dc i1'0' _Boolsy
dc i1'0' _Complexsy
dc i1'0' _Genericsy
dc i1'0' _Imaginarysy
dc i1'0' _Noreturnsy
dc i1'0' _Static_assertsy
dc i1'0' _Thread_localsy
dc i1'0' autosy
dc i1'0' asmsy
dc i1'0' breaksy
@ -533,6 +556,7 @@ isp start in stack priority for expression
dc i1'0' longsy
dc i1'0' pascalsy
dc i1'0' registersy
dc i1'0' restrictsy
dc i1'0' returnsy
dc i1'0' shortsy
dc i1'16' sizeofsy
@ -798,44 +822,55 @@ nopcodes start
end
reservedWords start reserved word names
str8 auto
str8 asm
str8 break
str8 case
str8 char
str8 continue
str8 const
str8 comp
str8 default
str8 do
str8 double
str8 else
str8 enum
str8 extern
str8 extended
str8 float
str8 for
str8 goto
str8 if
str8 int
str8 inline
str8 long
str8 pascal
str8 register
str8 return
str8 short
str8 sizeof
str8 static
str8 struct
str8 switch
str8 segment
str8 signed
str8 typedef
str8 union
str8 unsigned
str8 void
str8 volatile
str8 while
str14 _Alignas
str14 _Alignof
str14 _Atomic
str14 _Bool
str14 _Complex
str14 _Generic
str14 _Imaginary
str14 _Noreturn
str14 _Static_assert
str14 _Thread_local
str14 auto
str14 asm
str14 break
str14 case
str14 char
str14 continue
str14 const
str14 comp
str14 default
str14 do
str14 double
str14 else
str14 enum
str14 extern
str14 extended
str14 float
str14 for
str14 goto
str14 if
str14 int
str14 inline
str14 long
str14 pascal
str14 register
str14 restrict
str14 return
str14 short
str14 sizeof
str14 static
str14 struct
str14 switch
str14 segment
str14 signed
str14 typedef
str14 union
str14 unsigned
str14 void
str14 volatile
str14 while
end
ropcodes start
@ -860,15 +895,18 @@ wordHash start reserved word hash table
enum (intconst,uintconst,longconst,ulongconst,doubleconst)
enum stringconst
! reserved words
enum (_Alignassy,_Alignofsy,_Atomicsy,_Boolsy,_Complexsy)
enum (_Genericsy,_Imaginarysy,_Noreturnsy,_Static_assertsy,_Thread_localsy)
enum (autosy,asmsy,breaksy,casesy,charsy)
enum (continuesy,constsy,compsy,defaultsy,dosy)
enum (doublesy,elsesy,enumsy,externsy,extendedsy)
enum (floatsy,forsy,gotosy,ifsy,intsy)
enum (inlinesy,longsy,pascalsy,registersy,returnsy)
enum (shortsy,sizeofsy,staticsy,structsy,switchsy)
enum (segmentsy,signedsy,typedefsy,unionsy,unsignedsy)
enum (voidsy,volatilesy,whilesy,succwhilesy)
enum (inlinesy,longsy,pascalsy,registersy,restrictsy)
enum (returnsy,shortsy,sizeofsy,staticsy,structsy)
enum (switchsy,segmentsy,signedsy,typedefsy,unionsy)
enum (unsignedsy,voidsy,volatilesy,whilesy,succwhilesy)
dc i'_Alignassy,autosy'
dc i'autosy,breaksy,casesy,defaultsy,elsesy,floatsy'
dc i'gotosy,ifsy,ifsy,longsy,longsy,longsy'
dc i'pascalsy,pascalsy,pascalsy,pascalsy,registersy,registersy'

View File

@ -17,8 +17,8 @@
MEND
MACRO
&LAB STR8 &STR
&LAB STR14 &STR
&LAB DC I1'L:A&SYSCNT'
A&SYSCNT DC C'&STR'
DS 8-L:A&SYSCNT
DS 14-L:A&SYSCNT
MEND

View File

@ -20,8 +20,8 @@ var
{----------------}
charKinds: array[minChar..maxChar] of charEnum; {character kinds}
charSym: array[minChar..maxChar] of tokenEnum; {symbols for single char symbols}
reservedWords: array[autosy..whilesy] of string[8]; {reserved word strings}
wordHash: array[0..23] of tokenEnum; {for hashing reserved words}
reservedWords: array[_Alignassy..whilesy] of string[14]; {reserved word strings}
wordHash: array[0..25] of tokenEnum; {for hashing reserved words}
{from ASM.PAS}
{------------}