Give u8-prefixed strings "array of unsigned char" type in C23.

This is a change from C11/C17, where they were arrays of char.
This commit is contained in:
Stephen Heumann 2024-08-30 13:45:20 -05:00
parent 0fe9424373
commit 1db26a88ad
3 changed files with 30 additions and 7 deletions

View File

@ -18,7 +18,7 @@ uses CCommon, MM, Scanner, Symbol, CGI;
{$segment 'HEADER'}
const
symFileVersion = 48; {version number of .sym file format}
symFileVersion = 49; {version number of .sym file format}
var
inhibitHeader: boolean; {should .sym includes be blocked?}
@ -1021,6 +1021,8 @@ procedure EndInclude {chPtr: ptr};
WriteByte(18)
else if tp = utf32StringTypePtr then
WriteByte(19)
else if tp = utf8StringTypePtr then
WriteByte(20)
else if tp^.saveDisp <> 0 then begin
WriteByte(1);
WriteLong(tp^.saveDisp);
@ -1800,6 +1802,7 @@ var
17: tp := uShortPtr;
18: tp := utf16StringTypePtr;
19: tp := utf32StringTypePtr;
20: tp := utf8StringTypePtr;
otherwise: begin
PurgeSymbols;

View File

@ -2078,8 +2078,11 @@ var
end;
pointerType:
if (etype = stringTypePtr) or (etype = utf16StringTypePtr)
or (etype = utf32StringTypePtr) then begin
if (etype = stringTypePtr)
or (etype = utf8StringTypePtr)
or (etype = utf16StringTypePtr)
or (etype = utf32StringTypePtr)
then begin
iPtr^.isConstant := true;
iPtr^.basetype := ccPointer;
iPtr^.pval := 0;

View File

@ -47,6 +47,8 @@
{ charPtrPtr - pointer to type record for char * }
{ vaInfoPtr - pointer to type record for internal va info type }
{ stringTypePtr - pointer to the base type for string literals }
{ utf8StringTypePtr - pointer to the base type for UTF-8 }
{ string literals (used in C23 or later) }
{ utf16StringTypePtr - pointer to the base type for UTF-16 }
{ string literals }
{ utf32StringTypePtr - pointer to the base type for UTF-32 }
@ -95,9 +97,9 @@ var
{base types}
charPtr,sCharPtr,uCharPtr,shortPtr,uShortPtr,intPtr,uIntPtr,int32Ptr,
uInt32Ptr,longPtr,uLongPtr,longLongPtr,uLongLongPtr,boolPtr,
floatPtr,doublePtr,compPtr,extendedPtr,stringTypePtr,utf16StringTypePtr,
utf32StringTypePtr,voidPtr,voidPtrPtr,charPtrPtr,vaInfoPtr,constCharPtr,
defaultStruct: typePtr;
floatPtr,doublePtr,compPtr,extendedPtr,stringTypePtr,utf8StringTypePtr,
utf16StringTypePtr,utf32StringTypePtr,voidPtr,voidPtrPtr,charPtrPtr,
vaInfoPtr,constCharPtr,defaultStruct: typePtr;
{---------------------------------------------------------------}
@ -1897,6 +1899,15 @@ with stringTypePtr^ do begin
aType := charPtr;
elements := 0;
end; {with}
new(utf8StringTypePtr); {UTF-8 string constant type (C23+)}
with utf8StringTypePtr^ do begin
size := 0;
saveDisp := 0;
qualifiers := [];
kind := arrayType;
aType := uCharPtr;
elements := 0;
end; {with}
new(utf16StringTypePtr); {UTF-16 string constant type}
with utf16StringTypePtr^ do begin
size := 0;
@ -2592,8 +2603,14 @@ function StringType{prefix: charStrPrefixEnum): typePtr};
{ prefix - the prefix }
begin {StringType}
if prefix in [prefix_none,prefix_u8] then
if prefix = prefix_none then
StringType := stringTypePtr
else if prefix = prefix_u8 then begin
if cStd < c23 then
StringType := stringTypePtr
else
StringType := utf8StringTypePtr;
end {else if}
else if prefix in [prefix_u16,prefix_L] then
StringType := utf16StringTypePtr
else