C++: dbscheme/library changes to support C99 designated initializers

This commit is contained in:
Nick Rolfe
2018-08-29 17:05:12 +01:00
committed by Nick Rolfe
parent d9bc07cb91
commit d068d71ccb
2 changed files with 14 additions and 2 deletions

View File

@@ -173,7 +173,7 @@ class ClassAggregateLiteral extends AggregateLiteral {
*/ */
Expr getFieldExpr(Field field) { Expr getFieldExpr(Field field) {
field = classType.getAField() and field = classType.getAField() and
result = getChild(field.getInitializationOrder()) aggregate_field_init(this, result, field)
} }
/** /**
@@ -230,7 +230,7 @@ class ArrayAggregateLiteral extends AggregateLiteral {
* element `elementIndex`, if present. * element `elementIndex`, if present.
*/ */
Expr getElementExpr(int elementIndex) { Expr getElementExpr(int elementIndex) {
result = getChild(elementIndex) aggregate_array_init(this, result, elementIndex)
} }
/** /**

View File

@@ -1400,6 +1400,18 @@ new_array_allocated_type(
int type_id: @type ref int type_id: @type ref
); );
aggregate_field_init(
unique int aggregate: @aggregateliteral ref,
int initializer: @expr ref,
int field: @membervariable ref
);
aggregate_array_init(
unique int aggregate: @aggregateliteral ref,
int initializer: @expr ref,
int element_index: int ref
);
@ctorinit = @ctordirectinit @ctorinit = @ctordirectinit
| @ctorvirtualinit | @ctorvirtualinit
| @ctorfieldinit | @ctorfieldinit