1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-06-02 00:41:42 +00:00

Implemented C99 compatible union initializer method, using .member= syntax...

(cherry picked from commit ef62f80b2b693aa92bcbdfb873bad5f995b4b6ff)
This commit is contained in:
Flight_Control 2023-04-03 08:38:16 +02:00
parent 51623c3657
commit 9db2d9b960

View File

@ -169,14 +169,21 @@ public class Initializers {
for(int i = 0; i < structInitNeedSize; i++) {
Variable memberDef = null;
RValue memberValue = valueIt.next();
String memberUnion = ((ValueStructList)valueList).getMember(memberValue);
if(memberUnion != null) {
while(memberDefIt.hasNext()) {
String memberUnionName = ((ValueStructList)valueList).getMember(memberValue);
if(memberUnionName != null) {
boolean found = false;
while (memberDefIt.hasNext()) {
memberDef = memberDefIt.next();
if (memberDef.getLocalName().contentEquals(memberUnion.toString())) {
if (memberDef.getLocalName().contentEquals(memberUnionName)) {
found = true;
break;
}
}
if(!found)
throw new CompileError(
"Union initializer cannot find member field " + memberUnionName + "\n" +
" Union initializer: " + valueList.toString(program),
source);
} else {
memberDef = memberDefIt.next();
}