| ... | ... | @@ -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 | }, |