@@ -1991,6 +1991,29 @@ fn transInitListExprRecord(
1991
1991
return & init_node .base ;
1992
1992
}
1993
1993
1994
+ fn transCreateNodeArrayType (
1995
+ rp : RestorePoint ,
1996
+ source_loc : ZigClangSourceLocation ,
1997
+ ty : * const ZigClangType ,
1998
+ len : var ,
1999
+ ) TransError ! * ast.Node {
2000
+ var node = try transCreateNodePrefixOp (
2001
+ rp .c ,
2002
+ .{
2003
+ .ArrayType = .{
2004
+ .len_expr = undefined ,
2005
+ .sentinel = null ,
2006
+ },
2007
+ },
2008
+ .LBracket ,
2009
+ "[" ,
2010
+ );
2011
+ node .op .ArrayType .len_expr = try transCreateNodeInt (rp .c , len );
2012
+ _ = try appendToken (rp .c , .RBracket , "]" );
2013
+ node .rhs = try transType (rp , ty , source_loc );
2014
+ return & node .base ;
2015
+ }
2016
+
1994
2017
fn transInitListExprArray (
1995
2018
rp : RestorePoint ,
1996
2019
scope : * Scope ,
@@ -2011,8 +2034,13 @@ fn transInitListExprArray(
2011
2034
var init_node : * ast.Node.SuffixOp = undefined ;
2012
2035
var cat_tok : ast.TokenIndex = undefined ;
2013
2036
if (init_count != 0 ) {
2014
- const dot_tok = try appendToken (rp .c , .Period , "." );
2015
- init_node = try transCreateNodeContainerInitializer (rp .c , dot_tok );
2037
+ const ty_node = try transCreateNodeArrayType (
2038
+ rp ,
2039
+ loc ,
2040
+ ZigClangQualType_getTypePtr (child_qt ),
2041
+ init_count ,
2042
+ );
2043
+ init_node = try transCreateNodeArrayInitializer (rp .c , ty_node );
2016
2044
var i : c_uint = 0 ;
2017
2045
while (i < init_count ) : (i += 1 ) {
2018
2046
const elem_expr = ZigClangInitListExpr_getInit (expr , i );
@@ -2026,8 +2054,8 @@ fn transInitListExprArray(
2026
2054
cat_tok = try appendToken (rp .c , .PlusPlus , "++" );
2027
2055
}
2028
2056
2029
- const dot_tok = try appendToken (rp . c , .Period , "." );
2030
- var filler_init_node = try transCreateNodeContainerInitializer (rp .c , dot_tok );
2057
+ const ty_node = try transCreateNodeArrayType (rp , loc , ZigClangQualType_getTypePtr ( child_qt ), 1 );
2058
+ var filler_init_node = try transCreateNodeArrayInitializer (rp .c , ty_node );
2031
2059
const filler_val_expr = ZigClangInitListExpr_getArrayFiller (expr );
2032
2060
try filler_init_node .op .ArrayInitializer .push (try transExpr (rp , scope , filler_val_expr , .used , .r_value ));
2033
2061
filler_init_node .rtoken = try appendToken (rp .c , .RBrace , "}" );
@@ -3878,11 +3906,11 @@ fn transCreateNodeBoolLiteral(c: *Context, value: bool) !*ast.Node {
3878
3906
return & node .base ;
3879
3907
}
3880
3908
3881
- fn transCreateNodeContainerInitializer (c : * Context , dot_tok : ast.TokenIndex ) ! * ast.Node.SuffixOp {
3909
+ fn transCreateNodeArrayInitializer (c : * Context , ty : * ast.Node ) ! * ast.Node.SuffixOp {
3882
3910
_ = try appendToken (c , .LBrace , "{" );
3883
3911
const node = try c .a ().create (ast .Node .SuffixOp );
3884
3912
node .* = ast.Node.SuffixOp {
3885
- .lhs = .{ .dot = dot_tok },
3913
+ .lhs = .{ .node = ty },
3886
3914
.op = .{
3887
3915
.ArrayInitializer = ast .Node .SuffixOp .Op .InitList .init (c .a ()),
3888
3916
},
0 commit comments