mirror of
https://gitlab.com/camelot/kickc.git
synced 2025-03-03 13:29:56 +00:00
Implemented C99 compatible union initializer method, using .member= syntax...
(cherry picked from commit ef62f80b2b693aa92bcbdfb873bad5f995b4b6ff)
This commit is contained in:
parent
51623c3657
commit
9db2d9b960
@ -169,14 +169,21 @@ public class Initializers {
|
|||||||
for(int i = 0; i < structInitNeedSize; i++) {
|
for(int i = 0; i < structInitNeedSize; i++) {
|
||||||
Variable memberDef = null;
|
Variable memberDef = null;
|
||||||
RValue memberValue = valueIt.next();
|
RValue memberValue = valueIt.next();
|
||||||
String memberUnion = ((ValueStructList)valueList).getMember(memberValue);
|
String memberUnionName = ((ValueStructList)valueList).getMember(memberValue);
|
||||||
if(memberUnion != null) {
|
if(memberUnionName != null) {
|
||||||
while(memberDefIt.hasNext()) {
|
boolean found = false;
|
||||||
|
while (memberDefIt.hasNext()) {
|
||||||
memberDef = memberDefIt.next();
|
memberDef = memberDefIt.next();
|
||||||
if (memberDef.getLocalName().contentEquals(memberUnion.toString())) {
|
if (memberDef.getLocalName().contentEquals(memberUnionName)) {
|
||||||
|
found = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(!found)
|
||||||
|
throw new CompileError(
|
||||||
|
"Union initializer cannot find member field " + memberUnionName + "\n" +
|
||||||
|
" Union initializer: " + valueList.toString(program),
|
||||||
|
source);
|
||||||
} else {
|
} else {
|
||||||
memberDef = memberDefIt.next();
|
memberDef = memberDefIt.next();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user