mirror of
https://github.com/byteworksinc/ORCA-C.git
synced 2025-03-06 06:29:57 +00:00
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:
parent
0fe9424373
commit
1db26a88ad
@ -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;
|
||||
|
@ -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;
|
||||
|
25
Symbol.pas
25
Symbol.pas
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user