authorgravatar for me@tadeo.caTadeo Kondrak <me@tadeo.ca> 2020-09-30 10:46:19-06:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2020-10-08 12:29:59+03:00
log83eda214882e33e65794cee1e7c0d87777b31bf4
treeb374ccc868c0123e5c83d1a4d3316e5c2a8e754c
parent0e57f220fb71efefa9c6246818758d9c30994f73

zig_clang/translate_c: Use opaque declarations in Zig


3 files changed, 1593 insertions(+), 1192 deletions(-)

src/clang.zig+929-521
...@@ -1,91 +1,901 @@...@@ -1,91 +1,901 @@
1const builtin = @import("builtin");1pub const builtin = @import("builtin");
22
3pub const struct_ZigClangConditionalOperator = opaque {};3pub const SourceLocation = extern struct {
4pub const struct_ZigClangBinaryConditionalOperator = opaque {};4 ID: c_uint,
5pub const struct_ZigClangAbstractConditionalOperator = opaque {};5
6pub const struct_ZigClangAPInt = opaque {};6 pub const eq = ZigClangSourceLocation_eq;
7pub const struct_ZigClangAPSInt = opaque {};7 extern fn ZigClangSourceLocation_eq(a: SourceLocation, b: SourceLocation) bool;
8pub const struct_ZigClangAPFloat = opaque {};8};
9pub const struct_ZigClangASTContext = opaque {};9
10pub const struct_ZigClangASTUnit = opaque {};10pub const QualType = extern struct {
11pub const struct_ZigClangArraySubscriptExpr = opaque {};11 ptr: ?*c_void,
12pub const struct_ZigClangArrayType = opaque {};12
13pub const struct_ZigClangAttributedType = opaque {};13 pub const getCanonicalType = ZigClangQualType_getCanonicalType;
14pub const struct_ZigClangBinaryOperator = opaque {};14 extern fn ZigClangQualType_getCanonicalType(QualType) QualType;
15pub const struct_ZigClangBreakStmt = opaque {};15
16pub const struct_ZigClangBuiltinType = opaque {};16 pub const getTypePtr = ZigClangQualType_getTypePtr;
17pub const struct_ZigClangCStyleCastExpr = opaque {};17 extern fn ZigClangQualType_getTypePtr(QualType) *const Type;
18pub const struct_ZigClangCallExpr = opaque {};18
19pub const struct_ZigClangCaseStmt = opaque {};19 pub const getTypeClass = ZigClangQualType_getTypeClass;
20pub const struct_ZigClangCompoundAssignOperator = opaque {};20 extern fn ZigClangQualType_getTypeClass(QualType) TypeClass;
21pub const struct_ZigClangCompoundStmt = opaque {};21
22pub const struct_ZigClangConstantArrayType = opaque {};22 pub const addConst = ZigClangQualType_addConst;
23pub const struct_ZigClangContinueStmt = opaque {};23 extern fn ZigClangQualType_addConst(*QualType) void;
24pub const struct_ZigClangDecayedType = opaque {};24
25pub const ZigClangDecl = opaque {};25 pub const eq = ZigClangQualType_eq;
26pub const struct_ZigClangDeclRefExpr = opaque {};26 extern fn ZigClangQualType_eq(QualType, arg1: QualType) bool;
27pub const struct_ZigClangDeclStmt = opaque {};27
28pub const struct_ZigClangDefaultStmt = opaque {};28 pub const isConstQualified = ZigClangQualType_isConstQualified;
29pub const struct_ZigClangDiagnosticOptions = opaque {};29 extern fn ZigClangQualType_isConstQualified(QualType) bool;
30pub const struct_ZigClangDiagnosticsEngine = opaque {};30
31pub const struct_ZigClangDoStmt = opaque {};31 pub const isVolatileQualified = ZigClangQualType_isVolatileQualified;
32pub const struct_ZigClangElaboratedType = opaque {};32 extern fn ZigClangQualType_isVolatileQualified(QualType) bool;
33pub const struct_ZigClangEnumConstantDecl = opaque {};33
34pub const struct_ZigClangEnumDecl = opaque {};34 pub const isRestrictQualified = ZigClangQualType_isRestrictQualified;
35pub const struct_ZigClangEnumType = opaque {};35 extern fn ZigClangQualType_isRestrictQualified(QualType) bool;
36pub const struct_ZigClangExpr = opaque {};36};
37pub const struct_ZigClangFieldDecl = opaque {};37
38pub const struct_ZigClangFileID = opaque {};38pub const APValueLValueBase = extern struct {
39pub const struct_ZigClangForStmt = opaque {};39 Ptr: ?*c_void,
40pub const struct_ZigClangFullSourceLoc = opaque {};40 CallIndex: c_uint,
41pub const struct_ZigClangFunctionDecl = opaque {};41 Version: c_uint,
42pub const struct_ZigClangFunctionProtoType = opaque {};42
43pub const struct_ZigClangIfStmt = opaque {};43 pub const dyn_cast_Expr = ZigClangAPValueLValueBase_dyn_cast_Expr;
44pub const struct_ZigClangImplicitCastExpr = opaque {};44 extern fn ZigClangAPValueLValueBase_dyn_cast_Expr(APValueLValueBase) ?*const Expr;
45pub const struct_ZigClangIncompleteArrayType = opaque {};45};
46pub const struct_ZigClangIntegerLiteral = opaque {};46
47pub const struct_ZigClangMacroDefinitionRecord = opaque {};47pub const APValueKind = extern enum {
48pub const struct_ZigClangMacroExpansion = opaque {};48 None,
49pub const struct_ZigClangMacroQualifiedType = opaque {};49 Indeterminate,
50pub const struct_ZigClangMemberExpr = opaque {};50 Int,
51pub const struct_ZigClangNamedDecl = opaque {};51 Float,
52pub const struct_ZigClangNone = opaque {};52 FixedPoint,
53pub const struct_ZigClangOpaqueValueExpr = opaque {};53 ComplexInt,
54pub const struct_ZigClangPCHContainerOperations = opaque {};54 ComplexFloat,
55pub const struct_ZigClangParenExpr = opaque {};55 LValue,
56pub const struct_ZigClangParenType = opaque {};56 Vector,
57pub const struct_ZigClangParmVarDecl = opaque {};57 Array,
58pub const struct_ZigClangPointerType = opaque {};58 Struct,
59pub const struct_ZigClangPreprocessedEntity = opaque {};59 Union,
60pub const struct_ZigClangRecordDecl = opaque {};60 MemberPointer,
61pub const struct_ZigClangRecordType = opaque {};61 AddrLabelDiff,
62pub const struct_ZigClangReturnStmt = opaque {};62};
63pub const struct_ZigClangSkipFunctionBodiesScope = opaque {};63
64pub const struct_ZigClangSourceManager = opaque {};64pub const APValue = extern struct {
65pub const struct_ZigClangSourceRange = opaque {};65 Kind: APValueKind,
66pub const ZigClangStmt = opaque {};66 Data: if (builtin.os.tag == .windows and builtin.abi == .msvc) [52]u8 else [68]u8,
67pub const struct_ZigClangStringLiteral = opaque {};67
68pub const struct_ZigClangStringRef = opaque {};68 pub const getKind = ZigClangAPValue_getKind;
69pub const struct_ZigClangSwitchStmt = opaque {};69 extern fn ZigClangAPValue_getKind(*const APValue) APValueKind;
70pub const struct_ZigClangTagDecl = opaque {};70
71pub const struct_ZigClangType = opaque {};71 pub const getInt = ZigClangAPValue_getInt;
72pub const struct_ZigClangTypedefNameDecl = opaque {};72 extern fn ZigClangAPValue_getInt(*const APValue) *const APSInt;
73pub const struct_ZigClangTypedefType = opaque {};73
74pub const struct_ZigClangUnaryExprOrTypeTraitExpr = opaque {};74 pub const getArrayInitializedElts = ZigClangAPValue_getArrayInitializedElts;
75pub const struct_ZigClangUnaryOperator = opaque {};75 extern fn ZigClangAPValue_getArrayInitializedElts(*const APValue) c_uint;
76pub const struct_ZigClangValueDecl = opaque {};76
77pub const struct_ZigClangVarDecl = opaque {};77 pub const getArraySize = ZigClangAPValue_getArraySize;
78pub const struct_ZigClangWhileStmt = opaque {};78 extern fn ZigClangAPValue_getArraySize(*const APValue) c_uint;
79pub const struct_ZigClangFunctionType = opaque {};79
80pub const struct_ZigClangPredefinedExpr = opaque {};80 pub const getLValueBase = ZigClangAPValue_getLValueBase;
81pub const struct_ZigClangInitListExpr = opaque {};81 extern fn ZigClangAPValue_getLValueBase(*const APValue) APValueLValueBase;
82pub const ZigClangPreprocessingRecord = opaque {};82};
83pub const ZigClangFloatingLiteral = opaque {};83
84pub const ZigClangConstantExpr = opaque {};84pub const ExprEvalResult = extern struct {
85pub const ZigClangCharacterLiteral = opaque {};85 HasSideEffects: bool,
86pub const ZigClangStmtExpr = opaque {};86 HasUndefinedBehavior: bool,
8787 SmallVectorImpl: ?*c_void,
88pub const ZigClangBO = extern enum {88 Val: APValue,
89};
90
91pub const AbstractConditionalOperator = opaque {
92 pub const getCond = ZigClangAbstractConditionalOperator_getCond;
93 extern fn ZigClangAbstractConditionalOperator_getCond(*const AbstractConditionalOperator) *const Expr;
94
95 pub const getTrueExpr = ZigClangAbstractConditionalOperator_getTrueExpr;
96 extern fn ZigClangAbstractConditionalOperator_getTrueExpr(*const AbstractConditionalOperator) *const Expr;
97
98 pub const getFalseExpr = ZigClangAbstractConditionalOperator_getFalseExpr;
99 extern fn ZigClangAbstractConditionalOperator_getFalseExpr(*const AbstractConditionalOperator) *const Expr;
100};
101
102pub const APFloat = opaque {
103 pub const toString = ZigClangAPFloat_toString;
104 extern fn ZigClangAPFloat_toString(*const APFloat, precision: c_uint, maxPadding: c_uint, truncateZero: bool) [*:0]const u8;
105};
106
107pub const APInt = opaque {
108 pub const getLimitedValue = ZigClangAPInt_getLimitedValue;
109 extern fn ZigClangAPInt_getLimitedValue(*const APInt, limit: u64) u64;
110};
111
112pub const APSInt = opaque {
113 pub const isSigned = ZigClangAPSInt_isSigned;
114 extern fn ZigClangAPSInt_isSigned(*const APSInt) bool;
115
116 pub const isNegative = ZigClangAPSInt_isNegative;
117 extern fn ZigClangAPSInt_isNegative(*const APSInt) bool;
118
119 pub const negate = ZigClangAPSInt_negate;
120 extern fn ZigClangAPSInt_negate(*const APSInt) *const APSInt;
121
122 pub const free = ZigClangAPSInt_free;
123 extern fn ZigClangAPSInt_free(*const APSInt) void;
124
125 pub const getRawData = ZigClangAPSInt_getRawData;
126 extern fn ZigClangAPSInt_getRawData(*const APSInt) [*:0]const u64;
127
128 pub const getNumWords = ZigClangAPSInt_getNumWords;
129 extern fn ZigClangAPSInt_getNumWords(*const APSInt) c_uint;
130};
131
132pub const ASTContext = opaque {
133 pub const getPointerType = ZigClangASTContext_getPointerType;
134 extern fn ZigClangASTContext_getPointerType(*const ASTContext, T: QualType) QualType;
135};
136
137pub const ASTUnit = opaque {
138 pub const delete = ZigClangASTUnit_delete;
139 extern fn ZigClangASTUnit_delete(*ASTUnit) void;
140
141 pub const getASTContext = ZigClangASTUnit_getASTContext;
142 extern fn ZigClangASTUnit_getASTContext(*ASTUnit) *ASTContext;
143
144 pub const getSourceManager = ZigClangASTUnit_getSourceManager;
145 extern fn ZigClangASTUnit_getSourceManager(*ASTUnit) *SourceManager;
146
147 pub const visitLocalTopLevelDecls = ZigClangASTUnit_visitLocalTopLevelDecls;
148 extern fn ZigClangASTUnit_visitLocalTopLevelDecls(*ASTUnit, context: ?*c_void, Fn: ?fn (?*c_void, *const Decl) callconv(.C) bool) bool;
149
150 pub const getLocalPreprocessingEntities_begin = ZigClangASTUnit_getLocalPreprocessingEntities_begin;
151 extern fn ZigClangASTUnit_getLocalPreprocessingEntities_begin(*ASTUnit) PreprocessingRecord.iterator;
152
153 pub const getLocalPreprocessingEntities_end = ZigClangASTUnit_getLocalPreprocessingEntities_end;
154 extern fn ZigClangASTUnit_getLocalPreprocessingEntities_end(*ASTUnit) PreprocessingRecord.iterator;
155};
156
157pub const ArraySubscriptExpr = opaque {
158 pub const getBase = ZigClangArraySubscriptExpr_getBase;
159 extern fn ZigClangArraySubscriptExpr_getBase(*const ArraySubscriptExpr) *const Expr;
160
161 pub const getIdx = ZigClangArraySubscriptExpr_getIdx;
162 extern fn ZigClangArraySubscriptExpr_getIdx(*const ArraySubscriptExpr) *const Expr;
163};
164
165pub const ArrayType = opaque {
166 pub const getElementType = ZigClangArrayType_getElementType;
167 extern fn ZigClangArrayType_getElementType(*const ArrayType) QualType;
168};
169
170pub const AttributedType = opaque {
171 pub const getEquivalentType = ZigClangAttributedType_getEquivalentType;
172 extern fn ZigClangAttributedType_getEquivalentType(*const AttributedType) QualType;
173};
174
175pub const BinaryOperator = opaque {
176 pub const getOpcode = ZigClangBinaryOperator_getOpcode;
177 extern fn ZigClangBinaryOperator_getOpcode(*const BinaryOperator) BO;
178
179 pub const getBeginLoc = ZigClangBinaryOperator_getBeginLoc;
180 extern fn ZigClangBinaryOperator_getBeginLoc(*const BinaryOperator) SourceLocation;
181
182 pub const getLHS = ZigClangBinaryOperator_getLHS;
183 extern fn ZigClangBinaryOperator_getLHS(*const BinaryOperator) *const Expr;
184
185 pub const getRHS = ZigClangBinaryOperator_getRHS;
186 extern fn ZigClangBinaryOperator_getRHS(*const BinaryOperator) *const Expr;
187
188 pub const getType = ZigClangBinaryOperator_getType;
189 extern fn ZigClangBinaryOperator_getType(*const BinaryOperator) QualType;
190};
191
192pub const BinaryConditionalOperator = opaque {};
193
194pub const BreakStmt = opaque {};
195
196pub const BuiltinType = opaque {
197 pub const getKind = ZigClangBuiltinType_getKind;
198 extern fn ZigClangBuiltinType_getKind(*const BuiltinType) BuiltinTypeKind;
199};
200
201pub const CStyleCastExpr = opaque {
202 pub const getBeginLoc = ZigClangCStyleCastExpr_getBeginLoc;
203 extern fn ZigClangCStyleCastExpr_getBeginLoc(*const CStyleCastExpr) SourceLocation;
204
205 pub const getSubExpr = ZigClangCStyleCastExpr_getSubExpr;
206 extern fn ZigClangCStyleCastExpr_getSubExpr(*const CStyleCastExpr) *const Expr;
207
208 pub const getType = ZigClangCStyleCastExpr_getType;
209 extern fn ZigClangCStyleCastExpr_getType(*const CStyleCastExpr) QualType;
210};
211
212pub const CallExpr = opaque {
213 pub const getCallee = ZigClangCallExpr_getCallee;
214 extern fn ZigClangCallExpr_getCallee(*const CallExpr) *const Expr;
215
216 pub const getNumArgs = ZigClangCallExpr_getNumArgs;
217 extern fn ZigClangCallExpr_getNumArgs(*const CallExpr) c_uint;
218
219 pub const getArgs = ZigClangCallExpr_getArgs;
220 extern fn ZigClangCallExpr_getArgs(*const CallExpr) [*]const *const Expr;
221};
222
223pub const CaseStmt = opaque {
224 pub const getLHS = ZigClangCaseStmt_getLHS;
225 extern fn ZigClangCaseStmt_getLHS(*const CaseStmt) *const Expr;
226
227 pub const getRHS = ZigClangCaseStmt_getRHS;
228 extern fn ZigClangCaseStmt_getRHS(*const CaseStmt) ?*const Expr;
229
230 pub const getBeginLoc = ZigClangCaseStmt_getBeginLoc;
231 extern fn ZigClangCaseStmt_getBeginLoc(*const CaseStmt) SourceLocation;
232
233 pub const getSubStmt = ZigClangCaseStmt_getSubStmt;
234 extern fn ZigClangCaseStmt_getSubStmt(*const CaseStmt) *const Stmt;
235};
236
237pub const CharacterLiteral = opaque {
238 pub const getBeginLoc = ZigClangCharacterLiteral_getBeginLoc;
239 extern fn ZigClangCharacterLiteral_getBeginLoc(*const CharacterLiteral) SourceLocation;
240
241 pub const getKind = ZigClangCharacterLiteral_getKind;
242 extern fn ZigClangCharacterLiteral_getKind(*const CharacterLiteral) CharacterLiteral_CharacterKind;
243
244 pub const getValue = ZigClangCharacterLiteral_getValue;
245 extern fn ZigClangCharacterLiteral_getValue(*const CharacterLiteral) c_uint;
246};
247
248pub const CompoundAssignOperator = opaque {
249 pub const getType = ZigClangCompoundAssignOperator_getType;
250 extern fn ZigClangCompoundAssignOperator_getType(*const CompoundAssignOperator) QualType;
251
252 pub const getComputationLHSType = ZigClangCompoundAssignOperator_getComputationLHSType;
253 extern fn ZigClangCompoundAssignOperator_getComputationLHSType(*const CompoundAssignOperator) QualType;
254
255 pub const getComputationResultType = ZigClangCompoundAssignOperator_getComputationResultType;
256 extern fn ZigClangCompoundAssignOperator_getComputationResultType(*const CompoundAssignOperator) QualType;
257
258 pub const getBeginLoc = ZigClangCompoundAssignOperator_getBeginLoc;
259 extern fn ZigClangCompoundAssignOperator_getBeginLoc(*const CompoundAssignOperator) SourceLocation;
260
261 pub const getOpcode = ZigClangCompoundAssignOperator_getOpcode;
262 extern fn ZigClangCompoundAssignOperator_getOpcode(*const CompoundAssignOperator) BO;
263
264 pub const getLHS = ZigClangCompoundAssignOperator_getLHS;
265 extern fn ZigClangCompoundAssignOperator_getLHS(*const CompoundAssignOperator) *const Expr;
266
267 pub const getRHS = ZigClangCompoundAssignOperator_getRHS;
268 extern fn ZigClangCompoundAssignOperator_getRHS(*const CompoundAssignOperator) *const Expr;
269};
270
271pub const CompoundStmt = opaque {
272 pub const body_begin = ZigClangCompoundStmt_body_begin;
273 extern fn ZigClangCompoundStmt_body_begin(*const CompoundStmt) const_body_iterator;
274
275 pub const body_end = ZigClangCompoundStmt_body_end;
276 extern fn ZigClangCompoundStmt_body_end(*const CompoundStmt) const_body_iterator;
277
278 pub const const_body_iterator = [*]const *Stmt;
279};
280
281pub const ConditionalOperator = opaque {};
282
283pub const ConstantArrayType = opaque {
284 pub const getElementType = ZigClangConstantArrayType_getElementType;
285 extern fn ZigClangConstantArrayType_getElementType(*const ConstantArrayType) QualType;
286
287 pub const getSize = ZigClangConstantArrayType_getSize;
288 extern fn ZigClangConstantArrayType_getSize(*const ConstantArrayType) *const APInt;
289};
290
291pub const ConstantExpr = opaque {};
292
293pub const ContinueStmt = opaque {};
294
295pub const DecayedType = opaque {
296 pub const getDecayedType = ZigClangDecayedType_getDecayedType;
297 extern fn ZigClangDecayedType_getDecayedType(*const DecayedType) QualType;
298};
299
300pub const Decl = opaque {
301 pub const getLocation = ZigClangDecl_getLocation;
302 extern fn ZigClangDecl_getLocation(*const Decl) SourceLocation;
303
304 pub const castToNamedDecl = ZigClangDecl_castToNamedDecl;
305 extern fn ZigClangDecl_castToNamedDecl(decl: *const Decl) ?*const NamedDecl;
306
307 pub const getKind = ZigClangDecl_getKind;
308 extern fn ZigClangDecl_getKind(decl: *const Decl) DeclKind;
309
310 pub const getDeclKindName = ZigClangDecl_getDeclKindName;
311 extern fn ZigClangDecl_getDeclKindName(decl: *const Decl) [*:0]const u8;
312};
313
314pub const DeclRefExpr = opaque {
315 pub const getDecl = ZigClangDeclRefExpr_getDecl;
316 extern fn ZigClangDeclRefExpr_getDecl(*const DeclRefExpr) *const ValueDecl;
317
318 pub const getFoundDecl = ZigClangDeclRefExpr_getFoundDecl;
319 extern fn ZigClangDeclRefExpr_getFoundDecl(*const DeclRefExpr) *const NamedDecl;
320};
321
322pub const DeclStmt = opaque {
323 pub const decl_begin = ZigClangDeclStmt_decl_begin;
324 extern fn ZigClangDeclStmt_decl_begin(*const DeclStmt) const_decl_iterator;
325
326 pub const decl_end = ZigClangDeclStmt_decl_end;
327 extern fn ZigClangDeclStmt_decl_end(*const DeclStmt) const_decl_iterator;
328
329 pub const const_decl_iterator = [*]const *Decl;
330};
331
332pub const DefaultStmt = opaque {
333 pub const getSubStmt = ZigClangDefaultStmt_getSubStmt;
334 extern fn ZigClangDefaultStmt_getSubStmt(*const DefaultStmt) *const Stmt;
335};
336
337pub const DiagnosticOptions = opaque {};
338
339pub const DiagnosticsEngine = opaque {};
340
341pub const DoStmt = opaque {
342 pub const getCond = ZigClangDoStmt_getCond;
343 extern fn ZigClangDoStmt_getCond(*const DoStmt) *const Expr;
344
345 pub const getBody = ZigClangDoStmt_getBody;
346 extern fn ZigClangDoStmt_getBody(*const DoStmt) *const Stmt;
347};
348
349pub const ElaboratedType = opaque {
350 pub const getNamedType = ZigClangElaboratedType_getNamedType;
351 extern fn ZigClangElaboratedType_getNamedType(*const ElaboratedType) QualType;
352};
353
354pub const EnumConstantDecl = opaque {
355 pub const getInitExpr = ZigClangEnumConstantDecl_getInitExpr;
356 extern fn ZigClangEnumConstantDecl_getInitExpr(*const EnumConstantDecl) ?*const Expr;
357
358 pub const getInitVal = ZigClangEnumConstantDecl_getInitVal;
359 extern fn ZigClangEnumConstantDecl_getInitVal(*const EnumConstantDecl) *const APSInt;
360};
361
362pub const EnumDecl = opaque {
363 pub const getCanonicalDecl = ZigClangEnumDecl_getCanonicalDecl;
364 extern fn ZigClangEnumDecl_getCanonicalDecl(*const EnumDecl) ?*const TagDecl;
365
366 pub const getIntegerType = ZigClangEnumDecl_getIntegerType;
367 extern fn ZigClangEnumDecl_getIntegerType(*const EnumDecl) QualType;
368
369 pub const getDefinition = ZigClangEnumDecl_getDefinition;
370 extern fn ZigClangEnumDecl_getDefinition(*const EnumDecl) ?*const EnumDecl;
371
372 pub const getLocation = ZigClangEnumDecl_getLocation;
373 extern fn ZigClangEnumDecl_getLocation(*const EnumDecl) SourceLocation;
374
375 pub const enumerator_begin = ZigClangEnumDecl_enumerator_begin;
376 extern fn ZigClangEnumDecl_enumerator_begin(*const EnumDecl) enumerator_iterator;
377
378 pub const enumerator_end = ZigClangEnumDecl_enumerator_end;
379 extern fn ZigClangEnumDecl_enumerator_end(*const EnumDecl) enumerator_iterator;
380
381 pub const enumerator_iterator = extern struct {
382 ptr: *c_void,
383
384 pub const next = ZigClangEnumDecl_enumerator_iterator_next;
385 extern fn ZigClangEnumDecl_enumerator_iterator_next(enumerator_iterator) enumerator_iterator;
386
387 pub const deref = ZigClangEnumDecl_enumerator_iterator_deref;
388 extern fn ZigClangEnumDecl_enumerator_iterator_deref(enumerator_iterator) *const EnumConstantDecl;
389
390 pub const neq = ZigClangEnumDecl_enumerator_iterator_neq;
391 extern fn ZigClangEnumDecl_enumerator_iterator_neq(enumerator_iterator, enumerator_iterator) bool;
392 };
393};
394
395pub const EnumType = opaque {
396 pub const getDecl = ZigClangEnumType_getDecl;
397 extern fn ZigClangEnumType_getDecl(*const EnumType) *const EnumDecl;
398};
399
400pub const Expr = opaque {
401 pub const getStmtClass = ZigClangExpr_getStmtClass;
402 extern fn ZigClangExpr_getStmtClass(*const Expr) StmtClass;
403
404 pub const getType = ZigClangExpr_getType;
405 extern fn ZigClangExpr_getType(*const Expr) QualType;
406
407 pub const getBeginLoc = ZigClangExpr_getBeginLoc;
408 extern fn ZigClangExpr_getBeginLoc(*const Expr) SourceLocation;
409
410 pub const EvaluateAsConstantExpr = ZigClangExpr_EvaluateAsConstantExpr;
411 extern fn ZigClangExpr_EvaluateAsConstantExpr(*const Expr, *ExprEvalResult, Expr_ConstExprUsage, *const ASTContext) bool;
412};
413
414pub const FieldDecl = opaque {
415 pub const getCanonicalDecl = ZigClangFieldDecl_getCanonicalDecl;
416 extern fn ZigClangFieldDecl_getCanonicalDecl(*const FieldDecl) ?*const FieldDecl;
417
418 pub const getAlignedAttribute = ZigClangFieldDecl_getAlignedAttribute;
419 extern fn ZigClangFieldDecl_getAlignedAttribute(*const FieldDecl, *const ASTContext) c_uint;
420
421 pub const isAnonymousStructOrUnion = ZigClangFieldDecl_isAnonymousStructOrUnion;
422 extern fn ZigClangFieldDecl_isAnonymousStructOrUnion(*const FieldDecl) bool;
423
424 pub const isBitField = ZigClangFieldDecl_isBitField;
425 extern fn ZigClangFieldDecl_isBitField(*const FieldDecl) bool;
426
427 pub const getType = ZigClangFieldDecl_getType;
428 extern fn ZigClangFieldDecl_getType(*const FieldDecl) QualType;
429
430 pub const getLocation = ZigClangFieldDecl_getLocation;
431 extern fn ZigClangFieldDecl_getLocation(*const FieldDecl) SourceLocation;
432};
433
434pub const FileID = opaque {};
435
436pub const FloatingLiteral = opaque {
437 pub const getValueAsApproximateDouble = ZigClangAPFloat_getValueAsApproximateDouble;
438 extern fn ZigClangAPFloat_getValueAsApproximateDouble(*const FloatingLiteral) f64;
439};
440
441pub const ForStmt = opaque {
442 pub const getInit = ZigClangForStmt_getInit;
443 extern fn ZigClangForStmt_getInit(*const ForStmt) ?*const Stmt;
444
445 pub const getCond = ZigClangForStmt_getCond;
446 extern fn ZigClangForStmt_getCond(*const ForStmt) ?*const Expr;
447
448 pub const getInc = ZigClangForStmt_getInc;
449 extern fn ZigClangForStmt_getInc(*const ForStmt) ?*const Expr;
450
451 pub const getBody = ZigClangForStmt_getBody;
452 extern fn ZigClangForStmt_getBody(*const ForStmt) *const Stmt;
453};
454
455pub const FullSourceLoc = opaque {};
456
457pub const FunctionDecl = opaque {
458 pub const getType = ZigClangFunctionDecl_getType;
459 extern fn ZigClangFunctionDecl_getType(*const FunctionDecl) QualType;
460
461 pub const getLocation = ZigClangFunctionDecl_getLocation;
462 extern fn ZigClangFunctionDecl_getLocation(*const FunctionDecl) SourceLocation;
463
464 pub const hasBody = ZigClangFunctionDecl_hasBody;
465 extern fn ZigClangFunctionDecl_hasBody(*const FunctionDecl) bool;
466
467 pub const getStorageClass = ZigClangFunctionDecl_getStorageClass;
468 extern fn ZigClangFunctionDecl_getStorageClass(*const FunctionDecl) StorageClass;
469
470 pub const getParamDecl = ZigClangFunctionDecl_getParamDecl;
471 extern fn ZigClangFunctionDecl_getParamDecl(*const FunctionDecl, i: c_uint) *const ParmVarDecl;
472
473 pub const getBody = ZigClangFunctionDecl_getBody;
474 extern fn ZigClangFunctionDecl_getBody(*const FunctionDecl) *const Stmt;
475
476 pub const doesDeclarationForceExternallyVisibleDefinition = ZigClangFunctionDecl_doesDeclarationForceExternallyVisibleDefinition;
477 extern fn ZigClangFunctionDecl_doesDeclarationForceExternallyVisibleDefinition(*const FunctionDecl) bool;
478
479 pub const isThisDeclarationADefinition = ZigClangFunctionDecl_isThisDeclarationADefinition;
480 extern fn ZigClangFunctionDecl_isThisDeclarationADefinition(*const FunctionDecl) bool;
481
482 pub const doesThisDeclarationHaveABody = ZigClangFunctionDecl_doesThisDeclarationHaveABody;
483 extern fn ZigClangFunctionDecl_doesThisDeclarationHaveABody(*const FunctionDecl) bool;
484
485 pub const isInlineSpecified = ZigClangFunctionDecl_isInlineSpecified;
486 extern fn ZigClangFunctionDecl_isInlineSpecified(*const FunctionDecl) bool;
487
488 pub const isDefined = ZigClangFunctionDecl_isDefined;
489 extern fn ZigClangFunctionDecl_isDefined(*const FunctionDecl) bool;
490
491 pub const getDefinition = ZigClangFunctionDecl_getDefinition;
492 extern fn ZigClangFunctionDecl_getDefinition(*const FunctionDecl) ?*const FunctionDecl;
493
494 pub const getSectionAttribute = ZigClangFunctionDecl_getSectionAttribute;
495 extern fn ZigClangFunctionDecl_getSectionAttribute(*const FunctionDecl, len: *usize) ?[*]const u8;
496
497 pub const getCanonicalDecl = ZigClangFunctionDecl_getCanonicalDecl;
498 extern fn ZigClangFunctionDecl_getCanonicalDecl(*const FunctionDecl) ?*const FunctionDecl;
499
500 pub const getAlignedAttribute = ZigClangFunctionDecl_getAlignedAttribute;
501 extern fn ZigClangFunctionDecl_getAlignedAttribute(*const FunctionDecl, *const ASTContext) c_uint;
502};
503
504pub const FunctionProtoType = opaque {
505 pub const isVariadic = ZigClangFunctionProtoType_isVariadic;
506 extern fn ZigClangFunctionProtoType_isVariadic(*const FunctionProtoType) bool;
507
508 pub const getNumParams = ZigClangFunctionProtoType_getNumParams;
509 extern fn ZigClangFunctionProtoType_getNumParams(*const FunctionProtoType) c_uint;
510
511 pub const getParamType = ZigClangFunctionProtoType_getParamType;
512 extern fn ZigClangFunctionProtoType_getParamType(*const FunctionProtoType, i: c_uint) QualType;
513
514 pub const getReturnType = ZigClangFunctionProtoType_getReturnType;
515 extern fn ZigClangFunctionProtoType_getReturnType(*const FunctionProtoType) QualType;
516};
517
518pub const FunctionType = opaque {
519 pub const getNoReturnAttr = ZigClangFunctionType_getNoReturnAttr;
520 extern fn ZigClangFunctionType_getNoReturnAttr(*const FunctionType) bool;
521
522 pub const getCallConv = ZigClangFunctionType_getCallConv;
523 extern fn ZigClangFunctionType_getCallConv(*const FunctionType) CallingConv;
524
525 pub const getReturnType = ZigClangFunctionType_getReturnType;
526 extern fn ZigClangFunctionType_getReturnType(*const FunctionType) QualType;
527};
528
529pub const IfStmt = opaque {
530 pub const getThen = ZigClangIfStmt_getThen;
531 extern fn ZigClangIfStmt_getThen(*const IfStmt) *const Stmt;
532
533 pub const getElse = ZigClangIfStmt_getElse;
534 extern fn ZigClangIfStmt_getElse(*const IfStmt) ?*const Stmt;
535
536 pub const getCond = ZigClangIfStmt_getCond;
537 extern fn ZigClangIfStmt_getCond(*const IfStmt) *const Stmt;
538};
539
540pub const ImplicitCastExpr = opaque {
541 pub const getBeginLoc = ZigClangImplicitCastExpr_getBeginLoc;
542 extern fn ZigClangImplicitCastExpr_getBeginLoc(*const ImplicitCastExpr) SourceLocation;
543
544 pub const getCastKind = ZigClangImplicitCastExpr_getCastKind;
545 extern fn ZigClangImplicitCastExpr_getCastKind(*const ImplicitCastExpr) CK;
546
547 pub const getSubExpr = ZigClangImplicitCastExpr_getSubExpr;
548 extern fn ZigClangImplicitCastExpr_getSubExpr(*const ImplicitCastExpr) *const Expr;
549};
550
551pub const IncompleteArrayType = opaque {
552 pub const getElementType = ZigClangIncompleteArrayType_getElementType;
553 extern fn ZigClangIncompleteArrayType_getElementType(*const IncompleteArrayType) QualType;
554};
555
556pub const IntegerLiteral = opaque {
557 pub const EvaluateAsInt = ZigClangIntegerLiteral_EvaluateAsInt;
558 extern fn ZigClangIntegerLiteral_EvaluateAsInt(*const IntegerLiteral, *ExprEvalResult, *const ASTContext) bool;
559
560 pub const getBeginLoc = ZigClangIntegerLiteral_getBeginLoc;
561 extern fn ZigClangIntegerLiteral_getBeginLoc(*const IntegerLiteral) SourceLocation;
562
563 pub const isZero = ZigClangIntegerLiteral_isZero;
564 extern fn ZigClangIntegerLiteral_isZero(*const IntegerLiteral, *bool, *const ASTContext) bool;
565};
566
567pub const MacroDefinitionRecord = opaque {
568 pub const getName_getNameStart = ZigClangMacroDefinitionRecord_getName_getNameStart;
569 extern fn ZigClangMacroDefinitionRecord_getName_getNameStart(*const MacroDefinitionRecord) [*:0]const u8;
570
571 pub const getSourceRange_getBegin = ZigClangMacroDefinitionRecord_getSourceRange_getBegin;
572 extern fn ZigClangMacroDefinitionRecord_getSourceRange_getBegin(*const MacroDefinitionRecord) SourceLocation;
573
574 pub const getSourceRange_getEnd = ZigClangMacroDefinitionRecord_getSourceRange_getEnd;
575 extern fn ZigClangMacroDefinitionRecord_getSourceRange_getEnd(*const MacroDefinitionRecord) SourceLocation;
576};
577
578pub const MacroQualifiedType = opaque {
579 pub const getModifiedType = ZigClangMacroQualifiedType_getModifiedType;
580 extern fn ZigClangMacroQualifiedType_getModifiedType(*const MacroQualifiedType) QualType;
581};
582
583pub const MemberExpr = opaque {
584 pub const getBase = ZigClangMemberExpr_getBase;
585 extern fn ZigClangMemberExpr_getBase(*const MemberExpr) *const Expr;
586
587 pub const isArrow = ZigClangMemberExpr_isArrow;
588 extern fn ZigClangMemberExpr_isArrow(*const MemberExpr) bool;
589
590 pub const getMemberDecl = ZigClangMemberExpr_getMemberDecl;
591 extern fn ZigClangMemberExpr_getMemberDecl(*const MemberExpr) *const ValueDecl;
592};
593
594pub const NamedDecl = opaque {
595 pub const getName_bytes_begin = ZigClangNamedDecl_getName_bytes_begin;
596 extern fn ZigClangNamedDecl_getName_bytes_begin(decl: *const NamedDecl) [*:0]const u8;
597};
598
599pub const None = opaque {};
600
601pub const OpaqueValueExpr = opaque {
602 pub const getSourceExpr = ZigClangOpaqueValueExpr_getSourceExpr;
603 extern fn ZigClangOpaqueValueExpr_getSourceExpr(*const OpaqueValueExpr) ?*const Expr;
604};
605
606pub const PCHContainerOperations = opaque {};
607
608pub const ParenExpr = opaque {
609 pub const getSubExpr = ZigClangParenExpr_getSubExpr;
610 extern fn ZigClangParenExpr_getSubExpr(*const ParenExpr) *const Expr;
611};
612
613pub const ParenType = opaque {
614 pub const getInnerType = ZigClangParenType_getInnerType;
615 extern fn ZigClangParenType_getInnerType(*const ParenType) QualType;
616};
617
618pub const ParmVarDecl = opaque {
619 pub const getOriginalType = ZigClangParmVarDecl_getOriginalType;
620 extern fn ZigClangParmVarDecl_getOriginalType(*const ParmVarDecl) QualType;
621};
622
623pub const PointerType = opaque {};
624
625pub const PredefinedExpr = opaque {
626 pub const getFunctionName = ZigClangPredefinedExpr_getFunctionName;
627 extern fn ZigClangPredefinedExpr_getFunctionName(*const PredefinedExpr) *const StringLiteral;
628};
629
630pub const PreprocessedEntity = opaque {
631 pub const getKind = ZigClangPreprocessedEntity_getKind;
632 extern fn ZigClangPreprocessedEntity_getKind(*const PreprocessedEntity) PreprocessedEntity_EntityKind;
633};
634
635pub const PreprocessingRecord = opaque {
636 pub const iterator = extern struct {
637 I: c_int,
638 Self: *PreprocessingRecord,
639
640 pub const deref = ZigClangPreprocessingRecord_iterator_deref;
641 extern fn ZigClangPreprocessingRecord_iterator_deref(iterator) *PreprocessedEntity;
642 };
643};
644
645pub const RecordDecl = opaque {
646 pub const getCanonicalDecl = ZigClangRecordDecl_getCanonicalDecl;
647 extern fn ZigClangRecordDecl_getCanonicalDecl(*const RecordDecl) ?*const TagDecl;
648
649 pub const isUnion = ZigClangRecordDecl_isUnion;
650 extern fn ZigClangRecordDecl_isUnion(*const RecordDecl) bool;
651
652 pub const isStruct = ZigClangRecordDecl_isStruct;
653 extern fn ZigClangRecordDecl_isStruct(*const RecordDecl) bool;
654
655 pub const isAnonymousStructOrUnion = ZigClangRecordDecl_isAnonymousStructOrUnion;
656 extern fn ZigClangRecordDecl_isAnonymousStructOrUnion(record_decl: ?*const RecordDecl) bool;
657
658 pub const getPackedAttribute = ZigClangRecordDecl_getPackedAttribute;
659 extern fn ZigClangRecordDecl_getPackedAttribute(*const RecordDecl) bool;
660
661 pub const getDefinition = ZigClangRecordDecl_getDefinition;
662 extern fn ZigClangRecordDecl_getDefinition(*const RecordDecl) ?*const RecordDecl;
663
664 pub const getLocation = ZigClangRecordDecl_getLocation;
665 extern fn ZigClangRecordDecl_getLocation(*const RecordDecl) SourceLocation;
666
667 pub const field_begin = ZigClangRecordDecl_field_begin;
668 extern fn ZigClangRecordDecl_field_begin(*const RecordDecl) field_iterator;
669
670 pub const field_end = ZigClangRecordDecl_field_end;
671 extern fn ZigClangRecordDecl_field_end(*const RecordDecl) field_iterator;
672
673 pub const field_iterator = extern struct {
674 ptr: *c_void,
675
676 pub const next = ZigClangRecordDecl_field_iterator_next;
677 extern fn ZigClangRecordDecl_field_iterator_next(field_iterator) field_iterator;
678
679 pub const deref = ZigClangRecordDecl_field_iterator_deref;
680 extern fn ZigClangRecordDecl_field_iterator_deref(field_iterator) *const FieldDecl;
681
682 pub const neq = ZigClangRecordDecl_field_iterator_neq;
683 extern fn ZigClangRecordDecl_field_iterator_neq(field_iterator, field_iterator) bool;
684 };
685};
686
687pub const RecordType = opaque {
688 pub const getDecl = ZigClangRecordType_getDecl;
689 extern fn ZigClangRecordType_getDecl(*const RecordType) *const RecordDecl;
690};
691
692pub const ReturnStmt = opaque {
693 pub const getRetValue = ZigClangReturnStmt_getRetValue;
694 extern fn ZigClangReturnStmt_getRetValue(*const ReturnStmt) ?*const Expr;
695};
696
697pub const SkipFunctionBodiesScope = opaque {};
698
699pub const SourceManager = opaque {
700 pub const getSpellingLoc = ZigClangSourceManager_getSpellingLoc;
701 extern fn ZigClangSourceManager_getSpellingLoc(*const SourceManager, Loc: SourceLocation) SourceLocation;
702
703 pub const getFilename = ZigClangSourceManager_getFilename;
704 extern fn ZigClangSourceManager_getFilename(*const SourceManager, SpellingLoc: SourceLocation) ?[*:0]const u8;
705
706 pub const getSpellingLineNumber = ZigClangSourceManager_getSpellingLineNumber;
707 extern fn ZigClangSourceManager_getSpellingLineNumber(*const SourceManager, Loc: SourceLocation) c_uint;
708
709 pub const getSpellingColumnNumber = ZigClangSourceManager_getSpellingColumnNumber;
710 extern fn ZigClangSourceManager_getSpellingColumnNumber(*const SourceManager, Loc: SourceLocation) c_uint;
711
712 pub const getCharacterData = ZigClangSourceManager_getCharacterData;
713 extern fn ZigClangSourceManager_getCharacterData(*const SourceManager, SL: SourceLocation) [*:0]const u8;
714};
715
716pub const SourceRange = opaque {};
717
718pub const Stmt = opaque {
719 pub const getBeginLoc = ZigClangStmt_getBeginLoc;
720 extern fn ZigClangStmt_getBeginLoc(*const Stmt) SourceLocation;
721
722 pub const getStmtClass = ZigClangStmt_getStmtClass;
723 extern fn ZigClangStmt_getStmtClass(*const Stmt) StmtClass;
724
725 pub const classof_Expr = ZigClangStmt_classof_Expr;
726 extern fn ZigClangStmt_classof_Expr(*const Stmt) bool;
727};
728
729pub const StmtExpr = opaque {
730 pub const getSubStmt = ZigClangStmtExpr_getSubStmt;
731 extern fn ZigClangStmtExpr_getSubStmt(*const StmtExpr) *const CompoundStmt;
732};
733
734pub const StringLiteral = opaque {
735 pub const getKind = ZigClangStringLiteral_getKind;
736 extern fn ZigClangStringLiteral_getKind(*const StringLiteral) StringLiteral_StringKind;
737
738 pub const getString_bytes_begin_size = ZigClangStringLiteral_getString_bytes_begin_size;
739 extern fn ZigClangStringLiteral_getString_bytes_begin_size(*const StringLiteral, *usize) [*]const u8;
740};
741
742pub const StringRef = opaque {};
743
744pub const SwitchStmt = opaque {
745 pub const getConditionVariableDeclStmt = ZigClangSwitchStmt_getConditionVariableDeclStmt;
746 extern fn ZigClangSwitchStmt_getConditionVariableDeclStmt(*const SwitchStmt) ?*const DeclStmt;
747
748 pub const getCond = ZigClangSwitchStmt_getCond;
749 extern fn ZigClangSwitchStmt_getCond(*const SwitchStmt) *const Expr;
750
751 pub const getBody = ZigClangSwitchStmt_getBody;
752 extern fn ZigClangSwitchStmt_getBody(*const SwitchStmt) *const Stmt;
753
754 pub const isAllEnumCasesCovered = ZigClangSwitchStmt_isAllEnumCasesCovered;
755 extern fn ZigClangSwitchStmt_isAllEnumCasesCovered(*const SwitchStmt) bool;
756};
757
758pub const TagDecl = opaque {
759 pub const isThisDeclarationADefinition = ZigClangTagDecl_isThisDeclarationADefinition;
760 extern fn ZigClangTagDecl_isThisDeclarationADefinition(*const TagDecl) bool;
761};
762
763pub const Type = opaque {
764 pub const getTypeClass = ZigClangType_getTypeClass;
765 extern fn ZigClangType_getTypeClass(*const Type) TypeClass;
766
767 pub const getPointeeType = ZigClangType_getPointeeType;
768 extern fn ZigClangType_getPointeeType(*const Type) QualType;
769
770 pub const isVoidType = ZigClangType_isVoidType;
771 extern fn ZigClangType_isVoidType(*const Type) bool;
772
773 pub const isConstantArrayType = ZigClangType_isConstantArrayType;
774 extern fn ZigClangType_isConstantArrayType(*const Type) bool;
775
776 pub const isRecordType = ZigClangType_isRecordType;
777 extern fn ZigClangType_isRecordType(*const Type) bool;
778
779 pub const isIncompleteOrZeroLengthArrayType = ZigClangType_isIncompleteOrZeroLengthArrayType;
780 extern fn ZigClangType_isIncompleteOrZeroLengthArrayType(*const Type, *const ASTContext) bool;
781
782 pub const isArrayType = ZigClangType_isArrayType;
783 extern fn ZigClangType_isArrayType(*const Type) bool;
784
785 pub const isBooleanType = ZigClangType_isBooleanType;
786 extern fn ZigClangType_isBooleanType(*const Type) bool;
787
788 pub const getTypeClassName = ZigClangType_getTypeClassName;
789 extern fn ZigClangType_getTypeClassName(*const Type) [*:0]const u8;
790
791 pub const getAsArrayTypeUnsafe = ZigClangType_getAsArrayTypeUnsafe;
792 extern fn ZigClangType_getAsArrayTypeUnsafe(*const Type) *const ArrayType;
793
794 pub const getAsRecordType = ZigClangType_getAsRecordType;
795 extern fn ZigClangType_getAsRecordType(*const Type) ?*const RecordType;
796
797 pub const getAsUnionType = ZigClangType_getAsUnionType;
798 extern fn ZigClangType_getAsUnionType(*const Type) ?*const RecordType;
799};
800
801pub const TypedefNameDecl = opaque {
802 pub const getUnderlyingType = ZigClangTypedefNameDecl_getUnderlyingType;
803 extern fn ZigClangTypedefNameDecl_getUnderlyingType(*const TypedefNameDecl) QualType;
804
805 pub const getCanonicalDecl = ZigClangTypedefNameDecl_getCanonicalDecl;
806 extern fn ZigClangTypedefNameDecl_getCanonicalDecl(*const TypedefNameDecl) ?*const TypedefNameDecl;
807
808 pub const getLocation = ZigClangTypedefNameDecl_getLocation;
809 extern fn ZigClangTypedefNameDecl_getLocation(*const TypedefNameDecl) SourceLocation;
810};
811
812pub const TypedefType = opaque {
813 pub const getDecl = ZigClangTypedefType_getDecl;
814 extern fn ZigClangTypedefType_getDecl(*const TypedefType) *const TypedefNameDecl;
815};
816
817pub const UnaryExprOrTypeTraitExpr = opaque {
818 pub const getTypeOfArgument = ZigClangUnaryExprOrTypeTraitExpr_getTypeOfArgument;
819 extern fn ZigClangUnaryExprOrTypeTraitExpr_getTypeOfArgument(*const UnaryExprOrTypeTraitExpr) QualType;
820
821 pub const getBeginLoc = ZigClangUnaryExprOrTypeTraitExpr_getBeginLoc;
822 extern fn ZigClangUnaryExprOrTypeTraitExpr_getBeginLoc(*const UnaryExprOrTypeTraitExpr) SourceLocation;
823
824 pub const getKind = ZigClangUnaryExprOrTypeTraitExpr_getKind;
825 extern fn ZigClangUnaryExprOrTypeTraitExpr_getKind(*const UnaryExprOrTypeTraitExpr) UnaryExprOrTypeTrait_Kind;
826};
827
828pub const UnaryOperator = opaque {
829 pub const getOpcode = ZigClangUnaryOperator_getOpcode;
830 extern fn ZigClangUnaryOperator_getOpcode(*const UnaryOperator) UO;
831
832 pub const getType = ZigClangUnaryOperator_getType;
833 extern fn ZigClangUnaryOperator_getType(*const UnaryOperator) QualType;
834
835 pub const getSubExpr = ZigClangUnaryOperator_getSubExpr;
836 extern fn ZigClangUnaryOperator_getSubExpr(*const UnaryOperator) *const Expr;
837
838 pub const getBeginLoc = ZigClangUnaryOperator_getBeginLoc;
839 extern fn ZigClangUnaryOperator_getBeginLoc(*const UnaryOperator) SourceLocation;
840};
841
842pub const ValueDecl = opaque {};
843
844pub const VarDecl = opaque {
845 pub const getLocation = ZigClangVarDecl_getLocation;
846 extern fn ZigClangVarDecl_getLocation(*const VarDecl) SourceLocation;
847
848 pub const hasInit = ZigClangVarDecl_hasInit;
849 extern fn ZigClangVarDecl_hasInit(*const VarDecl) bool;
850
851 pub const getStorageClass = ZigClangVarDecl_getStorageClass;
852 extern fn ZigClangVarDecl_getStorageClass(*const VarDecl) StorageClass;
853
854 pub const getType = ZigClangVarDecl_getType;
855 extern fn ZigClangVarDecl_getType(*const VarDecl) QualType;
856
857 pub const getInit = ZigClangVarDecl_getInit;
858 extern fn ZigClangVarDecl_getInit(*const VarDecl) ?*const Expr;
859
860 pub const getTLSKind = ZigClangVarDecl_getTLSKind;
861 extern fn ZigClangVarDecl_getTLSKind(*const VarDecl) VarDecl_TLSKind;
862
863 pub const getCanonicalDecl = ZigClangVarDecl_getCanonicalDecl;
864 extern fn ZigClangVarDecl_getCanonicalDecl(*const VarDecl) ?*const VarDecl;
865
866 pub const getSectionAttribute = ZigClangVarDecl_getSectionAttribute;
867 extern fn ZigClangVarDecl_getSectionAttribute(*const VarDecl, len: *usize) ?[*]const u8;
868
869 pub const getAlignedAttribute = ZigClangVarDecl_getAlignedAttribute;
870 extern fn ZigClangVarDecl_getAlignedAttribute(*const VarDecl, *const ASTContext) c_uint;
871
872 pub const getTypeSourceInfo_getType = ZigClangVarDecl_getTypeSourceInfo_getType;
873 extern fn ZigClangVarDecl_getTypeSourceInfo_getType(*const VarDecl) QualType;
874};
875
876pub const WhileStmt = opaque {
877 pub const getCond = ZigClangWhileStmt_getCond;
878 extern fn ZigClangWhileStmt_getCond(*const WhileStmt) *const Expr;
879
880 pub const getBody = ZigClangWhileStmt_getBody;
881 extern fn ZigClangWhileStmt_getBody(*const WhileStmt) *const Stmt;
882};
883
884pub const InitListExpr = opaque {
885 pub const getInit = ZigClangInitListExpr_getInit;
886 extern fn ZigClangInitListExpr_getInit(*const InitListExpr, i: c_uint) *const Expr;
887
888 pub const getArrayFiller = ZigClangInitListExpr_getArrayFiller;
889 extern fn ZigClangInitListExpr_getArrayFiller(*const InitListExpr) *const Expr;
890
891 pub const getNumInits = ZigClangInitListExpr_getNumInits;
892 extern fn ZigClangInitListExpr_getNumInits(*const InitListExpr) c_uint;
893
894 pub const getInitializedFieldInUnion = ZigClangInitListExpr_getInitializedFieldInUnion;
895 extern fn ZigClangInitListExpr_getInitializedFieldInUnion(*const InitListExpr) ?*FieldDecl;
896};
897
898pub const BO = extern enum {
89 PtrMemD,899 PtrMemD,
90 PtrMemI,900 PtrMemI,
91 Mul,901 Mul,
...@@ -121,7 +931,7 @@ pub const ZigClangBO = extern enum {...@@ -121,7 +931,7 @@ pub const ZigClangBO = extern enum {
121 Comma,931 Comma,
122};932};
123933
124pub const ZigClangUO = extern enum {934pub const UO = extern enum {
125 PostInc,935 PostInc,
126 PostDec,936 PostDec,
127 PreInc,937 PreInc,
...@@ -138,7 +948,7 @@ pub const ZigClangUO = extern enum {...@@ -138,7 +948,7 @@ pub const ZigClangUO = extern enum {
138 Coawait,948 Coawait,
139};949};
140950
141pub const ZigClangTypeClass = extern enum {951pub const TypeClass = extern enum {
142 Adjusted,952 Adjusted,
143 Decayed,953 Decayed,
144 ConstantArray,954 ConstantArray,
...@@ -189,7 +999,7 @@ pub const ZigClangTypeClass = extern enum {...@@ -189,7 +999,7 @@ pub const ZigClangTypeClass = extern enum {
189 ExtVector,999 ExtVector,
190};1000};
1911001
192const ZigClangStmtClass = extern enum {1002const StmtClass = extern enum {
193 NoStmtClass,1003 NoStmtClass,
194 GCCAsmStmtClass,1004 GCCAsmStmtClass,
195 MSAsmStmtClass,1005 MSAsmStmtClass,
...@@ -399,7 +1209,7 @@ const ZigClangStmtClass = extern enum {...@@ -399,7 +1209,7 @@ const ZigClangStmtClass = extern enum {
399 WhileStmtClass,1209 WhileStmtClass,
400};1210};
4011211
402pub const ZigClangCK = extern enum {1212pub const CK = extern enum {
403 Dependent,1213 Dependent,
404 BitCast,1214 BitCast,
405 LValueBitCast,1215 LValueBitCast,
...@@ -464,24 +1274,7 @@ pub const ZigClangCK = extern enum {...@@ -464,24 +1274,7 @@ pub const ZigClangCK = extern enum {
464 IntToOCLSampler,1274 IntToOCLSampler,
465};1275};
4661276
467pub const ZigClangAPValueKind = extern enum {1277pub const DeclKind = extern enum {
468 None,
469 Indeterminate,
470 Int,
471 Float,
472 FixedPoint,
473 ComplexInt,
474 ComplexFloat,
475 LValue,
476 Vector,
477 Array,
478 Struct,
479 Union,
480 MemberPointer,
481 AddrLabelDiff,
482};
483
484pub const ZigClangDeclKind = extern enum {
485 AccessSpec,1278 AccessSpec,
486 Block,1279 Block,
487 Captured,1280 Captured,
...@@ -563,7 +1356,7 @@ pub const ZigClangDeclKind = extern enum {...@@ -563,7 +1356,7 @@ pub const ZigClangDeclKind = extern enum {
563 TranslationUnit,1356 TranslationUnit,
564};1357};
5651358
566pub const ZigClangBuiltinTypeKind = extern enum {1359pub const BuiltinTypeKind = extern enum {
567 OCLImage1dRO,1360 OCLImage1dRO,
568 OCLImage1dArrayRO,1361 OCLImage1dArrayRO,
569 OCLImage1dBufferRO,1362 OCLImage1dBufferRO,
...@@ -694,7 +1487,7 @@ pub const ZigClangBuiltinTypeKind = extern enum {...@@ -694,7 +1487,7 @@ pub const ZigClangBuiltinTypeKind = extern enum {
694 OMPArraySection,1487 OMPArraySection,
695};1488};
6961489
697pub const ZigClangCallingConv = extern enum {1490pub const CallingConv = extern enum {
698 C,1491 C,
699 X86StdCall,1492 X86StdCall,
700 X86FastCall,1493 X86FastCall,
...@@ -715,7 +1508,7 @@ pub const ZigClangCallingConv = extern enum {...@@ -715,7 +1508,7 @@ pub const ZigClangCallingConv = extern enum {
715 AArch64VectorCall,1508 AArch64VectorCall,
716};1509};
7171510
718pub const ZigClangStorageClass = extern enum {1511pub const StorageClass = extern enum {
719 None,1512 None,
720 Extern,1513 Extern,
721 Static,1514 Static,
...@@ -724,7 +1517,7 @@ pub const ZigClangStorageClass = extern enum {...@@ -724,7 +1517,7 @@ pub const ZigClangStorageClass = extern enum {
724 Register,1517 Register,
725};1518};
7261519
727pub const ZigClangAPFloat_roundingMode = extern enum {1520pub const APFloat_roundingMode = extern enum {
728 NearestTiesToEven,1521 NearestTiesToEven,
729 TowardPositive,1522 TowardPositive,
730 TowardNegative,1523 TowardNegative,
...@@ -732,7 +1525,7 @@ pub const ZigClangAPFloat_roundingMode = extern enum {...@@ -732,7 +1525,7 @@ pub const ZigClangAPFloat_roundingMode = extern enum {
732 NearestTiesToAway,1525 NearestTiesToAway,
733};1526};
7341527
735pub const ZigClangStringLiteral_StringKind = extern enum {1528pub const StringLiteral_StringKind = extern enum {
736 Ascii,1529 Ascii,
737 Wide,1530 Wide,
738 UTF8,1531 UTF8,
...@@ -740,7 +1533,7 @@ pub const ZigClangStringLiteral_StringKind = extern enum {...@@ -740,7 +1533,7 @@ pub const ZigClangStringLiteral_StringKind = extern enum {
740 UTF32,1533 UTF32,
741};1534};
7421535
743pub const ZigClangCharacterLiteral_CharacterKind = extern enum {1536pub const CharacterLiteral_CharacterKind = extern enum {
744 Ascii,1537 Ascii,
745 Wide,1538 Wide,
746 UTF8,1539 UTF8,
...@@ -748,32 +1541,35 @@ pub const ZigClangCharacterLiteral_CharacterKind = extern enum {...@@ -748,32 +1541,35 @@ pub const ZigClangCharacterLiteral_CharacterKind = extern enum {
748 UTF32,1541 UTF32,
749};1542};
7501543
751pub const ZigClangRecordDecl_field_iterator = extern struct {1544pub const VarDecl_TLSKind = extern enum {
752 ptr: *c_void,1545 None,
753};1546 Static,
7541547 Dynamic,
755pub const ZigClangEnumDecl_enumerator_iterator = extern struct {
756 ptr: *c_void,
757};1548};
7581549
759pub const ZigClangPreprocessingRecord_iterator = extern struct {1550pub const ElaboratedTypeKeyword = extern enum {
760 I: c_int,1551 Struct,
761 Self: *ZigClangPreprocessingRecord,1552 Interface,
1553 Union,
1554 Class,
1555 Enum,
1556 Typename,
1557 None,
762};1558};
7631559
764pub const ZigClangPreprocessedEntity_EntityKind = extern enum {1560pub const PreprocessedEntity_EntityKind = extern enum {
765 InvalidKind,1561 InvalidKind,
766 MacroExpansionKind,1562 MacroExpansionKind,
767 MacroDefinitionKind,1563 MacroDefinitionKind,
768 InclusionDirectiveKind,1564 InclusionDirectiveKind,
769};1565};
7701566
771pub const ZigClangExpr_ConstExprUsage = extern enum {1567pub const Expr_ConstExprUsage = extern enum {
772 EvaluateForCodeGen,1568 EvaluateForCodeGen,
773 EvaluateForMangling,1569 EvaluateForMangling,
774};1570};
7751571
776pub const ZigClangUnaryExprOrTypeTrait_Kind = extern enum {1572pub const UnaryExprOrTypeTrait_Kind = extern enum {
777 SizeOf,1573 SizeOf,
778 AlignOf,1574 AlignOf,
779 VecStep,1575 VecStep,
...@@ -781,211 +1577,6 @@ pub const ZigClangUnaryExprOrTypeTrait_Kind = extern enum {...@@ -781,211 +1577,6 @@ pub const ZigClangUnaryExprOrTypeTrait_Kind = extern enum {
781 PreferredAlignOf,1577 PreferredAlignOf,
782};1578};
7831579
784pub extern fn ZigClangSourceManager_getSpellingLoc(self: ?*const struct_ZigClangSourceManager, Loc: struct_ZigClangSourceLocation) struct_ZigClangSourceLocation;
785pub extern fn ZigClangSourceManager_getFilename(self: *const struct_ZigClangSourceManager, SpellingLoc: struct_ZigClangSourceLocation) ?[*:0]const u8;
786pub extern fn ZigClangSourceManager_getSpellingLineNumber(self: ?*const struct_ZigClangSourceManager, Loc: struct_ZigClangSourceLocation) c_uint;
787pub extern fn ZigClangSourceManager_getSpellingColumnNumber(self: ?*const struct_ZigClangSourceManager, Loc: struct_ZigClangSourceLocation) c_uint;
788pub extern fn ZigClangSourceManager_getCharacterData(self: ?*const struct_ZigClangSourceManager, SL: struct_ZigClangSourceLocation) [*:0]const u8;
789pub extern fn ZigClangASTContext_getPointerType(self: ?*const struct_ZigClangASTContext, T: struct_ZigClangQualType) struct_ZigClangQualType;
790pub extern fn ZigClangASTUnit_getASTContext(self: ?*struct_ZigClangASTUnit) ?*struct_ZigClangASTContext;
791pub extern fn ZigClangASTUnit_getSourceManager(self: *struct_ZigClangASTUnit) *struct_ZigClangSourceManager;
792pub extern fn ZigClangASTUnit_visitLocalTopLevelDecls(self: *struct_ZigClangASTUnit, context: ?*c_void, Fn: ?fn (?*c_void, *const ZigClangDecl) callconv(.C) bool) bool;
793pub extern fn ZigClangRecordType_getDecl(record_ty: ?*const struct_ZigClangRecordType) *const struct_ZigClangRecordDecl;
794pub extern fn ZigClangTagDecl_isThisDeclarationADefinition(self: *const ZigClangTagDecl) bool;
795pub extern fn ZigClangEnumType_getDecl(record_ty: ?*const struct_ZigClangEnumType) *const struct_ZigClangEnumDecl;
796pub extern fn ZigClangRecordDecl_getCanonicalDecl(record_decl: ?*const struct_ZigClangRecordDecl) ?*const struct_ZigClangTagDecl;
797pub extern fn ZigClangFieldDecl_getCanonicalDecl(field_decl: ?*const struct_ZigClangFieldDecl) ?*const struct_ZigClangFieldDecl;
798pub extern fn ZigClangFieldDecl_getAlignedAttribute(field_decl: ?*const struct_ZigClangFieldDecl, *const ZigClangASTContext) c_uint;
799pub extern fn ZigClangEnumDecl_getCanonicalDecl(self: ?*const struct_ZigClangEnumDecl) ?*const struct_ZigClangTagDecl;
800pub extern fn ZigClangTypedefNameDecl_getCanonicalDecl(self: ?*const struct_ZigClangTypedefNameDecl) ?*const struct_ZigClangTypedefNameDecl;
801pub extern fn ZigClangFunctionDecl_getCanonicalDecl(self: ?*const struct_ZigClangFunctionDecl) ?*const struct_ZigClangFunctionDecl;
802pub extern fn ZigClangParmVarDecl_getOriginalType(self: ?*const struct_ZigClangParmVarDecl) struct_ZigClangQualType;
803pub extern fn ZigClangVarDecl_getCanonicalDecl(self: ?*const struct_ZigClangVarDecl) ?*const struct_ZigClangVarDecl;
804pub extern fn ZigClangVarDecl_getSectionAttribute(self: *const ZigClangVarDecl, len: *usize) ?[*]const u8;
805pub extern fn ZigClangFunctionDecl_getAlignedAttribute(self: *const ZigClangFunctionDecl, *const ZigClangASTContext) c_uint;
806pub extern fn ZigClangVarDecl_getAlignedAttribute(self: *const ZigClangVarDecl, *const ZigClangASTContext) c_uint;
807pub extern fn ZigClangRecordDecl_getPackedAttribute(self: ?*const struct_ZigClangRecordDecl) bool;
808pub extern fn ZigClangRecordDecl_getDefinition(self: ?*const struct_ZigClangRecordDecl) ?*const struct_ZigClangRecordDecl;
809pub extern fn ZigClangEnumDecl_getDefinition(self: ?*const struct_ZigClangEnumDecl) ?*const struct_ZigClangEnumDecl;
810pub extern fn ZigClangRecordDecl_getLocation(self: ?*const struct_ZigClangRecordDecl) struct_ZigClangSourceLocation;
811pub extern fn ZigClangEnumDecl_getLocation(self: ?*const struct_ZigClangEnumDecl) struct_ZigClangSourceLocation;
812pub extern fn ZigClangTypedefNameDecl_getLocation(self: ?*const struct_ZigClangTypedefNameDecl) struct_ZigClangSourceLocation;
813pub extern fn ZigClangDecl_getLocation(self: *const ZigClangDecl) ZigClangSourceLocation;
814pub extern fn ZigClangRecordDecl_isUnion(record_decl: ?*const struct_ZigClangRecordDecl) bool;
815pub extern fn ZigClangRecordDecl_isStruct(record_decl: ?*const struct_ZigClangRecordDecl) bool;
816pub extern fn ZigClangRecordDecl_isAnonymousStructOrUnion(record_decl: ?*const struct_ZigClangRecordDecl) bool;
817pub extern fn ZigClangRecordDecl_field_begin(*const struct_ZigClangRecordDecl) ZigClangRecordDecl_field_iterator;
818pub extern fn ZigClangRecordDecl_field_end(*const struct_ZigClangRecordDecl) ZigClangRecordDecl_field_iterator;
819pub extern fn ZigClangRecordDecl_field_iterator_next(ZigClangRecordDecl_field_iterator) ZigClangRecordDecl_field_iterator;
820pub extern fn ZigClangRecordDecl_field_iterator_deref(ZigClangRecordDecl_field_iterator) *const struct_ZigClangFieldDecl;
821pub extern fn ZigClangRecordDecl_field_iterator_neq(ZigClangRecordDecl_field_iterator, ZigClangRecordDecl_field_iterator) bool;
822pub extern fn ZigClangEnumDecl_getIntegerType(self: ?*const struct_ZigClangEnumDecl) struct_ZigClangQualType;
823pub extern fn ZigClangEnumDecl_enumerator_begin(*const ZigClangEnumDecl) ZigClangEnumDecl_enumerator_iterator;
824pub extern fn ZigClangEnumDecl_enumerator_end(*const ZigClangEnumDecl) ZigClangEnumDecl_enumerator_iterator;
825pub extern fn ZigClangEnumDecl_enumerator_iterator_next(ZigClangEnumDecl_enumerator_iterator) ZigClangEnumDecl_enumerator_iterator;
826pub extern fn ZigClangEnumDecl_enumerator_iterator_deref(ZigClangEnumDecl_enumerator_iterator) *const ZigClangEnumConstantDecl;
827pub extern fn ZigClangEnumDecl_enumerator_iterator_neq(ZigClangEnumDecl_enumerator_iterator, ZigClangEnumDecl_enumerator_iterator) bool;
828pub extern fn ZigClangDecl_castToNamedDecl(decl: *const ZigClangDecl) ?*const ZigClangNamedDecl;
829pub extern fn ZigClangNamedDecl_getName_bytes_begin(decl: ?*const struct_ZigClangNamedDecl) [*:0]const u8;
830pub extern fn ZigClangSourceLocation_eq(a: struct_ZigClangSourceLocation, b: struct_ZigClangSourceLocation) bool;
831pub extern fn ZigClangTypedefType_getDecl(self: ?*const struct_ZigClangTypedefType) *const struct_ZigClangTypedefNameDecl;
832pub extern fn ZigClangTypedefNameDecl_getUnderlyingType(self: ?*const struct_ZigClangTypedefNameDecl) struct_ZigClangQualType;
833pub extern fn ZigClangQualType_getCanonicalType(self: struct_ZigClangQualType) struct_ZigClangQualType;
834pub extern fn ZigClangQualType_getTypeClass(self: struct_ZigClangQualType) ZigClangTypeClass;
835pub extern fn ZigClangQualType_getTypePtr(self: struct_ZigClangQualType) *const struct_ZigClangType;
836pub extern fn ZigClangQualType_addConst(self: *struct_ZigClangQualType) void;
837pub extern fn ZigClangQualType_eq(self: struct_ZigClangQualType, arg1: struct_ZigClangQualType) bool;
838pub extern fn ZigClangQualType_isConstQualified(self: struct_ZigClangQualType) bool;
839pub extern fn ZigClangQualType_isVolatileQualified(self: struct_ZigClangQualType) bool;
840pub extern fn ZigClangQualType_isRestrictQualified(self: struct_ZigClangQualType) bool;
841pub extern fn ZigClangType_getTypeClass(self: ?*const struct_ZigClangType) ZigClangTypeClass;
842pub extern fn ZigClangType_getPointeeType(self: ?*const struct_ZigClangType) struct_ZigClangQualType;
843pub extern fn ZigClangType_isVoidType(self: ?*const struct_ZigClangType) bool;
844pub extern fn ZigClangType_isConstantArrayType(self: ?*const struct_ZigClangType) bool;
845pub extern fn ZigClangType_isRecordType(self: ?*const struct_ZigClangType) bool;
846pub extern fn ZigClangType_isIncompleteOrZeroLengthArrayType(self: ?*const struct_ZigClangType, *const ZigClangASTContext) bool;
847pub extern fn ZigClangType_isArrayType(self: ?*const struct_ZigClangType) bool;
848pub extern fn ZigClangType_isBooleanType(self: ?*const struct_ZigClangType) bool;
849pub extern fn ZigClangType_getTypeClassName(self: *const struct_ZigClangType) [*:0]const u8;
850pub extern fn ZigClangType_getAsArrayTypeUnsafe(self: *const ZigClangType) *const ZigClangArrayType;
851pub extern fn ZigClangType_getAsRecordType(self: *const ZigClangType) ?*const ZigClangRecordType;
852pub extern fn ZigClangType_getAsUnionType(self: *const ZigClangType) ?*const ZigClangRecordType;
853pub extern fn ZigClangStmt_getBeginLoc(self: *const ZigClangStmt) struct_ZigClangSourceLocation;
854pub extern fn ZigClangStmt_getStmtClass(self: ?*const ZigClangStmt) ZigClangStmtClass;
855pub extern fn ZigClangStmt_classof_Expr(self: ?*const ZigClangStmt) bool;
856pub extern fn ZigClangExpr_getStmtClass(self: *const struct_ZigClangExpr) ZigClangStmtClass;
857pub extern fn ZigClangExpr_getType(self: *const struct_ZigClangExpr) struct_ZigClangQualType;
858pub extern fn ZigClangExpr_getBeginLoc(self: *const struct_ZigClangExpr) struct_ZigClangSourceLocation;
859pub extern fn ZigClangInitListExpr_getInit(self: ?*const struct_ZigClangInitListExpr, i: c_uint) *const ZigClangExpr;
860pub extern fn ZigClangInitListExpr_getArrayFiller(self: ?*const struct_ZigClangInitListExpr) *const ZigClangExpr;
861pub extern fn ZigClangInitListExpr_getNumInits(self: ?*const struct_ZigClangInitListExpr) c_uint;
862pub extern fn ZigClangInitListExpr_getInitializedFieldInUnion(self: ?*const struct_ZigClangInitListExpr) ?*ZigClangFieldDecl;
863pub extern fn ZigClangAPValue_getKind(self: ?*const struct_ZigClangAPValue) ZigClangAPValueKind;
864pub extern fn ZigClangAPValue_getInt(self: ?*const struct_ZigClangAPValue) *const struct_ZigClangAPSInt;
865pub extern fn ZigClangAPValue_getArrayInitializedElts(self: ?*const struct_ZigClangAPValue) c_uint;
866pub extern fn ZigClangAPValue_getArraySize(self: ?*const struct_ZigClangAPValue) c_uint;
867pub extern fn ZigClangAPValue_getLValueBase(self: ?*const struct_ZigClangAPValue) struct_ZigClangAPValueLValueBase;
868pub extern fn ZigClangAPSInt_isSigned(self: *const struct_ZigClangAPSInt) bool;
869pub extern fn ZigClangAPSInt_isNegative(self: *const struct_ZigClangAPSInt) bool;
870pub extern fn ZigClangAPSInt_negate(self: *const struct_ZigClangAPSInt) *const struct_ZigClangAPSInt;
871pub extern fn ZigClangAPSInt_free(self: *const struct_ZigClangAPSInt) void;
872pub extern fn ZigClangAPSInt_getRawData(self: *const struct_ZigClangAPSInt) [*:0]const u64;
873pub extern fn ZigClangAPSInt_getNumWords(self: *const struct_ZigClangAPSInt) c_uint;
874
875pub extern fn ZigClangAPInt_getLimitedValue(self: *const struct_ZigClangAPInt, limit: u64) u64;
876pub extern fn ZigClangAPValueLValueBase_dyn_cast_Expr(self: struct_ZigClangAPValueLValueBase) ?*const struct_ZigClangExpr;
877pub extern fn ZigClangASTUnit_delete(self: ?*struct_ZigClangASTUnit) void;
878
879pub extern fn ZigClangFunctionDecl_getType(self: *const ZigClangFunctionDecl) struct_ZigClangQualType;
880pub extern fn ZigClangFunctionDecl_getLocation(self: *const ZigClangFunctionDecl) struct_ZigClangSourceLocation;
881pub extern fn ZigClangFunctionDecl_hasBody(self: *const ZigClangFunctionDecl) bool;
882pub extern fn ZigClangFunctionDecl_getStorageClass(self: *const ZigClangFunctionDecl) ZigClangStorageClass;
883pub extern fn ZigClangFunctionDecl_getParamDecl(self: *const ZigClangFunctionDecl, i: c_uint) *const struct_ZigClangParmVarDecl;
884pub extern fn ZigClangFunctionDecl_getBody(self: *const ZigClangFunctionDecl) *const ZigClangStmt;
885pub extern fn ZigClangFunctionDecl_doesDeclarationForceExternallyVisibleDefinition(self: *const ZigClangFunctionDecl) bool;
886pub extern fn ZigClangFunctionDecl_isThisDeclarationADefinition(self: *const ZigClangFunctionDecl) bool;
887pub extern fn ZigClangFunctionDecl_doesThisDeclarationHaveABody(self: *const ZigClangFunctionDecl) bool;
888pub extern fn ZigClangFunctionDecl_isInlineSpecified(self: *const ZigClangFunctionDecl) bool;
889pub extern fn ZigClangFunctionDecl_isDefined(self: *const ZigClangFunctionDecl) bool;
890pub extern fn ZigClangFunctionDecl_getDefinition(self: *const ZigClangFunctionDecl) ?*const struct_ZigClangFunctionDecl;
891pub extern fn ZigClangFunctionDecl_getSectionAttribute(self: *const ZigClangFunctionDecl, len: *usize) ?[*]const u8;
892
893pub extern fn ZigClangBuiltinType_getKind(self: *const struct_ZigClangBuiltinType) ZigClangBuiltinTypeKind;
894
895pub extern fn ZigClangFunctionType_getNoReturnAttr(self: *const ZigClangFunctionType) bool;
896pub extern fn ZigClangFunctionType_getCallConv(self: *const ZigClangFunctionType) ZigClangCallingConv;
897pub extern fn ZigClangFunctionType_getReturnType(self: *const ZigClangFunctionType) ZigClangQualType;
898
899pub extern fn ZigClangFunctionProtoType_isVariadic(self: *const struct_ZigClangFunctionProtoType) bool;
900pub extern fn ZigClangFunctionProtoType_getNumParams(self: *const struct_ZigClangFunctionProtoType) c_uint;
901pub extern fn ZigClangFunctionProtoType_getParamType(self: *const struct_ZigClangFunctionProtoType, i: c_uint) ZigClangQualType;
902pub extern fn ZigClangFunctionProtoType_getReturnType(self: *const ZigClangFunctionProtoType) ZigClangQualType;
903
904pub const ZigClangSourceLocation = struct_ZigClangSourceLocation;
905pub const ZigClangQualType = struct_ZigClangQualType;
906pub const ZigClangConditionalOperator = struct_ZigClangConditionalOperator;
907pub const ZigClangBinaryConditionalOperator = struct_ZigClangBinaryConditionalOperator;
908pub const ZigClangAbstractConditionalOperator = struct_ZigClangAbstractConditionalOperator;
909pub const ZigClangAPValueLValueBase = struct_ZigClangAPValueLValueBase;
910pub const ZigClangAPValue = struct_ZigClangAPValue;
911pub const ZigClangAPSInt = struct_ZigClangAPSInt;
912pub const ZigClangAPFloat = struct_ZigClangAPFloat;
913pub const ZigClangASTContext = struct_ZigClangASTContext;
914pub const ZigClangASTUnit = struct_ZigClangASTUnit;
915pub const ZigClangArraySubscriptExpr = struct_ZigClangArraySubscriptExpr;
916pub const ZigClangArrayType = struct_ZigClangArrayType;
917pub const ZigClangAttributedType = struct_ZigClangAttributedType;
918pub const ZigClangBinaryOperator = struct_ZigClangBinaryOperator;
919pub const ZigClangBreakStmt = struct_ZigClangBreakStmt;
920pub const ZigClangBuiltinType = struct_ZigClangBuiltinType;
921pub const ZigClangCStyleCastExpr = struct_ZigClangCStyleCastExpr;
922pub const ZigClangCallExpr = struct_ZigClangCallExpr;
923pub const ZigClangCaseStmt = struct_ZigClangCaseStmt;
924pub const ZigClangCompoundAssignOperator = struct_ZigClangCompoundAssignOperator;
925pub const ZigClangCompoundStmt = struct_ZigClangCompoundStmt;
926pub const ZigClangConstantArrayType = struct_ZigClangConstantArrayType;
927pub const ZigClangContinueStmt = struct_ZigClangContinueStmt;
928pub const ZigClangDecayedType = struct_ZigClangDecayedType;
929pub const ZigClangDeclRefExpr = struct_ZigClangDeclRefExpr;
930pub const ZigClangDeclStmt = struct_ZigClangDeclStmt;
931pub const ZigClangDefaultStmt = struct_ZigClangDefaultStmt;
932pub const ZigClangDiagnosticOptions = struct_ZigClangDiagnosticOptions;
933pub const ZigClangDiagnosticsEngine = struct_ZigClangDiagnosticsEngine;
934pub const ZigClangDoStmt = struct_ZigClangDoStmt;
935pub const ZigClangElaboratedType = struct_ZigClangElaboratedType;
936pub const ZigClangEnumConstantDecl = struct_ZigClangEnumConstantDecl;
937pub const ZigClangEnumDecl = struct_ZigClangEnumDecl;
938pub const ZigClangEnumType = struct_ZigClangEnumType;
939pub const ZigClangExpr = struct_ZigClangExpr;
940pub const ZigClangFieldDecl = struct_ZigClangFieldDecl;
941pub const ZigClangFileID = struct_ZigClangFileID;
942pub const ZigClangForStmt = struct_ZigClangForStmt;
943pub const ZigClangFullSourceLoc = struct_ZigClangFullSourceLoc;
944pub const ZigClangFunctionDecl = struct_ZigClangFunctionDecl;
945pub const ZigClangFunctionProtoType = struct_ZigClangFunctionProtoType;
946pub const ZigClangIfStmt = struct_ZigClangIfStmt;
947pub const ZigClangImplicitCastExpr = struct_ZigClangImplicitCastExpr;
948pub const ZigClangIncompleteArrayType = struct_ZigClangIncompleteArrayType;
949pub const ZigClangIntegerLiteral = struct_ZigClangIntegerLiteral;
950pub const ZigClangMacroDefinitionRecord = struct_ZigClangMacroDefinitionRecord;
951pub const ZigClangMacroExpansion = struct_ZigClangMacroExpansion;
952pub const ZigClangMacroQualifiedType = struct_ZigClangMacroQualifiedType;
953pub const ZigClangMemberExpr = struct_ZigClangMemberExpr;
954pub const ZigClangNamedDecl = struct_ZigClangNamedDecl;
955pub const ZigClangNone = struct_ZigClangNone;
956pub const ZigClangOpaqueValueExpr = struct_ZigClangOpaqueValueExpr;
957pub const ZigClangPCHContainerOperations = struct_ZigClangPCHContainerOperations;
958pub const ZigClangParenExpr = struct_ZigClangParenExpr;
959pub const ZigClangParenType = struct_ZigClangParenType;
960pub const ZigClangParmVarDecl = struct_ZigClangParmVarDecl;
961pub const ZigClangPointerType = struct_ZigClangPointerType;
962pub const ZigClangPreprocessedEntity = struct_ZigClangPreprocessedEntity;
963pub const ZigClangRecordDecl = struct_ZigClangRecordDecl;
964pub const ZigClangRecordType = struct_ZigClangRecordType;
965pub const ZigClangReturnStmt = struct_ZigClangReturnStmt;
966pub const ZigClangSkipFunctionBodiesScope = struct_ZigClangSkipFunctionBodiesScope;
967pub const ZigClangSourceManager = struct_ZigClangSourceManager;
968pub const ZigClangSourceRange = struct_ZigClangSourceRange;
969pub const ZigClangStringLiteral = struct_ZigClangStringLiteral;
970pub const ZigClangStringRef = struct_ZigClangStringRef;
971pub const ZigClangSwitchStmt = struct_ZigClangSwitchStmt;
972pub const ZigClangTagDecl = struct_ZigClangTagDecl;
973pub const ZigClangType = struct_ZigClangType;
974pub const ZigClangTypedefNameDecl = struct_ZigClangTypedefNameDecl;
975pub const ZigClangTypedefType = struct_ZigClangTypedefType;
976pub const ZigClangUnaryExprOrTypeTraitExpr = struct_ZigClangUnaryExprOrTypeTraitExpr;
977pub const ZigClangUnaryOperator = struct_ZigClangUnaryOperator;
978pub const ZigClangValueDecl = struct_ZigClangValueDecl;
979pub const ZigClangVarDecl = struct_ZigClangVarDecl;
980pub const ZigClangWhileStmt = struct_ZigClangWhileStmt;
981pub const ZigClangFunctionType = struct_ZigClangFunctionType;
982pub const ZigClangPredefinedExpr = struct_ZigClangPredefinedExpr;
983pub const ZigClangInitListExpr = struct_ZigClangInitListExpr;
984
985pub const struct_ZigClangSourceLocation = extern struct {
986 ID: c_uint,
987};
988
989pub const Stage2ErrorMsg = extern struct {1580pub const Stage2ErrorMsg = extern struct {
990 filename_ptr: ?[*]const u8,1581 filename_ptr: ?[*]const u8,
991 filename_len: usize,1582 filename_len: usize,
...@@ -999,199 +1590,16 @@ pub const Stage2ErrorMsg = extern struct {...@@ -999,199 +1590,16 @@ pub const Stage2ErrorMsg = extern struct {
999 column: c_uint,1590 column: c_uint,
1000 // byte offset into source1591 // byte offset into source
1001 offset: c_uint,1592 offset: c_uint,
1002};
10031593
1004pub const struct_ZigClangQualType = extern struct {1594 pub const delete = ZigClangErrorMsg_delete;
1005 ptr: ?*c_void,1595 extern fn ZigClangErrorMsg_delete(ptr: [*]Stage2ErrorMsg, len: usize) void;
1006};1596};
10071597
1008pub const struct_ZigClangAPValueLValueBase = extern struct {1598pub const LoadFromCommandLine = ZigClangLoadFromCommandLine;
1009 Ptr: ?*c_void,1599extern fn ZigClangLoadFromCommandLine(
1010 CallIndex: c_uint,
1011 Version: c_uint,
1012};
1013
1014pub extern fn ZigClangErrorMsg_delete(ptr: [*]Stage2ErrorMsg, len: usize) void;
1015
1016pub extern fn ZigClangLoadFromCommandLine(
1017 args_begin: [*]?[*]const u8,1600 args_begin: [*]?[*]const u8,
1018 args_end: [*]?[*]const u8,1601 args_end: [*]?[*]const u8,
1019 errors_ptr: *[*]Stage2ErrorMsg,1602 errors_ptr: *[*]Stage2ErrorMsg,
1020 errors_len: *usize,1603 errors_len: *usize,
1021 resources_path: [*:0]const u8,1604 resources_path: [*:0]const u8,
1022) ?*ZigClangASTUnit;1605) ?*ASTUnit;
1023
1024pub extern fn ZigClangDecl_getKind(decl: *const ZigClangDecl) ZigClangDeclKind;
1025pub extern fn ZigClangDecl_getDeclKindName(decl: *const ZigClangDecl) [*:0]const u8;
1026
1027pub const ZigClangCompoundStmt_const_body_iterator = [*]const *ZigClangStmt;
1028
1029pub extern fn ZigClangCompoundStmt_body_begin(self: *const ZigClangCompoundStmt) ZigClangCompoundStmt_const_body_iterator;
1030pub extern fn ZigClangCompoundStmt_body_end(self: *const ZigClangCompoundStmt) ZigClangCompoundStmt_const_body_iterator;
1031
1032pub const ZigClangDeclStmt_const_decl_iterator = [*]const *ZigClangDecl;
1033
1034pub extern fn ZigClangDeclStmt_decl_begin(self: *const ZigClangDeclStmt) ZigClangDeclStmt_const_decl_iterator;
1035pub extern fn ZigClangDeclStmt_decl_end(self: *const ZigClangDeclStmt) ZigClangDeclStmt_const_decl_iterator;
1036
1037pub extern fn ZigClangVarDecl_getLocation(self: *const struct_ZigClangVarDecl) ZigClangSourceLocation;
1038pub extern fn ZigClangVarDecl_hasInit(self: *const struct_ZigClangVarDecl) bool;
1039pub extern fn ZigClangVarDecl_getStorageClass(self: *const ZigClangVarDecl) ZigClangStorageClass;
1040pub extern fn ZigClangVarDecl_getType(self: ?*const struct_ZigClangVarDecl) struct_ZigClangQualType;
1041pub extern fn ZigClangVarDecl_getInit(*const ZigClangVarDecl) ?*const ZigClangExpr;
1042pub extern fn ZigClangVarDecl_getTLSKind(self: ?*const struct_ZigClangVarDecl) ZigClangVarDecl_TLSKind;
1043pub const ZigClangVarDecl_TLSKind = extern enum {
1044 None,
1045 Static,
1046 Dynamic,
1047};
1048
1049pub extern fn ZigClangImplicitCastExpr_getBeginLoc(*const ZigClangImplicitCastExpr) ZigClangSourceLocation;
1050pub extern fn ZigClangImplicitCastExpr_getCastKind(*const ZigClangImplicitCastExpr) ZigClangCK;
1051pub extern fn ZigClangImplicitCastExpr_getSubExpr(*const ZigClangImplicitCastExpr) *const ZigClangExpr;
1052
1053pub extern fn ZigClangArrayType_getElementType(*const ZigClangArrayType) ZigClangQualType;
1054pub extern fn ZigClangIncompleteArrayType_getElementType(*const ZigClangIncompleteArrayType) ZigClangQualType;
1055
1056pub extern fn ZigClangConstantArrayType_getElementType(self: *const struct_ZigClangConstantArrayType) ZigClangQualType;
1057pub extern fn ZigClangConstantArrayType_getSize(self: *const struct_ZigClangConstantArrayType) *const struct_ZigClangAPInt;
1058pub extern fn ZigClangDeclRefExpr_getDecl(*const ZigClangDeclRefExpr) *const ZigClangValueDecl;
1059pub extern fn ZigClangDeclRefExpr_getFoundDecl(*const ZigClangDeclRefExpr) *const ZigClangNamedDecl;
1060
1061pub extern fn ZigClangParenType_getInnerType(*const ZigClangParenType) ZigClangQualType;
1062
1063pub extern fn ZigClangElaboratedType_getNamedType(*const ZigClangElaboratedType) ZigClangQualType;
1064
1065pub extern fn ZigClangAttributedType_getEquivalentType(*const ZigClangAttributedType) ZigClangQualType;
1066
1067pub extern fn ZigClangMacroQualifiedType_getModifiedType(*const ZigClangMacroQualifiedType) ZigClangQualType;
1068
1069pub extern fn ZigClangCStyleCastExpr_getBeginLoc(*const ZigClangCStyleCastExpr) ZigClangSourceLocation;
1070pub extern fn ZigClangCStyleCastExpr_getSubExpr(*const ZigClangCStyleCastExpr) *const ZigClangExpr;
1071pub extern fn ZigClangCStyleCastExpr_getType(*const ZigClangCStyleCastExpr) ZigClangQualType;
1072
1073pub const ZigClangExprEvalResult = struct_ZigClangExprEvalResult;
1074pub const struct_ZigClangExprEvalResult = extern struct {
1075 HasSideEffects: bool,
1076 HasUndefinedBehavior: bool,
1077 SmallVectorImpl: ?*c_void,
1078 Val: ZigClangAPValue,
1079};
1080
1081pub const struct_ZigClangAPValue = extern struct {
1082 Kind: ZigClangAPValueKind,
1083 Data: if (builtin.os.tag == .windows and builtin.abi == .msvc) [52]u8 else [68]u8,
1084};
1085pub extern fn ZigClangVarDecl_getTypeSourceInfo_getType(self: *const struct_ZigClangVarDecl) struct_ZigClangQualType;
1086
1087pub extern fn ZigClangIntegerLiteral_EvaluateAsInt(*const ZigClangIntegerLiteral, *ZigClangExprEvalResult, *const ZigClangASTContext) bool;
1088pub extern fn ZigClangIntegerLiteral_getBeginLoc(*const ZigClangIntegerLiteral) ZigClangSourceLocation;
1089pub extern fn ZigClangIntegerLiteral_isZero(*const ZigClangIntegerLiteral, *bool, *const ZigClangASTContext) bool;
1090
1091pub extern fn ZigClangReturnStmt_getRetValue(*const ZigClangReturnStmt) ?*const ZigClangExpr;
1092
1093pub extern fn ZigClangBinaryOperator_getOpcode(*const ZigClangBinaryOperator) ZigClangBO;
1094pub extern fn ZigClangBinaryOperator_getBeginLoc(*const ZigClangBinaryOperator) ZigClangSourceLocation;
1095pub extern fn ZigClangBinaryOperator_getLHS(*const ZigClangBinaryOperator) *const ZigClangExpr;
1096pub extern fn ZigClangBinaryOperator_getRHS(*const ZigClangBinaryOperator) *const ZigClangExpr;
1097pub extern fn ZigClangBinaryOperator_getType(*const ZigClangBinaryOperator) ZigClangQualType;
1098
1099pub extern fn ZigClangDecayedType_getDecayedType(*const ZigClangDecayedType) ZigClangQualType;
1100
1101pub extern fn ZigClangStringLiteral_getKind(*const ZigClangStringLiteral) ZigClangStringLiteral_StringKind;
1102pub extern fn ZigClangStringLiteral_getString_bytes_begin_size(*const ZigClangStringLiteral, *usize) [*]const u8;
1103
1104pub extern fn ZigClangParenExpr_getSubExpr(*const ZigClangParenExpr) *const ZigClangExpr;
1105
1106pub extern fn ZigClangFieldDecl_isAnonymousStructOrUnion(*const struct_ZigClangFieldDecl) bool;
1107pub extern fn ZigClangFieldDecl_isBitField(*const struct_ZigClangFieldDecl) bool;
1108pub extern fn ZigClangFieldDecl_getType(*const struct_ZigClangFieldDecl) struct_ZigClangQualType;
1109pub extern fn ZigClangFieldDecl_getLocation(*const struct_ZigClangFieldDecl) struct_ZigClangSourceLocation;
1110
1111pub extern fn ZigClangEnumConstantDecl_getInitExpr(*const ZigClangEnumConstantDecl) ?*const ZigClangExpr;
1112pub extern fn ZigClangEnumConstantDecl_getInitVal(*const ZigClangEnumConstantDecl) *const ZigClangAPSInt;
1113
1114pub extern fn ZigClangASTUnit_getLocalPreprocessingEntities_begin(*ZigClangASTUnit) ZigClangPreprocessingRecord_iterator;
1115pub extern fn ZigClangASTUnit_getLocalPreprocessingEntities_end(*ZigClangASTUnit) ZigClangPreprocessingRecord_iterator;
1116pub extern fn ZigClangPreprocessingRecord_iterator_deref(ZigClangPreprocessingRecord_iterator) *ZigClangPreprocessedEntity;
1117pub extern fn ZigClangPreprocessedEntity_getKind(*const ZigClangPreprocessedEntity) ZigClangPreprocessedEntity_EntityKind;
1118
1119pub extern fn ZigClangMacroDefinitionRecord_getName_getNameStart(*const ZigClangMacroDefinitionRecord) [*:0]const u8;
1120pub extern fn ZigClangMacroDefinitionRecord_getSourceRange_getBegin(*const ZigClangMacroDefinitionRecord) ZigClangSourceLocation;
1121pub extern fn ZigClangMacroDefinitionRecord_getSourceRange_getEnd(*const ZigClangMacroDefinitionRecord) ZigClangSourceLocation;
1122
1123pub extern fn ZigClangMacroExpansion_getDefinition(*const ZigClangMacroExpansion) *const ZigClangMacroDefinitionRecord;
1124
1125pub extern fn ZigClangIfStmt_getThen(*const ZigClangIfStmt) *const ZigClangStmt;
1126pub extern fn ZigClangIfStmt_getElse(*const ZigClangIfStmt) ?*const ZigClangStmt;
1127pub extern fn ZigClangIfStmt_getCond(*const ZigClangIfStmt) *const ZigClangStmt;
1128
1129pub extern fn ZigClangWhileStmt_getCond(*const ZigClangWhileStmt) *const ZigClangExpr;
1130pub extern fn ZigClangWhileStmt_getBody(*const ZigClangWhileStmt) *const ZigClangStmt;
1131
1132pub extern fn ZigClangDoStmt_getCond(*const ZigClangDoStmt) *const ZigClangExpr;
1133pub extern fn ZigClangDoStmt_getBody(*const ZigClangDoStmt) *const ZigClangStmt;
1134
1135pub extern fn ZigClangForStmt_getInit(*const ZigClangForStmt) ?*const ZigClangStmt;
1136pub extern fn ZigClangForStmt_getCond(*const ZigClangForStmt) ?*const ZigClangExpr;
1137pub extern fn ZigClangForStmt_getInc(*const ZigClangForStmt) ?*const ZigClangExpr;
1138pub extern fn ZigClangForStmt_getBody(*const ZigClangForStmt) *const ZigClangStmt;
1139
1140pub extern fn ZigClangAPFloat_toString(self: *const ZigClangAPFloat, precision: c_uint, maxPadding: c_uint, truncateZero: bool) [*:0]const u8;
1141pub extern fn ZigClangAPFloat_getValueAsApproximateDouble(*const ZigClangFloatingLiteral) f64;
1142
1143pub extern fn ZigClangAbstractConditionalOperator_getCond(*const ZigClangAbstractConditionalOperator) *const ZigClangExpr;
1144pub extern fn ZigClangAbstractConditionalOperator_getTrueExpr(*const ZigClangAbstractConditionalOperator) *const ZigClangExpr;
1145pub extern fn ZigClangAbstractConditionalOperator_getFalseExpr(*const ZigClangAbstractConditionalOperator) *const ZigClangExpr;
1146
1147pub extern fn ZigClangSwitchStmt_getConditionVariableDeclStmt(*const ZigClangSwitchStmt) ?*const ZigClangDeclStmt;
1148pub extern fn ZigClangSwitchStmt_getCond(*const ZigClangSwitchStmt) *const ZigClangExpr;
1149pub extern fn ZigClangSwitchStmt_getBody(*const ZigClangSwitchStmt) *const ZigClangStmt;
1150pub extern fn ZigClangSwitchStmt_isAllEnumCasesCovered(*const ZigClangSwitchStmt) bool;
1151
1152pub extern fn ZigClangCaseStmt_getLHS(*const ZigClangCaseStmt) *const ZigClangExpr;
1153pub extern fn ZigClangCaseStmt_getRHS(*const ZigClangCaseStmt) ?*const ZigClangExpr;
1154pub extern fn ZigClangCaseStmt_getBeginLoc(*const ZigClangCaseStmt) ZigClangSourceLocation;
1155pub extern fn ZigClangCaseStmt_getSubStmt(*const ZigClangCaseStmt) *const ZigClangStmt;
1156
1157pub extern fn ZigClangDefaultStmt_getSubStmt(*const ZigClangDefaultStmt) *const ZigClangStmt;
1158
1159pub extern fn ZigClangExpr_EvaluateAsConstantExpr(*const ZigClangExpr, *ZigClangExprEvalResult, ZigClangExpr_ConstExprUsage, *const ZigClangASTContext) bool;
1160
1161pub extern fn ZigClangPredefinedExpr_getFunctionName(*const ZigClangPredefinedExpr) *const ZigClangStringLiteral;
1162
1163pub extern fn ZigClangCharacterLiteral_getBeginLoc(*const ZigClangCharacterLiteral) ZigClangSourceLocation;
1164pub extern fn ZigClangCharacterLiteral_getKind(*const ZigClangCharacterLiteral) ZigClangCharacterLiteral_CharacterKind;
1165pub extern fn ZigClangCharacterLiteral_getValue(*const ZigClangCharacterLiteral) c_uint;
1166
1167pub extern fn ZigClangStmtExpr_getSubStmt(*const ZigClangStmtExpr) *const ZigClangCompoundStmt;
1168
1169pub extern fn ZigClangMemberExpr_getBase(*const ZigClangMemberExpr) *const ZigClangExpr;
1170pub extern fn ZigClangMemberExpr_isArrow(*const ZigClangMemberExpr) bool;
1171pub extern fn ZigClangMemberExpr_getMemberDecl(*const ZigClangMemberExpr) *const ZigClangValueDecl;
1172
1173pub extern fn ZigClangArraySubscriptExpr_getBase(*const ZigClangArraySubscriptExpr) *const ZigClangExpr;
1174pub extern fn ZigClangArraySubscriptExpr_getIdx(*const ZigClangArraySubscriptExpr) *const ZigClangExpr;
1175
1176pub extern fn ZigClangCallExpr_getCallee(*const ZigClangCallExpr) *const ZigClangExpr;
1177pub extern fn ZigClangCallExpr_getNumArgs(*const ZigClangCallExpr) c_uint;
1178pub extern fn ZigClangCallExpr_getArgs(*const ZigClangCallExpr) [*]const *const ZigClangExpr;
1179
1180pub extern fn ZigClangUnaryExprOrTypeTraitExpr_getTypeOfArgument(*const ZigClangUnaryExprOrTypeTraitExpr) ZigClangQualType;
1181pub extern fn ZigClangUnaryExprOrTypeTraitExpr_getBeginLoc(*const ZigClangUnaryExprOrTypeTraitExpr) ZigClangSourceLocation;
1182pub extern fn ZigClangUnaryExprOrTypeTraitExpr_getKind(*const ZigClangUnaryExprOrTypeTraitExpr) ZigClangUnaryExprOrTypeTrait_Kind;
1183
1184pub extern fn ZigClangUnaryOperator_getOpcode(*const ZigClangUnaryOperator) ZigClangUO;
1185pub extern fn ZigClangUnaryOperator_getType(*const ZigClangUnaryOperator) ZigClangQualType;
1186pub extern fn ZigClangUnaryOperator_getSubExpr(*const ZigClangUnaryOperator) *const ZigClangExpr;
1187pub extern fn ZigClangUnaryOperator_getBeginLoc(*const ZigClangUnaryOperator) ZigClangSourceLocation;
1188
1189pub extern fn ZigClangOpaqueValueExpr_getSourceExpr(*const ZigClangOpaqueValueExpr) ?*const ZigClangExpr;
1190
1191pub extern fn ZigClangCompoundAssignOperator_getType(*const ZigClangCompoundAssignOperator) ZigClangQualType;
1192pub extern fn ZigClangCompoundAssignOperator_getComputationLHSType(*const ZigClangCompoundAssignOperator) ZigClangQualType;
1193pub extern fn ZigClangCompoundAssignOperator_getComputationResultType(*const ZigClangCompoundAssignOperator) ZigClangQualType;
1194pub extern fn ZigClangCompoundAssignOperator_getBeginLoc(*const ZigClangCompoundAssignOperator) ZigClangSourceLocation;
1195pub extern fn ZigClangCompoundAssignOperator_getOpcode(*const ZigClangCompoundAssignOperator) ZigClangBO;
1196pub extern fn ZigClangCompoundAssignOperator_getLHS(*const ZigClangCompoundAssignOperator) *const ZigClangExpr;
1197pub extern fn ZigClangCompoundAssignOperator_getRHS(*const ZigClangCompoundAssignOperator) *const ZigClangExpr;
src/translate_c.zig+662-670
...@@ -5,7 +5,7 @@ const std = @import("std");...@@ -5,7 +5,7 @@ const std = @import("std");
5const assert = std.debug.assert;5const assert = std.debug.assert;
6const ast = std.zig.ast;6const ast = std.zig.ast;
7const Token = std.zig.Token;7const Token = std.zig.Token;
8usingnamespace @import("clang.zig");8const clang = @import("clang.zig");
9const ctok = std.c.tokenizer;9const ctok = std.c.tokenizer;
10const CToken = std.c.Token;10const CToken = std.c.Token;
11const mem = std.mem;11const mem = std.mem;
...@@ -13,7 +13,7 @@ const math = std.math;...@@ -13,7 +13,7 @@ const math = std.math;
1313
14const CallingConvention = std.builtin.CallingConvention;14const CallingConvention = std.builtin.CallingConvention;
1515
16pub const ClangErrMsg = Stage2ErrorMsg;16pub const ClangErrMsg = clang.Stage2ErrorMsg;
1717
18pub const Error = error{OutOfMemory};18pub const Error = error{OutOfMemory};
19const TypeError = Error || error{UnsupportedType};19const TypeError = Error || error{UnsupportedType};
...@@ -259,11 +259,11 @@ pub const Context = struct {...@@ -259,11 +259,11 @@ pub const Context = struct {
259 errors: std.ArrayListUnmanaged(ast.Error),259 errors: std.ArrayListUnmanaged(ast.Error),
260 source_buffer: *std.ArrayList(u8),260 source_buffer: *std.ArrayList(u8),
261 err: Error,261 err: Error,
262 source_manager: *ZigClangSourceManager,262 source_manager: *clang.SourceManager,
263 decl_table: DeclTable,263 decl_table: DeclTable,
264 alias_list: AliasList,264 alias_list: AliasList,
265 global_scope: *Scope.Root,265 global_scope: *Scope.Root,
266 clang_context: *ZigClangASTContext,266 clang_context: *clang.ASTContext,
267 mangle_count: u32 = 0,267 mangle_count: u32 = 0,
268 root_decls: std.ArrayListUnmanaged(*ast.Node),268 root_decls: std.ArrayListUnmanaged(*ast.Node),
269269
...@@ -284,13 +284,13 @@ pub const Context = struct {...@@ -284,13 +284,13 @@ pub const Context = struct {
284 }284 }
285285
286 /// Convert a clang source location to a file:line:column string286 /// Convert a clang source location to a file:line:column string
287 fn locStr(c: *Context, loc: ZigClangSourceLocation) ![]u8 {287 fn locStr(c: *Context, loc: clang.SourceLocation) ![]u8 {
288 const spelling_loc = ZigClangSourceManager_getSpellingLoc(c.source_manager, loc);288 const spelling_loc = c.source_manager.getSpellingLoc(loc);
289 const filename_c = ZigClangSourceManager_getFilename(c.source_manager, spelling_loc);289 const filename_c = c.source_manager.getFilename(spelling_loc);
290 const filename = if (filename_c) |s| try c.str(s) else @as([]const u8, "(no file)");290 const filename = if (filename_c) |s| try c.str(s) else @as([]const u8, "(no file)");
291291
292 const line = ZigClangSourceManager_getSpellingLineNumber(c.source_manager, spelling_loc);292 const line = c.source_manager.getSpellingLineNumber(spelling_loc);
293 const column = ZigClangSourceManager_getSpellingColumnNumber(c.source_manager, spelling_loc);293 const column = c.source_manager.getSpellingColumnNumber(spelling_loc);
294 return std.fmt.allocPrint(c.arena, "{}:{}:{}", .{ filename, line, column });294 return std.fmt.allocPrint(c.arena, "{}:{}:{}", .{ filename, line, column });
295 }295 }
296296
...@@ -336,7 +336,7 @@ pub fn translate(...@@ -336,7 +336,7 @@ pub fn translate(
336 errors: *[]ClangErrMsg,336 errors: *[]ClangErrMsg,
337 resources_path: [*:0]const u8,337 resources_path: [*:0]const u8,
338) !*ast.Tree {338) !*ast.Tree {
339 const ast_unit = ZigClangLoadFromCommandLine(339 const ast_unit = clang.LoadFromCommandLine(
340 args_begin,340 args_begin,
341 args_end,341 args_end,
342 &errors.ptr,342 &errors.ptr,
...@@ -346,7 +346,7 @@ pub fn translate(...@@ -346,7 +346,7 @@ pub fn translate(
346 if (errors.len == 0) return error.ASTUnitFailure;346 if (errors.len == 0) return error.ASTUnitFailure;
347 return error.SemanticAnalyzeFail;347 return error.SemanticAnalyzeFail;
348 };348 };
349 defer ZigClangASTUnit_delete(ast_unit);349 defer ast_unit.delete();
350350
351 var source_buffer = std.ArrayList(u8).init(gpa);351 var source_buffer = std.ArrayList(u8).init(gpa);
352 defer source_buffer.deinit();352 defer source_buffer.deinit();
...@@ -360,12 +360,12 @@ pub fn translate(...@@ -360,12 +360,12 @@ pub fn translate(
360 .gpa = gpa,360 .gpa = gpa,
361 .arena = &arena.allocator,361 .arena = &arena.allocator,
362 .source_buffer = &source_buffer,362 .source_buffer = &source_buffer,
363 .source_manager = ZigClangASTUnit_getSourceManager(ast_unit),363 .source_manager = ast_unit.getSourceManager(),
364 .err = undefined,364 .err = undefined,
365 .decl_table = DeclTable.init(gpa),365 .decl_table = DeclTable.init(gpa),
366 .alias_list = AliasList.init(gpa),366 .alias_list = AliasList.init(gpa),
367 .global_scope = try arena.allocator.create(Scope.Root),367 .global_scope = try arena.allocator.create(Scope.Root),
368 .clang_context = ZigClangASTUnit_getASTContext(ast_unit).?,368 .clang_context = ast_unit.getASTContext(),
369 .global_names = std.StringArrayHashMap(void).init(gpa),369 .global_names = std.StringArrayHashMap(void).init(gpa),
370 .token_ids = .{},370 .token_ids = .{},
371 .token_locs = .{},371 .token_locs = .{},
...@@ -383,7 +383,7 @@ pub fn translate(...@@ -383,7 +383,7 @@ pub fn translate(
383383
384 try prepopulateGlobalNameTable(ast_unit, &context);384 try prepopulateGlobalNameTable(ast_unit, &context);
385385
386 if (!ZigClangASTUnit_visitLocalTopLevelDecls(ast_unit, &context, declVisitorC)) {386 if (!ast_unit.visitLocalTopLevelDecls(&context, declVisitorC)) {
387 return context.err;387 return context.err;
388 }388 }
389389
...@@ -421,21 +421,21 @@ pub fn translate(...@@ -421,21 +421,21 @@ pub fn translate(
421 return tree;421 return tree;
422}422}
423423
424fn prepopulateGlobalNameTable(ast_unit: *ZigClangASTUnit, c: *Context) !void {424fn prepopulateGlobalNameTable(ast_unit: *clang.ASTUnit, c: *Context) !void {
425 if (!ZigClangASTUnit_visitLocalTopLevelDecls(ast_unit, c, declVisitorNamesOnlyC)) {425 if (!ast_unit.visitLocalTopLevelDecls(c, declVisitorNamesOnlyC)) {
426 return c.err;426 return c.err;
427 }427 }
428428
429 // TODO if we see #undef, delete it from the table429 // TODO if we see #undef, delete it from the table
430 var it = ZigClangASTUnit_getLocalPreprocessingEntities_begin(ast_unit);430 var it = ast_unit.getLocalPreprocessingEntities_begin();
431 const it_end = ZigClangASTUnit_getLocalPreprocessingEntities_end(ast_unit);431 const it_end = ast_unit.getLocalPreprocessingEntities_end();
432432
433 while (it.I != it_end.I) : (it.I += 1) {433 while (it.I != it_end.I) : (it.I += 1) {
434 const entity = ZigClangPreprocessingRecord_iterator_deref(it);434 const entity = it.deref();
435 switch (ZigClangPreprocessedEntity_getKind(entity)) {435 switch (entity.getKind()) {
436 .MacroDefinitionKind => {436 .MacroDefinitionKind => {
437 const macro = @ptrCast(*ZigClangMacroDefinitionRecord, entity);437 const macro = @ptrCast(*clang.MacroDefinitionRecord, entity);
438 const raw_name = ZigClangMacroDefinitionRecord_getName_getNameStart(macro);438 const raw_name = macro.getName_getNameStart();
439 const name = try c.str(raw_name);439 const name = try c.str(raw_name);
440 _ = try c.global_names.put(name, {});440 _ = try c.global_names.put(name, {});
441 },441 },
...@@ -444,7 +444,7 @@ fn prepopulateGlobalNameTable(ast_unit: *ZigClangASTUnit, c: *Context) !void {...@@ -444,7 +444,7 @@ fn prepopulateGlobalNameTable(ast_unit: *ZigClangASTUnit, c: *Context) !void {
444 }444 }
445}445}
446446
447fn declVisitorNamesOnlyC(context: ?*c_void, decl: *const ZigClangDecl) callconv(.C) bool {447fn declVisitorNamesOnlyC(context: ?*c_void, decl: *const clang.Decl) callconv(.C) bool {
448 const c = @ptrCast(*Context, @alignCast(@alignOf(Context), context));448 const c = @ptrCast(*Context, @alignCast(@alignOf(Context), context));
449 declVisitorNamesOnly(c, decl) catch |err| {449 declVisitorNamesOnly(c, decl) catch |err| {
450 c.err = err;450 c.err = err;
...@@ -453,7 +453,7 @@ fn declVisitorNamesOnlyC(context: ?*c_void, decl: *const ZigClangDecl) callconv(...@@ -453,7 +453,7 @@ fn declVisitorNamesOnlyC(context: ?*c_void, decl: *const ZigClangDecl) callconv(
453 return true;453 return true;
454}454}
455455
456fn declVisitorC(context: ?*c_void, decl: *const ZigClangDecl) callconv(.C) bool {456fn declVisitorC(context: ?*c_void, decl: *const clang.Decl) callconv(.C) bool {
457 const c = @ptrCast(*Context, @alignCast(@alignOf(Context), context));457 const c = @ptrCast(*Context, @alignCast(@alignOf(Context), context));
458 declVisitor(c, decl) catch |err| {458 declVisitor(c, decl) catch |err| {
459 c.err = err;459 c.err = err;
...@@ -462,61 +462,61 @@ fn declVisitorC(context: ?*c_void, decl: *const ZigClangDecl) callconv(.C) bool...@@ -462,61 +462,61 @@ fn declVisitorC(context: ?*c_void, decl: *const ZigClangDecl) callconv(.C) bool
462 return true;462 return true;
463}463}
464464
465fn declVisitorNamesOnly(c: *Context, decl: *const ZigClangDecl) Error!void {465fn declVisitorNamesOnly(c: *Context, decl: *const clang.Decl) Error!void {
466 if (ZigClangDecl_castToNamedDecl(decl)) |named_decl| {466 if (decl.castToNamedDecl()) |named_decl| {
467 const decl_name = try c.str(ZigClangNamedDecl_getName_bytes_begin(named_decl));467 const decl_name = try c.str(named_decl.getName_bytes_begin());
468 _ = try c.global_names.put(decl_name, {});468 _ = try c.global_names.put(decl_name, {});
469 }469 }
470}470}
471471
472fn declVisitor(c: *Context, decl: *const ZigClangDecl) Error!void {472fn declVisitor(c: *Context, decl: *const clang.Decl) Error!void {
473 switch (ZigClangDecl_getKind(decl)) {473 switch (decl.getKind()) {
474 .Function => {474 .Function => {
475 return visitFnDecl(c, @ptrCast(*const ZigClangFunctionDecl, decl));475 return visitFnDecl(c, @ptrCast(*const clang.FunctionDecl, decl));
476 },476 },
477 .Typedef => {477 .Typedef => {
478 _ = try transTypeDef(c, @ptrCast(*const ZigClangTypedefNameDecl, decl), true);478 _ = try transTypeDef(c, @ptrCast(*const clang.TypedefNameDecl, decl), true);
479 },479 },
480 .Enum => {480 .Enum => {
481 _ = try transEnumDecl(c, @ptrCast(*const ZigClangEnumDecl, decl));481 _ = try transEnumDecl(c, @ptrCast(*const clang.EnumDecl, decl));
482 },482 },
483 .Record => {483 .Record => {
484 _ = try transRecordDecl(c, @ptrCast(*const ZigClangRecordDecl, decl));484 _ = try transRecordDecl(c, @ptrCast(*const clang.RecordDecl, decl));
485 },485 },
486 .Var => {486 .Var => {
487 return visitVarDecl(c, @ptrCast(*const ZigClangVarDecl, decl), null);487 return visitVarDecl(c, @ptrCast(*const clang.VarDecl, decl), null);
488 },488 },
489 .Empty => {489 .Empty => {
490 // Do nothing490 // Do nothing
491 },491 },
492 else => {492 else => {
493 const decl_name = try c.str(ZigClangDecl_getDeclKindName(decl));493 const decl_name = try c.str(decl.getDeclKindName());
494 try emitWarning(c, ZigClangDecl_getLocation(decl), "ignoring {} declaration", .{decl_name});494 try emitWarning(c, decl.getLocation(), "ignoring {} declaration", .{decl_name});
495 },495 },
496 }496 }
497}497}
498498
499fn visitFnDecl(c: *Context, fn_decl: *const ZigClangFunctionDecl) Error!void {499fn visitFnDecl(c: *Context, fn_decl: *const clang.FunctionDecl) Error!void {
500 const fn_name = try c.str(ZigClangNamedDecl_getName_bytes_begin(@ptrCast(*const ZigClangNamedDecl, fn_decl)));500 const fn_name = try c.str(@ptrCast(*const clang.NamedDecl, fn_decl).getName_bytes_begin());
501 if (c.global_scope.sym_table.contains(fn_name))501 if (c.global_scope.sym_table.contains(fn_name))
502 return; // Avoid processing this decl twice502 return; // Avoid processing this decl twice
503503
504 // Skip this declaration if a proper definition exists504 // Skip this declaration if a proper definition exists
505 if (!ZigClangFunctionDecl_isThisDeclarationADefinition(fn_decl)) {505 if (!fn_decl.isThisDeclarationADefinition()) {
506 if (ZigClangFunctionDecl_getDefinition(fn_decl)) |def|506 if (fn_decl.getDefinition()) |def|
507 return visitFnDecl(c, def);507 return visitFnDecl(c, def);
508 }508 }
509509
510 const rp = makeRestorePoint(c);510 const rp = makeRestorePoint(c);
511 const fn_decl_loc = ZigClangFunctionDecl_getLocation(fn_decl);511 const fn_decl_loc = fn_decl.getLocation();
512 const has_body = ZigClangFunctionDecl_hasBody(fn_decl);512 const has_body = fn_decl.hasBody();
513 const storage_class = ZigClangFunctionDecl_getStorageClass(fn_decl);513 const storage_class = fn_decl.getStorageClass();
514 const decl_ctx = FnDeclContext{514 const decl_ctx = FnDeclContext{
515 .fn_name = fn_name,515 .fn_name = fn_name,
516 .has_body = has_body,516 .has_body = has_body,
517 .storage_class = storage_class,517 .storage_class = storage_class,
518 .is_export = switch (storage_class) {518 .is_export = switch (storage_class) {
519 .None => has_body and !ZigClangFunctionDecl_isInlineSpecified(fn_decl),519 .None => has_body and !fn_decl.isInlineSpecified(),
520 .Extern, .Static => false,520 .Extern, .Static => false,
521 .PrivateExtern => return failDecl(c, fn_decl_loc, fn_name, "unsupported storage class: private extern", .{}),521 .PrivateExtern => return failDecl(c, fn_decl_loc, fn_name, "unsupported storage class: private extern", .{}),
522 .Auto => unreachable, // Not legal on functions522 .Auto => unreachable, // Not legal on functions
...@@ -524,27 +524,27 @@ fn visitFnDecl(c: *Context, fn_decl: *const ZigClangFunctionDecl) Error!void {...@@ -524,27 +524,27 @@ fn visitFnDecl(c: *Context, fn_decl: *const ZigClangFunctionDecl) Error!void {
524 },524 },
525 };525 };
526526
527 var fn_qt = ZigClangFunctionDecl_getType(fn_decl);527 var fn_qt = fn_decl.getType();
528528
529 const fn_type = while (true) {529 const fn_type = while (true) {
530 const fn_type = ZigClangQualType_getTypePtr(fn_qt);530 const fn_type = fn_qt.getTypePtr();
531531
532 switch (ZigClangType_getTypeClass(fn_type)) {532 switch (fn_type.getTypeClass()) {
533 .Attributed => {533 .Attributed => {
534 const attr_type = @ptrCast(*const ZigClangAttributedType, fn_type);534 const attr_type = @ptrCast(*const clang.AttributedType, fn_type);
535 fn_qt = ZigClangAttributedType_getEquivalentType(attr_type);535 fn_qt = attr_type.getEquivalentType();
536 },536 },
537 .Paren => {537 .Paren => {
538 const paren_type = @ptrCast(*const ZigClangParenType, fn_type);538 const paren_type = @ptrCast(*const clang.ParenType, fn_type);
539 fn_qt = ZigClangParenType_getInnerType(paren_type);539 fn_qt = paren_type.getInnerType();
540 },540 },
541 else => break fn_type,541 else => break fn_type,
542 }542 }
543 } else unreachable;543 } else unreachable;
544544
545 const proto_node = switch (ZigClangType_getTypeClass(fn_type)) {545 const proto_node = switch (fn_type.getTypeClass()) {
546 .FunctionProto => blk: {546 .FunctionProto => blk: {
547 const fn_proto_type = @ptrCast(*const ZigClangFunctionProtoType, fn_type);547 const fn_proto_type = @ptrCast(*const clang.FunctionProtoType, fn_type);
548 break :blk transFnProto(rp, fn_decl, fn_proto_type, fn_decl_loc, decl_ctx, true) catch |err| switch (err) {548 break :blk transFnProto(rp, fn_decl, fn_proto_type, fn_decl_loc, decl_ctx, true) catch |err| switch (err) {
549 error.UnsupportedType => {549 error.UnsupportedType => {
550 return failDecl(c, fn_decl_loc, fn_name, "unable to resolve prototype of function", .{});550 return failDecl(c, fn_decl_loc, fn_name, "unable to resolve prototype of function", .{});
...@@ -553,7 +553,7 @@ fn visitFnDecl(c: *Context, fn_decl: *const ZigClangFunctionDecl) Error!void {...@@ -553,7 +553,7 @@ fn visitFnDecl(c: *Context, fn_decl: *const ZigClangFunctionDecl) Error!void {
553 };553 };
554 },554 },
555 .FunctionNoProto => blk: {555 .FunctionNoProto => blk: {
556 const fn_no_proto_type = @ptrCast(*const ZigClangFunctionType, fn_type);556 const fn_no_proto_type = @ptrCast(*const clang.FunctionType, fn_type);
557 break :blk transFnNoProto(rp, fn_no_proto_type, fn_decl_loc, decl_ctx, true) catch |err| switch (err) {557 break :blk transFnNoProto(rp, fn_no_proto_type, fn_decl_loc, decl_ctx, true) catch |err| switch (err) {
558 error.UnsupportedType => {558 error.UnsupportedType => {
559 return failDecl(c, fn_decl_loc, fn_name, "unable to resolve prototype of function", .{});559 return failDecl(c, fn_decl_loc, fn_name, "unable to resolve prototype of function", .{});
...@@ -561,7 +561,7 @@ fn visitFnDecl(c: *Context, fn_decl: *const ZigClangFunctionDecl) Error!void {...@@ -561,7 +561,7 @@ fn visitFnDecl(c: *Context, fn_decl: *const ZigClangFunctionDecl) Error!void {
561 error.OutOfMemory => |e| return e,561 error.OutOfMemory => |e| return e,
562 };562 };
563 },563 },
564 else => return failDecl(c, fn_decl_loc, fn_name, "unable to resolve function type {}", .{ZigClangType_getTypeClass(fn_type)}),564 else => return failDecl(c, fn_decl_loc, fn_name, "unable to resolve function type {}", .{fn_type.getTypeClass()}),
565 };565 };
566566
567 if (!decl_ctx.has_body) {567 if (!decl_ctx.has_body) {
...@@ -570,7 +570,7 @@ fn visitFnDecl(c: *Context, fn_decl: *const ZigClangFunctionDecl) Error!void {...@@ -570,7 +570,7 @@ fn visitFnDecl(c: *Context, fn_decl: *const ZigClangFunctionDecl) Error!void {
570 }570 }
571571
572 // actual function definition with body572 // actual function definition with body
573 const body_stmt = ZigClangFunctionDecl_getBody(fn_decl);573 const body_stmt = fn_decl.getBody();
574 var block_scope = try Scope.Block.init(rp.c, &c.global_scope.base, false);574 var block_scope = try Scope.Block.init(rp.c, &c.global_scope.base, false);
575 defer block_scope.deinit();575 defer block_scope.deinit();
576 var scope = &block_scope.base;576 var scope = &block_scope.base;
...@@ -582,9 +582,9 @@ fn visitFnDecl(c: *Context, fn_decl: *const ZigClangFunctionDecl) Error!void {...@@ -582,9 +582,9 @@ fn visitFnDecl(c: *Context, fn_decl: *const ZigClangFunctionDecl) Error!void {
582 else582 else
583 return failDecl(c, fn_decl_loc, fn_name, "function {} parameter has no name", .{fn_name});583 return failDecl(c, fn_decl_loc, fn_name, "function {} parameter has no name", .{fn_name});
584584
585 const c_param = ZigClangFunctionDecl_getParamDecl(fn_decl, param_id);585 const c_param = fn_decl.getParamDecl(param_id);
586 const qual_type = ZigClangParmVarDecl_getOriginalType(c_param);586 const qual_type = c_param.getOriginalType();
587 const is_const = ZigClangQualType_isConstQualified(qual_type);587 const is_const = qual_type.isConstQualified();
588588
589 const mangled_param_name = try block_scope.makeMangledName(c, param_name);589 const mangled_param_name = try block_scope.makeMangledName(c, param_name);
590590
...@@ -613,7 +613,7 @@ fn visitFnDecl(c: *Context, fn_decl: *const ZigClangFunctionDecl) Error!void {...@@ -613,7 +613,7 @@ fn visitFnDecl(c: *Context, fn_decl: *const ZigClangFunctionDecl) Error!void {
613 param_id += 1;613 param_id += 1;
614 }614 }
615615
616 const casted_body = @ptrCast(*const ZigClangCompoundStmt, body_stmt);616 const casted_body = @ptrCast(*const clang.CompoundStmt, body_stmt);
617 transCompoundStmtInline(rp, &block_scope.base, casted_body, &block_scope) catch |err| switch (err) {617 transCompoundStmtInline(rp, &block_scope.base, casted_body, &block_scope) catch |err| switch (err) {
618 error.OutOfMemory => |e| return e,618 error.OutOfMemory => |e| return e,
619 error.UnsupportedTranslation,619 error.UnsupportedTranslation,
...@@ -622,10 +622,10 @@ fn visitFnDecl(c: *Context, fn_decl: *const ZigClangFunctionDecl) Error!void {...@@ -622,10 +622,10 @@ fn visitFnDecl(c: *Context, fn_decl: *const ZigClangFunctionDecl) Error!void {
622 };622 };
623 // add return statement if the function didn't have one623 // add return statement if the function didn't have one
624 blk: {624 blk: {
625 const fn_ty = @ptrCast(*const ZigClangFunctionType, fn_type);625 const fn_ty = @ptrCast(*const clang.FunctionType, fn_type);
626626
627 if (ZigClangFunctionType_getNoReturnAttr(fn_ty)) break :blk;627 if (fn_ty.getNoReturnAttr()) break :blk;
628 const return_qt = ZigClangFunctionType_getReturnType(fn_ty);628 const return_qt = fn_ty.getReturnType();
629 if (isCVoid(return_qt)) break :blk;629 if (isCVoid(return_qt)) break :blk;
630630
631 if (block_scope.statements.items.len > 0) {631 if (block_scope.statements.items.len > 0) {
...@@ -649,7 +649,7 @@ fn visitFnDecl(c: *Context, fn_decl: *const ZigClangFunctionDecl) Error!void {...@@ -649,7 +649,7 @@ fn visitFnDecl(c: *Context, fn_decl: *const ZigClangFunctionDecl) Error!void {
649 .ltoken = try appendToken(rp.c, .Keyword_return, "return"),649 .ltoken = try appendToken(rp.c, .Keyword_return, "return"),
650 .tag = .Return,650 .tag = .Return,
651 }, .{651 }, .{
652 .rhs = transZeroInitExpr(rp, scope, fn_decl_loc, ZigClangQualType_getTypePtr(return_qt)) catch |err| switch (err) {652 .rhs = transZeroInitExpr(rp, scope, fn_decl_loc, return_qt.getTypePtr()) catch |err| switch (err) {
653 error.OutOfMemory => |e| return e,653 error.OutOfMemory => |e| return e,
654 error.UnsupportedTranslation,654 error.UnsupportedTranslation,
655 error.UnsupportedType,655 error.UnsupportedType,
...@@ -666,14 +666,14 @@ fn visitFnDecl(c: *Context, fn_decl: *const ZigClangFunctionDecl) Error!void {...@@ -666,14 +666,14 @@ fn visitFnDecl(c: *Context, fn_decl: *const ZigClangFunctionDecl) Error!void {
666}666}
667667
668/// if mangled_name is not null, this var decl was declared in a block scope.668/// if mangled_name is not null, this var decl was declared in a block scope.
669fn visitVarDecl(c: *Context, var_decl: *const ZigClangVarDecl, mangled_name: ?[]const u8) Error!void {669fn visitVarDecl(c: *Context, var_decl: *const clang.VarDecl, mangled_name: ?[]const u8) Error!void {
670 const var_name = mangled_name orelse try c.str(ZigClangNamedDecl_getName_bytes_begin(@ptrCast(*const ZigClangNamedDecl, var_decl)));670 const var_name = mangled_name orelse try c.str(@ptrCast(*const clang.NamedDecl, var_decl).getName_bytes_begin());
671 if (c.global_scope.sym_table.contains(var_name))671 if (c.global_scope.sym_table.contains(var_name))
672 return; // Avoid processing this decl twice672 return; // Avoid processing this decl twice
673 const rp = makeRestorePoint(c);673 const rp = makeRestorePoint(c);
674 const visib_tok = if (mangled_name) |_| null else try appendToken(c, .Keyword_pub, "pub");674 const visib_tok = if (mangled_name) |_| null else try appendToken(c, .Keyword_pub, "pub");
675675
676 const thread_local_token = if (ZigClangVarDecl_getTLSKind(var_decl) == .None)676 const thread_local_token = if (var_decl.getTLSKind() == .None)
677 null677 null
678 else678 else
679 try appendToken(c, .Keyword_threadlocal, "threadlocal");679 try appendToken(c, .Keyword_threadlocal, "threadlocal");
...@@ -683,12 +683,12 @@ fn visitVarDecl(c: *Context, var_decl: *const ZigClangVarDecl, mangled_name: ?[]...@@ -683,12 +683,12 @@ fn visitVarDecl(c: *Context, var_decl: *const ZigClangVarDecl, mangled_name: ?[]
683 // TODO https://github.com/ziglang/zig/issues/3756683 // TODO https://github.com/ziglang/zig/issues/3756
684 // TODO https://github.com/ziglang/zig/issues/1802684 // TODO https://github.com/ziglang/zig/issues/1802
685 const checked_name = if (isZigPrimitiveType(var_name)) try std.fmt.allocPrint(c.arena, "{}_{}", .{ var_name, c.getMangle() }) else var_name;685 const checked_name = if (isZigPrimitiveType(var_name)) try std.fmt.allocPrint(c.arena, "{}_{}", .{ var_name, c.getMangle() }) else var_name;
686 const var_decl_loc = ZigClangVarDecl_getLocation(var_decl);686 const var_decl_loc = var_decl.getLocation();
687687
688 const qual_type = ZigClangVarDecl_getTypeSourceInfo_getType(var_decl);688 const qual_type = var_decl.getTypeSourceInfo_getType();
689 const storage_class = ZigClangVarDecl_getStorageClass(var_decl);689 const storage_class = var_decl.getStorageClass();
690 const is_const = ZigClangQualType_isConstQualified(qual_type);690 const is_const = qual_type.isConstQualified();
691 const has_init = ZigClangVarDecl_hasInit(var_decl);691 const has_init = var_decl.hasInit();
692692
693 // In C extern variables with initializers behave like Zig exports.693 // In C extern variables with initializers behave like Zig exports.
694 // extern int foo = 2;694 // extern int foo = 2;
...@@ -725,7 +725,7 @@ fn visitVarDecl(c: *Context, var_decl: *const ZigClangVarDecl, mangled_name: ?[]...@@ -725,7 +725,7 @@ fn visitVarDecl(c: *Context, var_decl: *const ZigClangVarDecl, mangled_name: ?[]
725 // with the variable type.725 // with the variable type.
726 if (has_init) {726 if (has_init) {
727 eq_tok = try appendToken(c, .Equal, "=");727 eq_tok = try appendToken(c, .Equal, "=");
728 init_node = if (ZigClangVarDecl_getInit(var_decl)) |expr|728 init_node = if (var_decl.getInit()) |expr|
729 transExprCoercing(rp, &c.global_scope.base, expr, .used, .r_value) catch |err| switch (err) {729 transExprCoercing(rp, &c.global_scope.base, expr, .used, .r_value) catch |err| switch (err) {
730 error.UnsupportedTranslation,730 error.UnsupportedTranslation,
731 error.UnsupportedType,731 error.UnsupportedType,
...@@ -758,7 +758,7 @@ fn visitVarDecl(c: *Context, var_decl: *const ZigClangVarDecl, mangled_name: ?[]...@@ -758,7 +758,7 @@ fn visitVarDecl(c: *Context, var_decl: *const ZigClangVarDecl, mangled_name: ?[]
758758
759 const linksection_expr = blk: {759 const linksection_expr = blk: {
760 var str_len: usize = undefined;760 var str_len: usize = undefined;
761 if (ZigClangVarDecl_getSectionAttribute(var_decl, &str_len)) |str_ptr| {761 if (var_decl.getSectionAttribute(&str_len)) |str_ptr| {
762 _ = try appendToken(rp.c, .Keyword_linksection, "linksection");762 _ = try appendToken(rp.c, .Keyword_linksection, "linksection");
763 _ = try appendToken(rp.c, .LParen, "(");763 _ = try appendToken(rp.c, .LParen, "(");
764 const expr = try transCreateNodeStringLiteral(764 const expr = try transCreateNodeStringLiteral(
...@@ -773,7 +773,7 @@ fn visitVarDecl(c: *Context, var_decl: *const ZigClangVarDecl, mangled_name: ?[]...@@ -773,7 +773,7 @@ fn visitVarDecl(c: *Context, var_decl: *const ZigClangVarDecl, mangled_name: ?[]
773 };773 };
774774
775 const align_expr = blk: {775 const align_expr = blk: {
776 const alignment = ZigClangVarDecl_getAlignedAttribute(var_decl, rp.c.clang_context);776 const alignment = var_decl.getAlignedAttribute(rp.c.clang_context);
777 if (alignment != 0) {777 if (alignment != 0) {
778 _ = try appendToken(rp.c, .Keyword_align, "align");778 _ = try appendToken(rp.c, .Keyword_align, "align");
779 _ = try appendToken(rp.c, .LParen, "(");779 _ = try appendToken(rp.c, .LParen, "(");
...@@ -803,8 +803,8 @@ fn visitVarDecl(c: *Context, var_decl: *const ZigClangVarDecl, mangled_name: ?[]...@@ -803,8 +803,8 @@ fn visitVarDecl(c: *Context, var_decl: *const ZigClangVarDecl, mangled_name: ?[]
803 return addTopLevelDecl(c, checked_name, &node.base);803 return addTopLevelDecl(c, checked_name, &node.base);
804}804}
805805
806fn transTypeDefAsBuiltin(c: *Context, typedef_decl: *const ZigClangTypedefNameDecl, builtin_name: []const u8) !*ast.Node {806fn transTypeDefAsBuiltin(c: *Context, typedef_decl: *const clang.TypedefNameDecl, builtin_name: []const u8) !*ast.Node {
807 _ = try c.decl_table.put(@ptrToInt(ZigClangTypedefNameDecl_getCanonicalDecl(typedef_decl)), builtin_name);807 _ = try c.decl_table.put(@ptrToInt(typedef_decl.getCanonicalDecl()), builtin_name);
808 return transCreateNodeIdentifier(c, builtin_name);808 return transCreateNodeIdentifier(c, builtin_name);
809}809}
810810
...@@ -833,12 +833,12 @@ fn checkForBuiltinTypedef(checked_name: []const u8) ?[]const u8 {...@@ -833,12 +833,12 @@ fn checkForBuiltinTypedef(checked_name: []const u8) ?[]const u8 {
833 return null;833 return null;
834}834}
835835
836fn transTypeDef(c: *Context, typedef_decl: *const ZigClangTypedefNameDecl, top_level_visit: bool) Error!?*ast.Node {836fn transTypeDef(c: *Context, typedef_decl: *const clang.TypedefNameDecl, top_level_visit: bool) Error!?*ast.Node {
837 if (c.decl_table.get(@ptrToInt(ZigClangTypedefNameDecl_getCanonicalDecl(typedef_decl)))) |name|837 if (c.decl_table.get(@ptrToInt(typedef_decl.getCanonicalDecl()))) |name|
838 return transCreateNodeIdentifier(c, name); // Avoid processing this decl twice838 return transCreateNodeIdentifier(c, name); // Avoid processing this decl twice
839 const rp = makeRestorePoint(c);839 const rp = makeRestorePoint(c);
840840
841 const typedef_name = try c.str(ZigClangNamedDecl_getName_bytes_begin(@ptrCast(*const ZigClangNamedDecl, typedef_decl)));841 const typedef_name = try c.str(@ptrCast(*const clang.NamedDecl, typedef_decl).getName_bytes_begin());
842842
843 // TODO https://github.com/ziglang/zig/issues/3756843 // TODO https://github.com/ziglang/zig/issues/3756
844 // TODO https://github.com/ziglang/zig/issues/1802844 // TODO https://github.com/ziglang/zig/issues/1802
...@@ -851,7 +851,7 @@ fn transTypeDef(c: *Context, typedef_decl: *const ZigClangTypedefNameDecl, top_l...@@ -851,7 +851,7 @@ fn transTypeDef(c: *Context, typedef_decl: *const ZigClangTypedefNameDecl, top_l
851 return transCreateNodeIdentifier(c, checked_name);851 return transCreateNodeIdentifier(c, checked_name);
852 }852 }
853853
854 _ = try c.decl_table.put(@ptrToInt(ZigClangTypedefNameDecl_getCanonicalDecl(typedef_decl)), checked_name);854 _ = try c.decl_table.put(@ptrToInt(typedef_decl.getCanonicalDecl()), checked_name);
855 const node = (try transCreateNodeTypedef(rp, typedef_decl, true, checked_name)) orelse return null;855 const node = (try transCreateNodeTypedef(rp, typedef_decl, true, checked_name)) orelse return null;
856 try addTopLevelDecl(c, checked_name, node);856 try addTopLevelDecl(c, checked_name, node);
857 return transCreateNodeIdentifier(c, checked_name);857 return transCreateNodeIdentifier(c, checked_name);
...@@ -859,7 +859,7 @@ fn transTypeDef(c: *Context, typedef_decl: *const ZigClangTypedefNameDecl, top_l...@@ -859,7 +859,7 @@ fn transTypeDef(c: *Context, typedef_decl: *const ZigClangTypedefNameDecl, top_l
859859
860fn transCreateNodeTypedef(860fn transCreateNodeTypedef(
861 rp: RestorePoint,861 rp: RestorePoint,
862 typedef_decl: *const ZigClangTypedefNameDecl,862 typedef_decl: *const clang.TypedefNameDecl,
863 toplevel: bool,863 toplevel: bool,
864 checked_name: []const u8,864 checked_name: []const u8,
865) Error!?*ast.Node {865) Error!?*ast.Node {
...@@ -867,8 +867,8 @@ fn transCreateNodeTypedef(...@@ -867,8 +867,8 @@ fn transCreateNodeTypedef(
867 const mut_tok = try appendToken(rp.c, .Keyword_const, "const");867 const mut_tok = try appendToken(rp.c, .Keyword_const, "const");
868 const name_tok = try appendIdentifier(rp.c, checked_name);868 const name_tok = try appendIdentifier(rp.c, checked_name);
869 const eq_token = try appendToken(rp.c, .Equal, "=");869 const eq_token = try appendToken(rp.c, .Equal, "=");
870 const child_qt = ZigClangTypedefNameDecl_getUnderlyingType(typedef_decl);870 const child_qt = typedef_decl.getUnderlyingType();
871 const typedef_loc = ZigClangTypedefNameDecl_getLocation(typedef_decl);871 const typedef_loc = typedef_decl.getLocation();
872 const init_node = transQualType(rp, child_qt, typedef_loc) catch |err| switch (err) {872 const init_node = transQualType(rp, child_qt, typedef_loc) catch |err| switch (err) {
873 error.UnsupportedType => {873 error.UnsupportedType => {
874 try failDecl(rp.c, typedef_loc, checked_name, "unable to resolve typedef child type", .{});874 try failDecl(rp.c, typedef_loc, checked_name, "unable to resolve typedef child type", .{});
...@@ -890,12 +890,12 @@ fn transCreateNodeTypedef(...@@ -890,12 +890,12 @@ fn transCreateNodeTypedef(
890 return &node.base;890 return &node.base;
891}891}
892892
893fn transRecordDecl(c: *Context, record_decl: *const ZigClangRecordDecl) Error!?*ast.Node {893fn transRecordDecl(c: *Context, record_decl: *const clang.RecordDecl) Error!?*ast.Node {
894 if (c.decl_table.get(@ptrToInt(ZigClangRecordDecl_getCanonicalDecl(record_decl)))) |name|894 if (c.decl_table.get(@ptrToInt(record_decl.getCanonicalDecl()))) |name|
895 return try transCreateNodeIdentifier(c, name); // Avoid processing this decl twice895 return try transCreateNodeIdentifier(c, name); // Avoid processing this decl twice
896 const record_loc = ZigClangRecordDecl_getLocation(record_decl);896 const record_loc = record_decl.getLocation();
897897
898 var bare_name = try c.str(ZigClangNamedDecl_getName_bytes_begin(@ptrCast(*const ZigClangNamedDecl, record_decl)));898 var bare_name = try c.str(@ptrCast(*const clang.NamedDecl, record_decl).getName_bytes_begin());
899 var is_unnamed = false;899 var is_unnamed = false;
900 // Record declarations such as `struct {...} x` have no name but they're not900 // Record declarations such as `struct {...} x` have no name but they're not
901 // anonymous hence here isAnonymousStructOrUnion is not needed901 // anonymous hence here isAnonymousStructOrUnion is not needed
...@@ -906,10 +906,10 @@ fn transRecordDecl(c: *Context, record_decl: *const ZigClangRecordDecl) Error!?*...@@ -906,10 +906,10 @@ fn transRecordDecl(c: *Context, record_decl: *const ZigClangRecordDecl) Error!?*
906906
907 var container_kind_name: []const u8 = undefined;907 var container_kind_name: []const u8 = undefined;
908 var container_kind: std.zig.Token.Id = undefined;908 var container_kind: std.zig.Token.Id = undefined;
909 if (ZigClangRecordDecl_isUnion(record_decl)) {909 if (record_decl.isUnion()) {
910 container_kind_name = "union";910 container_kind_name = "union";
911 container_kind = .Keyword_union;911 container_kind = .Keyword_union;
912 } else if (ZigClangRecordDecl_isStruct(record_decl)) {912 } else if (record_decl.isStruct()) {
913 container_kind_name = "struct";913 container_kind_name = "struct";
914 container_kind = .Keyword_struct;914 container_kind = .Keyword_struct;
915 } else {915 } else {
...@@ -918,7 +918,7 @@ fn transRecordDecl(c: *Context, record_decl: *const ZigClangRecordDecl) Error!?*...@@ -918,7 +918,7 @@ fn transRecordDecl(c: *Context, record_decl: *const ZigClangRecordDecl) Error!?*
918 }918 }
919919
920 const name = try std.fmt.allocPrint(c.arena, "{}_{}", .{ container_kind_name, bare_name });920 const name = try std.fmt.allocPrint(c.arena, "{}_{}", .{ container_kind_name, bare_name });
921 _ = try c.decl_table.put(@ptrToInt(ZigClangRecordDecl_getCanonicalDecl(record_decl)), name);921 _ = try c.decl_table.put(@ptrToInt(record_decl.getCanonicalDecl()), name);
922922
923 const visib_tok = if (!is_unnamed) try appendToken(c, .Keyword_pub, "pub") else null;923 const visib_tok = if (!is_unnamed) try appendToken(c, .Keyword_pub, "pub") else null;
924 const mut_tok = try appendToken(c, .Keyword_const, "const");924 const mut_tok = try appendToken(c, .Keyword_const, "const");
...@@ -929,13 +929,13 @@ fn transRecordDecl(c: *Context, record_decl: *const ZigClangRecordDecl) Error!?*...@@ -929,13 +929,13 @@ fn transRecordDecl(c: *Context, record_decl: *const ZigClangRecordDecl) Error!?*
929 var semicolon: ast.TokenIndex = undefined;929 var semicolon: ast.TokenIndex = undefined;
930 const init_node = blk: {930 const init_node = blk: {
931 const rp = makeRestorePoint(c);931 const rp = makeRestorePoint(c);
932 const record_def = ZigClangRecordDecl_getDefinition(record_decl) orelse {932 const record_def = record_decl.getDefinition() orelse {
933 const opaque_type = try transCreateNodeOpaqueType(c);933 const opaque_type = try transCreateNodeOpaqueType(c);
934 semicolon = try appendToken(c, .Semicolon, ";");934 semicolon = try appendToken(c, .Semicolon, ";");
935 break :blk opaque_type;935 break :blk opaque_type;
936 };936 };
937937
938 const layout_tok = try if (ZigClangRecordDecl_getPackedAttribute(record_decl))938 const layout_tok = try if (record_decl.getPackedAttribute())
939 appendToken(c, .Keyword_packed, "packed")939 appendToken(c, .Keyword_packed, "packed")
940 else940 else
941 appendToken(c, .Keyword_extern, "extern");941 appendToken(c, .Keyword_extern, "extern");
...@@ -946,21 +946,21 @@ fn transRecordDecl(c: *Context, record_decl: *const ZigClangRecordDecl) Error!?*...@@ -946,21 +946,21 @@ fn transRecordDecl(c: *Context, record_decl: *const ZigClangRecordDecl) Error!?*
946 defer fields_and_decls.deinit();946 defer fields_and_decls.deinit();
947947
948 var unnamed_field_count: u32 = 0;948 var unnamed_field_count: u32 = 0;
949 var it = ZigClangRecordDecl_field_begin(record_def);949 var it = record_def.field_begin();
950 const end_it = ZigClangRecordDecl_field_end(record_def);950 const end_it = record_def.field_end();
951 while (ZigClangRecordDecl_field_iterator_neq(it, end_it)) : (it = ZigClangRecordDecl_field_iterator_next(it)) {951 while (it.neq(end_it)) : (it = it.next()) {
952 const field_decl = ZigClangRecordDecl_field_iterator_deref(it);952 const field_decl = it.deref();
953 const field_loc = ZigClangFieldDecl_getLocation(field_decl);953 const field_loc = field_decl.getLocation();
954 const field_qt = ZigClangFieldDecl_getType(field_decl);954 const field_qt = field_decl.getType();
955955
956 if (ZigClangFieldDecl_isBitField(field_decl)) {956 if (field_decl.isBitField()) {
957 const opaque_type = try transCreateNodeOpaqueType(c);957 const opaque_type = try transCreateNodeOpaqueType(c);
958 semicolon = try appendToken(c, .Semicolon, ";");958 semicolon = try appendToken(c, .Semicolon, ";");
959 try emitWarning(c, field_loc, "{} demoted to opaque type - has bitfield", .{container_kind_name});959 try emitWarning(c, field_loc, "{} demoted to opaque type - has bitfield", .{container_kind_name});
960 break :blk opaque_type;960 break :blk opaque_type;
961 }961 }
962962
963 if (ZigClangType_isIncompleteOrZeroLengthArrayType(qualTypeCanon(field_qt), c.clang_context)) {963 if (qualTypeCanon(field_qt).isIncompleteOrZeroLengthArrayType(c.clang_context)) {
964 const opaque_type = try transCreateNodeOpaqueType(c);964 const opaque_type = try transCreateNodeOpaqueType(c);
965 semicolon = try appendToken(c, .Semicolon, ";");965 semicolon = try appendToken(c, .Semicolon, ";");
966 try emitWarning(c, field_loc, "{} demoted to opaque type - has variable length array", .{container_kind_name});966 try emitWarning(c, field_loc, "{} demoted to opaque type - has variable length array", .{container_kind_name});
...@@ -968,8 +968,8 @@ fn transRecordDecl(c: *Context, record_decl: *const ZigClangRecordDecl) Error!?*...@@ -968,8 +968,8 @@ fn transRecordDecl(c: *Context, record_decl: *const ZigClangRecordDecl) Error!?*
968 }968 }
969969
970 var is_anon = false;970 var is_anon = false;
971 var raw_name = try c.str(ZigClangNamedDecl_getName_bytes_begin(@ptrCast(*const ZigClangNamedDecl, field_decl)));971 var raw_name = try c.str(@ptrCast(*const clang.NamedDecl, field_decl).getName_bytes_begin());
972 if (ZigClangFieldDecl_isAnonymousStructOrUnion(field_decl) or raw_name.len == 0) {972 if (field_decl.isAnonymousStructOrUnion() or raw_name.len == 0) {
973 // Context.getMangle() is not used here because doing so causes unpredictable field names for anonymous fields.973 // Context.getMangle() is not used here because doing so causes unpredictable field names for anonymous fields.
974 raw_name = try std.fmt.allocPrint(c.arena, "unnamed_{}", .{unnamed_field_count});974 raw_name = try std.fmt.allocPrint(c.arena, "unnamed_{}", .{unnamed_field_count});
975 unnamed_field_count += 1;975 unnamed_field_count += 1;
...@@ -988,7 +988,7 @@ fn transRecordDecl(c: *Context, record_decl: *const ZigClangRecordDecl) Error!?*...@@ -988,7 +988,7 @@ fn transRecordDecl(c: *Context, record_decl: *const ZigClangRecordDecl) Error!?*
988 };988 };
989989
990 const align_expr = blk_2: {990 const align_expr = blk_2: {
991 const alignment = ZigClangFieldDecl_getAlignedAttribute(field_decl, rp.c.clang_context);991 const alignment = field_decl.getAlignedAttribute(rp.c.clang_context);
992 if (alignment != 0) {992 if (alignment != 0) {
993 _ = try appendToken(rp.c, .Keyword_align, "align");993 _ = try appendToken(rp.c, .Keyword_align, "align");
994 _ = try appendToken(rp.c, .LParen, "(");994 _ = try appendToken(rp.c, .LParen, "(");
...@@ -1013,7 +1013,7 @@ fn transRecordDecl(c: *Context, record_decl: *const ZigClangRecordDecl) Error!?*...@@ -1013,7 +1013,7 @@ fn transRecordDecl(c: *Context, record_decl: *const ZigClangRecordDecl) Error!?*
10131013
1014 if (is_anon) {1014 if (is_anon) {
1015 _ = try c.decl_table.put(1015 _ = try c.decl_table.put(
1016 @ptrToInt(ZigClangFieldDecl_getCanonicalDecl(field_decl)),1016 @ptrToInt(field_decl.getCanonicalDecl()),
1017 raw_name,1017 raw_name,
1018 );1018 );
1019 }1019 }
...@@ -1051,13 +1051,13 @@ fn transRecordDecl(c: *Context, record_decl: *const ZigClangRecordDecl) Error!?*...@@ -1051,13 +1051,13 @@ fn transRecordDecl(c: *Context, record_decl: *const ZigClangRecordDecl) Error!?*
1051 return transCreateNodeIdentifier(c, name);1051 return transCreateNodeIdentifier(c, name);
1052}1052}
10531053
1054fn transEnumDecl(c: *Context, enum_decl: *const ZigClangEnumDecl) Error!?*ast.Node {1054fn transEnumDecl(c: *Context, enum_decl: *const clang.EnumDecl) Error!?*ast.Node {
1055 if (c.decl_table.get(@ptrToInt(ZigClangEnumDecl_getCanonicalDecl(enum_decl)))) |name|1055 if (c.decl_table.get(@ptrToInt(enum_decl.getCanonicalDecl()))) |name|
1056 return try transCreateNodeIdentifier(c, name); // Avoid processing this decl twice1056 return try transCreateNodeIdentifier(c, name); // Avoid processing this decl twice
1057 const rp = makeRestorePoint(c);1057 const rp = makeRestorePoint(c);
1058 const enum_loc = ZigClangEnumDecl_getLocation(enum_decl);1058 const enum_loc = enum_decl.getLocation();
10591059
1060 var bare_name = try c.str(ZigClangNamedDecl_getName_bytes_begin(@ptrCast(*const ZigClangNamedDecl, enum_decl)));1060 var bare_name = try c.str(@ptrCast(*const clang.NamedDecl, enum_decl).getName_bytes_begin());
1061 var is_unnamed = false;1061 var is_unnamed = false;
1062 if (bare_name.len == 0) {1062 if (bare_name.len == 0) {
1063 bare_name = try std.fmt.allocPrint(c.arena, "unnamed_{}", .{c.getMangle()});1063 bare_name = try std.fmt.allocPrint(c.arena, "unnamed_{}", .{c.getMangle()});
...@@ -1065,20 +1065,20 @@ fn transEnumDecl(c: *Context, enum_decl: *const ZigClangEnumDecl) Error!?*ast.No...@@ -1065,20 +1065,20 @@ fn transEnumDecl(c: *Context, enum_decl: *const ZigClangEnumDecl) Error!?*ast.No
1065 }1065 }
10661066
1067 const name = try std.fmt.allocPrint(c.arena, "enum_{}", .{bare_name});1067 const name = try std.fmt.allocPrint(c.arena, "enum_{}", .{bare_name});
1068 _ = try c.decl_table.put(@ptrToInt(ZigClangEnumDecl_getCanonicalDecl(enum_decl)), name);1068 _ = try c.decl_table.put(@ptrToInt(enum_decl.getCanonicalDecl()), name);
10691069
1070 const visib_tok = if (!is_unnamed) try appendToken(c, .Keyword_pub, "pub") else null;1070 const visib_tok = if (!is_unnamed) try appendToken(c, .Keyword_pub, "pub") else null;
1071 const mut_tok = try appendToken(c, .Keyword_const, "const");1071 const mut_tok = try appendToken(c, .Keyword_const, "const");
1072 const name_tok = try appendIdentifier(c, name);1072 const name_tok = try appendIdentifier(c, name);
1073 const eq_token = try appendToken(c, .Equal, "=");1073 const eq_token = try appendToken(c, .Equal, "=");
10741074
1075 const init_node = if (ZigClangEnumDecl_getDefinition(enum_decl)) |enum_def| blk: {1075 const init_node = if (enum_decl.getDefinition()) |enum_def| blk: {
1076 var pure_enum = true;1076 var pure_enum = true;
1077 var it = ZigClangEnumDecl_enumerator_begin(enum_def);1077 var it = enum_def.enumerator_begin();
1078 var end_it = ZigClangEnumDecl_enumerator_end(enum_def);1078 var end_it = enum_def.enumerator_end();
1079 while (ZigClangEnumDecl_enumerator_iterator_neq(it, end_it)) : (it = ZigClangEnumDecl_enumerator_iterator_next(it)) {1079 while (it.neq(end_it)) : (it = it.next()) {
1080 const enum_const = ZigClangEnumDecl_enumerator_iterator_deref(it);1080 const enum_const = it.deref();
1081 if (ZigClangEnumConstantDecl_getInitExpr(enum_const)) |_| {1081 if (enum_const.getInitExpr()) |_| {
1082 pure_enum = false;1082 pure_enum = false;
1083 break;1083 break;
1084 }1084 }
...@@ -1090,7 +1090,7 @@ fn transEnumDecl(c: *Context, enum_decl: *const ZigClangEnumDecl) Error!?*ast.No...@@ -1090,7 +1090,7 @@ fn transEnumDecl(c: *Context, enum_decl: *const ZigClangEnumDecl) Error!?*ast.No
1090 var fields_and_decls = std.ArrayList(*ast.Node).init(c.gpa);1090 var fields_and_decls = std.ArrayList(*ast.Node).init(c.gpa);
1091 defer fields_and_decls.deinit();1091 defer fields_and_decls.deinit();
10921092
1093 const int_type = ZigClangEnumDecl_getIntegerType(enum_decl);1093 const int_type = enum_decl.getIntegerType();
1094 // The underlying type may be null in case of forward-declared enum1094 // The underlying type may be null in case of forward-declared enum
1095 // types, while that's not ISO-C compliant many compilers allow this and1095 // types, while that's not ISO-C compliant many compilers allow this and
1096 // default to the usual integer type used for all the enums.1096 // default to the usual integer type used for all the enums.
...@@ -1115,12 +1115,12 @@ fn transEnumDecl(c: *Context, enum_decl: *const ZigClangEnumDecl) Error!?*ast.No...@@ -1115,12 +1115,12 @@ fn transEnumDecl(c: *Context, enum_decl: *const ZigClangEnumDecl) Error!?*ast.No
11151115
1116 const lbrace_token = try appendToken(c, .LBrace, "{");1116 const lbrace_token = try appendToken(c, .LBrace, "{");
11171117
1118 it = ZigClangEnumDecl_enumerator_begin(enum_def);1118 it = enum_def.enumerator_begin();
1119 end_it = ZigClangEnumDecl_enumerator_end(enum_def);1119 end_it = enum_def.enumerator_end();
1120 while (ZigClangEnumDecl_enumerator_iterator_neq(it, end_it)) : (it = ZigClangEnumDecl_enumerator_iterator_next(it)) {1120 while (it.neq(end_it)) : (it = it.next()) {
1121 const enum_const = ZigClangEnumDecl_enumerator_iterator_deref(it);1121 const enum_const = it.deref();
11221122
1123 const enum_val_name = try c.str(ZigClangNamedDecl_getName_bytes_begin(@ptrCast(*const ZigClangNamedDecl, enum_const)));1123 const enum_val_name = try c.str(@ptrCast(*const clang.NamedDecl, enum_const).getName_bytes_begin());
11241124
1125 const field_name = if (!is_unnamed and mem.startsWith(u8, enum_val_name, bare_name))1125 const field_name = if (!is_unnamed and mem.startsWith(u8, enum_val_name, bare_name))
1126 enum_val_name[bare_name.len..]1126 enum_val_name[bare_name.len..]
...@@ -1131,7 +1131,7 @@ fn transEnumDecl(c: *Context, enum_decl: *const ZigClangEnumDecl) Error!?*ast.No...@@ -1131,7 +1131,7 @@ fn transEnumDecl(c: *Context, enum_decl: *const ZigClangEnumDecl) Error!?*ast.No
11311131
1132 const int_node = if (!pure_enum) blk_2: {1132 const int_node = if (!pure_enum) blk_2: {
1133 _ = try appendToken(c, .Colon, "=");1133 _ = try appendToken(c, .Colon, "=");
1134 break :blk_2 try transCreateNodeAPInt(c, ZigClangEnumConstantDecl_getInitVal(enum_const));1134 break :blk_2 try transCreateNodeAPInt(c, enum_const.getInitVal());
1135 } else1135 } else
1136 null;1136 null;
11371137
...@@ -1257,23 +1257,23 @@ const LRValue = enum {...@@ -1257,23 +1257,23 @@ const LRValue = enum {
1257fn transStmt(1257fn transStmt(
1258 rp: RestorePoint,1258 rp: RestorePoint,
1259 scope: *Scope,1259 scope: *Scope,
1260 stmt: *const ZigClangStmt,1260 stmt: *const clang.Stmt,
1261 result_used: ResultUsed,1261 result_used: ResultUsed,
1262 lrvalue: LRValue,1262 lrvalue: LRValue,
1263) TransError!*ast.Node {1263) TransError!*ast.Node {
1264 const sc = ZigClangStmt_getStmtClass(stmt);1264 const sc = stmt.getStmtClass();
1265 switch (sc) {1265 switch (sc) {
1266 .BinaryOperatorClass => return transBinaryOperator(rp, scope, @ptrCast(*const ZigClangBinaryOperator, stmt), result_used),1266 .BinaryOperatorClass => return transBinaryOperator(rp, scope, @ptrCast(*const clang.BinaryOperator, stmt), result_used),
1267 .CompoundStmtClass => return transCompoundStmt(rp, scope, @ptrCast(*const ZigClangCompoundStmt, stmt)),1267 .CompoundStmtClass => return transCompoundStmt(rp, scope, @ptrCast(*const clang.CompoundStmt, stmt)),
1268 .CStyleCastExprClass => return transCStyleCastExprClass(rp, scope, @ptrCast(*const ZigClangCStyleCastExpr, stmt), result_used, lrvalue),1268 .CStyleCastExprClass => return transCStyleCastExprClass(rp, scope, @ptrCast(*const clang.CStyleCastExpr, stmt), result_used, lrvalue),
1269 .DeclStmtClass => return transDeclStmt(rp, scope, @ptrCast(*const ZigClangDeclStmt, stmt)),1269 .DeclStmtClass => return transDeclStmt(rp, scope, @ptrCast(*const clang.DeclStmt, stmt)),
1270 .DeclRefExprClass => return transDeclRefExpr(rp, scope, @ptrCast(*const ZigClangDeclRefExpr, stmt), lrvalue),1270 .DeclRefExprClass => return transDeclRefExpr(rp, scope, @ptrCast(*const clang.DeclRefExpr, stmt), lrvalue),
1271 .ImplicitCastExprClass => return transImplicitCastExpr(rp, scope, @ptrCast(*const ZigClangImplicitCastExpr, stmt), result_used),1271 .ImplicitCastExprClass => return transImplicitCastExpr(rp, scope, @ptrCast(*const clang.ImplicitCastExpr, stmt), result_used),
1272 .IntegerLiteralClass => return transIntegerLiteral(rp, scope, @ptrCast(*const ZigClangIntegerLiteral, stmt), result_used, .with_as),1272 .IntegerLiteralClass => return transIntegerLiteral(rp, scope, @ptrCast(*const clang.IntegerLiteral, stmt), result_used, .with_as),
1273 .ReturnStmtClass => return transReturnStmt(rp, scope, @ptrCast(*const ZigClangReturnStmt, stmt)),1273 .ReturnStmtClass => return transReturnStmt(rp, scope, @ptrCast(*const clang.ReturnStmt, stmt)),
1274 .StringLiteralClass => return transStringLiteral(rp, scope, @ptrCast(*const ZigClangStringLiteral, stmt), result_used),1274 .StringLiteralClass => return transStringLiteral(rp, scope, @ptrCast(*const clang.StringLiteral, stmt), result_used),
1275 .ParenExprClass => {1275 .ParenExprClass => {
1276 const expr = try transExpr(rp, scope, ZigClangParenExpr_getSubExpr(@ptrCast(*const ZigClangParenExpr, stmt)), .used, lrvalue);1276 const expr = try transExpr(rp, scope, @ptrCast(*const clang.ParenExpr, stmt).getSubExpr(), .used, lrvalue);
1277 if (expr.tag == .GroupedExpression) return maybeSuppressResult(rp, scope, result_used, expr);1277 if (expr.tag == .GroupedExpression) return maybeSuppressResult(rp, scope, result_used, expr);
1278 const node = try rp.c.arena.create(ast.Node.GroupedExpression);1278 const node = try rp.c.arena.create(ast.Node.GroupedExpression);
1279 node.* = .{1279 node.* = .{
...@@ -1283,11 +1283,11 @@ fn transStmt(...@@ -1283,11 +1283,11 @@ fn transStmt(
1283 };1283 };
1284 return maybeSuppressResult(rp, scope, result_used, &node.base);1284 return maybeSuppressResult(rp, scope, result_used, &node.base);
1285 },1285 },
1286 .InitListExprClass => return transInitListExpr(rp, scope, @ptrCast(*const ZigClangInitListExpr, stmt), result_used),1286 .InitListExprClass => return transInitListExpr(rp, scope, @ptrCast(*const clang.InitListExpr, stmt), result_used),
1287 .ImplicitValueInitExprClass => return transImplicitValueInitExpr(rp, scope, @ptrCast(*const ZigClangExpr, stmt), result_used),1287 .ImplicitValueInitExprClass => return transImplicitValueInitExpr(rp, scope, @ptrCast(*const clang.Expr, stmt), result_used),
1288 .IfStmtClass => return transIfStmt(rp, scope, @ptrCast(*const ZigClangIfStmt, stmt)),1288 .IfStmtClass => return transIfStmt(rp, scope, @ptrCast(*const clang.IfStmt, stmt)),
1289 .WhileStmtClass => return transWhileLoop(rp, scope, @ptrCast(*const ZigClangWhileStmt, stmt)),1289 .WhileStmtClass => return transWhileLoop(rp, scope, @ptrCast(*const clang.WhileStmt, stmt)),
1290 .DoStmtClass => return transDoWhileLoop(rp, scope, @ptrCast(*const ZigClangDoStmt, stmt)),1290 .DoStmtClass => return transDoWhileLoop(rp, scope, @ptrCast(*const clang.DoStmt, stmt)),
1291 .NullStmtClass => {1291 .NullStmtClass => {
1292 const block = try rp.c.createBlock(0);1292 const block = try rp.c.createBlock(0);
1293 block.rbrace = try appendToken(rp.c, .RBrace, "}");1293 block.rbrace = try appendToken(rp.c, .RBrace, "}");
...@@ -1295,29 +1295,29 @@ fn transStmt(...@@ -1295,29 +1295,29 @@ fn transStmt(
1295 },1295 },
1296 .ContinueStmtClass => return try transCreateNodeContinue(rp.c),1296 .ContinueStmtClass => return try transCreateNodeContinue(rp.c),
1297 .BreakStmtClass => return transBreak(rp, scope),1297 .BreakStmtClass => return transBreak(rp, scope),
1298 .ForStmtClass => return transForLoop(rp, scope, @ptrCast(*const ZigClangForStmt, stmt)),1298 .ForStmtClass => return transForLoop(rp, scope, @ptrCast(*const clang.ForStmt, stmt)),
1299 .FloatingLiteralClass => return transFloatingLiteral(rp, scope, @ptrCast(*const ZigClangFloatingLiteral, stmt), result_used),1299 .FloatingLiteralClass => return transFloatingLiteral(rp, scope, @ptrCast(*const clang.FloatingLiteral, stmt), result_used),
1300 .ConditionalOperatorClass => {1300 .ConditionalOperatorClass => {
1301 return transConditionalOperator(rp, scope, @ptrCast(*const ZigClangConditionalOperator, stmt), result_used);1301 return transConditionalOperator(rp, scope, @ptrCast(*const clang.ConditionalOperator, stmt), result_used);
1302 },1302 },
1303 .BinaryConditionalOperatorClass => {1303 .BinaryConditionalOperatorClass => {
1304 return transBinaryConditionalOperator(rp, scope, @ptrCast(*const ZigClangBinaryConditionalOperator, stmt), result_used);1304 return transBinaryConditionalOperator(rp, scope, @ptrCast(*const clang.BinaryConditionalOperator, stmt), result_used);
1305 },1305 },
1306 .SwitchStmtClass => return transSwitch(rp, scope, @ptrCast(*const ZigClangSwitchStmt, stmt)),1306 .SwitchStmtClass => return transSwitch(rp, scope, @ptrCast(*const clang.SwitchStmt, stmt)),
1307 .CaseStmtClass => return transCase(rp, scope, @ptrCast(*const ZigClangCaseStmt, stmt)),1307 .CaseStmtClass => return transCase(rp, scope, @ptrCast(*const clang.CaseStmt, stmt)),
1308 .DefaultStmtClass => return transDefault(rp, scope, @ptrCast(*const ZigClangDefaultStmt, stmt)),1308 .DefaultStmtClass => return transDefault(rp, scope, @ptrCast(*const clang.DefaultStmt, stmt)),
1309 .ConstantExprClass => return transConstantExpr(rp, scope, @ptrCast(*const ZigClangExpr, stmt), result_used),1309 .ConstantExprClass => return transConstantExpr(rp, scope, @ptrCast(*const clang.Expr, stmt), result_used),
1310 .PredefinedExprClass => return transPredefinedExpr(rp, scope, @ptrCast(*const ZigClangPredefinedExpr, stmt), result_used),1310 .PredefinedExprClass => return transPredefinedExpr(rp, scope, @ptrCast(*const clang.PredefinedExpr, stmt), result_used),
1311 .CharacterLiteralClass => return transCharLiteral(rp, scope, @ptrCast(*const ZigClangCharacterLiteral, stmt), result_used, .with_as),1311 .CharacterLiteralClass => return transCharLiteral(rp, scope, @ptrCast(*const clang.CharacterLiteral, stmt), result_used, .with_as),
1312 .StmtExprClass => return transStmtExpr(rp, scope, @ptrCast(*const ZigClangStmtExpr, stmt), result_used),1312 .StmtExprClass => return transStmtExpr(rp, scope, @ptrCast(*const clang.StmtExpr, stmt), result_used),
1313 .MemberExprClass => return transMemberExpr(rp, scope, @ptrCast(*const ZigClangMemberExpr, stmt), result_used),1313 .MemberExprClass => return transMemberExpr(rp, scope, @ptrCast(*const clang.MemberExpr, stmt), result_used),
1314 .ArraySubscriptExprClass => return transArrayAccess(rp, scope, @ptrCast(*const ZigClangArraySubscriptExpr, stmt), result_used),1314 .ArraySubscriptExprClass => return transArrayAccess(rp, scope, @ptrCast(*const clang.ArraySubscriptExpr, stmt), result_used),
1315 .CallExprClass => return transCallExpr(rp, scope, @ptrCast(*const ZigClangCallExpr, stmt), result_used),1315 .CallExprClass => return transCallExpr(rp, scope, @ptrCast(*const clang.CallExpr, stmt), result_used),
1316 .UnaryExprOrTypeTraitExprClass => return transUnaryExprOrTypeTraitExpr(rp, scope, @ptrCast(*const ZigClangUnaryExprOrTypeTraitExpr, stmt), result_used),1316 .UnaryExprOrTypeTraitExprClass => return transUnaryExprOrTypeTraitExpr(rp, scope, @ptrCast(*const clang.UnaryExprOrTypeTraitExpr, stmt), result_used),
1317 .UnaryOperatorClass => return transUnaryOperator(rp, scope, @ptrCast(*const ZigClangUnaryOperator, stmt), result_used),1317 .UnaryOperatorClass => return transUnaryOperator(rp, scope, @ptrCast(*const clang.UnaryOperator, stmt), result_used),
1318 .CompoundAssignOperatorClass => return transCompoundAssignOperator(rp, scope, @ptrCast(*const ZigClangCompoundAssignOperator, stmt), result_used),1318 .CompoundAssignOperatorClass => return transCompoundAssignOperator(rp, scope, @ptrCast(*const clang.CompoundAssignOperator, stmt), result_used),
1319 .OpaqueValueExprClass => {1319 .OpaqueValueExprClass => {
1320 const source_expr = ZigClangOpaqueValueExpr_getSourceExpr(@ptrCast(*const ZigClangOpaqueValueExpr, stmt)).?;1320 const source_expr = @ptrCast(*const clang.OpaqueValueExpr, stmt).getSourceExpr().?;
1321 const expr = try transExpr(rp, scope, source_expr, .used, lrvalue);1321 const expr = try transExpr(rp, scope, source_expr, .used, lrvalue);
1322 if (expr.tag == .GroupedExpression) return maybeSuppressResult(rp, scope, result_used, expr);1322 if (expr.tag == .GroupedExpression) return maybeSuppressResult(rp, scope, result_used, expr);
1323 const node = try rp.c.arena.create(ast.Node.GroupedExpression);1323 const node = try rp.c.arena.create(ast.Node.GroupedExpression);
...@@ -1332,7 +1332,7 @@ fn transStmt(...@@ -1332,7 +1332,7 @@ fn transStmt(
1332 return revertAndWarn(1332 return revertAndWarn(
1333 rp,1333 rp,
1334 error.UnsupportedTranslation,1334 error.UnsupportedTranslation,
1335 ZigClangStmt_getBeginLoc(stmt),1335 stmt.getBeginLoc(),
1336 "TODO implement translation of stmt class {}",1336 "TODO implement translation of stmt class {}",
1337 .{@tagName(sc)},1337 .{@tagName(sc)},
1338 );1338 );
...@@ -1343,24 +1343,24 @@ fn transStmt(...@@ -1343,24 +1343,24 @@ fn transStmt(
1343fn transBinaryOperator(1343fn transBinaryOperator(
1344 rp: RestorePoint,1344 rp: RestorePoint,
1345 scope: *Scope,1345 scope: *Scope,
1346 stmt: *const ZigClangBinaryOperator,1346 stmt: *const clang.BinaryOperator,
1347 result_used: ResultUsed,1347 result_used: ResultUsed,
1348) TransError!*ast.Node {1348) TransError!*ast.Node {
1349 const op = ZigClangBinaryOperator_getOpcode(stmt);1349 const op = stmt.getOpcode();
1350 const qt = ZigClangBinaryOperator_getType(stmt);1350 const qt = stmt.getType();
1351 var op_token: ast.TokenIndex = undefined;1351 var op_token: ast.TokenIndex = undefined;
1352 var op_id: ast.Node.Tag = undefined;1352 var op_id: ast.Node.Tag = undefined;
1353 switch (op) {1353 switch (op) {
1354 .Assign => return try transCreateNodeAssign(rp, scope, result_used, ZigClangBinaryOperator_getLHS(stmt), ZigClangBinaryOperator_getRHS(stmt)),1354 .Assign => return try transCreateNodeAssign(rp, scope, result_used, stmt.getLHS(), stmt.getRHS()),
1355 .Comma => {1355 .Comma => {
1356 const block_scope = try scope.findBlockScope(rp.c);1356 const block_scope = try scope.findBlockScope(rp.c);
1357 const expr = block_scope.base.parent == scope;1357 const expr = block_scope.base.parent == scope;
1358 const lparen = if (expr) try appendToken(rp.c, .LParen, "(") else undefined;1358 const lparen = if (expr) try appendToken(rp.c, .LParen, "(") else undefined;
13591359
1360 const lhs = try transExpr(rp, &block_scope.base, ZigClangBinaryOperator_getLHS(stmt), .unused, .r_value);1360 const lhs = try transExpr(rp, &block_scope.base, stmt.getLHS(), .unused, .r_value);
1361 try block_scope.statements.append(lhs);1361 try block_scope.statements.append(lhs);
13621362
1363 const rhs = try transExpr(rp, &block_scope.base, ZigClangBinaryOperator_getRHS(stmt), .used, .r_value);1363 const rhs = try transExpr(rp, &block_scope.base, stmt.getRHS(), .used, .r_value);
1364 if (expr) {1364 if (expr) {
1365 _ = try appendToken(rp.c, .Semicolon, ";");1365 _ = try appendToken(rp.c, .Semicolon, ";");
1366 const break_node = try transCreateNodeBreak(rp.c, block_scope.label, rhs);1366 const break_node = try transCreateNodeBreak(rp.c, block_scope.label, rhs);
...@@ -1382,9 +1382,9 @@ fn transBinaryOperator(...@@ -1382,9 +1382,9 @@ fn transBinaryOperator(
1382 if (cIsSignedInteger(qt)) {1382 if (cIsSignedInteger(qt)) {
1383 // signed integer division uses @divTrunc1383 // signed integer division uses @divTrunc
1384 const div_trunc_node = try rp.c.createBuiltinCall("@divTrunc", 2);1384 const div_trunc_node = try rp.c.createBuiltinCall("@divTrunc", 2);
1385 div_trunc_node.params()[0] = try transExpr(rp, scope, ZigClangBinaryOperator_getLHS(stmt), .used, .l_value);1385 div_trunc_node.params()[0] = try transExpr(rp, scope, stmt.getLHS(), .used, .l_value);
1386 _ = try appendToken(rp.c, .Comma, ",");1386 _ = try appendToken(rp.c, .Comma, ",");
1387 const rhs = try transExpr(rp, scope, ZigClangBinaryOperator_getRHS(stmt), .used, .r_value);1387 const rhs = try transExpr(rp, scope, stmt.getRHS(), .used, .r_value);
1388 div_trunc_node.params()[1] = rhs;1388 div_trunc_node.params()[1] = rhs;
1389 div_trunc_node.rparen_token = try appendToken(rp.c, .RParen, ")");1389 div_trunc_node.rparen_token = try appendToken(rp.c, .RParen, ")");
1390 return maybeSuppressResult(rp, scope, result_used, &div_trunc_node.base);1390 return maybeSuppressResult(rp, scope, result_used, &div_trunc_node.base);
...@@ -1394,9 +1394,9 @@ fn transBinaryOperator(...@@ -1394,9 +1394,9 @@ fn transBinaryOperator(
1394 if (cIsSignedInteger(qt)) {1394 if (cIsSignedInteger(qt)) {
1395 // signed integer division uses @rem1395 // signed integer division uses @rem
1396 const rem_node = try rp.c.createBuiltinCall("@rem", 2);1396 const rem_node = try rp.c.createBuiltinCall("@rem", 2);
1397 rem_node.params()[0] = try transExpr(rp, scope, ZigClangBinaryOperator_getLHS(stmt), .used, .l_value);1397 rem_node.params()[0] = try transExpr(rp, scope, stmt.getLHS(), .used, .l_value);
1398 _ = try appendToken(rp.c, .Comma, ",");1398 _ = try appendToken(rp.c, .Comma, ",");
1399 const rhs = try transExpr(rp, scope, ZigClangBinaryOperator_getRHS(stmt), .used, .r_value);1399 const rhs = try transExpr(rp, scope, stmt.getRHS(), .used, .r_value);
1400 rem_node.params()[1] = rhs;1400 rem_node.params()[1] = rhs;
1401 rem_node.rparen_token = try appendToken(rp.c, .RParen, ")");1401 rem_node.rparen_token = try appendToken(rp.c, .RParen, ")");
1402 return maybeSuppressResult(rp, scope, result_used, &rem_node.base);1402 return maybeSuppressResult(rp, scope, result_used, &rem_node.base);
...@@ -1420,7 +1420,7 @@ fn transBinaryOperator(...@@ -1420,7 +1420,7 @@ fn transBinaryOperator(
1420 },1420 },
1421 else => {},1421 else => {},
1422 }1422 }
1423 const lhs_node = try transExpr(rp, scope, ZigClangBinaryOperator_getLHS(stmt), .used, .l_value);1423 const lhs_node = try transExpr(rp, scope, stmt.getLHS(), .used, .l_value);
1424 switch (op) {1424 switch (op) {
1425 .Add => {1425 .Add => {
1426 if (cIsUnsignedInteger(qt)) {1426 if (cIsUnsignedInteger(qt)) {
...@@ -1498,7 +1498,7 @@ fn transBinaryOperator(...@@ -1498,7 +1498,7 @@ fn transBinaryOperator(
1498 else => unreachable,1498 else => unreachable,
1499 }1499 }
15001500
1501 const rhs_node = try transExpr(rp, scope, ZigClangBinaryOperator_getRHS(stmt), .used, .r_value);1501 const rhs_node = try transExpr(rp, scope, stmt.getRHS(), .used, .r_value);
15021502
1503 const lhs = if (isBoolRes(lhs_node)) init: {1503 const lhs = if (isBoolRes(lhs_node)) init: {
1504 const cast_node = try rp.c.createBuiltinCall("@boolToInt", 1);1504 const cast_node = try rp.c.createBuiltinCall("@boolToInt", 1);
...@@ -1520,18 +1520,18 @@ fn transBinaryOperator(...@@ -1520,18 +1520,18 @@ fn transBinaryOperator(
1520fn transCompoundStmtInline(1520fn transCompoundStmtInline(
1521 rp: RestorePoint,1521 rp: RestorePoint,
1522 parent_scope: *Scope,1522 parent_scope: *Scope,
1523 stmt: *const ZigClangCompoundStmt,1523 stmt: *const clang.CompoundStmt,
1524 block: *Scope.Block,1524 block: *Scope.Block,
1525) TransError!void {1525) TransError!void {
1526 var it = ZigClangCompoundStmt_body_begin(stmt);1526 var it = stmt.body_begin();
1527 const end_it = ZigClangCompoundStmt_body_end(stmt);1527 const end_it = stmt.body_end();
1528 while (it != end_it) : (it += 1) {1528 while (it != end_it) : (it += 1) {
1529 const result = try transStmt(rp, parent_scope, it[0], .unused, .r_value);1529 const result = try transStmt(rp, parent_scope, it[0], .unused, .r_value);
1530 try block.statements.append(result);1530 try block.statements.append(result);
1531 }1531 }
1532}1532}
15331533
1534fn transCompoundStmt(rp: RestorePoint, scope: *Scope, stmt: *const ZigClangCompoundStmt) TransError!*ast.Node {1534fn transCompoundStmt(rp: RestorePoint, scope: *Scope, stmt: *const clang.CompoundStmt) TransError!*ast.Node {
1535 var block_scope = try Scope.Block.init(rp.c, scope, false);1535 var block_scope = try Scope.Block.init(rp.c, scope, false);
1536 defer block_scope.deinit();1536 defer block_scope.deinit();
1537 try transCompoundStmtInline(rp, &block_scope.base, stmt, &block_scope);1537 try transCompoundStmtInline(rp, &block_scope.base, stmt, &block_scope);
...@@ -1541,17 +1541,17 @@ fn transCompoundStmt(rp: RestorePoint, scope: *Scope, stmt: *const ZigClangCompo...@@ -1541,17 +1541,17 @@ fn transCompoundStmt(rp: RestorePoint, scope: *Scope, stmt: *const ZigClangCompo
1541fn transCStyleCastExprClass(1541fn transCStyleCastExprClass(
1542 rp: RestorePoint,1542 rp: RestorePoint,
1543 scope: *Scope,1543 scope: *Scope,
1544 stmt: *const ZigClangCStyleCastExpr,1544 stmt: *const clang.CStyleCastExpr,
1545 result_used: ResultUsed,1545 result_used: ResultUsed,
1546 lrvalue: LRValue,1546 lrvalue: LRValue,
1547) TransError!*ast.Node {1547) TransError!*ast.Node {
1548 const sub_expr = ZigClangCStyleCastExpr_getSubExpr(stmt);1548 const sub_expr = stmt.getSubExpr();
1549 const cast_node = (try transCCast(1549 const cast_node = (try transCCast(
1550 rp,1550 rp,
1551 scope,1551 scope,
1552 ZigClangCStyleCastExpr_getBeginLoc(stmt),1552 stmt.getBeginLoc(),
1553 ZigClangCStyleCastExpr_getType(stmt),1553 stmt.getType(),
1554 ZigClangExpr_getType(sub_expr),1554 sub_expr.getType(),
1555 try transExpr(rp, scope, sub_expr, .used, lrvalue),1555 try transExpr(rp, scope, sub_expr, .used, lrvalue),
1556 ));1556 ));
1557 return maybeSuppressResult(rp, scope, result_used, cast_node);1557 return maybeSuppressResult(rp, scope, result_used, cast_node);
...@@ -1560,22 +1560,20 @@ fn transCStyleCastExprClass(...@@ -1560,22 +1560,20 @@ fn transCStyleCastExprClass(
1560fn transDeclStmtOne(1560fn transDeclStmtOne(
1561 rp: RestorePoint,1561 rp: RestorePoint,
1562 scope: *Scope,1562 scope: *Scope,
1563 decl: *const ZigClangDecl,1563 decl: *const clang.Decl,
1564 block_scope: *Scope.Block,1564 block_scope: *Scope.Block,
1565) TransError!*ast.Node {1565) TransError!*ast.Node {
1566 const c = rp.c;1566 const c = rp.c;
15671567
1568 switch (ZigClangDecl_getKind(decl)) {1568 switch (decl.getKind()) {
1569 .Var => {1569 .Var => {
1570 const var_decl = @ptrCast(*const ZigClangVarDecl, decl);1570 const var_decl = @ptrCast(*const clang.VarDecl, decl);
15711571
1572 const qual_type = ZigClangVarDecl_getTypeSourceInfo_getType(var_decl);1572 const qual_type = var_decl.getTypeSourceInfo_getType();
1573 const name = try c.str(ZigClangNamedDecl_getName_bytes_begin(1573 const name = try c.str(@ptrCast(*const clang.NamedDecl, var_decl).getName_bytes_begin());
1574 @ptrCast(*const ZigClangNamedDecl, var_decl),
1575 ));
1576 const mangled_name = try block_scope.makeMangledName(c, name);1574 const mangled_name = try block_scope.makeMangledName(c, name);
15771575
1578 switch (ZigClangVarDecl_getStorageClass(var_decl)) {1576 switch (var_decl.getStorageClass()) {
1579 .Extern, .Static => {1577 .Extern, .Static => {
1580 // This is actually a global variable, put it in the global scope and reference it.1578 // This is actually a global variable, put it in the global scope and reference it.
1581 // `_ = mangled_name;`1579 // `_ = mangled_name;`
...@@ -1585,18 +1583,18 @@ fn transDeclStmtOne(...@@ -1585,18 +1583,18 @@ fn transDeclStmtOne(
1585 else => {},1583 else => {},
1586 }1584 }
15871585
1588 const mut_tok = if (ZigClangQualType_isConstQualified(qual_type))1586 const mut_tok = if (qual_type.isConstQualified())
1589 try appendToken(c, .Keyword_const, "const")1587 try appendToken(c, .Keyword_const, "const")
1590 else1588 else
1591 try appendToken(c, .Keyword_var, "var");1589 try appendToken(c, .Keyword_var, "var");
1592 const name_tok = try appendIdentifier(c, mangled_name);1590 const name_tok = try appendIdentifier(c, mangled_name);
15931591
1594 _ = try appendToken(c, .Colon, ":");1592 _ = try appendToken(c, .Colon, ":");
1595 const loc = ZigClangDecl_getLocation(decl);1593 const loc = decl.getLocation();
1596 const type_node = try transQualType(rp, qual_type, loc);1594 const type_node = try transQualType(rp, qual_type, loc);
15971595
1598 const eq_token = try appendToken(c, .Equal, "=");1596 const eq_token = try appendToken(c, .Equal, "=");
1599 var init_node = if (ZigClangVarDecl_getInit(var_decl)) |expr|1597 var init_node = if (var_decl.getInit()) |expr|
1600 try transExprCoercing(rp, scope, expr, .used, .r_value)1598 try transExprCoercing(rp, scope, expr, .used, .r_value)
1601 else1599 else
1602 try transCreateNodeUndefinedLiteral(c);1600 try transCreateNodeUndefinedLiteral(c);
...@@ -1619,13 +1617,11 @@ fn transDeclStmtOne(...@@ -1619,13 +1617,11 @@ fn transDeclStmtOne(
1619 return &node.base;1617 return &node.base;
1620 },1618 },
1621 .Typedef => {1619 .Typedef => {
1622 const typedef_decl = @ptrCast(*const ZigClangTypedefNameDecl, decl);1620 const typedef_decl = @ptrCast(*const clang.TypedefNameDecl, decl);
1623 const name = try c.str(ZigClangNamedDecl_getName_bytes_begin(1621 const name = try c.str(@ptrCast(*const clang.NamedDecl, typedef_decl).getName_bytes_begin());
1624 @ptrCast(*const ZigClangNamedDecl, typedef_decl),
1625 ));
16261622
1627 const underlying_qual = ZigClangTypedefNameDecl_getUnderlyingType(typedef_decl);1623 const underlying_qual = typedef_decl.getUnderlyingType();
1628 const underlying_type = ZigClangQualType_getTypePtr(underlying_qual);1624 const underlying_type = underlying_qual.getTypePtr();
16291625
1630 const mangled_name = try block_scope.makeMangledName(c, name);1626 const mangled_name = try block_scope.makeMangledName(c, name);
1631 const node = (try transCreateNodeTypedef(rp, typedef_decl, false, mangled_name)) orelse1627 const node = (try transCreateNodeTypedef(rp, typedef_decl, false, mangled_name)) orelse
...@@ -1635,18 +1631,18 @@ fn transDeclStmtOne(...@@ -1635,18 +1631,18 @@ fn transDeclStmtOne(
1635 else => |kind| return revertAndWarn(1631 else => |kind| return revertAndWarn(
1636 rp,1632 rp,
1637 error.UnsupportedTranslation,1633 error.UnsupportedTranslation,
1638 ZigClangDecl_getLocation(decl),1634 decl.getLocation(),
1639 "TODO implement translation of DeclStmt kind {}",1635 "TODO implement translation of DeclStmt kind {}",
1640 .{@tagName(kind)},1636 .{@tagName(kind)},
1641 ),1637 ),
1642 }1638 }
1643}1639}
16441640
1645fn transDeclStmt(rp: RestorePoint, scope: *Scope, stmt: *const ZigClangDeclStmt) TransError!*ast.Node {1641fn transDeclStmt(rp: RestorePoint, scope: *Scope, stmt: *const clang.DeclStmt) TransError!*ast.Node {
1646 const block_scope = scope.findBlockScope(rp.c) catch unreachable;1642 const block_scope = scope.findBlockScope(rp.c) catch unreachable;
16471643
1648 var it = ZigClangDeclStmt_decl_begin(stmt);1644 var it = stmt.decl_begin();
1649 const end_it = ZigClangDeclStmt_decl_end(stmt);1645 const end_it = stmt.decl_end();
1650 assert(it != end_it);1646 assert(it != end_it);
1651 while (true) : (it += 1) {1647 while (true) : (it += 1) {
1652 const node = try transDeclStmtOne(rp, scope, it[0], block_scope);1648 const node = try transDeclStmtOne(rp, scope, it[0], block_scope);
...@@ -1663,11 +1659,11 @@ fn transDeclStmt(rp: RestorePoint, scope: *Scope, stmt: *const ZigClangDeclStmt)...@@ -1663,11 +1659,11 @@ fn transDeclStmt(rp: RestorePoint, scope: *Scope, stmt: *const ZigClangDeclStmt)
1663fn transDeclRefExpr(1659fn transDeclRefExpr(
1664 rp: RestorePoint,1660 rp: RestorePoint,
1665 scope: *Scope,1661 scope: *Scope,
1666 expr: *const ZigClangDeclRefExpr,1662 expr: *const clang.DeclRefExpr,
1667 lrvalue: LRValue,1663 lrvalue: LRValue,
1668) TransError!*ast.Node {1664) TransError!*ast.Node {
1669 const value_decl = ZigClangDeclRefExpr_getDecl(expr);1665 const value_decl = expr.getDecl();
1670 const name = try rp.c.str(ZigClangNamedDecl_getName_bytes_begin(@ptrCast(*const ZigClangNamedDecl, value_decl)));1666 const name = try rp.c.str(@ptrCast(*const clang.NamedDecl, value_decl).getName_bytes_begin());
1671 const mangled_name = scope.getAlias(name);1667 const mangled_name = scope.getAlias(name);
1672 return transCreateNodeIdentifier(rp.c, mangled_name);1668 return transCreateNodeIdentifier(rp.c, mangled_name);
1673}1669}
...@@ -1675,17 +1671,17 @@ fn transDeclRefExpr(...@@ -1675,17 +1671,17 @@ fn transDeclRefExpr(
1675fn transImplicitCastExpr(1671fn transImplicitCastExpr(
1676 rp: RestorePoint,1672 rp: RestorePoint,
1677 scope: *Scope,1673 scope: *Scope,
1678 expr: *const ZigClangImplicitCastExpr,1674 expr: *const clang.ImplicitCastExpr,
1679 result_used: ResultUsed,1675 result_used: ResultUsed,
1680) TransError!*ast.Node {1676) TransError!*ast.Node {
1681 const c = rp.c;1677 const c = rp.c;
1682 const sub_expr = ZigClangImplicitCastExpr_getSubExpr(expr);1678 const sub_expr = expr.getSubExpr();
1683 const dest_type = getExprQualType(c, @ptrCast(*const ZigClangExpr, expr));1679 const dest_type = getExprQualType(c, @ptrCast(*const clang.Expr, expr));
1684 const src_type = getExprQualType(c, sub_expr);1680 const src_type = getExprQualType(c, sub_expr);
1685 switch (ZigClangImplicitCastExpr_getCastKind(expr)) {1681 switch (expr.getCastKind()) {
1686 .BitCast, .FloatingCast, .FloatingToIntegral, .IntegralToFloating, .IntegralCast, .PointerToIntegral, .IntegralToPointer => {1682 .BitCast, .FloatingCast, .FloatingToIntegral, .IntegralToFloating, .IntegralCast, .PointerToIntegral, .IntegralToPointer => {
1687 const sub_expr_node = try transExpr(rp, scope, sub_expr, .used, .r_value);1683 const sub_expr_node = try transExpr(rp, scope, sub_expr, .used, .r_value);
1688 return try transCCast(rp, scope, ZigClangImplicitCastExpr_getBeginLoc(expr), dest_type, src_type, sub_expr_node);1684 return try transCCast(rp, scope, expr.getBeginLoc(), dest_type, src_type, sub_expr_node);
1689 },1685 },
1690 .LValueToRValue, .NoOp, .FunctionToPointerDecay => {1686 .LValueToRValue, .NoOp, .FunctionToPointerDecay => {
1691 const sub_expr_node = try transExpr(rp, scope, sub_expr, .used, .r_value);1687 const sub_expr_node = try transExpr(rp, scope, sub_expr, .used, .r_value);
...@@ -1730,7 +1726,7 @@ fn transImplicitCastExpr(...@@ -1730,7 +1726,7 @@ fn transImplicitCastExpr(
1730 else => |kind| return revertAndWarn(1726 else => |kind| return revertAndWarn(
1731 rp,1727 rp,
1732 error.UnsupportedTranslation,1728 error.UnsupportedTranslation,
1733 ZigClangStmt_getBeginLoc(@ptrCast(*const ZigClangStmt, expr)),1729 @ptrCast(*const clang.Stmt, expr).getBeginLoc(),
1734 "TODO implement translation of CastKind {}",1730 "TODO implement translation of CastKind {}",
1735 .{@tagName(kind)},1731 .{@tagName(kind)},
1736 ),1732 ),
...@@ -1740,15 +1736,15 @@ fn transImplicitCastExpr(...@@ -1740,15 +1736,15 @@ fn transImplicitCastExpr(
1740fn transBoolExpr(1736fn transBoolExpr(
1741 rp: RestorePoint,1737 rp: RestorePoint,
1742 scope: *Scope,1738 scope: *Scope,
1743 expr: *const ZigClangExpr,1739 expr: *const clang.Expr,
1744 used: ResultUsed,1740 used: ResultUsed,
1745 lrvalue: LRValue,1741 lrvalue: LRValue,
1746 grouped: bool,1742 grouped: bool,
1747) TransError!*ast.Node {1743) TransError!*ast.Node {
1748 if (ZigClangStmt_getStmtClass(@ptrCast(*const ZigClangStmt, expr)) == .IntegerLiteralClass) {1744 if (@ptrCast(*const clang.Stmt, expr).getStmtClass() == .IntegerLiteralClass) {
1749 var is_zero: bool = undefined;1745 var is_zero: bool = undefined;
1750 if (!ZigClangIntegerLiteral_isZero(@ptrCast(*const ZigClangIntegerLiteral, expr), &is_zero, rp.c.clang_context)) {1746 if (!(@ptrCast(*const clang.IntegerLiteral, expr).isZero(&is_zero, rp.c.clang_context))) {
1751 return revertAndWarn(rp, error.UnsupportedTranslation, ZigClangExpr_getBeginLoc(expr), "invalid integer literal", .{});1747 return revertAndWarn(rp, error.UnsupportedTranslation, expr.getBeginLoc(), "invalid integer literal", .{});
1752 }1748 }
1753 return try transCreateNodeBoolLiteral(rp.c, !is_zero);1749 return try transCreateNodeBoolLiteral(rp.c, !is_zero);
1754 }1750 }
...@@ -1769,8 +1765,8 @@ fn transBoolExpr(...@@ -1769,8 +1765,8 @@ fn transBoolExpr(
1769 return res;1765 return res;
1770 }1766 }
17711767
1772 const ty = ZigClangQualType_getTypePtr(getExprQualType(rp.c, expr));1768 const ty = getExprQualType(rp.c, expr).getTypePtr();
1773 const node = try finishBoolExpr(rp, scope, ZigClangExpr_getBeginLoc(expr), ty, res, used);1769 const node = try finishBoolExpr(rp, scope, expr.getBeginLoc(), ty, res, used);
17741770
1775 if (grouped) {1771 if (grouped) {
1776 const rparen = try appendToken(rp.c, .RParen, ")");1772 const rparen = try appendToken(rp.c, .RParen, ")");
...@@ -1786,16 +1782,16 @@ fn transBoolExpr(...@@ -1786,16 +1782,16 @@ fn transBoolExpr(
1786 }1782 }
1787}1783}
17881784
1789fn exprIsBooleanType(expr: *const ZigClangExpr) bool {1785fn exprIsBooleanType(expr: *const clang.Expr) bool {
1790 return qualTypeIsBoolean(ZigClangExpr_getType(expr));1786 return qualTypeIsBoolean(expr.getType());
1791}1787}
17921788
1793fn exprIsStringLiteral(expr: *const ZigClangExpr) bool {1789fn exprIsStringLiteral(expr: *const clang.Expr) bool {
1794 switch (ZigClangExpr_getStmtClass(expr)) {1790 switch (expr.getStmtClass()) {
1795 .StringLiteralClass => return true,1791 .StringLiteralClass => return true,
1796 .PredefinedExprClass => return true,1792 .PredefinedExprClass => return true,
1797 .UnaryOperatorClass => {1793 .UnaryOperatorClass => {
1798 const op_expr = ZigClangUnaryOperator_getSubExpr(@ptrCast(*const ZigClangUnaryOperator, expr));1794 const op_expr = @ptrCast(*const clang.UnaryOperator, expr).getSubExpr();
1799 return exprIsStringLiteral(op_expr);1795 return exprIsStringLiteral(op_expr);
1800 },1796 },
1801 else => return false,1797 else => return false,
...@@ -1825,16 +1821,16 @@ fn isBoolRes(res: *ast.Node) bool {...@@ -1825,16 +1821,16 @@ fn isBoolRes(res: *ast.Node) bool {
1825fn finishBoolExpr(1821fn finishBoolExpr(
1826 rp: RestorePoint,1822 rp: RestorePoint,
1827 scope: *Scope,1823 scope: *Scope,
1828 loc: ZigClangSourceLocation,1824 loc: clang.SourceLocation,
1829 ty: *const ZigClangType,1825 ty: *const clang.Type,
1830 node: *ast.Node,1826 node: *ast.Node,
1831 used: ResultUsed,1827 used: ResultUsed,
1832) TransError!*ast.Node {1828) TransError!*ast.Node {
1833 switch (ZigClangType_getTypeClass(ty)) {1829 switch (ty.getTypeClass()) {
1834 .Builtin => {1830 .Builtin => {
1835 const builtin_ty = @ptrCast(*const ZigClangBuiltinType, ty);1831 const builtin_ty = @ptrCast(*const clang.BuiltinType, ty);
18361832
1837 switch (ZigClangBuiltinType_getKind(builtin_ty)) {1833 switch (builtin_ty.getKind()) {
1838 .Bool => return node,1834 .Bool => return node,
1839 .Char_U,1835 .Char_U,
1840 .UChar,1836 .UChar,
...@@ -1879,10 +1875,10 @@ fn finishBoolExpr(...@@ -1879,10 +1875,10 @@ fn finishBoolExpr(
1879 return transCreateNodeInfixOp(rp, scope, node, .BangEqual, op_token, rhs_node, used, false);1875 return transCreateNodeInfixOp(rp, scope, node, .BangEqual, op_token, rhs_node, used, false);
1880 },1876 },
1881 .Typedef => {1877 .Typedef => {
1882 const typedef_ty = @ptrCast(*const ZigClangTypedefType, ty);1878 const typedef_ty = @ptrCast(*const clang.TypedefType, ty);
1883 const typedef_decl = ZigClangTypedefType_getDecl(typedef_ty);1879 const typedef_decl = typedef_ty.getDecl();
1884 const underlying_type = ZigClangTypedefNameDecl_getUnderlyingType(typedef_decl);1880 const underlying_type = typedef_decl.getUnderlyingType();
1885 return finishBoolExpr(rp, scope, loc, ZigClangQualType_getTypePtr(underlying_type), node, used);1881 return finishBoolExpr(rp, scope, loc, underlying_type.getTypePtr(), node, used);
1886 },1882 },
1887 .Enum => {1883 .Enum => {
1888 const op_token = try appendToken(rp.c, .BangEqual, "!=");1884 const op_token = try appendToken(rp.c, .BangEqual, "!=");
...@@ -1890,9 +1886,9 @@ fn finishBoolExpr(...@@ -1890,9 +1886,9 @@ fn finishBoolExpr(
1890 return transCreateNodeInfixOp(rp, scope, node, .BangEqual, op_token, rhs_node, used, false);1886 return transCreateNodeInfixOp(rp, scope, node, .BangEqual, op_token, rhs_node, used, false);
1891 },1887 },
1892 .Elaborated => {1888 .Elaborated => {
1893 const elaborated_ty = @ptrCast(*const ZigClangElaboratedType, ty);1889 const elaborated_ty = @ptrCast(*const clang.ElaboratedType, ty);
1894 const named_type = ZigClangElaboratedType_getNamedType(elaborated_ty);1890 const named_type = elaborated_ty.getNamedType();
1895 return finishBoolExpr(rp, scope, loc, ZigClangQualType_getTypePtr(named_type), node, used);1891 return finishBoolExpr(rp, scope, loc, named_type.getTypePtr(), node, used);
1896 },1892 },
1897 else => {},1893 else => {},
1898 }1894 }
...@@ -1906,18 +1902,18 @@ const SuppressCast = enum {...@@ -1906,18 +1902,18 @@ const SuppressCast = enum {
1906fn transIntegerLiteral(1902fn transIntegerLiteral(
1907 rp: RestorePoint,1903 rp: RestorePoint,
1908 scope: *Scope,1904 scope: *Scope,
1909 expr: *const ZigClangIntegerLiteral,1905 expr: *const clang.IntegerLiteral,
1910 result_used: ResultUsed,1906 result_used: ResultUsed,
1911 suppress_as: SuppressCast,1907 suppress_as: SuppressCast,
1912) TransError!*ast.Node {1908) TransError!*ast.Node {
1913 var eval_result: ZigClangExprEvalResult = undefined;1909 var eval_result: clang.ExprEvalResult = undefined;
1914 if (!ZigClangIntegerLiteral_EvaluateAsInt(expr, &eval_result, rp.c.clang_context)) {1910 if (!expr.EvaluateAsInt(&eval_result, rp.c.clang_context)) {
1915 const loc = ZigClangIntegerLiteral_getBeginLoc(expr);1911 const loc = expr.getBeginLoc();
1916 return revertAndWarn(rp, error.UnsupportedTranslation, loc, "invalid integer literal", .{});1912 return revertAndWarn(rp, error.UnsupportedTranslation, loc, "invalid integer literal", .{});
1917 }1913 }
19181914
1919 if (suppress_as == .no_as) {1915 if (suppress_as == .no_as) {
1920 const int_lit_node = try transCreateNodeAPInt(rp.c, ZigClangAPValue_getInt(&eval_result.Val));1916 const int_lit_node = try transCreateNodeAPInt(rp.c, eval_result.Val.getInt());
1921 return maybeSuppressResult(rp, scope, result_used, int_lit_node);1917 return maybeSuppressResult(rp, scope, result_used, int_lit_node);
1922 }1918 }
19231919
...@@ -1932,12 +1928,12 @@ fn transIntegerLiteral(...@@ -1932,12 +1928,12 @@ fn transIntegerLiteral(
1932 // But the first step is to be correct, and the next step is to make the output more elegant.1928 // But the first step is to be correct, and the next step is to make the output more elegant.
19331929
1934 // @as(T, x)1930 // @as(T, x)
1935 const expr_base = @ptrCast(*const ZigClangExpr, expr);1931 const expr_base = @ptrCast(*const clang.Expr, expr);
1936 const as_node = try rp.c.createBuiltinCall("@as", 2);1932 const as_node = try rp.c.createBuiltinCall("@as", 2);
1937 const ty_node = try transQualType(rp, ZigClangExpr_getType(expr_base), ZigClangExpr_getBeginLoc(expr_base));1933 const ty_node = try transQualType(rp, expr_base.getType(), expr_base.getBeginLoc());
1938 as_node.params()[0] = ty_node;1934 as_node.params()[0] = ty_node;
1939 _ = try appendToken(rp.c, .Comma, ",");1935 _ = try appendToken(rp.c, .Comma, ",");
1940 as_node.params()[1] = try transCreateNodeAPInt(rp.c, ZigClangAPValue_getInt(&eval_result.Val));1936 as_node.params()[1] = try transCreateNodeAPInt(rp.c, eval_result.Val.getInt());
19411937
1942 as_node.rparen_token = try appendToken(rp.c, .RParen, ")");1938 as_node.rparen_token = try appendToken(rp.c, .RParen, ")");
1943 return maybeSuppressResult(rp, scope, result_used, &as_node.base);1939 return maybeSuppressResult(rp, scope, result_used, &as_node.base);
...@@ -1946,10 +1942,10 @@ fn transIntegerLiteral(...@@ -1946,10 +1942,10 @@ fn transIntegerLiteral(
1946fn transReturnStmt(1942fn transReturnStmt(
1947 rp: RestorePoint,1943 rp: RestorePoint,
1948 scope: *Scope,1944 scope: *Scope,
1949 expr: *const ZigClangReturnStmt,1945 expr: *const clang.ReturnStmt,
1950) TransError!*ast.Node {1946) TransError!*ast.Node {
1951 const return_kw = try appendToken(rp.c, .Keyword_return, "return");1947 const return_kw = try appendToken(rp.c, .Keyword_return, "return");
1952 const rhs: ?*ast.Node = if (ZigClangReturnStmt_getRetValue(expr)) |val_expr|1948 const rhs: ?*ast.Node = if (expr.getRetValue()) |val_expr|
1953 try transExprCoercing(rp, scope, val_expr, .used, .r_value)1949 try transExprCoercing(rp, scope, val_expr, .used, .r_value)
1954 else1950 else
1955 null;1951 null;
...@@ -1966,14 +1962,14 @@ fn transReturnStmt(...@@ -1966,14 +1962,14 @@ fn transReturnStmt(
1966fn transStringLiteral(1962fn transStringLiteral(
1967 rp: RestorePoint,1963 rp: RestorePoint,
1968 scope: *Scope,1964 scope: *Scope,
1969 stmt: *const ZigClangStringLiteral,1965 stmt: *const clang.StringLiteral,
1970 result_used: ResultUsed,1966 result_used: ResultUsed,
1971) TransError!*ast.Node {1967) TransError!*ast.Node {
1972 const kind = ZigClangStringLiteral_getKind(stmt);1968 const kind = stmt.getKind();
1973 switch (kind) {1969 switch (kind) {
1974 .Ascii, .UTF8 => {1970 .Ascii, .UTF8 => {
1975 var len: usize = undefined;1971 var len: usize = undefined;
1976 const bytes_ptr = ZigClangStringLiteral_getString_bytes_begin_size(stmt, &len);1972 const bytes_ptr = stmt.getString_bytes_begin_size(&len);
1977 const str = bytes_ptr[0..len];1973 const str = bytes_ptr[0..len];
19781974
1979 var char_buf: [4]u8 = undefined;1975 var char_buf: [4]u8 = undefined;
...@@ -1996,7 +1992,7 @@ fn transStringLiteral(...@@ -1996,7 +1992,7 @@ fn transStringLiteral(
1996 .UTF16, .UTF32, .Wide => return revertAndWarn(1992 .UTF16, .UTF32, .Wide => return revertAndWarn(
1997 rp,1993 rp,
1998 error.UnsupportedTranslation,1994 error.UnsupportedTranslation,
1999 ZigClangStmt_getBeginLoc(@ptrCast(*const ZigClangStmt, stmt)),1995 @ptrCast(*const clang.Stmt, stmt).getBeginLoc(),
2000 "TODO: support string literal kind {}",1996 "TODO: support string literal kind {}",
2001 .{kind},1997 .{kind},
2002 ),1998 ),
...@@ -2041,13 +2037,13 @@ fn escapeChar(c: u8, char_buf: *[4]u8) []const u8 {...@@ -2041,13 +2037,13 @@ fn escapeChar(c: u8, char_buf: *[4]u8) []const u8 {
2041fn transCCast(2037fn transCCast(
2042 rp: RestorePoint,2038 rp: RestorePoint,
2043 scope: *Scope,2039 scope: *Scope,
2044 loc: ZigClangSourceLocation,2040 loc: clang.SourceLocation,
2045 dst_type: ZigClangQualType,2041 dst_type: clang.QualType,
2046 src_type: ZigClangQualType,2042 src_type: clang.QualType,
2047 expr: *ast.Node,2043 expr: *ast.Node,
2048) !*ast.Node {2044) !*ast.Node {
2049 if (ZigClangType_isVoidType(qualTypeCanon(dst_type))) return expr;2045 if (qualTypeCanon(dst_type).isVoidType()) return expr;
2050 if (ZigClangQualType_eq(dst_type, src_type)) return expr;2046 if (dst_type.eq(src_type)) return expr;
2051 if (qualTypeIsPtr(dst_type) and qualTypeIsPtr(src_type))2047 if (qualTypeIsPtr(dst_type) and qualTypeIsPtr(src_type))
2052 return transCPtrCast(rp, loc, dst_type, src_type, expr);2048 return transCPtrCast(rp, loc, dst_type, src_type, expr);
2053 if (cIsInteger(dst_type) and cIsInteger(src_type)) {2049 if (cIsInteger(dst_type) and cIsInteger(src_type)) {
...@@ -2134,9 +2130,7 @@ fn transCCast(...@@ -2134,9 +2130,7 @@ fn transCCast(
2134 builtin_node.rparen_token = try appendToken(rp.c, .RParen, ")");2130 builtin_node.rparen_token = try appendToken(rp.c, .RParen, ")");
2135 return &builtin_node.base;2131 return &builtin_node.base;
2136 }2132 }
2137 if (ZigClangType_isBooleanType(qualTypeCanon(src_type)) and2133 if (qualTypeIsBoolean(src_type) and !qualTypeIsBoolean(dst_type)) {
2138 !ZigClangType_isBooleanType(qualTypeCanon(dst_type)))
2139 {
2140 // @boolToInt returns either a comptime_int or a u12134 // @boolToInt returns either a comptime_int or a u1
2141 const builtin_node = try rp.c.createBuiltinCall("@boolToInt", 1);2135 const builtin_node = try rp.c.createBuiltinCall("@boolToInt", 1);
2142 builtin_node.params()[0] = expr;2136 builtin_node.params()[0] = expr;
...@@ -2166,7 +2160,7 @@ fn transCCast(...@@ -2166,7 +2160,7 @@ fn transCCast(
21662160
2167 return &cast_node.base;2161 return &cast_node.base;
2168 }2162 }
2169 if (ZigClangQualType_getTypeClass(ZigClangQualType_getCanonicalType(dst_type)) == .Enum) {2163 if (dst_type.getCanonicalType().getTypeClass() == .Enum) {
2170 const builtin_node = try rp.c.createBuiltinCall("@intToEnum", 2);2164 const builtin_node = try rp.c.createBuiltinCall("@intToEnum", 2);
2171 builtin_node.params()[0] = try transQualType(rp, dst_type, loc);2165 builtin_node.params()[0] = try transQualType(rp, dst_type, loc);
2172 _ = try appendToken(rp.c, .Comma, ",");2166 _ = try appendToken(rp.c, .Comma, ",");
...@@ -2174,8 +2168,8 @@ fn transCCast(...@@ -2174,8 +2168,8 @@ fn transCCast(
2174 builtin_node.rparen_token = try appendToken(rp.c, .RParen, ")");2168 builtin_node.rparen_token = try appendToken(rp.c, .RParen, ")");
2175 return &builtin_node.base;2169 return &builtin_node.base;
2176 }2170 }
2177 if (ZigClangQualType_getTypeClass(ZigClangQualType_getCanonicalType(src_type)) == .Enum and2171 if (src_type.getCanonicalType().getTypeClass() == .Enum and
2178 ZigClangQualType_getTypeClass(ZigClangQualType_getCanonicalType(dst_type)) != .Enum)2172 dst_type.getCanonicalType().getTypeClass() != .Enum)
2179 {2173 {
2180 const builtin_node = try rp.c.createBuiltinCall("@enumToInt", 1);2174 const builtin_node = try rp.c.createBuiltinCall("@enumToInt", 1);
2181 builtin_node.params()[0] = expr;2175 builtin_node.params()[0] = expr;
...@@ -2193,11 +2187,11 @@ fn transCCast(...@@ -2193,11 +2187,11 @@ fn transCCast(
2193fn transExpr(2187fn transExpr(
2194 rp: RestorePoint,2188 rp: RestorePoint,
2195 scope: *Scope,2189 scope: *Scope,
2196 expr: *const ZigClangExpr,2190 expr: *const clang.Expr,
2197 used: ResultUsed,2191 used: ResultUsed,
2198 lrvalue: LRValue,2192 lrvalue: LRValue,
2199) TransError!*ast.Node {2193) TransError!*ast.Node {
2200 return transStmt(rp, scope, @ptrCast(*const ZigClangStmt, expr), used, lrvalue);2194 return transStmt(rp, scope, @ptrCast(*const clang.Stmt, expr), used, lrvalue);
2201}2195}
22022196
2203/// Same as `transExpr` but with the knowledge that the operand will be type coerced, and therefore2197/// Same as `transExpr` but with the knowledge that the operand will be type coerced, and therefore
...@@ -2205,21 +2199,21 @@ fn transExpr(...@@ -2205,21 +2199,21 @@ fn transExpr(
2205fn transExprCoercing(2199fn transExprCoercing(
2206 rp: RestorePoint,2200 rp: RestorePoint,
2207 scope: *Scope,2201 scope: *Scope,
2208 expr: *const ZigClangExpr,2202 expr: *const clang.Expr,
2209 used: ResultUsed,2203 used: ResultUsed,
2210 lrvalue: LRValue,2204 lrvalue: LRValue,
2211) TransError!*ast.Node {2205) TransError!*ast.Node {
2212 switch (ZigClangStmt_getStmtClass(@ptrCast(*const ZigClangStmt, expr))) {2206 switch (@ptrCast(*const clang.Stmt, expr).getStmtClass()) {
2213 .IntegerLiteralClass => {2207 .IntegerLiteralClass => {
2214 return transIntegerLiteral(rp, scope, @ptrCast(*const ZigClangIntegerLiteral, expr), .used, .no_as);2208 return transIntegerLiteral(rp, scope, @ptrCast(*const clang.IntegerLiteral, expr), .used, .no_as);
2215 },2209 },
2216 .CharacterLiteralClass => {2210 .CharacterLiteralClass => {
2217 return transCharLiteral(rp, scope, @ptrCast(*const ZigClangCharacterLiteral, expr), .used, .no_as);2211 return transCharLiteral(rp, scope, @ptrCast(*const clang.CharacterLiteral, expr), .used, .no_as);
2218 },2212 },
2219 .UnaryOperatorClass => {2213 .UnaryOperatorClass => {
2220 const un_expr = @ptrCast(*const ZigClangUnaryOperator, expr);2214 const un_expr = @ptrCast(*const clang.UnaryOperator, expr);
2221 if (ZigClangUnaryOperator_getOpcode(un_expr) == .Extension) {2215 if (un_expr.getOpcode() == .Extension) {
2222 return transExprCoercing(rp, scope, ZigClangUnaryOperator_getSubExpr(un_expr), used, lrvalue);2216 return transExprCoercing(rp, scope, un_expr.getSubExpr(), used, lrvalue);
2223 }2217 }
2224 },2218 },
2225 else => {},2219 else => {},
...@@ -2230,51 +2224,51 @@ fn transExprCoercing(...@@ -2230,51 +2224,51 @@ fn transExprCoercing(
2230fn transInitListExprRecord(2224fn transInitListExprRecord(
2231 rp: RestorePoint,2225 rp: RestorePoint,
2232 scope: *Scope,2226 scope: *Scope,
2233 loc: ZigClangSourceLocation,2227 loc: clang.SourceLocation,
2234 expr: *const ZigClangInitListExpr,2228 expr: *const clang.InitListExpr,
2235 ty: *const ZigClangType,2229 ty: *const clang.Type,
2236 used: ResultUsed,2230 used: ResultUsed,
2237) TransError!*ast.Node {2231) TransError!*ast.Node {
2238 var is_union_type = false;2232 var is_union_type = false;
2239 // Unions and Structs are both represented as RecordDecl2233 // Unions and Structs are both represented as RecordDecl
2240 const record_ty = ZigClangType_getAsRecordType(ty) orelse2234 const record_ty = ty.getAsRecordType() orelse
2241 blk: {2235 blk: {
2242 is_union_type = true;2236 is_union_type = true;
2243 break :blk ZigClangType_getAsUnionType(ty);2237 break :blk ty.getAsUnionType();
2244 } orelse unreachable;2238 } orelse unreachable;
2245 const record_decl = ZigClangRecordType_getDecl(record_ty);2239 const record_decl = record_ty.getDecl();
2246 const record_def = ZigClangRecordDecl_getDefinition(record_decl) orelse2240 const record_def = record_decl.getDefinition() orelse
2247 unreachable;2241 unreachable;
22482242
2249 const ty_node = try transType(rp, ty, loc);2243 const ty_node = try transType(rp, ty, loc);
2250 const init_count = ZigClangInitListExpr_getNumInits(expr);2244 const init_count = expr.getNumInits();
2251 var field_inits = std.ArrayList(*ast.Node).init(rp.c.gpa);2245 var field_inits = std.ArrayList(*ast.Node).init(rp.c.gpa);
2252 defer field_inits.deinit();2246 defer field_inits.deinit();
22532247
2254 _ = try appendToken(rp.c, .LBrace, "{");2248 _ = try appendToken(rp.c, .LBrace, "{");
22552249
2256 var init_i: c_uint = 0;2250 var init_i: c_uint = 0;
2257 var it = ZigClangRecordDecl_field_begin(record_def);2251 var it = record_def.field_begin();
2258 const end_it = ZigClangRecordDecl_field_end(record_def);2252 const end_it = record_def.field_end();
2259 while (ZigClangRecordDecl_field_iterator_neq(it, end_it)) : (it = ZigClangRecordDecl_field_iterator_next(it)) {2253 while (it.neq(end_it)) : (it = it.next()) {
2260 const field_decl = ZigClangRecordDecl_field_iterator_deref(it);2254 const field_decl = it.deref();
22612255
2262 // The initializer for a union type has a single entry only2256 // The initializer for a union type has a single entry only
2263 if (is_union_type and field_decl != ZigClangInitListExpr_getInitializedFieldInUnion(expr)) {2257 if (is_union_type and field_decl != expr.getInitializedFieldInUnion()) {
2264 continue;2258 continue;
2265 }2259 }
22662260
2267 assert(init_i < init_count);2261 assert(init_i < init_count);
2268 const elem_expr = ZigClangInitListExpr_getInit(expr, init_i);2262 const elem_expr = expr.getInit(init_i);
2269 init_i += 1;2263 init_i += 1;
22702264
2271 // Generate the field assignment expression:2265 // Generate the field assignment expression:
2272 // .field_name = expr2266 // .field_name = expr
2273 const period_tok = try appendToken(rp.c, .Period, ".");2267 const period_tok = try appendToken(rp.c, .Period, ".");
22742268
2275 var raw_name = try rp.c.str(ZigClangNamedDecl_getName_bytes_begin(@ptrCast(*const ZigClangNamedDecl, field_decl)));2269 var raw_name = try rp.c.str(@ptrCast(*const clang.NamedDecl, field_decl).getName_bytes_begin());
2276 if (ZigClangFieldDecl_isAnonymousStructOrUnion(field_decl)) {2270 if (field_decl.isAnonymousStructOrUnion()) {
2277 const name = rp.c.decl_table.get(@ptrToInt(ZigClangFieldDecl_getCanonicalDecl(field_decl))).?;2271 const name = rp.c.decl_table.get(@ptrToInt(field_decl.getCanonicalDecl())).?;
2278 raw_name = try mem.dupe(rp.c.arena, u8, name);2272 raw_name = try mem.dupe(rp.c.arena, u8, name);
2279 }2273 }
2280 const field_name_tok = try appendIdentifier(rp.c, raw_name);2274 const field_name_tok = try appendIdentifier(rp.c, raw_name);
...@@ -2304,8 +2298,8 @@ fn transInitListExprRecord(...@@ -2304,8 +2298,8 @@ fn transInitListExprRecord(
23042298
2305fn transCreateNodeArrayType(2299fn transCreateNodeArrayType(
2306 rp: RestorePoint,2300 rp: RestorePoint,
2307 source_loc: ZigClangSourceLocation,2301 source_loc: clang.SourceLocation,
2308 ty: *const ZigClangType,2302 ty: *const clang.Type,
2309 len: anytype,2303 len: anytype,
2310) !*ast.Node {2304) !*ast.Node {
2311 const node = try rp.c.arena.create(ast.Node.ArrayType);2305 const node = try rp.c.arena.create(ast.Node.ArrayType);
...@@ -2323,18 +2317,18 @@ fn transCreateNodeArrayType(...@@ -2323,18 +2317,18 @@ fn transCreateNodeArrayType(
2323fn transInitListExprArray(2317fn transInitListExprArray(
2324 rp: RestorePoint,2318 rp: RestorePoint,
2325 scope: *Scope,2319 scope: *Scope,
2326 loc: ZigClangSourceLocation,2320 loc: clang.SourceLocation,
2327 expr: *const ZigClangInitListExpr,2321 expr: *const clang.InitListExpr,
2328 ty: *const ZigClangType,2322 ty: *const clang.Type,
2329 used: ResultUsed,2323 used: ResultUsed,
2330) TransError!*ast.Node {2324) TransError!*ast.Node {
2331 const arr_type = ZigClangType_getAsArrayTypeUnsafe(ty);2325 const arr_type = ty.getAsArrayTypeUnsafe();
2332 const child_qt = ZigClangArrayType_getElementType(arr_type);2326 const child_qt = arr_type.getElementType();
2333 const init_count = ZigClangInitListExpr_getNumInits(expr);2327 const init_count = expr.getNumInits();
2334 assert(ZigClangType_isConstantArrayType(@ptrCast(*const ZigClangType, arr_type)));2328 assert(@ptrCast(*const clang.Type, arr_type).isConstantArrayType());
2335 const const_arr_ty = @ptrCast(*const ZigClangConstantArrayType, arr_type);2329 const const_arr_ty = @ptrCast(*const clang.ConstantArrayType, arr_type);
2336 const size_ap_int = ZigClangConstantArrayType_getSize(const_arr_ty);2330 const size_ap_int = const_arr_ty.getSize();
2337 const all_count = ZigClangAPInt_getLimitedValue(size_ap_int, math.maxInt(usize));2331 const all_count = size_ap_int.getLimitedValue(math.maxInt(usize));
2338 const leftover_count = all_count - init_count;2332 const leftover_count = all_count - init_count;
23392333
2340 var init_node: *ast.Node.ArrayInitializer = undefined;2334 var init_node: *ast.Node.ArrayInitializer = undefined;
...@@ -2343,7 +2337,7 @@ fn transInitListExprArray(...@@ -2343,7 +2337,7 @@ fn transInitListExprArray(
2343 const ty_node = try transCreateNodeArrayType(2337 const ty_node = try transCreateNodeArrayType(
2344 rp,2338 rp,
2345 loc,2339 loc,
2346 ZigClangQualType_getTypePtr(child_qt),2340 child_qt.getTypePtr(),
2347 init_count,2341 init_count,
2348 );2342 );
2349 _ = try appendToken(rp.c, .LBrace, "{");2343 _ = try appendToken(rp.c, .LBrace, "{");
...@@ -2357,7 +2351,7 @@ fn transInitListExprArray(...@@ -2357,7 +2351,7 @@ fn transInitListExprArray(
23572351
2358 var i: c_uint = 0;2352 var i: c_uint = 0;
2359 while (i < init_count) : (i += 1) {2353 while (i < init_count) : (i += 1) {
2360 const elem_expr = ZigClangInitListExpr_getInit(expr, i);2354 const elem_expr = expr.getInit(i);
2361 init_list[i] = try transExpr(rp, scope, elem_expr, .used, .r_value);2355 init_list[i] = try transExpr(rp, scope, elem_expr, .used, .r_value);
2362 _ = try appendToken(rp.c, .Comma, ",");2356 _ = try appendToken(rp.c, .Comma, ",");
2363 }2357 }
...@@ -2368,7 +2362,7 @@ fn transInitListExprArray(...@@ -2368,7 +2362,7 @@ fn transInitListExprArray(
2368 cat_tok = try appendToken(rp.c, .PlusPlus, "++");2362 cat_tok = try appendToken(rp.c, .PlusPlus, "++");
2369 }2363 }
23702364
2371 const ty_node = try transCreateNodeArrayType(rp, loc, ZigClangQualType_getTypePtr(child_qt), 1);2365 const ty_node = try transCreateNodeArrayType(rp, loc, child_qt.getTypePtr(), 1);
2372 _ = try appendToken(rp.c, .LBrace, "{");2366 _ = try appendToken(rp.c, .LBrace, "{");
2373 const filler_init_node = try ast.Node.ArrayInitializer.alloc(rp.c.arena, 1);2367 const filler_init_node = try ast.Node.ArrayInitializer.alloc(rp.c.arena, 1);
2374 filler_init_node.* = .{2368 filler_init_node.* = .{
...@@ -2376,7 +2370,7 @@ fn transInitListExprArray(...@@ -2376,7 +2370,7 @@ fn transInitListExprArray(
2376 .rtoken = undefined,2370 .rtoken = undefined,
2377 .list_len = 1,2371 .list_len = 1,
2378 };2372 };
2379 const filler_val_expr = ZigClangInitListExpr_getArrayFiller(expr);2373 const filler_val_expr = expr.getArrayFiller();
2380 filler_init_node.list()[0] = try transExpr(rp, scope, filler_val_expr, .used, .r_value);2374 filler_init_node.list()[0] = try transExpr(rp, scope, filler_val_expr, .used, .r_value);
2381 filler_init_node.rtoken = try appendToken(rp.c, .RBrace, "}");2375 filler_init_node.rtoken = try appendToken(rp.c, .RBrace, "}");
23822376
...@@ -2411,14 +2405,14 @@ fn transInitListExprArray(...@@ -2411,14 +2405,14 @@ fn transInitListExprArray(
2411fn transInitListExpr(2405fn transInitListExpr(
2412 rp: RestorePoint,2406 rp: RestorePoint,
2413 scope: *Scope,2407 scope: *Scope,
2414 expr: *const ZigClangInitListExpr,2408 expr: *const clang.InitListExpr,
2415 used: ResultUsed,2409 used: ResultUsed,
2416) TransError!*ast.Node {2410) TransError!*ast.Node {
2417 const qt = getExprQualType(rp.c, @ptrCast(*const ZigClangExpr, expr));2411 const qt = getExprQualType(rp.c, @ptrCast(*const clang.Expr, expr));
2418 var qual_type = ZigClangQualType_getTypePtr(qt);2412 var qual_type = qt.getTypePtr();
2419 const source_loc = ZigClangExpr_getBeginLoc(@ptrCast(*const ZigClangExpr, expr));2413 const source_loc = @ptrCast(*const clang.Expr, expr).getBeginLoc();
24202414
2421 if (ZigClangType_isRecordType(qual_type)) {2415 if (qual_type.isRecordType()) {
2422 return transInitListExprRecord(2416 return transInitListExprRecord(
2423 rp,2417 rp,
2424 scope,2418 scope,
...@@ -2427,7 +2421,7 @@ fn transInitListExpr(...@@ -2427,7 +2421,7 @@ fn transInitListExpr(
2427 qual_type,2421 qual_type,
2428 used,2422 used,
2429 );2423 );
2430 } else if (ZigClangType_isArrayType(qual_type)) {2424 } else if (qual_type.isArrayType()) {
2431 return transInitListExprArray(2425 return transInitListExprArray(
2432 rp,2426 rp,
2433 scope,2427 scope,
...@@ -2437,7 +2431,7 @@ fn transInitListExpr(...@@ -2437,7 +2431,7 @@ fn transInitListExpr(
2437 used,2431 used,
2438 );2432 );
2439 } else {2433 } else {
2440 const type_name = rp.c.str(ZigClangType_getTypeClassName(qual_type));2434 const type_name = rp.c.str(qual_type.getTypeClassName());
2441 return revertAndWarn(rp, error.UnsupportedType, source_loc, "unsupported initlist type: '{}'", .{type_name});2435 return revertAndWarn(rp, error.UnsupportedType, source_loc, "unsupported initlist type: '{}'", .{type_name});
2442 }2436 }
2443}2437}
...@@ -2445,13 +2439,13 @@ fn transInitListExpr(...@@ -2445,13 +2439,13 @@ fn transInitListExpr(
2445fn transZeroInitExpr(2439fn transZeroInitExpr(
2446 rp: RestorePoint,2440 rp: RestorePoint,
2447 scope: *Scope,2441 scope: *Scope,
2448 source_loc: ZigClangSourceLocation,2442 source_loc: clang.SourceLocation,
2449 ty: *const ZigClangType,2443 ty: *const clang.Type,
2450) TransError!*ast.Node {2444) TransError!*ast.Node {
2451 switch (ZigClangType_getTypeClass(ty)) {2445 switch (ty.getTypeClass()) {
2452 .Builtin => {2446 .Builtin => {
2453 const builtin_ty = @ptrCast(*const ZigClangBuiltinType, ty);2447 const builtin_ty = @ptrCast(*const clang.BuiltinType, ty);
2454 switch (ZigClangBuiltinType_getKind(builtin_ty)) {2448 switch (builtin_ty.getKind()) {
2455 .Bool => return try transCreateNodeBoolLiteral(rp.c, false),2449 .Bool => return try transCreateNodeBoolLiteral(rp.c, false),
2456 .Char_U,2450 .Char_U,
2457 .UChar,2451 .UChar,
...@@ -2479,15 +2473,13 @@ fn transZeroInitExpr(...@@ -2479,15 +2473,13 @@ fn transZeroInitExpr(
2479 },2473 },
2480 .Pointer => return transCreateNodeNullLiteral(rp.c),2474 .Pointer => return transCreateNodeNullLiteral(rp.c),
2481 .Typedef => {2475 .Typedef => {
2482 const typedef_ty = @ptrCast(*const ZigClangTypedefType, ty);2476 const typedef_ty = @ptrCast(*const clang.TypedefType, ty);
2483 const typedef_decl = ZigClangTypedefType_getDecl(typedef_ty);2477 const typedef_decl = typedef_ty.getDecl();
2484 return transZeroInitExpr(2478 return transZeroInitExpr(
2485 rp,2479 rp,
2486 scope,2480 scope,
2487 source_loc,2481 source_loc,
2488 ZigClangQualType_getTypePtr(2482 typedef_decl.getUnderlyingType().getTypePtr(),
2489 ZigClangTypedefNameDecl_getUnderlyingType(typedef_decl),
2490 ),
2491 );2483 );
2492 },2484 },
2493 else => {},2485 else => {},
...@@ -2499,19 +2491,19 @@ fn transZeroInitExpr(...@@ -2499,19 +2491,19 @@ fn transZeroInitExpr(
2499fn transImplicitValueInitExpr(2491fn transImplicitValueInitExpr(
2500 rp: RestorePoint,2492 rp: RestorePoint,
2501 scope: *Scope,2493 scope: *Scope,
2502 expr: *const ZigClangExpr,2494 expr: *const clang.Expr,
2503 used: ResultUsed,2495 used: ResultUsed,
2504) TransError!*ast.Node {2496) TransError!*ast.Node {
2505 const source_loc = ZigClangExpr_getBeginLoc(expr);2497 const source_loc = expr.getBeginLoc();
2506 const qt = getExprQualType(rp.c, expr);2498 const qt = getExprQualType(rp.c, expr);
2507 const ty = ZigClangQualType_getTypePtr(qt);2499 const ty = qt.getTypePtr();
2508 return transZeroInitExpr(rp, scope, source_loc, ty);2500 return transZeroInitExpr(rp, scope, source_loc, ty);
2509}2501}
25102502
2511fn transIfStmt(2503fn transIfStmt(
2512 rp: RestorePoint,2504 rp: RestorePoint,
2513 scope: *Scope,2505 scope: *Scope,
2514 stmt: *const ZigClangIfStmt,2506 stmt: *const clang.IfStmt,
2515) TransError!*ast.Node {2507) TransError!*ast.Node {
2516 // if (c) t2508 // if (c) t
2517 // if (c) t else e2509 // if (c) t else e
...@@ -2524,13 +2516,13 @@ fn transIfStmt(...@@ -2524,13 +2516,13 @@ fn transIfStmt(
2524 },2516 },
2525 };2517 };
2526 defer cond_scope.deinit();2518 defer cond_scope.deinit();
2527 const cond_expr = @ptrCast(*const ZigClangExpr, ZigClangIfStmt_getCond(stmt));2519 const cond_expr = @ptrCast(*const clang.Expr, stmt.getCond());
2528 if_node.condition = try transBoolExpr(rp, &cond_scope.base, cond_expr, .used, .r_value, false);2520 if_node.condition = try transBoolExpr(rp, &cond_scope.base, cond_expr, .used, .r_value, false);
2529 _ = try appendToken(rp.c, .RParen, ")");2521 _ = try appendToken(rp.c, .RParen, ")");
25302522
2531 if_node.body = try transStmt(rp, scope, ZigClangIfStmt_getThen(stmt), .unused, .r_value);2523 if_node.body = try transStmt(rp, scope, stmt.getThen(), .unused, .r_value);
25322524
2533 if (ZigClangIfStmt_getElse(stmt)) |expr| {2525 if (stmt.getElse()) |expr| {
2534 if_node.@"else" = try transCreateNodeElse(rp.c);2526 if_node.@"else" = try transCreateNodeElse(rp.c);
2535 if_node.@"else".?.body = try transStmt(rp, scope, expr, .unused, .r_value);2527 if_node.@"else".?.body = try transStmt(rp, scope, expr, .unused, .r_value);
2536 }2528 }
...@@ -2541,7 +2533,7 @@ fn transIfStmt(...@@ -2541,7 +2533,7 @@ fn transIfStmt(
2541fn transWhileLoop(2533fn transWhileLoop(
2542 rp: RestorePoint,2534 rp: RestorePoint,
2543 scope: *Scope,2535 scope: *Scope,
2544 stmt: *const ZigClangWhileStmt,2536 stmt: *const clang.WhileStmt,
2545) TransError!*ast.Node {2537) TransError!*ast.Node {
2546 const while_node = try transCreateNodeWhile(rp.c);2538 const while_node = try transCreateNodeWhile(rp.c);
25472539
...@@ -2552,7 +2544,7 @@ fn transWhileLoop(...@@ -2552,7 +2544,7 @@ fn transWhileLoop(
2552 },2544 },
2553 };2545 };
2554 defer cond_scope.deinit();2546 defer cond_scope.deinit();
2555 const cond_expr = @ptrCast(*const ZigClangExpr, ZigClangWhileStmt_getCond(stmt));2547 const cond_expr = @ptrCast(*const clang.Expr, stmt.getCond());
2556 while_node.condition = try transBoolExpr(rp, &cond_scope.base, cond_expr, .used, .r_value, false);2548 while_node.condition = try transBoolExpr(rp, &cond_scope.base, cond_expr, .used, .r_value, false);
2557 _ = try appendToken(rp.c, .RParen, ")");2549 _ = try appendToken(rp.c, .RParen, ")");
25582550
...@@ -2560,7 +2552,7 @@ fn transWhileLoop(...@@ -2560,7 +2552,7 @@ fn transWhileLoop(
2560 .parent = scope,2552 .parent = scope,
2561 .id = .Loop,2553 .id = .Loop,
2562 };2554 };
2563 while_node.body = try transStmt(rp, &loop_scope, ZigClangWhileStmt_getBody(stmt), .unused, .r_value);2555 while_node.body = try transStmt(rp, &loop_scope, stmt.getBody(), .unused, .r_value);
2564 _ = try appendToken(rp.c, .Semicolon, ";");2556 _ = try appendToken(rp.c, .Semicolon, ";");
2565 return &while_node.base;2557 return &while_node.base;
2566}2558}
...@@ -2568,7 +2560,7 @@ fn transWhileLoop(...@@ -2568,7 +2560,7 @@ fn transWhileLoop(
2568fn transDoWhileLoop(2560fn transDoWhileLoop(
2569 rp: RestorePoint,2561 rp: RestorePoint,
2570 scope: *Scope,2562 scope: *Scope,
2571 stmt: *const ZigClangDoStmt,2563 stmt: *const clang.DoStmt,
2572) TransError!*ast.Node {2564) TransError!*ast.Node {
2573 const while_node = try transCreateNodeWhile(rp.c);2565 const while_node = try transCreateNodeWhile(rp.c);
25742566
...@@ -2590,13 +2582,13 @@ fn transDoWhileLoop(...@@ -2590,13 +2582,13 @@ fn transDoWhileLoop(
2590 };2582 };
2591 defer cond_scope.deinit();2583 defer cond_scope.deinit();
2592 const prefix_op = try transCreateNodeSimplePrefixOp(rp.c, .BoolNot, .Bang, "!");2584 const prefix_op = try transCreateNodeSimplePrefixOp(rp.c, .BoolNot, .Bang, "!");
2593 prefix_op.rhs = try transBoolExpr(rp, &cond_scope.base, @ptrCast(*const ZigClangExpr, ZigClangDoStmt_getCond(stmt)), .used, .r_value, true);2585 prefix_op.rhs = try transBoolExpr(rp, &cond_scope.base, @ptrCast(*const clang.Expr, stmt.getCond()), .used, .r_value, true);
2594 _ = try appendToken(rp.c, .RParen, ")");2586 _ = try appendToken(rp.c, .RParen, ")");
2595 if_node.condition = &prefix_op.base;2587 if_node.condition = &prefix_op.base;
2596 if_node.body = &(try transCreateNodeBreak(rp.c, null, null)).base;2588 if_node.body = &(try transCreateNodeBreak(rp.c, null, null)).base;
2597 _ = try appendToken(rp.c, .Semicolon, ";");2589 _ = try appendToken(rp.c, .Semicolon, ";");
25982590
2599 const body_node = if (ZigClangStmt_getStmtClass(ZigClangDoStmt_getBody(stmt)) == .CompoundStmtClass) blk: {2591 const body_node = if (stmt.getBody().getStmtClass() == .CompoundStmtClass) blk: {
2600 // there's already a block in C, so we'll append our condition to it.2592 // there's already a block in C, so we'll append our condition to it.
2601 // c: do {2593 // c: do {
2602 // c: a;2594 // c: a;
...@@ -2607,7 +2599,7 @@ fn transDoWhileLoop(...@@ -2607,7 +2599,7 @@ fn transDoWhileLoop(
2607 // zig: b;2599 // zig: b;
2608 // zig: if (!cond) break;2600 // zig: if (!cond) break;
2609 // zig: }2601 // zig: }
2610 const node = try transStmt(rp, &loop_scope, ZigClangDoStmt_getBody(stmt), .unused, .r_value);2602 const node = try transStmt(rp, &loop_scope, stmt.getBody(), .unused, .r_value);
2611 break :blk node.castTag(.Block).?;2603 break :blk node.castTag(.Block).?;
2612 } else blk: {2604 } else blk: {
2613 // the C statement is without a block, so we need to create a block to contain it.2605 // the C statement is without a block, so we need to create a block to contain it.
...@@ -2621,7 +2613,7 @@ fn transDoWhileLoop(...@@ -2621,7 +2613,7 @@ fn transDoWhileLoop(
2621 new = true;2613 new = true;
2622 const block = try rp.c.createBlock(2);2614 const block = try rp.c.createBlock(2);
2623 block.statements_len = 1; // over-allocated so we can add another below2615 block.statements_len = 1; // over-allocated so we can add another below
2624 block.statements()[0] = try transStmt(rp, &loop_scope, ZigClangDoStmt_getBody(stmt), .unused, .r_value);2616 block.statements()[0] = try transStmt(rp, &loop_scope, stmt.getBody(), .unused, .r_value);
2625 break :blk block;2617 break :blk block;
2626 };2618 };
26272619
...@@ -2637,7 +2629,7 @@ fn transDoWhileLoop(...@@ -2637,7 +2629,7 @@ fn transDoWhileLoop(
2637fn transForLoop(2629fn transForLoop(
2638 rp: RestorePoint,2630 rp: RestorePoint,
2639 scope: *Scope,2631 scope: *Scope,
2640 stmt: *const ZigClangForStmt,2632 stmt: *const clang.ForStmt,
2641) TransError!*ast.Node {2633) TransError!*ast.Node {
2642 var loop_scope = Scope{2634 var loop_scope = Scope{
2643 .parent = scope,2635 .parent = scope,
...@@ -2647,7 +2639,7 @@ fn transForLoop(...@@ -2647,7 +2639,7 @@ fn transForLoop(
2647 var block_scope: ?Scope.Block = null;2639 var block_scope: ?Scope.Block = null;
2648 defer if (block_scope) |*bs| bs.deinit();2640 defer if (block_scope) |*bs| bs.deinit();
26492641
2650 if (ZigClangForStmt_getInit(stmt)) |init| {2642 if (stmt.getInit()) |init| {
2651 block_scope = try Scope.Block.init(rp.c, scope, false);2643 block_scope = try Scope.Block.init(rp.c, scope, false);
2652 loop_scope.parent = &block_scope.?.base;2644 loop_scope.parent = &block_scope.?.base;
2653 const init_node = try transStmt(rp, &block_scope.?.base, init, .unused, .r_value);2645 const init_node = try transStmt(rp, &block_scope.?.base, init, .unused, .r_value);
...@@ -2662,20 +2654,20 @@ fn transForLoop(...@@ -2662,20 +2654,20 @@ fn transForLoop(
2662 defer cond_scope.deinit();2654 defer cond_scope.deinit();
26632655
2664 const while_node = try transCreateNodeWhile(rp.c);2656 const while_node = try transCreateNodeWhile(rp.c);
2665 while_node.condition = if (ZigClangForStmt_getCond(stmt)) |cond|2657 while_node.condition = if (stmt.getCond()) |cond|
2666 try transBoolExpr(rp, &cond_scope.base, cond, .used, .r_value, false)2658 try transBoolExpr(rp, &cond_scope.base, cond, .used, .r_value, false)
2667 else2659 else
2668 try transCreateNodeBoolLiteral(rp.c, true);2660 try transCreateNodeBoolLiteral(rp.c, true);
2669 _ = try appendToken(rp.c, .RParen, ")");2661 _ = try appendToken(rp.c, .RParen, ")");
26702662
2671 if (ZigClangForStmt_getInc(stmt)) |incr| {2663 if (stmt.getInc()) |incr| {
2672 _ = try appendToken(rp.c, .Colon, ":");2664 _ = try appendToken(rp.c, .Colon, ":");
2673 _ = try appendToken(rp.c, .LParen, "(");2665 _ = try appendToken(rp.c, .LParen, "(");
2674 while_node.continue_expr = try transExpr(rp, &cond_scope.base, incr, .unused, .r_value);2666 while_node.continue_expr = try transExpr(rp, &cond_scope.base, incr, .unused, .r_value);
2675 _ = try appendToken(rp.c, .RParen, ")");2667 _ = try appendToken(rp.c, .RParen, ")");
2676 }2668 }
26772669
2678 while_node.body = try transStmt(rp, &loop_scope, ZigClangForStmt_getBody(stmt), .unused, .r_value);2670 while_node.body = try transStmt(rp, &loop_scope, stmt.getBody(), .unused, .r_value);
2679 if (block_scope) |*bs| {2671 if (block_scope) |*bs| {
2680 try bs.statements.append(&while_node.base);2672 try bs.statements.append(&while_node.base);
2681 return try bs.complete(rp.c);2673 return try bs.complete(rp.c);
...@@ -2685,21 +2677,21 @@ fn transForLoop(...@@ -2685,21 +2677,21 @@ fn transForLoop(
2685 }2677 }
2686}2678}
26872679
2688fn getSwitchCaseCount(stmt: *const ZigClangSwitchStmt) usize {2680fn getSwitchCaseCount(stmt: *const clang.SwitchStmt) usize {
2689 const body = ZigClangSwitchStmt_getBody(stmt);2681 const body = stmt.getBody();
2690 assert(ZigClangStmt_getStmtClass(body) == .CompoundStmtClass);2682 assert(body.getStmtClass() == .CompoundStmtClass);
2691 const comp = @ptrCast(*const ZigClangCompoundStmt, body);2683 const comp = @ptrCast(*const clang.CompoundStmt, body);
2692 // TODO https://github.com/ziglang/zig/issues/17382684 // TODO https://github.com/ziglang/zig/issues/1738
2693 // return ZigClangCompoundStmt_body_end(comp) - ZigClangCompoundStmt_body_begin(comp);2685 // return comp.body_end() - comp.body_begin();
2694 const start_addr = @ptrToInt(ZigClangCompoundStmt_body_begin(comp));2686 const start_addr = @ptrToInt(comp.body_begin());
2695 const end_addr = @ptrToInt(ZigClangCompoundStmt_body_end(comp));2687 const end_addr = @ptrToInt(comp.body_end());
2696 return (end_addr - start_addr) / @sizeOf(*ZigClangStmt);2688 return (end_addr - start_addr) / @sizeOf(*clang.Stmt);
2697}2689}
26982690
2699fn transSwitch(2691fn transSwitch(
2700 rp: RestorePoint,2692 rp: RestorePoint,
2701 scope: *Scope,2693 scope: *Scope,
2702 stmt: *const ZigClangSwitchStmt,2694 stmt: *const clang.SwitchStmt,
2703) TransError!*ast.Node {2695) TransError!*ast.Node {
2704 const switch_tok = try appendToken(rp.c, .Keyword_switch, "switch");2696 const switch_tok = try appendToken(rp.c, .Keyword_switch, "switch");
2705 _ = try appendToken(rp.c, .LParen, "(");2697 _ = try appendToken(rp.c, .LParen, "(");
...@@ -2713,7 +2705,7 @@ fn transSwitch(...@@ -2713,7 +2705,7 @@ fn transSwitch(
2713 },2705 },
2714 };2706 };
2715 defer cond_scope.deinit();2707 defer cond_scope.deinit();
2716 const switch_expr = try transExpr(rp, &cond_scope.base, ZigClangSwitchStmt_getCond(stmt), .used, .r_value);2708 const switch_expr = try transExpr(rp, &cond_scope.base, stmt.getCond(), .used, .r_value);
2717 _ = try appendToken(rp.c, .RParen, ")");2709 _ = try appendToken(rp.c, .RParen, ")");
2718 _ = try appendToken(rp.c, .LBrace, "{");2710 _ = try appendToken(rp.c, .LBrace, "{");
2719 // reserve +1 case in case there is no default case2711 // reserve +1 case in case there is no default case
...@@ -2748,7 +2740,7 @@ fn transSwitch(...@@ -2748,7 +2740,7 @@ fn transSwitch(
2748 switch_scope.pending_block = try Scope.Block.init(rp.c, scope, false);2740 switch_scope.pending_block = try Scope.Block.init(rp.c, scope, false);
2749 try switch_scope.pending_block.statements.append(&switch_node.base);2741 try switch_scope.pending_block.statements.append(&switch_node.base);
27502742
2751 const last = try transStmt(rp, &block_scope.base, ZigClangSwitchStmt_getBody(stmt), .unused, .r_value);2743 const last = try transStmt(rp, &block_scope.base, stmt.getBody(), .unused, .r_value);
2752 _ = try appendToken(rp.c, .Semicolon, ";");2744 _ = try appendToken(rp.c, .Semicolon, ";");
27532745
2754 // take all pending statements2746 // take all pending statements
...@@ -2776,7 +2768,7 @@ fn transSwitch(...@@ -2776,7 +2768,7 @@ fn transSwitch(
2776 _ = try appendToken(rp.c, .Comma, ",");2768 _ = try appendToken(rp.c, .Comma, ",");
27772769
2778 if (switch_scope.case_index >= switch_scope.cases.len)2770 if (switch_scope.case_index >= switch_scope.cases.len)
2779 return revertAndWarn(rp, error.UnsupportedTranslation, ZigClangStmt_getBeginLoc(@ptrCast(*const ZigClangStmt, stmt)), "TODO complex switch cases", .{});2771 return revertAndWarn(rp, error.UnsupportedTranslation, @ptrCast(*const clang.Stmt, stmt).getBeginLoc(), "TODO complex switch cases", .{});
2780 switch_scope.cases[switch_scope.case_index] = &else_prong.base;2772 switch_scope.cases[switch_scope.case_index] = &else_prong.base;
2781 switch_scope.case_index += 1;2773 switch_scope.case_index += 1;
2782 }2774 }
...@@ -2792,15 +2784,15 @@ fn transSwitch(...@@ -2792,15 +2784,15 @@ fn transSwitch(
2792fn transCase(2784fn transCase(
2793 rp: RestorePoint,2785 rp: RestorePoint,
2794 scope: *Scope,2786 scope: *Scope,
2795 stmt: *const ZigClangCaseStmt,2787 stmt: *const clang.CaseStmt,
2796) TransError!*ast.Node {2788) TransError!*ast.Node {
2797 const block_scope = scope.findBlockScope(rp.c) catch unreachable;2789 const block_scope = scope.findBlockScope(rp.c) catch unreachable;
2798 const switch_scope = scope.getSwitch();2790 const switch_scope = scope.getSwitch();
2799 const label = try block_scope.makeMangledName(rp.c, "case");2791 const label = try block_scope.makeMangledName(rp.c, "case");
2800 _ = try appendToken(rp.c, .Semicolon, ";");2792 _ = try appendToken(rp.c, .Semicolon, ";");
28012793
2802 const expr = if (ZigClangCaseStmt_getRHS(stmt)) |rhs| blk: {2794 const expr = if (stmt.getRHS()) |rhs| blk: {
2803 const lhs_node = try transExpr(rp, scope, ZigClangCaseStmt_getLHS(stmt), .used, .r_value);2795 const lhs_node = try transExpr(rp, scope, stmt.getLHS(), .used, .r_value);
2804 const ellips = try appendToken(rp.c, .Ellipsis3, "...");2796 const ellips = try appendToken(rp.c, .Ellipsis3, "...");
2805 const rhs_node = try transExpr(rp, scope, rhs, .used, .r_value);2797 const rhs_node = try transExpr(rp, scope, rhs, .used, .r_value);
28062798
...@@ -2813,7 +2805,7 @@ fn transCase(...@@ -2813,7 +2805,7 @@ fn transCase(
2813 };2805 };
2814 break :blk &node.base;2806 break :blk &node.base;
2815 } else2807 } else
2816 try transExpr(rp, scope, ZigClangCaseStmt_getLHS(stmt), .used, .r_value);2808 try transExpr(rp, scope, stmt.getLHS(), .used, .r_value);
28172809
2818 const switch_prong = try transCreateNodeSwitchCase(rp.c, expr);2810 const switch_prong = try transCreateNodeSwitchCase(rp.c, expr);
2819 switch_prong.expr = blk: {2811 switch_prong.expr = blk: {
...@@ -2823,7 +2815,7 @@ fn transCase(...@@ -2823,7 +2815,7 @@ fn transCase(
2823 _ = try appendToken(rp.c, .Comma, ",");2815 _ = try appendToken(rp.c, .Comma, ",");
28242816
2825 if (switch_scope.case_index >= switch_scope.cases.len)2817 if (switch_scope.case_index >= switch_scope.cases.len)
2826 return revertAndWarn(rp, error.UnsupportedTranslation, ZigClangStmt_getBeginLoc(@ptrCast(*const ZigClangStmt, stmt)), "TODO complex switch cases", .{});2818 return revertAndWarn(rp, error.UnsupportedTranslation, @ptrCast(*const clang.Stmt, stmt).getBeginLoc(), "TODO complex switch cases", .{});
2827 switch_scope.cases[switch_scope.case_index] = &switch_prong.base;2819 switch_scope.cases[switch_scope.case_index] = &switch_prong.base;
2828 switch_scope.case_index += 1;2820 switch_scope.case_index += 1;
28292821
...@@ -2840,13 +2832,13 @@ fn transCase(...@@ -2840,13 +2832,13 @@ fn transCase(
28402832
2841 try switch_scope.pending_block.statements.append(pending_node);2833 try switch_scope.pending_block.statements.append(pending_node);
28422834
2843 return transStmt(rp, scope, ZigClangCaseStmt_getSubStmt(stmt), .unused, .r_value);2835 return transStmt(rp, scope, stmt.getSubStmt(), .unused, .r_value);
2844}2836}
28452837
2846fn transDefault(2838fn transDefault(
2847 rp: RestorePoint,2839 rp: RestorePoint,
2848 scope: *Scope,2840 scope: *Scope,
2849 stmt: *const ZigClangDefaultStmt,2841 stmt: *const clang.DefaultStmt,
2850) TransError!*ast.Node {2842) TransError!*ast.Node {
2851 const block_scope = scope.findBlockScope(rp.c) catch unreachable;2843 const block_scope = scope.findBlockScope(rp.c) catch unreachable;
2852 const switch_scope = scope.getSwitch();2844 const switch_scope = scope.getSwitch();
...@@ -2861,7 +2853,7 @@ fn transDefault(...@@ -2861,7 +2853,7 @@ fn transDefault(
2861 _ = try appendToken(rp.c, .Comma, ",");2853 _ = try appendToken(rp.c, .Comma, ",");
28622854
2863 if (switch_scope.case_index >= switch_scope.cases.len)2855 if (switch_scope.case_index >= switch_scope.cases.len)
2864 return revertAndWarn(rp, error.UnsupportedTranslation, ZigClangStmt_getBeginLoc(@ptrCast(*const ZigClangStmt, stmt)), "TODO complex switch cases", .{});2856 return revertAndWarn(rp, error.UnsupportedTranslation, @ptrCast(*const clang.Stmt, stmt).getBeginLoc(), "TODO complex switch cases", .{});
2865 switch_scope.cases[switch_scope.case_index] = &else_prong.base;2857 switch_scope.cases[switch_scope.case_index] = &else_prong.base;
2866 switch_scope.case_index += 1;2858 switch_scope.case_index += 1;
28672859
...@@ -2877,26 +2869,26 @@ fn transDefault(...@@ -2877,26 +2869,26 @@ fn transDefault(
2877 switch_scope.pending_block = try Scope.Block.init(rp.c, scope, false);2869 switch_scope.pending_block = try Scope.Block.init(rp.c, scope, false);
2878 try switch_scope.pending_block.statements.append(pending_node);2870 try switch_scope.pending_block.statements.append(pending_node);
28792871
2880 return transStmt(rp, scope, ZigClangDefaultStmt_getSubStmt(stmt), .unused, .r_value);2872 return transStmt(rp, scope, stmt.getSubStmt(), .unused, .r_value);
2881}2873}
28822874
2883fn transConstantExpr(rp: RestorePoint, scope: *Scope, expr: *const ZigClangExpr, used: ResultUsed) TransError!*ast.Node {2875fn transConstantExpr(rp: RestorePoint, scope: *Scope, expr: *const clang.Expr, used: ResultUsed) TransError!*ast.Node {
2884 var result: ZigClangExprEvalResult = undefined;2876 var result: clang.ExprEvalResult = undefined;
2885 if (!ZigClangExpr_EvaluateAsConstantExpr(expr, &result, .EvaluateForCodeGen, rp.c.clang_context))2877 if (!expr.EvaluateAsConstantExpr(&result, .EvaluateForCodeGen, rp.c.clang_context))
2886 return revertAndWarn(rp, error.UnsupportedTranslation, ZigClangExpr_getBeginLoc(expr), "invalid constant expression", .{});2878 return revertAndWarn(rp, error.UnsupportedTranslation, expr.getBeginLoc(), "invalid constant expression", .{});
28872879
2888 var val_node: ?*ast.Node = null;2880 var val_node: ?*ast.Node = null;
2889 switch (ZigClangAPValue_getKind(&result.Val)) {2881 switch (result.Val.getKind()) {
2890 .Int => {2882 .Int => {
2891 // See comment in `transIntegerLiteral` for why this code is here.2883 // See comment in `transIntegerLiteral` for why this code is here.
2892 // @as(T, x)2884 // @as(T, x)
2893 const expr_base = @ptrCast(*const ZigClangExpr, expr);2885 const expr_base = @ptrCast(*const clang.Expr, expr);
2894 const as_node = try rp.c.createBuiltinCall("@as", 2);2886 const as_node = try rp.c.createBuiltinCall("@as", 2);
2895 const ty_node = try transQualType(rp, ZigClangExpr_getType(expr_base), ZigClangExpr_getBeginLoc(expr_base));2887 const ty_node = try transQualType(rp, expr_base.getType(), expr_base.getBeginLoc());
2896 as_node.params()[0] = ty_node;2888 as_node.params()[0] = ty_node;
2897 _ = try appendToken(rp.c, .Comma, ",");2889 _ = try appendToken(rp.c, .Comma, ",");
28982890
2899 const int_lit_node = try transCreateNodeAPInt(rp.c, ZigClangAPValue_getInt(&result.Val));2891 const int_lit_node = try transCreateNodeAPInt(rp.c, result.Val.getInt());
2900 as_node.params()[1] = int_lit_node;2892 as_node.params()[1] = int_lit_node;
29012893
2902 as_node.rparen_token = try appendToken(rp.c, .RParen, ")");2894 as_node.rparen_token = try appendToken(rp.c, .RParen, ")");
...@@ -2904,26 +2896,26 @@ fn transConstantExpr(rp: RestorePoint, scope: *Scope, expr: *const ZigClangExpr,...@@ -2904,26 +2896,26 @@ fn transConstantExpr(rp: RestorePoint, scope: *Scope, expr: *const ZigClangExpr,
2904 return maybeSuppressResult(rp, scope, used, &as_node.base);2896 return maybeSuppressResult(rp, scope, used, &as_node.base);
2905 },2897 },
2906 else => {2898 else => {
2907 return revertAndWarn(rp, error.UnsupportedTranslation, ZigClangExpr_getBeginLoc(expr), "unsupported constant expression kind", .{});2899 return revertAndWarn(rp, error.UnsupportedTranslation, expr.getBeginLoc(), "unsupported constant expression kind", .{});
2908 },2900 },
2909 }2901 }
2910}2902}
29112903
2912fn transPredefinedExpr(rp: RestorePoint, scope: *Scope, expr: *const ZigClangPredefinedExpr, used: ResultUsed) TransError!*ast.Node {2904fn transPredefinedExpr(rp: RestorePoint, scope: *Scope, expr: *const clang.PredefinedExpr, used: ResultUsed) TransError!*ast.Node {
2913 return transStringLiteral(rp, scope, ZigClangPredefinedExpr_getFunctionName(expr), used);2905 return transStringLiteral(rp, scope, expr.getFunctionName(), used);
2914}2906}
29152907
2916fn transCharLiteral(2908fn transCharLiteral(
2917 rp: RestorePoint,2909 rp: RestorePoint,
2918 scope: *Scope,2910 scope: *Scope,
2919 stmt: *const ZigClangCharacterLiteral,2911 stmt: *const clang.CharacterLiteral,
2920 result_used: ResultUsed,2912 result_used: ResultUsed,
2921 suppress_as: SuppressCast,2913 suppress_as: SuppressCast,
2922) TransError!*ast.Node {2914) TransError!*ast.Node {
2923 const kind = ZigClangCharacterLiteral_getKind(stmt);2915 const kind = stmt.getKind();
2924 const int_lit_node = switch (kind) {2916 const int_lit_node = switch (kind) {
2925 .Ascii, .UTF8 => blk: {2917 .Ascii, .UTF8 => blk: {
2926 const val = ZigClangCharacterLiteral_getValue(stmt);2918 const val = stmt.getValue();
2927 if (kind == .Ascii) {2919 if (kind == .Ascii) {
2928 // C has a somewhat obscure feature called multi-character character2920 // C has a somewhat obscure feature called multi-character character
2929 // constant2921 // constant
...@@ -2942,7 +2934,7 @@ fn transCharLiteral(...@@ -2942,7 +2934,7 @@ fn transCharLiteral(
2942 .UTF16, .UTF32, .Wide => return revertAndWarn(2934 .UTF16, .UTF32, .Wide => return revertAndWarn(
2943 rp,2935 rp,
2944 error.UnsupportedTranslation,2936 error.UnsupportedTranslation,
2945 ZigClangStmt_getBeginLoc(@ptrCast(*const ZigClangStmt, stmt)),2937 @ptrCast(*const clang.Stmt, stmt).getBeginLoc(),
2946 "TODO: support character literal kind {}",2938 "TODO: support character literal kind {}",
2947 .{kind},2939 .{kind},
2948 ),2940 ),
...@@ -2952,9 +2944,9 @@ fn transCharLiteral(...@@ -2952,9 +2944,9 @@ fn transCharLiteral(
2952 }2944 }
2953 // See comment in `transIntegerLiteral` for why this code is here.2945 // See comment in `transIntegerLiteral` for why this code is here.
2954 // @as(T, x)2946 // @as(T, x)
2955 const expr_base = @ptrCast(*const ZigClangExpr, stmt);2947 const expr_base = @ptrCast(*const clang.Expr, stmt);
2956 const as_node = try rp.c.createBuiltinCall("@as", 2);2948 const as_node = try rp.c.createBuiltinCall("@as", 2);
2957 const ty_node = try transQualType(rp, ZigClangExpr_getType(expr_base), ZigClangExpr_getBeginLoc(expr_base));2949 const ty_node = try transQualType(rp, expr_base.getType(), expr_base.getBeginLoc());
2958 as_node.params()[0] = ty_node;2950 as_node.params()[0] = ty_node;
2959 _ = try appendToken(rp.c, .Comma, ",");2951 _ = try appendToken(rp.c, .Comma, ",");
2960 as_node.params()[1] = int_lit_node;2952 as_node.params()[1] = int_lit_node;
...@@ -2963,8 +2955,8 @@ fn transCharLiteral(...@@ -2963,8 +2955,8 @@ fn transCharLiteral(
2963 return maybeSuppressResult(rp, scope, result_used, &as_node.base);2955 return maybeSuppressResult(rp, scope, result_used, &as_node.base);
2964}2956}
29652957
2966fn transStmtExpr(rp: RestorePoint, scope: *Scope, stmt: *const ZigClangStmtExpr, used: ResultUsed) TransError!*ast.Node {2958fn transStmtExpr(rp: RestorePoint, scope: *Scope, stmt: *const clang.StmtExpr, used: ResultUsed) TransError!*ast.Node {
2967 const comp = ZigClangStmtExpr_getSubStmt(stmt);2959 const comp = stmt.getSubStmt();
2968 if (used == .unused) {2960 if (used == .unused) {
2969 return transCompoundStmt(rp, scope, comp);2961 return transCompoundStmt(rp, scope, comp);
2970 }2962 }
...@@ -2972,8 +2964,8 @@ fn transStmtExpr(rp: RestorePoint, scope: *Scope, stmt: *const ZigClangStmtExpr,...@@ -2972,8 +2964,8 @@ fn transStmtExpr(rp: RestorePoint, scope: *Scope, stmt: *const ZigClangStmtExpr,
2972 var block_scope = try Scope.Block.init(rp.c, scope, true);2964 var block_scope = try Scope.Block.init(rp.c, scope, true);
2973 defer block_scope.deinit();2965 defer block_scope.deinit();
29742966
2975 var it = ZigClangCompoundStmt_body_begin(comp);2967 var it = comp.body_begin();
2976 const end_it = ZigClangCompoundStmt_body_end(comp);2968 const end_it = comp.body_end();
2977 while (it != end_it - 1) : (it += 1) {2969 while (it != end_it - 1) : (it += 1) {
2978 const result = try transStmt(rp, &block_scope.base, it[0], .unused, .r_value);2970 const result = try transStmt(rp, &block_scope.base, it[0], .unused, .r_value);
2979 try block_scope.statements.append(result);2971 try block_scope.statements.append(result);
...@@ -2996,43 +2988,43 @@ fn transStmtExpr(rp: RestorePoint, scope: *Scope, stmt: *const ZigClangStmtExpr,...@@ -2996,43 +2988,43 @@ fn transStmtExpr(rp: RestorePoint, scope: *Scope, stmt: *const ZigClangStmtExpr,
2996 return maybeSuppressResult(rp, scope, used, &grouped_expr.base);2988 return maybeSuppressResult(rp, scope, used, &grouped_expr.base);
2997}2989}
29982990
2999fn transMemberExpr(rp: RestorePoint, scope: *Scope, stmt: *const ZigClangMemberExpr, result_used: ResultUsed) TransError!*ast.Node {2991fn transMemberExpr(rp: RestorePoint, scope: *Scope, stmt: *const clang.MemberExpr, result_used: ResultUsed) TransError!*ast.Node {
3000 var container_node = try transExpr(rp, scope, ZigClangMemberExpr_getBase(stmt), .used, .r_value);2992 var container_node = try transExpr(rp, scope, stmt.getBase(), .used, .r_value);
30012993
3002 if (ZigClangMemberExpr_isArrow(stmt)) {2994 if (stmt.isArrow()) {
3003 container_node = try transCreateNodePtrDeref(rp.c, container_node);2995 container_node = try transCreateNodePtrDeref(rp.c, container_node);
3004 }2996 }
30052997
3006 const member_decl = ZigClangMemberExpr_getMemberDecl(stmt);2998 const member_decl = stmt.getMemberDecl();
3007 const name = blk: {2999 const name = blk: {
3008 const decl_kind = ZigClangDecl_getKind(@ptrCast(*const ZigClangDecl, member_decl));3000 const decl_kind = @ptrCast(*const clang.Decl, member_decl).getKind();
3009 // If we're referring to a anonymous struct/enum find the bogus name3001 // If we're referring to a anonymous struct/enum find the bogus name
3010 // we've assigned to it during the RecordDecl translation3002 // we've assigned to it during the RecordDecl translation
3011 if (decl_kind == .Field) {3003 if (decl_kind == .Field) {
3012 const field_decl = @ptrCast(*const struct_ZigClangFieldDecl, member_decl);3004 const field_decl = @ptrCast(*const clang.FieldDecl, member_decl);
3013 if (ZigClangFieldDecl_isAnonymousStructOrUnion(field_decl)) {3005 if (field_decl.isAnonymousStructOrUnion()) {
3014 const name = rp.c.decl_table.get(@ptrToInt(ZigClangFieldDecl_getCanonicalDecl(field_decl))).?;3006 const name = rp.c.decl_table.get(@ptrToInt(field_decl.getCanonicalDecl())).?;
3015 break :blk try mem.dupe(rp.c.arena, u8, name);3007 break :blk try mem.dupe(rp.c.arena, u8, name);
3016 }3008 }
3017 }3009 }
3018 const decl = @ptrCast(*const ZigClangNamedDecl, member_decl);3010 const decl = @ptrCast(*const clang.NamedDecl, member_decl);
3019 break :blk try rp.c.str(ZigClangNamedDecl_getName_bytes_begin(decl));3011 break :blk try rp.c.str(decl.getName_bytes_begin());
3020 };3012 };
30213013
3022 const node = try transCreateNodeFieldAccess(rp.c, container_node, name);3014 const node = try transCreateNodeFieldAccess(rp.c, container_node, name);
3023 return maybeSuppressResult(rp, scope, result_used, node);3015 return maybeSuppressResult(rp, scope, result_used, node);
3024}3016}
30253017
3026fn transArrayAccess(rp: RestorePoint, scope: *Scope, stmt: *const ZigClangArraySubscriptExpr, result_used: ResultUsed) TransError!*ast.Node {3018fn transArrayAccess(rp: RestorePoint, scope: *Scope, stmt: *const clang.ArraySubscriptExpr, result_used: ResultUsed) TransError!*ast.Node {
3027 var base_stmt = ZigClangArraySubscriptExpr_getBase(stmt);3019 var base_stmt = stmt.getBase();
30283020
3029 // Unwrap the base statement if it's an array decayed to a bare pointer type3021 // Unwrap the base statement if it's an array decayed to a bare pointer type
3030 // so that we index the array itself3022 // so that we index the array itself
3031 if (ZigClangStmt_getStmtClass(@ptrCast(*const ZigClangStmt, base_stmt)) == .ImplicitCastExprClass) {3023 if (@ptrCast(*const clang.Stmt, base_stmt).getStmtClass() == .ImplicitCastExprClass) {
3032 const implicit_cast = @ptrCast(*const ZigClangImplicitCastExpr, base_stmt);3024 const implicit_cast = @ptrCast(*const clang.ImplicitCastExpr, base_stmt);
30333025
3034 if (ZigClangImplicitCastExpr_getCastKind(implicit_cast) == .ArrayToPointerDecay) {3026 if (implicit_cast.getCastKind() == .ArrayToPointerDecay) {
3035 base_stmt = ZigClangImplicitCastExpr_getSubExpr(implicit_cast);3027 base_stmt = implicit_cast.getSubExpr();
3036 }3028 }
3037 }3029 }
30383030
...@@ -3040,7 +3032,7 @@ fn transArrayAccess(rp: RestorePoint, scope: *Scope, stmt: *const ZigClangArrayS...@@ -3040,7 +3032,7 @@ fn transArrayAccess(rp: RestorePoint, scope: *Scope, stmt: *const ZigClangArrayS
3040 const node = try transCreateNodeArrayAccess(rp.c, container_node);3032 const node = try transCreateNodeArrayAccess(rp.c, container_node);
30413033
3042 // cast if the index is long long or signed3034 // cast if the index is long long or signed
3043 const subscr_expr = ZigClangArraySubscriptExpr_getIdx(stmt);3035 const subscr_expr = stmt.getIdx();
3044 const qt = getExprQualType(rp.c, subscr_expr);3036 const qt = getExprQualType(rp.c, subscr_expr);
3045 const is_longlong = cIsLongLongInteger(qt);3037 const is_longlong = cIsLongLongInteger(qt);
3046 const is_signed = cIsSignedInteger(qt);3038 const is_signed = cIsSignedInteger(qt);
...@@ -3062,23 +3054,23 @@ fn transArrayAccess(rp: RestorePoint, scope: *Scope, stmt: *const ZigClangArrayS...@@ -3062,23 +3054,23 @@ fn transArrayAccess(rp: RestorePoint, scope: *Scope, stmt: *const ZigClangArrayS
3062 return maybeSuppressResult(rp, scope, result_used, &node.base);3054 return maybeSuppressResult(rp, scope, result_used, &node.base);
3063}3055}
30643056
3065fn transCallExpr(rp: RestorePoint, scope: *Scope, stmt: *const ZigClangCallExpr, result_used: ResultUsed) TransError!*ast.Node {3057fn transCallExpr(rp: RestorePoint, scope: *Scope, stmt: *const clang.CallExpr, result_used: ResultUsed) TransError!*ast.Node {
3066 const callee = ZigClangCallExpr_getCallee(stmt);3058 const callee = stmt.getCallee();
3067 var raw_fn_expr = try transExpr(rp, scope, callee, .used, .r_value);3059 var raw_fn_expr = try transExpr(rp, scope, callee, .used, .r_value);
30683060
3069 var is_ptr = false;3061 var is_ptr = false;
3070 const fn_ty = qualTypeGetFnProto(ZigClangExpr_getType(callee), &is_ptr);3062 const fn_ty = qualTypeGetFnProto(callee.getType(), &is_ptr);
30713063
3072 const fn_expr = if (is_ptr and fn_ty != null) blk: {3064 const fn_expr = if (is_ptr and fn_ty != null) blk: {
3073 if (ZigClangExpr_getStmtClass(callee) == .ImplicitCastExprClass) {3065 if (callee.getStmtClass() == .ImplicitCastExprClass) {
3074 const implicit_cast = @ptrCast(*const ZigClangImplicitCastExpr, callee);3066 const implicit_cast = @ptrCast(*const clang.ImplicitCastExpr, callee);
30753067
3076 if (ZigClangImplicitCastExpr_getCastKind(implicit_cast) == .FunctionToPointerDecay) {3068 if (implicit_cast.getCastKind() == .FunctionToPointerDecay) {
3077 const subexpr = ZigClangImplicitCastExpr_getSubExpr(implicit_cast);3069 const subexpr = implicit_cast.getSubExpr();
3078 if (ZigClangExpr_getStmtClass(subexpr) == .DeclRefExprClass) {3070 if (subexpr.getStmtClass() == .DeclRefExprClass) {
3079 const decl_ref = @ptrCast(*const ZigClangDeclRefExpr, subexpr);3071 const decl_ref = @ptrCast(*const clang.DeclRefExpr, subexpr);
3080 const named_decl = ZigClangDeclRefExpr_getFoundDecl(decl_ref);3072 const named_decl = decl_ref.getFoundDecl();
3081 if (ZigClangDecl_getKind(@ptrCast(*const ZigClangDecl, named_decl)) == .Function) {3073 if (@ptrCast(*const clang.Decl, named_decl).getKind() == .Function) {
3082 break :blk raw_fn_expr;3074 break :blk raw_fn_expr;
3083 }3075 }
3084 }3076 }
...@@ -3088,11 +3080,11 @@ fn transCallExpr(rp: RestorePoint, scope: *Scope, stmt: *const ZigClangCallExpr,...@@ -3088,11 +3080,11 @@ fn transCallExpr(rp: RestorePoint, scope: *Scope, stmt: *const ZigClangCallExpr,
3088 } else3080 } else
3089 raw_fn_expr;3081 raw_fn_expr;
30903082
3091 const num_args = ZigClangCallExpr_getNumArgs(stmt);3083 const num_args = stmt.getNumArgs();
3092 const node = try rp.c.createCall(fn_expr, num_args);3084 const node = try rp.c.createCall(fn_expr, num_args);
3093 const call_params = node.params();3085 const call_params = node.params();
30943086
3095 const args = ZigClangCallExpr_getArgs(stmt);3087 const args = stmt.getArgs();
3096 var i: usize = 0;3088 var i: usize = 0;
3097 while (i < num_args) : (i += 1) {3089 while (i < num_args) : (i += 1) {
3098 if (i != 0) {3090 if (i != 0) {
...@@ -3103,9 +3095,9 @@ fn transCallExpr(rp: RestorePoint, scope: *Scope, stmt: *const ZigClangCallExpr,...@@ -3103,9 +3095,9 @@ fn transCallExpr(rp: RestorePoint, scope: *Scope, stmt: *const ZigClangCallExpr,
3103 node.rtoken = try appendToken(rp.c, .RParen, ")");3095 node.rtoken = try appendToken(rp.c, .RParen, ")");
31043096
3105 if (fn_ty) |ty| {3097 if (fn_ty) |ty| {
3106 const canon = ZigClangQualType_getCanonicalType(ty.getReturnType());3098 const canon = ty.getReturnType().getCanonicalType();
3107 const ret_ty = ZigClangQualType_getTypePtr(canon);3099 const ret_ty = canon.getTypePtr();
3108 if (ZigClangType_isVoidType(ret_ty)) {3100 if (ret_ty.isVoidType()) {
3109 _ = try appendToken(rp.c, .Semicolon, ";");3101 _ = try appendToken(rp.c, .Semicolon, ";");
3110 return &node.base;3102 return &node.base;
3111 }3103 }
...@@ -3115,32 +3107,32 @@ fn transCallExpr(rp: RestorePoint, scope: *Scope, stmt: *const ZigClangCallExpr,...@@ -3115,32 +3107,32 @@ fn transCallExpr(rp: RestorePoint, scope: *Scope, stmt: *const ZigClangCallExpr,
3115}3107}
31163108
3117const ClangFunctionType = union(enum) {3109const ClangFunctionType = union(enum) {
3118 Proto: *const ZigClangFunctionProtoType,3110 Proto: *const clang.FunctionProtoType,
3119 NoProto: *const ZigClangFunctionType,3111 NoProto: *const clang.FunctionType,
31203112
3121 fn getReturnType(self: @This()) ZigClangQualType {3113 fn getReturnType(self: @This()) clang.QualType {
3122 switch (@as(@TagType(@This()), self)) {3114 switch (@as(@TagType(@This()), self)) {
3123 .Proto => return ZigClangFunctionProtoType_getReturnType(self.Proto),3115 .Proto => return self.Proto.getReturnType(),
3124 .NoProto => return ZigClangFunctionType_getReturnType(self.NoProto),3116 .NoProto => return self.NoProto.getReturnType(),
3125 }3117 }
3126 }3118 }
3127};3119};
31283120
3129fn qualTypeGetFnProto(qt: ZigClangQualType, is_ptr: *bool) ?ClangFunctionType {3121fn qualTypeGetFnProto(qt: clang.QualType, is_ptr: *bool) ?ClangFunctionType {
3130 const canon = ZigClangQualType_getCanonicalType(qt);3122 const canon = qt.getCanonicalType();
3131 var ty = ZigClangQualType_getTypePtr(canon);3123 var ty = canon.getTypePtr();
3132 is_ptr.* = false;3124 is_ptr.* = false;
31333125
3134 if (ZigClangType_getTypeClass(ty) == .Pointer) {3126 if (ty.getTypeClass() == .Pointer) {
3135 is_ptr.* = true;3127 is_ptr.* = true;
3136 const child_qt = ZigClangType_getPointeeType(ty);3128 const child_qt = ty.getPointeeType();
3137 ty = ZigClangQualType_getTypePtr(child_qt);3129 ty = child_qt.getTypePtr();
3138 }3130 }
3139 if (ZigClangType_getTypeClass(ty) == .FunctionProto) {3131 if (ty.getTypeClass() == .FunctionProto) {
3140 return ClangFunctionType{ .Proto = @ptrCast(*const ZigClangFunctionProtoType, ty) };3132 return ClangFunctionType{ .Proto = @ptrCast(*const clang.FunctionProtoType, ty) };
3141 }3133 }
3142 if (ZigClangType_getTypeClass(ty) == .FunctionNoProto) {3134 if (ty.getTypeClass() == .FunctionNoProto) {
3143 return ClangFunctionType{ .NoProto = @ptrCast(*const ZigClangFunctionType, ty) };3135 return ClangFunctionType{ .NoProto = @ptrCast(*const clang.FunctionType, ty) };
3144 }3136 }
3145 return null;3137 return null;
3146}3138}
...@@ -3148,17 +3140,17 @@ fn qualTypeGetFnProto(qt: ZigClangQualType, is_ptr: *bool) ?ClangFunctionType {...@@ -3148,17 +3140,17 @@ fn qualTypeGetFnProto(qt: ZigClangQualType, is_ptr: *bool) ?ClangFunctionType {
3148fn transUnaryExprOrTypeTraitExpr(3140fn transUnaryExprOrTypeTraitExpr(
3149 rp: RestorePoint,3141 rp: RestorePoint,
3150 scope: *Scope,3142 scope: *Scope,
3151 stmt: *const ZigClangUnaryExprOrTypeTraitExpr,3143 stmt: *const clang.UnaryExprOrTypeTraitExpr,
3152 result_used: ResultUsed,3144 result_used: ResultUsed,
3153) TransError!*ast.Node {3145) TransError!*ast.Node {
3154 const loc = ZigClangUnaryExprOrTypeTraitExpr_getBeginLoc(stmt);3146 const loc = stmt.getBeginLoc();
3155 const type_node = try transQualType(3147 const type_node = try transQualType(
3156 rp,3148 rp,
3157 ZigClangUnaryExprOrTypeTraitExpr_getTypeOfArgument(stmt),3149 stmt.getTypeOfArgument(),
3158 loc,3150 loc,
3159 );3151 );
31603152
3161 const kind = ZigClangUnaryExprOrTypeTraitExpr_getKind(stmt);3153 const kind = stmt.getKind();
3162 const kind_str = switch (kind) {3154 const kind_str = switch (kind) {
3163 .SizeOf => "@sizeOf",3155 .SizeOf => "@sizeOf",
3164 .AlignOf => "@alignOf",3156 .AlignOf => "@alignOf",
...@@ -3180,7 +3172,7 @@ fn transUnaryExprOrTypeTraitExpr(...@@ -3180,7 +3172,7 @@ fn transUnaryExprOrTypeTraitExpr(
3180 return maybeSuppressResult(rp, scope, result_used, &builtin_node.base);3172 return maybeSuppressResult(rp, scope, result_used, &builtin_node.base);
3181}3173}
31823174
3183fn qualTypeHasWrappingOverflow(qt: ZigClangQualType) bool {3175fn qualTypeHasWrappingOverflow(qt: clang.QualType) bool {
3184 if (cIsUnsignedInteger(qt)) {3176 if (cIsUnsignedInteger(qt)) {
3185 // unsigned integer overflow wraps around.3177 // unsigned integer overflow wraps around.
3186 return true;3178 return true;
...@@ -3190,22 +3182,22 @@ fn qualTypeHasWrappingOverflow(qt: ZigClangQualType) bool {...@@ -3190,22 +3182,22 @@ fn qualTypeHasWrappingOverflow(qt: ZigClangQualType) bool {
3190 }3182 }
3191}3183}
31923184
3193fn transUnaryOperator(rp: RestorePoint, scope: *Scope, stmt: *const ZigClangUnaryOperator, used: ResultUsed) TransError!*ast.Node {3185fn transUnaryOperator(rp: RestorePoint, scope: *Scope, stmt: *const clang.UnaryOperator, used: ResultUsed) TransError!*ast.Node {
3194 const op_expr = ZigClangUnaryOperator_getSubExpr(stmt);3186 const op_expr = stmt.getSubExpr();
3195 switch (ZigClangUnaryOperator_getOpcode(stmt)) {3187 switch (stmt.getOpcode()) {
3196 .PostInc => if (qualTypeHasWrappingOverflow(ZigClangUnaryOperator_getType(stmt)))3188 .PostInc => if (qualTypeHasWrappingOverflow(stmt.getType()))
3197 return transCreatePostCrement(rp, scope, stmt, .AssignAddWrap, .PlusPercentEqual, "+%=", used)3189 return transCreatePostCrement(rp, scope, stmt, .AssignAddWrap, .PlusPercentEqual, "+%=", used)
3198 else3190 else
3199 return transCreatePostCrement(rp, scope, stmt, .AssignAdd, .PlusEqual, "+=", used),3191 return transCreatePostCrement(rp, scope, stmt, .AssignAdd, .PlusEqual, "+=", used),
3200 .PostDec => if (qualTypeHasWrappingOverflow(ZigClangUnaryOperator_getType(stmt)))3192 .PostDec => if (qualTypeHasWrappingOverflow(stmt.getType()))
3201 return transCreatePostCrement(rp, scope, stmt, .AssignSubWrap, .MinusPercentEqual, "-%=", used)3193 return transCreatePostCrement(rp, scope, stmt, .AssignSubWrap, .MinusPercentEqual, "-%=", used)
3202 else3194 else
3203 return transCreatePostCrement(rp, scope, stmt, .AssignSub, .MinusEqual, "-=", used),3195 return transCreatePostCrement(rp, scope, stmt, .AssignSub, .MinusEqual, "-=", used),
3204 .PreInc => if (qualTypeHasWrappingOverflow(ZigClangUnaryOperator_getType(stmt)))3196 .PreInc => if (qualTypeHasWrappingOverflow(stmt.getType()))
3205 return transCreatePreCrement(rp, scope, stmt, .AssignAddWrap, .PlusPercentEqual, "+%=", used)3197 return transCreatePreCrement(rp, scope, stmt, .AssignAddWrap, .PlusPercentEqual, "+%=", used)
3206 else3198 else
3207 return transCreatePreCrement(rp, scope, stmt, .AssignAdd, .PlusEqual, "+=", used),3199 return transCreatePreCrement(rp, scope, stmt, .AssignAdd, .PlusEqual, "+=", used),
3208 .PreDec => if (qualTypeHasWrappingOverflow(ZigClangUnaryOperator_getType(stmt)))3200 .PreDec => if (qualTypeHasWrappingOverflow(stmt.getType()))
3209 return transCreatePreCrement(rp, scope, stmt, .AssignSubWrap, .MinusPercentEqual, "-%=", used)3201 return transCreatePreCrement(rp, scope, stmt, .AssignSubWrap, .MinusPercentEqual, "-%=", used)
3210 else3202 else
3211 return transCreatePreCrement(rp, scope, stmt, .AssignSub, .MinusEqual, "-=", used),3203 return transCreatePreCrement(rp, scope, stmt, .AssignSub, .MinusEqual, "-=", used),
...@@ -3217,7 +3209,7 @@ fn transUnaryOperator(rp: RestorePoint, scope: *Scope, stmt: *const ZigClangUnar...@@ -3217,7 +3209,7 @@ fn transUnaryOperator(rp: RestorePoint, scope: *Scope, stmt: *const ZigClangUnar
3217 .Deref => {3209 .Deref => {
3218 const value_node = try transExpr(rp, scope, op_expr, used, .r_value);3210 const value_node = try transExpr(rp, scope, op_expr, used, .r_value);
3219 var is_ptr = false;3211 var is_ptr = false;
3220 const fn_ty = qualTypeGetFnProto(ZigClangExpr_getType(op_expr), &is_ptr);3212 const fn_ty = qualTypeGetFnProto(op_expr.getType(), &is_ptr);
3221 if (fn_ty != null and is_ptr)3213 if (fn_ty != null and is_ptr)
3222 return value_node;3214 return value_node;
3223 const unwrapped = try transCreateNodeUnwrapNull(rp.c, value_node);3215 const unwrapped = try transCreateNodeUnwrapNull(rp.c, value_node);
...@@ -3225,18 +3217,18 @@ fn transUnaryOperator(rp: RestorePoint, scope: *Scope, stmt: *const ZigClangUnar...@@ -3225,18 +3217,18 @@ fn transUnaryOperator(rp: RestorePoint, scope: *Scope, stmt: *const ZigClangUnar
3225 },3217 },
3226 .Plus => return transExpr(rp, scope, op_expr, used, .r_value),3218 .Plus => return transExpr(rp, scope, op_expr, used, .r_value),
3227 .Minus => {3219 .Minus => {
3228 if (!qualTypeHasWrappingOverflow(ZigClangExpr_getType(op_expr))) {3220 if (!qualTypeHasWrappingOverflow(op_expr.getType())) {
3229 const op_node = try transCreateNodeSimplePrefixOp(rp.c, .Negation, .Minus, "-");3221 const op_node = try transCreateNodeSimplePrefixOp(rp.c, .Negation, .Minus, "-");
3230 op_node.rhs = try transExpr(rp, scope, op_expr, .used, .r_value);3222 op_node.rhs = try transExpr(rp, scope, op_expr, .used, .r_value);
3231 return &op_node.base;3223 return &op_node.base;
3232 } else if (cIsUnsignedInteger(ZigClangExpr_getType(op_expr))) {3224 } else if (cIsUnsignedInteger(op_expr.getType())) {
3233 // we gotta emit 0 -% x3225 // we gotta emit 0 -% x
3234 const zero = try transCreateNodeInt(rp.c, 0);3226 const zero = try transCreateNodeInt(rp.c, 0);
3235 const token = try appendToken(rp.c, .MinusPercent, "-%");3227 const token = try appendToken(rp.c, .MinusPercent, "-%");
3236 const expr = try transExpr(rp, scope, op_expr, .used, .r_value);3228 const expr = try transExpr(rp, scope, op_expr, .used, .r_value);
3237 return transCreateNodeInfixOp(rp, scope, zero, .SubWrap, token, expr, used, true);3229 return transCreateNodeInfixOp(rp, scope, zero, .SubWrap, token, expr, used, true);
3238 } else3230 } else
3239 return revertAndWarn(rp, error.UnsupportedTranslation, ZigClangUnaryOperator_getBeginLoc(stmt), "C negation with non float non integer", .{});3231 return revertAndWarn(rp, error.UnsupportedTranslation, stmt.getBeginLoc(), "C negation with non float non integer", .{});
3240 },3232 },
3241 .Not => {3233 .Not => {
3242 const op_node = try transCreateNodeSimplePrefixOp(rp.c, .BitNot, .Tilde, "~");3234 const op_node = try transCreateNodeSimplePrefixOp(rp.c, .BitNot, .Tilde, "~");
...@@ -3249,22 +3241,22 @@ fn transUnaryOperator(rp: RestorePoint, scope: *Scope, stmt: *const ZigClangUnar...@@ -3249,22 +3241,22 @@ fn transUnaryOperator(rp: RestorePoint, scope: *Scope, stmt: *const ZigClangUnar
3249 return &op_node.base;3241 return &op_node.base;
3250 },3242 },
3251 .Extension => {3243 .Extension => {
3252 return transExpr(rp, scope, ZigClangUnaryOperator_getSubExpr(stmt), used, .l_value);3244 return transExpr(rp, scope, stmt.getSubExpr(), used, .l_value);
3253 },3245 },
3254 else => return revertAndWarn(rp, error.UnsupportedTranslation, ZigClangUnaryOperator_getBeginLoc(stmt), "unsupported C translation {}", .{ZigClangUnaryOperator_getOpcode(stmt)}),3246 else => return revertAndWarn(rp, error.UnsupportedTranslation, stmt.getBeginLoc(), "unsupported C translation {}", .{stmt.getOpcode()}),
3255 }3247 }
3256}3248}
32573249
3258fn transCreatePreCrement(3250fn transCreatePreCrement(
3259 rp: RestorePoint,3251 rp: RestorePoint,
3260 scope: *Scope,3252 scope: *Scope,
3261 stmt: *const ZigClangUnaryOperator,3253 stmt: *const clang.UnaryOperator,
3262 op: ast.Node.Tag,3254 op: ast.Node.Tag,
3263 op_tok_id: std.zig.Token.Id,3255 op_tok_id: std.zig.Token.Id,
3264 bytes: []const u8,3256 bytes: []const u8,
3265 used: ResultUsed,3257 used: ResultUsed,
3266) TransError!*ast.Node {3258) TransError!*ast.Node {
3267 const op_expr = ZigClangUnaryOperator_getSubExpr(stmt);3259 const op_expr = stmt.getSubExpr();
32683260
3269 if (used == .unused) {3261 if (used == .unused) {
3270 // common case3262 // common case
...@@ -3331,13 +3323,13 @@ fn transCreatePreCrement(...@@ -3331,13 +3323,13 @@ fn transCreatePreCrement(
3331fn transCreatePostCrement(3323fn transCreatePostCrement(
3332 rp: RestorePoint,3324 rp: RestorePoint,
3333 scope: *Scope,3325 scope: *Scope,
3334 stmt: *const ZigClangUnaryOperator,3326 stmt: *const clang.UnaryOperator,
3335 op: ast.Node.Tag,3327 op: ast.Node.Tag,
3336 op_tok_id: std.zig.Token.Id,3328 op_tok_id: std.zig.Token.Id,
3337 bytes: []const u8,3329 bytes: []const u8,
3338 used: ResultUsed,3330 used: ResultUsed,
3339) TransError!*ast.Node {3331) TransError!*ast.Node {
3340 const op_expr = ZigClangUnaryOperator_getSubExpr(stmt);3332 const op_expr = stmt.getSubExpr();
33413333
3342 if (used == .unused) {3334 if (used == .unused) {
3343 // common case3335 // common case
...@@ -3422,17 +3414,17 @@ fn transCreatePostCrement(...@@ -3422,17 +3414,17 @@ fn transCreatePostCrement(
3422 return &grouped_expr.base;3414 return &grouped_expr.base;
3423}3415}
34243416
3425fn transCompoundAssignOperator(rp: RestorePoint, scope: *Scope, stmt: *const ZigClangCompoundAssignOperator, used: ResultUsed) TransError!*ast.Node {3417fn transCompoundAssignOperator(rp: RestorePoint, scope: *Scope, stmt: *const clang.CompoundAssignOperator, used: ResultUsed) TransError!*ast.Node {
3426 switch (ZigClangCompoundAssignOperator_getOpcode(stmt)) {3418 switch (stmt.getOpcode()) {
3427 .MulAssign => if (qualTypeHasWrappingOverflow(ZigClangCompoundAssignOperator_getType(stmt)))3419 .MulAssign => if (qualTypeHasWrappingOverflow(stmt.getType()))
3428 return transCreateCompoundAssign(rp, scope, stmt, .AssignMulWrap, .AsteriskPercentEqual, "*%=", .MulWrap, .AsteriskPercent, "*%", used)3420 return transCreateCompoundAssign(rp, scope, stmt, .AssignMulWrap, .AsteriskPercentEqual, "*%=", .MulWrap, .AsteriskPercent, "*%", used)
3429 else3421 else
3430 return transCreateCompoundAssign(rp, scope, stmt, .AssignMul, .AsteriskEqual, "*=", .Mul, .Asterisk, "*", used),3422 return transCreateCompoundAssign(rp, scope, stmt, .AssignMul, .AsteriskEqual, "*=", .Mul, .Asterisk, "*", used),
3431 .AddAssign => if (qualTypeHasWrappingOverflow(ZigClangCompoundAssignOperator_getType(stmt)))3423 .AddAssign => if (qualTypeHasWrappingOverflow(stmt.getType()))
3432 return transCreateCompoundAssign(rp, scope, stmt, .AssignAddWrap, .PlusPercentEqual, "+%=", .AddWrap, .PlusPercent, "+%", used)3424 return transCreateCompoundAssign(rp, scope, stmt, .AssignAddWrap, .PlusPercentEqual, "+%=", .AddWrap, .PlusPercent, "+%", used)
3433 else3425 else
3434 return transCreateCompoundAssign(rp, scope, stmt, .AssignAdd, .PlusEqual, "+=", .Add, .Plus, "+", used),3426 return transCreateCompoundAssign(rp, scope, stmt, .AssignAdd, .PlusEqual, "+=", .Add, .Plus, "+", used),
3435 .SubAssign => if (qualTypeHasWrappingOverflow(ZigClangCompoundAssignOperator_getType(stmt)))3427 .SubAssign => if (qualTypeHasWrappingOverflow(stmt.getType()))
3436 return transCreateCompoundAssign(rp, scope, stmt, .AssignSubWrap, .MinusPercentEqual, "-%=", .SubWrap, .MinusPercent, "-%", used)3428 return transCreateCompoundAssign(rp, scope, stmt, .AssignSubWrap, .MinusPercentEqual, "-%=", .SubWrap, .MinusPercent, "-%", used)
3437 else3429 else
3438 return transCreateCompoundAssign(rp, scope, stmt, .AssignSub, .MinusPercentEqual, "-=", .Sub, .Minus, "-", used),3430 return transCreateCompoundAssign(rp, scope, stmt, .AssignSub, .MinusPercentEqual, "-=", .Sub, .Minus, "-", used),
...@@ -3446,9 +3438,9 @@ fn transCompoundAssignOperator(rp: RestorePoint, scope: *Scope, stmt: *const Zig...@@ -3446,9 +3438,9 @@ fn transCompoundAssignOperator(rp: RestorePoint, scope: *Scope, stmt: *const Zig
3446 else => return revertAndWarn(3438 else => return revertAndWarn(
3447 rp,3439 rp,
3448 error.UnsupportedTranslation,3440 error.UnsupportedTranslation,
3449 ZigClangCompoundAssignOperator_getBeginLoc(stmt),3441 stmt.getBeginLoc(),
3450 "unsupported C translation {}",3442 "unsupported C translation {}",
3451 .{ZigClangCompoundAssignOperator_getOpcode(stmt)},3443 .{stmt.getOpcode()},
3452 ),3444 ),
3453 }3445 }
3454}3446}
...@@ -3456,7 +3448,7 @@ fn transCompoundAssignOperator(rp: RestorePoint, scope: *Scope, stmt: *const Zig...@@ -3456,7 +3448,7 @@ fn transCompoundAssignOperator(rp: RestorePoint, scope: *Scope, stmt: *const Zig
3456fn transCreateCompoundAssign(3448fn transCreateCompoundAssign(
3457 rp: RestorePoint,3449 rp: RestorePoint,
3458 scope: *Scope,3450 scope: *Scope,
3459 stmt: *const ZigClangCompoundAssignOperator,3451 stmt: *const clang.CompoundAssignOperator,
3460 assign_op: ast.Node.Tag,3452 assign_op: ast.Node.Tag,
3461 assign_tok_id: std.zig.Token.Id,3453 assign_tok_id: std.zig.Token.Id,
3462 assign_bytes: []const u8,3454 assign_bytes: []const u8,
...@@ -3468,9 +3460,9 @@ fn transCreateCompoundAssign(...@@ -3468,9 +3460,9 @@ fn transCreateCompoundAssign(
3468 const is_shift = bin_op == .BitShiftLeft or bin_op == .BitShiftRight;3460 const is_shift = bin_op == .BitShiftLeft or bin_op == .BitShiftRight;
3469 const is_div = bin_op == .Div;3461 const is_div = bin_op == .Div;
3470 const is_mod = bin_op == .Mod;3462 const is_mod = bin_op == .Mod;
3471 const lhs = ZigClangCompoundAssignOperator_getLHS(stmt);3463 const lhs = stmt.getLHS();
3472 const rhs = ZigClangCompoundAssignOperator_getRHS(stmt);3464 const rhs = stmt.getRHS();
3473 const loc = ZigClangCompoundAssignOperator_getBeginLoc(stmt);3465 const loc = stmt.getBeginLoc();
3474 const lhs_qt = getExprQualType(rp.c, lhs);3466 const lhs_qt = getExprQualType(rp.c, lhs);
3475 const rhs_qt = getExprQualType(rp.c, rhs);3467 const rhs_qt = getExprQualType(rp.c, rhs);
3476 const is_signed = cIsSignedInteger(lhs_qt);3468 const is_signed = cIsSignedInteger(lhs_qt);
...@@ -3615,20 +3607,20 @@ fn transCreateCompoundAssign(...@@ -3615,20 +3607,20 @@ fn transCreateCompoundAssign(
36153607
3616fn transCPtrCast(3608fn transCPtrCast(
3617 rp: RestorePoint,3609 rp: RestorePoint,
3618 loc: ZigClangSourceLocation,3610 loc: clang.SourceLocation,
3619 dst_type: ZigClangQualType,3611 dst_type: clang.QualType,
3620 src_type: ZigClangQualType,3612 src_type: clang.QualType,
3621 expr: *ast.Node,3613 expr: *ast.Node,
3622) !*ast.Node {3614) !*ast.Node {
3623 const ty = ZigClangQualType_getTypePtr(dst_type);3615 const ty = dst_type.getTypePtr();
3624 const child_type = ZigClangType_getPointeeType(ty);3616 const child_type = ty.getPointeeType();
3625 const src_ty = ZigClangQualType_getTypePtr(src_type);3617 const src_ty = src_type.getTypePtr();
3626 const src_child_type = ZigClangType_getPointeeType(src_ty);3618 const src_child_type = src_ty.getPointeeType();
36273619
3628 if ((ZigClangQualType_isConstQualified(src_child_type) and3620 if ((src_child_type.isConstQualified() and
3629 !ZigClangQualType_isConstQualified(child_type)) or3621 !child_type.isConstQualified()) or
3630 (ZigClangQualType_isVolatileQualified(src_child_type) and3622 (src_child_type.isVolatileQualified() and
3631 !ZigClangQualType_isVolatileQualified(child_type)))3623 !child_type.isVolatileQualified()))
3632 {3624 {
3633 // Casting away const or volatile requires us to use @intToPtr3625 // Casting away const or volatile requires us to use @intToPtr
3634 const inttoptr_node = try rp.c.createBuiltinCall("@intToPtr", 2);3626 const inttoptr_node = try rp.c.createBuiltinCall("@intToPtr", 2);
...@@ -3651,7 +3643,7 @@ fn transCPtrCast(...@@ -3651,7 +3643,7 @@ fn transCPtrCast(
3651 ptrcast_node.params()[0] = dst_type_node;3643 ptrcast_node.params()[0] = dst_type_node;
3652 _ = try appendToken(rp.c, .Comma, ",");3644 _ = try appendToken(rp.c, .Comma, ",");
36533645
3654 if (ZigClangType_isVoidType(qualTypeCanon(child_type))) {3646 if (qualTypeCanon(child_type).isVoidType()) {
3655 // void has 1-byte alignment, so @alignCast is not needed3647 // void has 1-byte alignment, so @alignCast is not needed
3656 ptrcast_node.params()[1] = expr;3648 ptrcast_node.params()[1] = expr;
3657 } else if (typeIsOpaque(rp.c, qualTypeCanon(child_type), loc)) {3649 } else if (typeIsOpaque(rp.c, qualTypeCanon(child_type), loc)) {
...@@ -3691,9 +3683,9 @@ fn transBreak(rp: RestorePoint, scope: *Scope) TransError!*ast.Node {...@@ -3691,9 +3683,9 @@ fn transBreak(rp: RestorePoint, scope: *Scope) TransError!*ast.Node {
3691 return &br.base;3683 return &br.base;
3692}3684}
36933685
3694fn transFloatingLiteral(rp: RestorePoint, scope: *Scope, stmt: *const ZigClangFloatingLiteral, used: ResultUsed) TransError!*ast.Node {3686fn transFloatingLiteral(rp: RestorePoint, scope: *Scope, stmt: *const clang.FloatingLiteral, used: ResultUsed) TransError!*ast.Node {
3695 // TODO use something more accurate3687 // TODO use something more accurate
3696 const dbl = ZigClangAPFloat_getValueAsApproximateDouble(stmt);3688 const dbl = stmt.getValueAsApproximateDouble();
3697 const node = try rp.c.arena.create(ast.Node.OneToken);3689 const node = try rp.c.arena.create(ast.Node.OneToken);
3698 node.* = .{3690 node.* = .{
3699 .base = .{ .tag = .FloatLiteral },3691 .base = .{ .tag = .FloatLiteral },
...@@ -3702,13 +3694,13 @@ fn transFloatingLiteral(rp: RestorePoint, scope: *Scope, stmt: *const ZigClangFl...@@ -3702,13 +3694,13 @@ fn transFloatingLiteral(rp: RestorePoint, scope: *Scope, stmt: *const ZigClangFl
3702 return maybeSuppressResult(rp, scope, used, &node.base);3694 return maybeSuppressResult(rp, scope, used, &node.base);
3703}3695}
37043696
3705fn transBinaryConditionalOperator(rp: RestorePoint, scope: *Scope, stmt: *const ZigClangBinaryConditionalOperator, used: ResultUsed) TransError!*ast.Node {3697fn transBinaryConditionalOperator(rp: RestorePoint, scope: *Scope, stmt: *const clang.BinaryConditionalOperator, used: ResultUsed) TransError!*ast.Node {
3706 // GNU extension of the ternary operator where the middle expression is3698 // GNU extension of the ternary operator where the middle expression is
3707 // omitted, the conditition itself is returned if it evaluates to true3699 // omitted, the conditition itself is returned if it evaluates to true
3708 const casted_stmt = @ptrCast(*const ZigClangAbstractConditionalOperator, stmt);3700 const casted_stmt = @ptrCast(*const clang.AbstractConditionalOperator, stmt);
3709 const cond_expr = ZigClangAbstractConditionalOperator_getCond(casted_stmt);3701 const cond_expr = casted_stmt.getCond();
3710 const true_expr = ZigClangAbstractConditionalOperator_getTrueExpr(casted_stmt);3702 const true_expr = casted_stmt.getTrueExpr();
3711 const false_expr = ZigClangAbstractConditionalOperator_getFalseExpr(casted_stmt);3703 const false_expr = casted_stmt.getFalseExpr();
37123704
3713 // c: (cond_expr)?:(false_expr)3705 // c: (cond_expr)?:(false_expr)
3714 // zig: (blk: {3706 // zig: (blk: {
...@@ -3748,8 +3740,8 @@ fn transBinaryConditionalOperator(rp: RestorePoint, scope: *Scope, stmt: *const...@@ -3748,8 +3740,8 @@ fn transBinaryConditionalOperator(rp: RestorePoint, scope: *Scope, stmt: *const
3748 defer cond_scope.deinit();3740 defer cond_scope.deinit();
3749 const tmp_var_node = try transCreateNodeIdentifier(rp.c, mangled_name);3741 const tmp_var_node = try transCreateNodeIdentifier(rp.c, mangled_name);
37503742
3751 const ty = ZigClangQualType_getTypePtr(getExprQualType(rp.c, cond_expr));3743 const ty = getExprQualType(rp.c, cond_expr).getTypePtr();
3752 const cond_node = try finishBoolExpr(rp, &cond_scope.base, ZigClangExpr_getBeginLoc(cond_expr), ty, tmp_var_node, used);3744 const cond_node = try finishBoolExpr(rp, &cond_scope.base, cond_expr.getBeginLoc(), ty, tmp_var_node, used);
3753 if_node.condition = cond_node;3745 if_node.condition = cond_node;
3754 _ = try appendToken(rp.c, .RParen, ")");3746 _ = try appendToken(rp.c, .RParen, ")");
37553747
...@@ -3772,7 +3764,7 @@ fn transBinaryConditionalOperator(rp: RestorePoint, scope: *Scope, stmt: *const...@@ -3772,7 +3764,7 @@ fn transBinaryConditionalOperator(rp: RestorePoint, scope: *Scope, stmt: *const
3772 return maybeSuppressResult(rp, scope, used, &grouped_expr.base);3764 return maybeSuppressResult(rp, scope, used, &grouped_expr.base);
3773}3765}
37743766
3775fn transConditionalOperator(rp: RestorePoint, scope: *Scope, stmt: *const ZigClangConditionalOperator, used: ResultUsed) TransError!*ast.Node {3767fn transConditionalOperator(rp: RestorePoint, scope: *Scope, stmt: *const clang.ConditionalOperator, used: ResultUsed) TransError!*ast.Node {
3776 const grouped = scope.id == .Condition;3768 const grouped = scope.id == .Condition;
3777 const lparen = if (grouped) try appendToken(rp.c, .LParen, "(") else undefined;3769 const lparen = if (grouped) try appendToken(rp.c, .LParen, "(") else undefined;
3778 const if_node = try transCreateNodeIf(rp.c);3770 const if_node = try transCreateNodeIf(rp.c);
...@@ -3784,10 +3776,10 @@ fn transConditionalOperator(rp: RestorePoint, scope: *Scope, stmt: *const ZigCla...@@ -3784,10 +3776,10 @@ fn transConditionalOperator(rp: RestorePoint, scope: *Scope, stmt: *const ZigCla
3784 };3776 };
3785 defer cond_scope.deinit();3777 defer cond_scope.deinit();
37863778
3787 const casted_stmt = @ptrCast(*const ZigClangAbstractConditionalOperator, stmt);3779 const casted_stmt = @ptrCast(*const clang.AbstractConditionalOperator, stmt);
3788 const cond_expr = ZigClangAbstractConditionalOperator_getCond(casted_stmt);3780 const cond_expr = casted_stmt.getCond();
3789 const true_expr = ZigClangAbstractConditionalOperator_getTrueExpr(casted_stmt);3781 const true_expr = casted_stmt.getTrueExpr();
3790 const false_expr = ZigClangAbstractConditionalOperator_getFalseExpr(casted_stmt);3782 const false_expr = casted_stmt.getFalseExpr();
37913783
3792 if_node.condition = try transBoolExpr(rp, &cond_scope.base, cond_expr, .used, .r_value, false);3784 if_node.condition = try transBoolExpr(rp, &cond_scope.base, cond_expr, .used, .r_value, false);
3793 _ = try appendToken(rp.c, .RParen, ")");3785 _ = try appendToken(rp.c, .RParen, ")");
...@@ -3845,22 +3837,22 @@ fn addTopLevelDecl(c: *Context, name: []const u8, decl_node: *ast.Node) !void {...@@ -3845,22 +3837,22 @@ fn addTopLevelDecl(c: *Context, name: []const u8, decl_node: *ast.Node) !void {
3845 _ = try c.global_scope.sym_table.put(name, decl_node);3837 _ = try c.global_scope.sym_table.put(name, decl_node);
3846}3838}
38473839
3848fn transQualType(rp: RestorePoint, qt: ZigClangQualType, source_loc: ZigClangSourceLocation) TypeError!*ast.Node {3840fn transQualType(rp: RestorePoint, qt: clang.QualType, source_loc: clang.SourceLocation) TypeError!*ast.Node {
3849 return transType(rp, ZigClangQualType_getTypePtr(qt), source_loc);3841 return transType(rp, qt.getTypePtr(), source_loc);
3850}3842}
38513843
3852/// Produces a Zig AST node by translating a Clang QualType, respecting the width, but modifying the signed-ness.3844/// Produces a Zig AST node by translating a Clang QualType, respecting the width, but modifying the signed-ness.
3853/// Asserts the type is an integer.3845/// Asserts the type is an integer.
3854fn transQualTypeIntWidthOf(c: *Context, ty: ZigClangQualType, is_signed: bool) TypeError!*ast.Node {3846fn transQualTypeIntWidthOf(c: *Context, ty: clang.QualType, is_signed: bool) TypeError!*ast.Node {
3855 return transTypeIntWidthOf(c, qualTypeCanon(ty), is_signed);3847 return transTypeIntWidthOf(c, qualTypeCanon(ty), is_signed);
3856}3848}
38573849
3858/// Produces a Zig AST node by translating a Clang Type, respecting the width, but modifying the signed-ness.3850/// Produces a Zig AST node by translating a Clang Type, respecting the width, but modifying the signed-ness.
3859/// Asserts the type is an integer.3851/// Asserts the type is an integer.
3860fn transTypeIntWidthOf(c: *Context, ty: *const ZigClangType, is_signed: bool) TypeError!*ast.Node {3852fn transTypeIntWidthOf(c: *Context, ty: *const clang.Type, is_signed: bool) TypeError!*ast.Node {
3861 assert(ZigClangType_getTypeClass(ty) == .Builtin);3853 assert(ty.getTypeClass() == .Builtin);
3862 const builtin_ty = @ptrCast(*const ZigClangBuiltinType, ty);3854 const builtin_ty = @ptrCast(*const clang.BuiltinType, ty);
3863 return transCreateNodeIdentifier(c, switch (ZigClangBuiltinType_getKind(builtin_ty)) {3855 return transCreateNodeIdentifier(c, switch (builtin_ty.getKind()) {
3864 .Char_U, .Char_S, .UChar, .SChar, .Char8 => if (is_signed) "i8" else "u8",3856 .Char_U, .Char_S, .UChar, .SChar, .Char8 => if (is_signed) "i8" else "u8",
3865 .UShort, .Short => if (is_signed) "c_short" else "c_ushort",3857 .UShort, .Short => if (is_signed) "c_short" else "c_ushort",
3866 .UInt, .Int => if (is_signed) "c_int" else "c_uint",3858 .UInt, .Int => if (is_signed) "c_int" else "c_uint",
...@@ -3873,30 +3865,30 @@ fn transTypeIntWidthOf(c: *Context, ty: *const ZigClangType, is_signed: bool) Ty...@@ -3873,30 +3865,30 @@ fn transTypeIntWidthOf(c: *Context, ty: *const ZigClangType, is_signed: bool) Ty
3873 });3865 });
3874}3866}
38753867
3876fn isCBuiltinType(qt: ZigClangQualType, kind: ZigClangBuiltinTypeKind) bool {3868fn isCBuiltinType(qt: clang.QualType, kind: clang.BuiltinTypeKind) bool {
3877 const c_type = qualTypeCanon(qt);3869 const c_type = qualTypeCanon(qt);
3878 if (ZigClangType_getTypeClass(c_type) != .Builtin)3870 if (c_type.getTypeClass() != .Builtin)
3879 return false;3871 return false;
3880 const builtin_ty = @ptrCast(*const ZigClangBuiltinType, c_type);3872 const builtin_ty = @ptrCast(*const clang.BuiltinType, c_type);
3881 return ZigClangBuiltinType_getKind(builtin_ty) == kind;3873 return builtin_ty.getKind() == kind;
3882}3874}
38833875
3884fn qualTypeIsPtr(qt: ZigClangQualType) bool {3876fn qualTypeIsPtr(qt: clang.QualType) bool {
3885 return ZigClangType_getTypeClass(qualTypeCanon(qt)) == .Pointer;3877 return qualTypeCanon(qt).getTypeClass() == .Pointer;
3886}3878}
38873879
3888fn qualTypeIsBoolean(qt: ZigClangQualType) bool {3880fn qualTypeIsBoolean(qt: clang.QualType) bool {
3889 return ZigClangType_isBooleanType(qualTypeCanon(qt));3881 return qualTypeCanon(qt).isBooleanType();
3890}3882}
38913883
3892fn qualTypeIntBitWidth(rp: RestorePoint, qt: ZigClangQualType, source_loc: ZigClangSourceLocation) !u32 {3884fn qualTypeIntBitWidth(rp: RestorePoint, qt: clang.QualType, source_loc: clang.SourceLocation) !u32 {
3893 const ty = ZigClangQualType_getTypePtr(qt);3885 const ty = qt.getTypePtr();
38943886
3895 switch (ZigClangType_getTypeClass(ty)) {3887 switch (ty.getTypeClass()) {
3896 .Builtin => {3888 .Builtin => {
3897 const builtin_ty = @ptrCast(*const ZigClangBuiltinType, ty);3889 const builtin_ty = @ptrCast(*const clang.BuiltinType, ty);
38983890
3899 switch (ZigClangBuiltinType_getKind(builtin_ty)) {3891 switch (builtin_ty.getKind()) {
3900 .Char_U,3892 .Char_U,
3901 .UChar,3893 .UChar,
3902 .Char_S,3894 .Char_S,
...@@ -3911,9 +3903,9 @@ fn qualTypeIntBitWidth(rp: RestorePoint, qt: ZigClangQualType, source_loc: ZigCl...@@ -3911,9 +3903,9 @@ fn qualTypeIntBitWidth(rp: RestorePoint, qt: ZigClangQualType, source_loc: ZigCl
3911 unreachable;3903 unreachable;
3912 },3904 },
3913 .Typedef => {3905 .Typedef => {
3914 const typedef_ty = @ptrCast(*const ZigClangTypedefType, ty);3906 const typedef_ty = @ptrCast(*const clang.TypedefType, ty);
3915 const typedef_decl = ZigClangTypedefType_getDecl(typedef_ty);3907 const typedef_decl = typedef_ty.getDecl();
3916 const type_name = try rp.c.str(ZigClangNamedDecl_getName_bytes_begin(@ptrCast(*const ZigClangNamedDecl, typedef_decl)));3908 const type_name = try rp.c.str(@ptrCast(*const clang.NamedDecl, typedef_decl).getName_bytes_begin());
39173909
3918 if (mem.eql(u8, type_name, "uint8_t") or mem.eql(u8, type_name, "int8_t")) {3910 if (mem.eql(u8, type_name, "uint8_t") or mem.eql(u8, type_name, "int8_t")) {
3919 return 8;3911 return 8;
...@@ -3933,7 +3925,7 @@ fn qualTypeIntBitWidth(rp: RestorePoint, qt: ZigClangQualType, source_loc: ZigCl...@@ -3933,7 +3925,7 @@ fn qualTypeIntBitWidth(rp: RestorePoint, qt: ZigClangQualType, source_loc: ZigCl
3933 unreachable;3925 unreachable;
3934}3926}
39353927
3936fn qualTypeToLog2IntRef(rp: RestorePoint, qt: ZigClangQualType, source_loc: ZigClangSourceLocation) !*ast.Node {3928fn qualTypeToLog2IntRef(rp: RestorePoint, qt: clang.QualType, source_loc: clang.SourceLocation) !*ast.Node {
3937 const int_bit_width = try qualTypeIntBitWidth(rp, qt, source_loc);3929 const int_bit_width = try qualTypeIntBitWidth(rp, qt, source_loc);
39383930
3939 if (int_bit_width != 0) {3931 if (int_bit_width != 0) {
...@@ -3980,83 +3972,83 @@ fn qualTypeToLog2IntRef(rp: RestorePoint, qt: ZigClangQualType, source_loc: ZigC...@@ -3980,83 +3972,83 @@ fn qualTypeToLog2IntRef(rp: RestorePoint, qt: ZigClangQualType, source_loc: ZigC
3980 return &log2int_fn_call.base;3972 return &log2int_fn_call.base;
3981}3973}
39823974
3983fn qualTypeChildIsFnProto(qt: ZigClangQualType) bool {3975fn qualTypeChildIsFnProto(qt: clang.QualType) bool {
3984 const ty = qualTypeCanon(qt);3976 const ty = qualTypeCanon(qt);
39853977
3986 switch (ZigClangType_getTypeClass(ty)) {3978 switch (ty.getTypeClass()) {
3987 .FunctionProto, .FunctionNoProto => return true,3979 .FunctionProto, .FunctionNoProto => return true,
3988 else => return false,3980 else => return false,
3989 }3981 }
3990}3982}
39913983
3992fn qualTypeCanon(qt: ZigClangQualType) *const ZigClangType {3984fn qualTypeCanon(qt: clang.QualType) *const clang.Type {
3993 const canon = ZigClangQualType_getCanonicalType(qt);3985 const canon = qt.getCanonicalType();
3994 return ZigClangQualType_getTypePtr(canon);3986 return canon.getTypePtr();
3995}3987}
39963988
3997fn getExprQualType(c: *Context, expr: *const ZigClangExpr) ZigClangQualType {3989fn getExprQualType(c: *Context, expr: *const clang.Expr) clang.QualType {
3998 blk: {3990 blk: {
3999 // If this is a C `char *`, turn it into a `const char *`3991 // If this is a C `char *`, turn it into a `const char *`
4000 if (ZigClangExpr_getStmtClass(expr) != .ImplicitCastExprClass) break :blk;3992 if (expr.getStmtClass() != .ImplicitCastExprClass) break :blk;
4001 const cast_expr = @ptrCast(*const ZigClangImplicitCastExpr, expr);3993 const cast_expr = @ptrCast(*const clang.ImplicitCastExpr, expr);
4002 if (ZigClangImplicitCastExpr_getCastKind(cast_expr) != .ArrayToPointerDecay) break :blk;3994 if (cast_expr.getCastKind() != .ArrayToPointerDecay) break :blk;
4003 const sub_expr = ZigClangImplicitCastExpr_getSubExpr(cast_expr);3995 const sub_expr = cast_expr.getSubExpr();
4004 if (ZigClangExpr_getStmtClass(sub_expr) != .StringLiteralClass) break :blk;3996 if (sub_expr.getStmtClass() != .StringLiteralClass) break :blk;
4005 const array_qt = ZigClangExpr_getType(sub_expr);3997 const array_qt = sub_expr.getType();
4006 const array_type = @ptrCast(*const ZigClangArrayType, ZigClangQualType_getTypePtr(array_qt));3998 const array_type = @ptrCast(*const clang.ArrayType, array_qt.getTypePtr());
4007 var pointee_qt = ZigClangArrayType_getElementType(array_type);3999 var pointee_qt = array_type.getElementType();
4008 ZigClangQualType_addConst(&pointee_qt);4000 pointee_qt.addConst();
4009 return ZigClangASTContext_getPointerType(c.clang_context, pointee_qt);4001 return c.clang_context.getPointerType(pointee_qt);
4010 }4002 }
4011 return ZigClangExpr_getType(expr);4003 return expr.getType();
4012}4004}
40134005
4014fn typeIsOpaque(c: *Context, ty: *const ZigClangType, loc: ZigClangSourceLocation) bool {4006fn typeIsOpaque(c: *Context, ty: *const clang.Type, loc: clang.SourceLocation) bool {
4015 switch (ZigClangType_getTypeClass(ty)) {4007 switch (ty.getTypeClass()) {
4016 .Builtin => {4008 .Builtin => {
4017 const builtin_ty = @ptrCast(*const ZigClangBuiltinType, ty);4009 const builtin_ty = @ptrCast(*const clang.BuiltinType, ty);
4018 return ZigClangBuiltinType_getKind(builtin_ty) == .Void;4010 return builtin_ty.getKind() == .Void;
4019 },4011 },
4020 .Record => {4012 .Record => {
4021 const record_ty = @ptrCast(*const ZigClangRecordType, ty);4013 const record_ty = @ptrCast(*const clang.RecordType, ty);
4022 const record_decl = ZigClangRecordType_getDecl(record_ty);4014 const record_decl = record_ty.getDecl();
4023 const record_def = ZigClangRecordDecl_getDefinition(record_decl) orelse4015 const record_def = record_decl.getDefinition() orelse
4024 return true;4016 return true;
4025 var it = ZigClangRecordDecl_field_begin(record_def);4017 var it = record_def.field_begin();
4026 const end_it = ZigClangRecordDecl_field_end(record_def);4018 const end_it = record_def.field_end();
4027 while (ZigClangRecordDecl_field_iterator_neq(it, end_it)) : (it = ZigClangRecordDecl_field_iterator_next(it)) {4019 while (it.neq(end_it)) : (it = it.next()) {
4028 const field_decl = ZigClangRecordDecl_field_iterator_deref(it);4020 const field_decl = it.deref();
40294021
4030 if (ZigClangFieldDecl_isBitField(field_decl)) {4022 if (field_decl.isBitField()) {
4031 return true;4023 return true;
4032 }4024 }
4033 }4025 }
4034 return false;4026 return false;
4035 },4027 },
4036 .Elaborated => {4028 .Elaborated => {
4037 const elaborated_ty = @ptrCast(*const ZigClangElaboratedType, ty);4029 const elaborated_ty = @ptrCast(*const clang.ElaboratedType, ty);
4038 const qt = ZigClangElaboratedType_getNamedType(elaborated_ty);4030 const qt = elaborated_ty.getNamedType();
4039 return typeIsOpaque(c, ZigClangQualType_getTypePtr(qt), loc);4031 return typeIsOpaque(c, qt.getTypePtr(), loc);
4040 },4032 },
4041 .Typedef => {4033 .Typedef => {
4042 const typedef_ty = @ptrCast(*const ZigClangTypedefType, ty);4034 const typedef_ty = @ptrCast(*const clang.TypedefType, ty);
4043 const typedef_decl = ZigClangTypedefType_getDecl(typedef_ty);4035 const typedef_decl = typedef_ty.getDecl();
4044 const underlying_type = ZigClangTypedefNameDecl_getUnderlyingType(typedef_decl);4036 const underlying_type = typedef_decl.getUnderlyingType();
4045 return typeIsOpaque(c, ZigClangQualType_getTypePtr(underlying_type), loc);4037 return typeIsOpaque(c, underlying_type.getTypePtr(), loc);
4046 },4038 },
4047 else => return false,4039 else => return false,
4048 }4040 }
4049}4041}
40504042
4051fn cIsInteger(qt: ZigClangQualType) bool {4043fn cIsInteger(qt: clang.QualType) bool {
4052 return cIsSignedInteger(qt) or cIsUnsignedInteger(qt);4044 return cIsSignedInteger(qt) or cIsUnsignedInteger(qt);
4053}4045}
40544046
4055fn cIsUnsignedInteger(qt: ZigClangQualType) bool {4047fn cIsUnsignedInteger(qt: clang.QualType) bool {
4056 const c_type = qualTypeCanon(qt);4048 const c_type = qualTypeCanon(qt);
4057 if (ZigClangType_getTypeClass(c_type) != .Builtin) return false;4049 if (c_type.getTypeClass() != .Builtin) return false;
4058 const builtin_ty = @ptrCast(*const ZigClangBuiltinType, c_type);4050 const builtin_ty = @ptrCast(*const clang.BuiltinType, c_type);
4059 return switch (ZigClangBuiltinType_getKind(builtin_ty)) {4051 return switch (builtin_ty.getKind()) {
4060 .Char_U,4052 .Char_U,
4061 .UChar,4053 .UChar,
4062 .Char_S,4054 .Char_S,
...@@ -4071,11 +4063,11 @@ fn cIsUnsignedInteger(qt: ZigClangQualType) bool {...@@ -4071,11 +4063,11 @@ fn cIsUnsignedInteger(qt: ZigClangQualType) bool {
4071 };4063 };
4072}4064}
40734065
4074fn cIntTypeToIndex(qt: ZigClangQualType) u8 {4066fn cIntTypeToIndex(qt: clang.QualType) u8 {
4075 const c_type = qualTypeCanon(qt);4067 const c_type = qualTypeCanon(qt);
4076 assert(ZigClangType_getTypeClass(c_type) == .Builtin);4068 assert(c_type.getTypeClass() == .Builtin);
4077 const builtin_ty = @ptrCast(*const ZigClangBuiltinType, c_type);4069 const builtin_ty = @ptrCast(*const clang.BuiltinType, c_type);
4078 return switch (ZigClangBuiltinType_getKind(builtin_ty)) {4070 return switch (builtin_ty.getKind()) {
4079 .Bool, .Char_U, .Char_S, .UChar, .SChar, .Char8 => 1,4071 .Bool, .Char_U, .Char_S, .UChar, .SChar, .Char8 => 1,
4080 .WChar_U, .WChar_S => 2,4072 .WChar_U, .WChar_S => 2,
4081 .UShort, .Short, .Char16 => 3,4073 .UShort, .Short, .Char16 => 3,
...@@ -4087,17 +4079,17 @@ fn cIntTypeToIndex(qt: ZigClangQualType) u8 {...@@ -4087,17 +4079,17 @@ fn cIntTypeToIndex(qt: ZigClangQualType) u8 {
4087 };4079 };
4088}4080}
40894081
4090fn cIntTypeCmp(a: ZigClangQualType, b: ZigClangQualType) math.Order {4082fn cIntTypeCmp(a: clang.QualType, b: clang.QualType) math.Order {
4091 const a_index = cIntTypeToIndex(a);4083 const a_index = cIntTypeToIndex(a);
4092 const b_index = cIntTypeToIndex(b);4084 const b_index = cIntTypeToIndex(b);
4093 return math.order(a_index, b_index);4085 return math.order(a_index, b_index);
4094}4086}
40954087
4096fn cIsSignedInteger(qt: ZigClangQualType) bool {4088fn cIsSignedInteger(qt: clang.QualType) bool {
4097 const c_type = qualTypeCanon(qt);4089 const c_type = qualTypeCanon(qt);
4098 if (ZigClangType_getTypeClass(c_type) != .Builtin) return false;4090 if (c_type.getTypeClass() != .Builtin) return false;
4099 const builtin_ty = @ptrCast(*const ZigClangBuiltinType, c_type);4091 const builtin_ty = @ptrCast(*const clang.BuiltinType, c_type);
4100 return switch (ZigClangBuiltinType_getKind(builtin_ty)) {4092 return switch (builtin_ty.getKind()) {
4101 .SChar,4093 .SChar,
4102 .Short,4094 .Short,
4103 .Int,4095 .Int,
...@@ -4110,11 +4102,11 @@ fn cIsSignedInteger(qt: ZigClangQualType) bool {...@@ -4110,11 +4102,11 @@ fn cIsSignedInteger(qt: ZigClangQualType) bool {
4110 };4102 };
4111}4103}
41124104
4113fn cIsFloating(qt: ZigClangQualType) bool {4105fn cIsFloating(qt: clang.QualType) bool {
4114 const c_type = qualTypeCanon(qt);4106 const c_type = qualTypeCanon(qt);
4115 if (ZigClangType_getTypeClass(c_type) != .Builtin) return false;4107 if (c_type.getTypeClass() != .Builtin) return false;
4116 const builtin_ty = @ptrCast(*const ZigClangBuiltinType, c_type);4108 const builtin_ty = @ptrCast(*const clang.BuiltinType, c_type);
4117 return switch (ZigClangBuiltinType_getKind(builtin_ty)) {4109 return switch (builtin_ty.getKind()) {
4118 .Float,4110 .Float,
4119 .Double,4111 .Double,
4120 .Float128,4112 .Float128,
...@@ -4124,11 +4116,11 @@ fn cIsFloating(qt: ZigClangQualType) bool {...@@ -4124,11 +4116,11 @@ fn cIsFloating(qt: ZigClangQualType) bool {
4124 };4116 };
4125}4117}
41264118
4127fn cIsLongLongInteger(qt: ZigClangQualType) bool {4119fn cIsLongLongInteger(qt: clang.QualType) bool {
4128 const c_type = qualTypeCanon(qt);4120 const c_type = qualTypeCanon(qt);
4129 if (ZigClangType_getTypeClass(c_type) != .Builtin) return false;4121 if (c_type.getTypeClass() != .Builtin) return false;
4130 const builtin_ty = @ptrCast(*const ZigClangBuiltinType, c_type);4122 const builtin_ty = @ptrCast(*const clang.BuiltinType, c_type);
4131 return switch (ZigClangBuiltinType_getKind(builtin_ty)) {4123 return switch (builtin_ty.getKind()) {
4132 .LongLong, .ULongLong, .Int128, .UInt128 => true,4124 .LongLong, .ULongLong, .Int128, .UInt128 => true,
4133 else => false,4125 else => false,
4134 };4126 };
...@@ -4137,8 +4129,8 @@ fn transCreateNodeAssign(...@@ -4137,8 +4129,8 @@ fn transCreateNodeAssign(
4137 rp: RestorePoint,4129 rp: RestorePoint,
4138 scope: *Scope,4130 scope: *Scope,
4139 result_used: ResultUsed,4131 result_used: ResultUsed,
4140 lhs: *const ZigClangExpr,4132 lhs: *const clang.Expr,
4141 rhs: *const ZigClangExpr,4133 rhs: *const clang.Expr,
4142) !*ast.Node {4134) !*ast.Node {
4143 // common case4135 // common case
4144 // c: lhs = rhs4136 // c: lhs = rhs
...@@ -4273,19 +4265,19 @@ fn transCreateNodeInfixOp(...@@ -4273,19 +4265,19 @@ fn transCreateNodeInfixOp(
4273fn transCreateNodeBoolInfixOp(4265fn transCreateNodeBoolInfixOp(
4274 rp: RestorePoint,4266 rp: RestorePoint,
4275 scope: *Scope,4267 scope: *Scope,
4276 stmt: *const ZigClangBinaryOperator,4268 stmt: *const clang.BinaryOperator,
4277 op: ast.Node.Tag,4269 op: ast.Node.Tag,
4278 used: ResultUsed,4270 used: ResultUsed,
4279 grouped: bool,4271 grouped: bool,
4280) !*ast.Node {4272) !*ast.Node {
4281 std.debug.assert(op == .BoolAnd or op == .BoolOr);4273 std.debug.assert(op == .BoolAnd or op == .BoolOr);
42824274
4283 const lhs_hode = try transBoolExpr(rp, scope, ZigClangBinaryOperator_getLHS(stmt), .used, .l_value, true);4275 const lhs_hode = try transBoolExpr(rp, scope, stmt.getLHS(), .used, .l_value, true);
4284 const op_token = if (op == .BoolAnd)4276 const op_token = if (op == .BoolAnd)
4285 try appendToken(rp.c, .Keyword_and, "and")4277 try appendToken(rp.c, .Keyword_and, "and")
4286 else4278 else
4287 try appendToken(rp.c, .Keyword_or, "or");4279 try appendToken(rp.c, .Keyword_or, "or");
4288 const rhs = try transBoolExpr(rp, scope, ZigClangBinaryOperator_getRHS(stmt), .used, .r_value, true);4280 const rhs = try transBoolExpr(rp, scope, stmt.getRHS(), .used, .r_value, true);
42894281
4290 return transCreateNodeInfixOp(4282 return transCreateNodeInfixOp(
4291 rp,4283 rp,
...@@ -4334,21 +4326,21 @@ fn transCreateNodePtrType(...@@ -4334,21 +4326,21 @@ fn transCreateNodePtrType(
4334 return node;4326 return node;
4335}4327}
43364328
4337fn transCreateNodeAPInt(c: *Context, int: *const ZigClangAPSInt) !*ast.Node {4329fn transCreateNodeAPInt(c: *Context, int: *const clang.APSInt) !*ast.Node {
4338 const num_limbs = math.cast(usize, ZigClangAPSInt_getNumWords(int)) catch |err| switch (err) {4330 const num_limbs = math.cast(usize, int.getNumWords()) catch |err| switch (err) {
4339 error.Overflow => return error.OutOfMemory,4331 error.Overflow => return error.OutOfMemory,
4340 };4332 };
4341 var aps_int = int;4333 var aps_int = int;
4342 const is_negative = ZigClangAPSInt_isSigned(int) and ZigClangAPSInt_isNegative(int);4334 const is_negative = int.isSigned() and int.isNegative();
4343 if (is_negative) aps_int = ZigClangAPSInt_negate(aps_int);4335 if (is_negative) aps_int = aps_int.negate();
4344 defer if (is_negative) {4336 defer if (is_negative) {
4345 ZigClangAPSInt_free(aps_int);4337 aps_int.free();
4346 };4338 };
43474339
4348 const limbs = try c.arena.alloc(math.big.Limb, num_limbs);4340 const limbs = try c.arena.alloc(math.big.Limb, num_limbs);
4349 defer c.arena.free(limbs);4341 defer c.arena.free(limbs);
43504342
4351 const data = ZigClangAPSInt_getRawData(aps_int);4343 const data = aps_int.getRawData();
4352 switch (@sizeOf(math.big.Limb)) {4344 switch (@sizeOf(math.big.Limb)) {
4353 8 => {4345 8 => {
4354 var i: usize = 0;4346 var i: usize = 0;
...@@ -4697,23 +4689,23 @@ fn transCreateNodeSwitchElse(c: *Context) !*ast.Node {...@@ -4697,23 +4689,23 @@ fn transCreateNodeSwitchElse(c: *Context) !*ast.Node {
4697fn transCreateNodeShiftOp(4689fn transCreateNodeShiftOp(
4698 rp: RestorePoint,4690 rp: RestorePoint,
4699 scope: *Scope,4691 scope: *Scope,
4700 stmt: *const ZigClangBinaryOperator,4692 stmt: *const clang.BinaryOperator,
4701 op: ast.Node.Tag,4693 op: ast.Node.Tag,
4702 op_tok_id: std.zig.Token.Id,4694 op_tok_id: std.zig.Token.Id,
4703 bytes: []const u8,4695 bytes: []const u8,
4704) !*ast.Node {4696) !*ast.Node {
4705 std.debug.assert(op == .BitShiftLeft or op == .BitShiftRight);4697 std.debug.assert(op == .BitShiftLeft or op == .BitShiftRight);
47064698
4707 const lhs_expr = ZigClangBinaryOperator_getLHS(stmt);4699 const lhs_expr = stmt.getLHS();
4708 const rhs_expr = ZigClangBinaryOperator_getRHS(stmt);4700 const rhs_expr = stmt.getRHS();
4709 const rhs_location = ZigClangExpr_getBeginLoc(rhs_expr);4701 const rhs_location = rhs_expr.getBeginLoc();
4710 // lhs >> @as(u5, rh)4702 // lhs >> @as(u5, rh)
47114703
4712 const lhs = try transExpr(rp, scope, lhs_expr, .used, .l_value);4704 const lhs = try transExpr(rp, scope, lhs_expr, .used, .l_value);
4713 const op_token = try appendToken(rp.c, op_tok_id, bytes);4705 const op_token = try appendToken(rp.c, op_tok_id, bytes);
47144706
4715 const cast_node = try rp.c.createBuiltinCall("@intCast", 2);4707 const cast_node = try rp.c.createBuiltinCall("@intCast", 2);
4716 const rhs_type = try qualTypeToLog2IntRef(rp, ZigClangBinaryOperator_getType(stmt), rhs_location);4708 const rhs_type = try qualTypeToLog2IntRef(rp, stmt.getType(), rhs_location);
4717 cast_node.params()[0] = rhs_type;4709 cast_node.params()[0] = rhs_type;
4718 _ = try appendToken(rp.c, .Comma, ",");4710 _ = try appendToken(rp.c, .Comma, ",");
4719 const rhs = try transExprCoercing(rp, scope, rhs_expr, .used, .r_value);4711 const rhs = try transExprCoercing(rp, scope, rhs_expr, .used, .r_value);
...@@ -4772,11 +4764,11 @@ fn makeRestorePoint(c: *Context) RestorePoint {...@@ -4772,11 +4764,11 @@ fn makeRestorePoint(c: *Context) RestorePoint {
4772 };4764 };
4773}4765}
47744766
4775fn transType(rp: RestorePoint, ty: *const ZigClangType, source_loc: ZigClangSourceLocation) TypeError!*ast.Node {4767fn transType(rp: RestorePoint, ty: *const clang.Type, source_loc: clang.SourceLocation) TypeError!*ast.Node {
4776 switch (ZigClangType_getTypeClass(ty)) {4768 switch (ty.getTypeClass()) {
4777 .Builtin => {4769 .Builtin => {
4778 const builtin_ty = @ptrCast(*const ZigClangBuiltinType, ty);4770 const builtin_ty = @ptrCast(*const clang.BuiltinType, ty);
4779 return transCreateNodeIdentifier(rp.c, switch (ZigClangBuiltinType_getKind(builtin_ty)) {4771 return transCreateNodeIdentifier(rp.c, switch (builtin_ty.getKind()) {
4780 .Void => "c_void",4772 .Void => "c_void",
4781 .Bool => "bool",4773 .Bool => "bool",
4782 .Char_U, .UChar, .Char_S, .Char8 => "u8",4774 .Char_U, .UChar, .Char_S, .Char8 => "u8",
...@@ -4800,32 +4792,32 @@ fn transType(rp: RestorePoint, ty: *const ZigClangType, source_loc: ZigClangSour...@@ -4800,32 +4792,32 @@ fn transType(rp: RestorePoint, ty: *const ZigClangType, source_loc: ZigClangSour
4800 });4792 });
4801 },4793 },
4802 .FunctionProto => {4794 .FunctionProto => {
4803 const fn_proto_ty = @ptrCast(*const ZigClangFunctionProtoType, ty);4795 const fn_proto_ty = @ptrCast(*const clang.FunctionProtoType, ty);
4804 const fn_proto = try transFnProto(rp, null, fn_proto_ty, source_loc, null, false);4796 const fn_proto = try transFnProto(rp, null, fn_proto_ty, source_loc, null, false);
4805 return &fn_proto.base;4797 return &fn_proto.base;
4806 },4798 },
4807 .FunctionNoProto => {4799 .FunctionNoProto => {
4808 const fn_no_proto_ty = @ptrCast(*const ZigClangFunctionType, ty);4800 const fn_no_proto_ty = @ptrCast(*const clang.FunctionType, ty);
4809 const fn_proto = try transFnNoProto(rp, fn_no_proto_ty, source_loc, null, false);4801 const fn_proto = try transFnNoProto(rp, fn_no_proto_ty, source_loc, null, false);
4810 return &fn_proto.base;4802 return &fn_proto.base;
4811 },4803 },
4812 .Paren => {4804 .Paren => {
4813 const paren_ty = @ptrCast(*const ZigClangParenType, ty);4805 const paren_ty = @ptrCast(*const clang.ParenType, ty);
4814 return transQualType(rp, ZigClangParenType_getInnerType(paren_ty), source_loc);4806 return transQualType(rp, paren_ty.getInnerType(), source_loc);
4815 },4807 },
4816 .Pointer => {4808 .Pointer => {
4817 const child_qt = ZigClangType_getPointeeType(ty);4809 const child_qt = ty.getPointeeType();
4818 if (qualTypeChildIsFnProto(child_qt)) {4810 if (qualTypeChildIsFnProto(child_qt)) {
4819 const optional_node = try transCreateNodeSimplePrefixOp(rp.c, .OptionalType, .QuestionMark, "?");4811 const optional_node = try transCreateNodeSimplePrefixOp(rp.c, .OptionalType, .QuestionMark, "?");
4820 optional_node.rhs = try transQualType(rp, child_qt, source_loc);4812 optional_node.rhs = try transQualType(rp, child_qt, source_loc);
4821 return &optional_node.base;4813 return &optional_node.base;
4822 }4814 }
4823 if (typeIsOpaque(rp.c, ZigClangQualType_getTypePtr(child_qt), source_loc)) {4815 if (typeIsOpaque(rp.c, child_qt.getTypePtr(), source_loc)) {
4824 const optional_node = try transCreateNodeSimplePrefixOp(rp.c, .OptionalType, .QuestionMark, "?");4816 const optional_node = try transCreateNodeSimplePrefixOp(rp.c, .OptionalType, .QuestionMark, "?");
4825 const pointer_node = try transCreateNodePtrType(4817 const pointer_node = try transCreateNodePtrType(
4826 rp.c,4818 rp.c,
4827 ZigClangQualType_isConstQualified(child_qt),4819 child_qt.isConstQualified(),
4828 ZigClangQualType_isVolatileQualified(child_qt),4820 child_qt.isVolatileQualified(),
4829 .Asterisk,4821 .Asterisk,
4830 );4822 );
4831 optional_node.rhs = &pointer_node.base;4823 optional_node.rhs = &pointer_node.base;
...@@ -4834,83 +4826,83 @@ fn transType(rp: RestorePoint, ty: *const ZigClangType, source_loc: ZigClangSour...@@ -4834,83 +4826,83 @@ fn transType(rp: RestorePoint, ty: *const ZigClangType, source_loc: ZigClangSour
4834 }4826 }
4835 const pointer_node = try transCreateNodePtrType(4827 const pointer_node = try transCreateNodePtrType(
4836 rp.c,4828 rp.c,
4837 ZigClangQualType_isConstQualified(child_qt),4829 child_qt.isConstQualified(),
4838 ZigClangQualType_isVolatileQualified(child_qt),4830 child_qt.isVolatileQualified(),
4839 .Identifier,4831 .Identifier,
4840 );4832 );
4841 pointer_node.rhs = try transQualType(rp, child_qt, source_loc);4833 pointer_node.rhs = try transQualType(rp, child_qt, source_loc);
4842 return &pointer_node.base;4834 return &pointer_node.base;
4843 },4835 },
4844 .ConstantArray => {4836 .ConstantArray => {
4845 const const_arr_ty = @ptrCast(*const ZigClangConstantArrayType, ty);4837 const const_arr_ty = @ptrCast(*const clang.ConstantArrayType, ty);
48464838
4847 const size_ap_int = ZigClangConstantArrayType_getSize(const_arr_ty);4839 const size_ap_int = const_arr_ty.getSize();
4848 const size = ZigClangAPInt_getLimitedValue(size_ap_int, math.maxInt(usize));4840 const size = size_ap_int.getLimitedValue(math.maxInt(usize));
4849 const elem_ty = ZigClangQualType_getTypePtr(ZigClangConstantArrayType_getElementType(const_arr_ty));4841 const elem_ty = const_arr_ty.getElementType().getTypePtr();
4850 return try transCreateNodeArrayType(rp, source_loc, elem_ty, size);4842 return try transCreateNodeArrayType(rp, source_loc, elem_ty, size);
4851 },4843 },
4852 .IncompleteArray => {4844 .IncompleteArray => {
4853 const incomplete_array_ty = @ptrCast(*const ZigClangIncompleteArrayType, ty);4845 const incomplete_array_ty = @ptrCast(*const clang.IncompleteArrayType, ty);
48544846
4855 const child_qt = ZigClangIncompleteArrayType_getElementType(incomplete_array_ty);4847 const child_qt = incomplete_array_ty.getElementType();
4856 var node = try transCreateNodePtrType(4848 var node = try transCreateNodePtrType(
4857 rp.c,4849 rp.c,
4858 ZigClangQualType_isConstQualified(child_qt),4850 child_qt.isConstQualified(),
4859 ZigClangQualType_isVolatileQualified(child_qt),4851 child_qt.isVolatileQualified(),
4860 .Identifier,4852 .Identifier,
4861 );4853 );
4862 node.rhs = try transQualType(rp, child_qt, source_loc);4854 node.rhs = try transQualType(rp, child_qt, source_loc);
4863 return &node.base;4855 return &node.base;
4864 },4856 },
4865 .Typedef => {4857 .Typedef => {
4866 const typedef_ty = @ptrCast(*const ZigClangTypedefType, ty);4858 const typedef_ty = @ptrCast(*const clang.TypedefType, ty);
48674859
4868 const typedef_decl = ZigClangTypedefType_getDecl(typedef_ty);4860 const typedef_decl = typedef_ty.getDecl();
4869 return (try transTypeDef(rp.c, typedef_decl, false)) orelse4861 return (try transTypeDef(rp.c, typedef_decl, false)) orelse
4870 revertAndWarn(rp, error.UnsupportedType, source_loc, "unable to translate typedef declaration", .{});4862 revertAndWarn(rp, error.UnsupportedType, source_loc, "unable to translate typedef declaration", .{});
4871 },4863 },
4872 .Record => {4864 .Record => {
4873 const record_ty = @ptrCast(*const ZigClangRecordType, ty);4865 const record_ty = @ptrCast(*const clang.RecordType, ty);
48744866
4875 const record_decl = ZigClangRecordType_getDecl(record_ty);4867 const record_decl = record_ty.getDecl();
4876 return (try transRecordDecl(rp.c, record_decl)) orelse4868 return (try transRecordDecl(rp.c, record_decl)) orelse
4877 revertAndWarn(rp, error.UnsupportedType, source_loc, "unable to resolve record declaration", .{});4869 revertAndWarn(rp, error.UnsupportedType, source_loc, "unable to resolve record declaration", .{});
4878 },4870 },
4879 .Enum => {4871 .Enum => {
4880 const enum_ty = @ptrCast(*const ZigClangEnumType, ty);4872 const enum_ty = @ptrCast(*const clang.EnumType, ty);
48814873
4882 const enum_decl = ZigClangEnumType_getDecl(enum_ty);4874 const enum_decl = enum_ty.getDecl();
4883 return (try transEnumDecl(rp.c, enum_decl)) orelse4875 return (try transEnumDecl(rp.c, enum_decl)) orelse
4884 revertAndWarn(rp, error.UnsupportedType, source_loc, "unable to translate enum declaration", .{});4876 revertAndWarn(rp, error.UnsupportedType, source_loc, "unable to translate enum declaration", .{});
4885 },4877 },
4886 .Elaborated => {4878 .Elaborated => {
4887 const elaborated_ty = @ptrCast(*const ZigClangElaboratedType, ty);4879 const elaborated_ty = @ptrCast(*const clang.ElaboratedType, ty);
4888 return transQualType(rp, ZigClangElaboratedType_getNamedType(elaborated_ty), source_loc);4880 return transQualType(rp, elaborated_ty.getNamedType(), source_loc);
4889 },4881 },
4890 .Decayed => {4882 .Decayed => {
4891 const decayed_ty = @ptrCast(*const ZigClangDecayedType, ty);4883 const decayed_ty = @ptrCast(*const clang.DecayedType, ty);
4892 return transQualType(rp, ZigClangDecayedType_getDecayedType(decayed_ty), source_loc);4884 return transQualType(rp, decayed_ty.getDecayedType(), source_loc);
4893 },4885 },
4894 .Attributed => {4886 .Attributed => {
4895 const attributed_ty = @ptrCast(*const ZigClangAttributedType, ty);4887 const attributed_ty = @ptrCast(*const clang.AttributedType, ty);
4896 return transQualType(rp, ZigClangAttributedType_getEquivalentType(attributed_ty), source_loc);4888 return transQualType(rp, attributed_ty.getEquivalentType(), source_loc);
4897 },4889 },
4898 .MacroQualified => {4890 .MacroQualified => {
4899 const macroqualified_ty = @ptrCast(*const ZigClangMacroQualifiedType, ty);4891 const macroqualified_ty = @ptrCast(*const clang.MacroQualifiedType, ty);
4900 return transQualType(rp, ZigClangMacroQualifiedType_getModifiedType(macroqualified_ty), source_loc);4892 return transQualType(rp, macroqualified_ty.getModifiedType(), source_loc);
4901 },4893 },
4902 else => {4894 else => {
4903 const type_name = rp.c.str(ZigClangType_getTypeClassName(ty));4895 const type_name = rp.c.str(ty.getTypeClassName());
4904 return revertAndWarn(rp, error.UnsupportedType, source_loc, "unsupported type: '{}'", .{type_name});4896 return revertAndWarn(rp, error.UnsupportedType, source_loc, "unsupported type: '{}'", .{type_name});
4905 },4897 },
4906 }4898 }
4907}4899}
49084900
4909fn isCVoid(qt: ZigClangQualType) bool {4901fn isCVoid(qt: clang.QualType) bool {
4910 const ty = ZigClangQualType_getTypePtr(qt);4902 const ty = qt.getTypePtr();
4911 if (ZigClangType_getTypeClass(ty) == .Builtin) {4903 if (ty.getTypeClass() == .Builtin) {
4912 const builtin_ty = @ptrCast(*const ZigClangBuiltinType, ty);4904 const builtin_ty = @ptrCast(*const clang.BuiltinType, ty);
4913 return ZigClangBuiltinType_getKind(builtin_ty) == .Void;4905 return builtin_ty.getKind() == .Void;
4914 }4906 }
4915 return false;4907 return false;
4916}4908}
...@@ -4918,16 +4910,16 @@ fn isCVoid(qt: ZigClangQualType) bool {...@@ -4918,16 +4910,16 @@ fn isCVoid(qt: ZigClangQualType) bool {
4918const FnDeclContext = struct {4910const FnDeclContext = struct {
4919 fn_name: []const u8,4911 fn_name: []const u8,
4920 has_body: bool,4912 has_body: bool,
4921 storage_class: ZigClangStorageClass,4913 storage_class: clang.StorageClass,
4922 is_export: bool,4914 is_export: bool,
4923};4915};
49244916
4925fn transCC(4917fn transCC(
4926 rp: RestorePoint,4918 rp: RestorePoint,
4927 fn_ty: *const ZigClangFunctionType,4919 fn_ty: *const clang.FunctionType,
4928 source_loc: ZigClangSourceLocation,4920 source_loc: clang.SourceLocation,
4929) !CallingConvention {4921) !CallingConvention {
4930 const clang_cc = ZigClangFunctionType_getCallConv(fn_ty);4922 const clang_cc = fn_ty.getCallConv();
4931 switch (clang_cc) {4923 switch (clang_cc) {
4932 .C => return CallingConvention.C,4924 .C => return CallingConvention.C,
4933 .X86StdCall => return CallingConvention.Stdcall,4925 .X86StdCall => return CallingConvention.Stdcall,
...@@ -4948,22 +4940,22 @@ fn transCC(...@@ -4948,22 +4940,22 @@ fn transCC(
49484940
4949fn transFnProto(4941fn transFnProto(
4950 rp: RestorePoint,4942 rp: RestorePoint,
4951 fn_decl: ?*const ZigClangFunctionDecl,4943 fn_decl: ?*const clang.FunctionDecl,
4952 fn_proto_ty: *const ZigClangFunctionProtoType,4944 fn_proto_ty: *const clang.FunctionProtoType,
4953 source_loc: ZigClangSourceLocation,4945 source_loc: clang.SourceLocation,
4954 fn_decl_context: ?FnDeclContext,4946 fn_decl_context: ?FnDeclContext,
4955 is_pub: bool,4947 is_pub: bool,
4956) !*ast.Node.FnProto {4948) !*ast.Node.FnProto {
4957 const fn_ty = @ptrCast(*const ZigClangFunctionType, fn_proto_ty);4949 const fn_ty = @ptrCast(*const clang.FunctionType, fn_proto_ty);
4958 const cc = try transCC(rp, fn_ty, source_loc);4950 const cc = try transCC(rp, fn_ty, source_loc);
4959 const is_var_args = ZigClangFunctionProtoType_isVariadic(fn_proto_ty);4951 const is_var_args = fn_proto_ty.isVariadic();
4960 return finishTransFnProto(rp, fn_decl, fn_proto_ty, fn_ty, source_loc, fn_decl_context, is_var_args, cc, is_pub);4952 return finishTransFnProto(rp, fn_decl, fn_proto_ty, fn_ty, source_loc, fn_decl_context, is_var_args, cc, is_pub);
4961}4953}
49624954
4963fn transFnNoProto(4955fn transFnNoProto(
4964 rp: RestorePoint,4956 rp: RestorePoint,
4965 fn_ty: *const ZigClangFunctionType,4957 fn_ty: *const clang.FunctionType,
4966 source_loc: ZigClangSourceLocation,4958 source_loc: clang.SourceLocation,
4967 fn_decl_context: ?FnDeclContext,4959 fn_decl_context: ?FnDeclContext,
4968 is_pub: bool,4960 is_pub: bool,
4969) !*ast.Node.FnProto {4961) !*ast.Node.FnProto {
...@@ -4974,10 +4966,10 @@ fn transFnNoProto(...@@ -4974,10 +4966,10 @@ fn transFnNoProto(
49744966
4975fn finishTransFnProto(4967fn finishTransFnProto(
4976 rp: RestorePoint,4968 rp: RestorePoint,
4977 fn_decl: ?*const ZigClangFunctionDecl,4969 fn_decl: ?*const clang.FunctionDecl,
4978 fn_proto_ty: ?*const ZigClangFunctionProtoType,4970 fn_proto_ty: ?*const clang.FunctionProtoType,
4979 fn_ty: *const ZigClangFunctionType,4971 fn_ty: *const clang.FunctionType,
4980 source_loc: ZigClangSourceLocation,4972 source_loc: clang.SourceLocation,
4981 fn_decl_context: ?FnDeclContext,4973 fn_decl_context: ?FnDeclContext,
4982 is_var_args: bool,4974 is_var_args: bool,
4983 cc: CallingConvention,4975 cc: CallingConvention,
...@@ -5003,19 +4995,19 @@ fn finishTransFnProto(...@@ -5003,19 +4995,19 @@ fn finishTransFnProto(
50034995
5004 var fn_params = std.ArrayList(ast.Node.FnProto.ParamDecl).init(rp.c.gpa);4996 var fn_params = std.ArrayList(ast.Node.FnProto.ParamDecl).init(rp.c.gpa);
5005 defer fn_params.deinit();4997 defer fn_params.deinit();
5006 const param_count: usize = if (fn_proto_ty != null) ZigClangFunctionProtoType_getNumParams(fn_proto_ty.?) else 0;4998 const param_count: usize = if (fn_proto_ty != null) fn_proto_ty.?.getNumParams() else 0;
5007 try fn_params.ensureCapacity(param_count + 1); // +1 for possible var args node4999 try fn_params.ensureCapacity(param_count + 1); // +1 for possible var args node
50085000
5009 var i: usize = 0;5001 var i: usize = 0;
5010 while (i < param_count) : (i += 1) {5002 while (i < param_count) : (i += 1) {
5011 const param_qt = ZigClangFunctionProtoType_getParamType(fn_proto_ty.?, @intCast(c_uint, i));5003 const param_qt = fn_proto_ty.?.getParamType(@intCast(c_uint, i));
50125004
5013 const noalias_tok = if (ZigClangQualType_isRestrictQualified(param_qt)) try appendToken(rp.c, .Keyword_noalias, "noalias") else null;5005 const noalias_tok = if (param_qt.isRestrictQualified()) try appendToken(rp.c, .Keyword_noalias, "noalias") else null;
50145006
5015 const param_name_tok: ?ast.TokenIndex = blk: {5007 const param_name_tok: ?ast.TokenIndex = blk: {
5016 if (fn_decl) |decl| {5008 if (fn_decl) |decl| {
5017 const param = ZigClangFunctionDecl_getParamDecl(decl, @intCast(c_uint, i));5009 const param = decl.getParamDecl(@intCast(c_uint, i));
5018 const param_name: []const u8 = try rp.c.str(ZigClangNamedDecl_getName_bytes_begin(@ptrCast(*const ZigClangNamedDecl, param)));5010 const param_name: []const u8 = try rp.c.str(@ptrCast(*const clang.NamedDecl, param).getName_bytes_begin());
5019 if (param_name.len < 1)5011 if (param_name.len < 1)
5020 break :blk null;5012 break :blk null;
50215013
...@@ -5053,7 +5045,7 @@ fn finishTransFnProto(...@@ -5053,7 +5045,7 @@ fn finishTransFnProto(
5053 const linksection_expr = blk: {5045 const linksection_expr = blk: {
5054 if (fn_decl) |decl| {5046 if (fn_decl) |decl| {
5055 var str_len: usize = undefined;5047 var str_len: usize = undefined;
5056 if (ZigClangFunctionDecl_getSectionAttribute(decl, &str_len)) |str_ptr| {5048 if (decl.getSectionAttribute(&str_len)) |str_ptr| {
5057 _ = try appendToken(rp.c, .Keyword_linksection, "linksection");5049 _ = try appendToken(rp.c, .Keyword_linksection, "linksection");
5058 _ = try appendToken(rp.c, .LParen, "(");5050 _ = try appendToken(rp.c, .LParen, "(");
5059 const expr = try transCreateNodeStringLiteral(5051 const expr = try transCreateNodeStringLiteral(
...@@ -5070,7 +5062,7 @@ fn finishTransFnProto(...@@ -5070,7 +5062,7 @@ fn finishTransFnProto(
50705062
5071 const align_expr = blk: {5063 const align_expr = blk: {
5072 if (fn_decl) |decl| {5064 if (fn_decl) |decl| {
5073 const alignment = ZigClangFunctionDecl_getAlignedAttribute(decl, rp.c.clang_context);5065 const alignment = decl.getAlignedAttribute(rp.c.clang_context);
5074 if (alignment != 0) {5066 if (alignment != 0) {
5075 _ = try appendToken(rp.c, .Keyword_align, "align");5067 _ = try appendToken(rp.c, .Keyword_align, "align");
5076 _ = try appendToken(rp.c, .LParen, "(");5068 _ = try appendToken(rp.c, .LParen, "(");
...@@ -5093,10 +5085,10 @@ fn finishTransFnProto(...@@ -5093,10 +5085,10 @@ fn finishTransFnProto(
5093 };5085 };
50945086
5095 const return_type_node = blk: {5087 const return_type_node = blk: {
5096 if (ZigClangFunctionType_getNoReturnAttr(fn_ty)) {5088 if (fn_ty.getNoReturnAttr()) {
5097 break :blk try transCreateNodeIdentifier(rp.c, "noreturn");5089 break :blk try transCreateNodeIdentifier(rp.c, "noreturn");
5098 } else {5090 } else {
5099 const return_qt = ZigClangFunctionType_getReturnType(fn_ty);5091 const return_qt = fn_ty.getReturnType();
5100 if (isCVoid(return_qt)) {5092 if (isCVoid(return_qt)) {
5101 // convert primitive c_void to actual void (only for return type)5093 // convert primitive c_void to actual void (only for return type)
5102 break :blk try transCreateNodeIdentifier(rp.c, "void");5094 break :blk try transCreateNodeIdentifier(rp.c, "void");
...@@ -5144,7 +5136,7 @@ fn finishTransFnProto(...@@ -5144,7 +5136,7 @@ fn finishTransFnProto(
5144fn revertAndWarn(5136fn revertAndWarn(
5145 rp: RestorePoint,5137 rp: RestorePoint,
5146 err: anytype,5138 err: anytype,
5147 source_loc: ZigClangSourceLocation,5139 source_loc: clang.SourceLocation,
5148 comptime format: []const u8,5140 comptime format: []const u8,
5149 args: anytype,5141 args: anytype,
5150) (@TypeOf(err) || error{OutOfMemory}) {5142) (@TypeOf(err) || error{OutOfMemory}) {
...@@ -5153,12 +5145,12 @@ fn revertAndWarn(...@@ -5153,12 +5145,12 @@ fn revertAndWarn(
5153 return err;5145 return err;
5154}5146}
51555147
5156fn emitWarning(c: *Context, loc: ZigClangSourceLocation, comptime format: []const u8, args: anytype) !void {5148fn emitWarning(c: *Context, loc: clang.SourceLocation, comptime format: []const u8, args: anytype) !void {
5157 const args_prefix = .{c.locStr(loc)};5149 const args_prefix = .{c.locStr(loc)};
5158 _ = try appendTokenFmt(c, .LineComment, "// {}: warning: " ++ format, args_prefix ++ args);5150 _ = try appendTokenFmt(c, .LineComment, "// {}: warning: " ++ format, args_prefix ++ args);
5159}5151}
51605152
5161pub fn failDecl(c: *Context, loc: ZigClangSourceLocation, name: []const u8, comptime format: []const u8, args: anytype) !void {5153pub fn failDecl(c: *Context, loc: clang.SourceLocation, name: []const u8, comptime format: []const u8, args: anytype) !void {
5162 // pub const name = @compileError(msg);5154 // pub const name = @compileError(msg);
5163 const pub_tok = try appendToken(c, .Keyword_pub, "pub");5155 const pub_tok = try appendToken(c, .Keyword_pub, "pub");
5164 const const_tok = try appendToken(c, .Keyword_const, "const");5156 const const_tok = try appendToken(c, .Keyword_const, "const");
...@@ -5295,14 +5287,14 @@ fn transCreateNodeIdentifierUnchecked(c: *Context, name: []const u8) !*ast.Node...@@ -5295,14 +5287,14 @@ fn transCreateNodeIdentifierUnchecked(c: *Context, name: []const u8) !*ast.Node
5295}5287}
52965288
5297pub fn freeErrors(errors: []ClangErrMsg) void {5289pub fn freeErrors(errors: []ClangErrMsg) void {
5298 ZigClangErrorMsg_delete(errors.ptr, errors.len);5290 errors.ptr.delete(errors.len);
5299}5291}
53005292
5301const MacroCtx = struct {5293const MacroCtx = struct {
5302 source: []const u8,5294 source: []const u8,
5303 list: []const CToken,5295 list: []const CToken,
5304 i: usize = 0,5296 i: usize = 0,
5305 loc: ZigClangSourceLocation,5297 loc: clang.SourceLocation,
5306 name: []const u8,5298 name: []const u8,
53075299
5308 fn peek(self: *MacroCtx) ?CToken.Id {5300 fn peek(self: *MacroCtx) ?CToken.Id {
...@@ -5326,22 +5318,22 @@ const MacroCtx = struct {...@@ -5326,22 +5318,22 @@ const MacroCtx = struct {
5326 }5318 }
5327};5319};
53285320
5329fn transPreprocessorEntities(c: *Context, unit: *ZigClangASTUnit) Error!void {5321fn transPreprocessorEntities(c: *Context, unit: *clang.ASTUnit) Error!void {
5330 // TODO if we see #undef, delete it from the table5322 // TODO if we see #undef, delete it from the table
5331 var it = ZigClangASTUnit_getLocalPreprocessingEntities_begin(unit);5323 var it = unit.getLocalPreprocessingEntities_begin();
5332 const it_end = ZigClangASTUnit_getLocalPreprocessingEntities_end(unit);5324 const it_end = unit.getLocalPreprocessingEntities_end();
5333 var tok_list = std.ArrayList(CToken).init(c.gpa);5325 var tok_list = std.ArrayList(CToken).init(c.gpa);
5334 defer tok_list.deinit();5326 defer tok_list.deinit();
5335 const scope = c.global_scope;5327 const scope = c.global_scope;
53365328
5337 while (it.I != it_end.I) : (it.I += 1) {5329 while (it.I != it_end.I) : (it.I += 1) {
5338 const entity = ZigClangPreprocessingRecord_iterator_deref(it);5330 const entity = it.deref();
5339 tok_list.items.len = 0;5331 tok_list.items.len = 0;
5340 switch (ZigClangPreprocessedEntity_getKind(entity)) {5332 switch (entity.getKind()) {
5341 .MacroDefinitionKind => {5333 .MacroDefinitionKind => {
5342 const macro = @ptrCast(*ZigClangMacroDefinitionRecord, entity);5334 const macro = @ptrCast(*clang.MacroDefinitionRecord, entity);
5343 const raw_name = ZigClangMacroDefinitionRecord_getName_getNameStart(macro);5335 const raw_name = macro.getName_getNameStart();
5344 const begin_loc = ZigClangMacroDefinitionRecord_getSourceRange_getBegin(macro);5336 const begin_loc = macro.getSourceRange_getBegin();
53455337
5346 const name = try c.str(raw_name);5338 const name = try c.str(raw_name);
5347 // TODO https://github.com/ziglang/zig/issues/37565339 // TODO https://github.com/ziglang/zig/issues/3756
...@@ -5351,7 +5343,7 @@ fn transPreprocessorEntities(c: *Context, unit: *ZigClangASTUnit) Error!void {...@@ -5351,7 +5343,7 @@ fn transPreprocessorEntities(c: *Context, unit: *ZigClangASTUnit) Error!void {
5351 continue;5343 continue;
5352 }5344 }
53535345
5354 const begin_c = ZigClangSourceManager_getCharacterData(c.source_manager, begin_loc);5346 const begin_c = c.source_manager.getCharacterData(begin_loc);
5355 const slice = begin_c[0..mem.len(begin_c)];5347 const slice = begin_c[0..mem.len(begin_c)];
53565348
5357 var tokenizer = std.c.Tokenizer{5349 var tokenizer = std.c.Tokenizer{
src/zig_clang.h+2-1
...@@ -68,16 +68,17 @@ struct ZigClangExprEvalResult {...@@ -68,16 +68,17 @@ struct ZigClangExprEvalResult {
68 ZigClangAPValue Val;68 ZigClangAPValue Val;
69};69};
7070
71struct ZigClangAbstractConditionalOperator;
71struct ZigClangAPFloat;72struct ZigClangAPFloat;
72struct ZigClangAPInt;73struct ZigClangAPInt;
73struct ZigClangAPSInt;74struct ZigClangAPSInt;
74struct ZigClangAPValue;
75struct ZigClangASTContext;75struct ZigClangASTContext;
76struct ZigClangASTUnit;76struct ZigClangASTUnit;
77struct ZigClangArraySubscriptExpr;77struct ZigClangArraySubscriptExpr;
78struct ZigClangArrayType;78struct ZigClangArrayType;
79struct ZigClangAttributedType;79struct ZigClangAttributedType;
80struct ZigClangBinaryOperator;80struct ZigClangBinaryOperator;
81struct ZigClangBinaryConditionalOperator;
81struct ZigClangBreakStmt;82struct ZigClangBreakStmt;
82struct ZigClangBuiltinType;83struct ZigClangBuiltinType;
83struct ZigClangCStyleCastExpr;84struct ZigClangCStyleCastExpr;