authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-04-21 17:24:58-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-04-25 00:06:54-04:00
log976080462cf62f6f112d38176b99e5bb8a57bf37
tree0172c0811fc360f49e3c0eeacbd58ece78a30764
parent56e07622c692f70eb10836b86c5fda02c53e2394
signature Commit is signed but in an unrecognized format.

translate-c: a little closer to self-hosted implementation


22 files changed, 1467 insertions(+), 366 deletions(-)

CMakeLists.txt+1
...@@ -508,6 +508,7 @@ set(ZIG_STD_FILES...@@ -508,6 +508,7 @@ set(ZIG_STD_FILES
508 "heap.zig"508 "heap.zig"
509 "io.zig"509 "io.zig"
510 "io/seekable_stream.zig"510 "io/seekable_stream.zig"
511 "io/c_out_stream.zig"
511 "json.zig"512 "json.zig"
512 "lazy_init.zig"513 "lazy_init.zig"
513 "linked_list.zig"514 "linked_list.zig"
src-self-hosted/clang.zig created+944
...@@ -0,0 +1,944 @@
1pub const struct_ZigClangAPValue = @OpaqueType();
2pub const struct_ZigClangAPSInt = @OpaqueType();
3pub const struct_ZigClangASTContext = @OpaqueType();
4pub const struct_ZigClangASTUnit = @OpaqueType();
5pub const struct_ZigClangArraySubscriptExpr = @OpaqueType();
6pub const struct_ZigClangArrayType = @OpaqueType();
7pub const struct_ZigClangAttributedType = @OpaqueType();
8pub const struct_ZigClangBinaryOperator = @OpaqueType();
9pub const struct_ZigClangBreakStmt = @OpaqueType();
10pub const struct_ZigClangBuiltinType = @OpaqueType();
11pub const struct_ZigClangCStyleCastExpr = @OpaqueType();
12pub const struct_ZigClangCallExpr = @OpaqueType();
13pub const struct_ZigClangCaseStmt = @OpaqueType();
14pub const struct_ZigClangCompoundAssignOperator = @OpaqueType();
15pub const struct_ZigClangCompoundStmt = @OpaqueType();
16pub const struct_ZigClangConditionalOperator = @OpaqueType();
17pub const struct_ZigClangConstantArrayType = @OpaqueType();
18pub const struct_ZigClangContinueStmt = @OpaqueType();
19pub const struct_ZigClangDecayedType = @OpaqueType();
20pub const struct_ZigClangDecl = @OpaqueType();
21pub const struct_ZigClangDeclRefExpr = @OpaqueType();
22pub const struct_ZigClangDeclStmt = @OpaqueType();
23pub const struct_ZigClangDefaultStmt = @OpaqueType();
24pub const struct_ZigClangDiagnosticOptions = @OpaqueType();
25pub const struct_ZigClangDiagnosticsEngine = @OpaqueType();
26pub const struct_ZigClangDoStmt = @OpaqueType();
27pub const struct_ZigClangElaboratedType = @OpaqueType();
28pub const struct_ZigClangEnumConstantDecl = @OpaqueType();
29pub const struct_ZigClangEnumDecl = @OpaqueType();
30pub const struct_ZigClangEnumType = @OpaqueType();
31pub const struct_ZigClangExpr = @OpaqueType();
32pub const struct_ZigClangFieldDecl = @OpaqueType();
33pub const struct_ZigClangFileID = @OpaqueType();
34pub const struct_ZigClangForStmt = @OpaqueType();
35pub const struct_ZigClangFullSourceLoc = @OpaqueType();
36pub const struct_ZigClangFunctionDecl = @OpaqueType();
37pub const struct_ZigClangFunctionProtoType = @OpaqueType();
38pub const struct_ZigClangIfStmt = @OpaqueType();
39pub const struct_ZigClangImplicitCastExpr = @OpaqueType();
40pub const struct_ZigClangIncompleteArrayType = @OpaqueType();
41pub const struct_ZigClangIntegerLiteral = @OpaqueType();
42pub const struct_ZigClangMacroDefinitionRecord = @OpaqueType();
43pub const struct_ZigClangMemberExpr = @OpaqueType();
44pub const struct_ZigClangNamedDecl = @OpaqueType();
45pub const struct_ZigClangNone = @OpaqueType();
46pub const struct_ZigClangPCHContainerOperations = @OpaqueType();
47pub const struct_ZigClangParenExpr = @OpaqueType();
48pub const struct_ZigClangParenType = @OpaqueType();
49pub const struct_ZigClangParmVarDecl = @OpaqueType();
50pub const struct_ZigClangPointerType = @OpaqueType();
51pub const struct_ZigClangPreprocessedEntity = @OpaqueType();
52pub const struct_ZigClangRecordDecl = @OpaqueType();
53pub const struct_ZigClangRecordType = @OpaqueType();
54pub const struct_ZigClangReturnStmt = @OpaqueType();
55pub const struct_ZigClangSkipFunctionBodiesScope = @OpaqueType();
56pub const struct_ZigClangSourceManager = @OpaqueType();
57pub const struct_ZigClangSourceRange = @OpaqueType();
58pub const struct_ZigClangStmt = @OpaqueType();
59pub const struct_ZigClangStorageClass = @OpaqueType();
60pub const struct_ZigClangStringLiteral = @OpaqueType();
61pub const struct_ZigClangStringRef = @OpaqueType();
62pub const struct_ZigClangSwitchStmt = @OpaqueType();
63pub const struct_ZigClangTagDecl = @OpaqueType();
64pub const struct_ZigClangType = @OpaqueType();
65pub const struct_ZigClangTypedefNameDecl = @OpaqueType();
66pub const struct_ZigClangTypedefType = @OpaqueType();
67pub const struct_ZigClangUnaryExprOrTypeTraitExpr = @OpaqueType();
68pub const struct_ZigClangUnaryOperator = @OpaqueType();
69pub const struct_ZigClangValueDecl = @OpaqueType();
70pub const struct_ZigClangVarDecl = @OpaqueType();
71pub const struct_ZigClangWhileStmt = @OpaqueType();
72pub const ZigClangBO_PtrMemD = enum_ZigClangBO._PtrMemD;
73pub const ZigClangBO_PtrMemI = enum_ZigClangBO._PtrMemI;
74pub const ZigClangBO_Mul = enum_ZigClangBO._Mul;
75pub const ZigClangBO_Div = enum_ZigClangBO._Div;
76pub const ZigClangBO_Rem = enum_ZigClangBO._Rem;
77pub const ZigClangBO_Add = enum_ZigClangBO._Add;
78pub const ZigClangBO_Sub = enum_ZigClangBO._Sub;
79pub const ZigClangBO_Shl = enum_ZigClangBO._Shl;
80pub const ZigClangBO_Shr = enum_ZigClangBO._Shr;
81pub const ZigClangBO_Cmp = enum_ZigClangBO._Cmp;
82pub const ZigClangBO_LT = enum_ZigClangBO._LT;
83pub const ZigClangBO_GT = enum_ZigClangBO._GT;
84pub const ZigClangBO_LE = enum_ZigClangBO._LE;
85pub const ZigClangBO_GE = enum_ZigClangBO._GE;
86pub const ZigClangBO_EQ = enum_ZigClangBO._EQ;
87pub const ZigClangBO_NE = enum_ZigClangBO._NE;
88pub const ZigClangBO_And = enum_ZigClangBO._And;
89pub const ZigClangBO_Xor = enum_ZigClangBO._Xor;
90pub const ZigClangBO_Or = enum_ZigClangBO._Or;
91pub const ZigClangBO_LAnd = enum_ZigClangBO._LAnd;
92pub const ZigClangBO_LOr = enum_ZigClangBO._LOr;
93pub const ZigClangBO_Assign = enum_ZigClangBO._Assign;
94pub const ZigClangBO_MulAssign = enum_ZigClangBO._MulAssign;
95pub const ZigClangBO_DivAssign = enum_ZigClangBO._DivAssign;
96pub const ZigClangBO_RemAssign = enum_ZigClangBO._RemAssign;
97pub const ZigClangBO_AddAssign = enum_ZigClangBO._AddAssign;
98pub const ZigClangBO_SubAssign = enum_ZigClangBO._SubAssign;
99pub const ZigClangBO_ShlAssign = enum_ZigClangBO._ShlAssign;
100pub const ZigClangBO_ShrAssign = enum_ZigClangBO._ShrAssign;
101pub const ZigClangBO_AndAssign = enum_ZigClangBO._AndAssign;
102pub const ZigClangBO_XorAssign = enum_ZigClangBO._XorAssign;
103pub const ZigClangBO_OrAssign = enum_ZigClangBO._OrAssign;
104pub const ZigClangBO_Comma = enum_ZigClangBO._Comma;
105pub const enum_ZigClangBO = extern enum {
106 _PtrMemD,
107 _PtrMemI,
108 _Mul,
109 _Div,
110 _Rem,
111 _Add,
112 _Sub,
113 _Shl,
114 _Shr,
115 _Cmp,
116 _LT,
117 _GT,
118 _LE,
119 _GE,
120 _EQ,
121 _NE,
122 _And,
123 _Xor,
124 _Or,
125 _LAnd,
126 _LOr,
127 _Assign,
128 _MulAssign,
129 _DivAssign,
130 _RemAssign,
131 _AddAssign,
132 _SubAssign,
133 _ShlAssign,
134 _ShrAssign,
135 _AndAssign,
136 _XorAssign,
137 _OrAssign,
138 _Comma,
139};
140pub const ZigClangUO_PostInc = enum_ZigClangUO._PostInc;
141pub const ZigClangUO_PostDec = enum_ZigClangUO._PostDec;
142pub const ZigClangUO_PreInc = enum_ZigClangUO._PreInc;
143pub const ZigClangUO_PreDec = enum_ZigClangUO._PreDec;
144pub const ZigClangUO_AddrOf = enum_ZigClangUO._AddrOf;
145pub const ZigClangUO_Deref = enum_ZigClangUO._Deref;
146pub const ZigClangUO_Plus = enum_ZigClangUO._Plus;
147pub const ZigClangUO_Minus = enum_ZigClangUO._Minus;
148pub const ZigClangUO_Not = enum_ZigClangUO._Not;
149pub const ZigClangUO_LNot = enum_ZigClangUO._LNot;
150pub const ZigClangUO_Real = enum_ZigClangUO._Real;
151pub const ZigClangUO_Imag = enum_ZigClangUO._Imag;
152pub const ZigClangUO_Extension = enum_ZigClangUO._Extension;
153pub const ZigClangUO_Coawait = enum_ZigClangUO._Coawait;
154pub const enum_ZigClangUO = extern enum {
155 _PostInc,
156 _PostDec,
157 _PreInc,
158 _PreDec,
159 _AddrOf,
160 _Deref,
161 _Plus,
162 _Minus,
163 _Not,
164 _LNot,
165 _Real,
166 _Imag,
167 _Extension,
168 _Coawait,
169};
170pub const ZigClangType_Builtin = enum_ZigClangTypeClass.ZigClangType_Builtin;
171pub const ZigClangType_Complex = enum_ZigClangTypeClass.ZigClangType_Complex;
172pub const ZigClangType_Pointer = enum_ZigClangTypeClass.ZigClangType_Pointer;
173pub const ZigClangType_BlockPointer = enum_ZigClangTypeClass.ZigClangType_BlockPointer;
174pub const ZigClangType_LValueReference = enum_ZigClangTypeClass.ZigClangType_LValueReference;
175pub const ZigClangType_RValueReference = enum_ZigClangTypeClass.ZigClangType_RValueReference;
176pub const ZigClangType_MemberPointer = enum_ZigClangTypeClass.ZigClangType_MemberPointer;
177pub const ZigClangType_ConstantArray = enum_ZigClangTypeClass.ZigClangType_ConstantArray;
178pub const ZigClangType_IncompleteArray = enum_ZigClangTypeClass.ZigClangType_IncompleteArray;
179pub const ZigClangType_VariableArray = enum_ZigClangTypeClass.ZigClangType_VariableArray;
180pub const ZigClangType_DependentSizedArray = enum_ZigClangTypeClass.ZigClangType_DependentSizedArray;
181pub const ZigClangType_DependentSizedExtVector = enum_ZigClangTypeClass.ZigClangType_DependentSizedExtVector;
182pub const ZigClangType_DependentAddressSpace = enum_ZigClangTypeClass.ZigClangType_DependentAddressSpace;
183pub const ZigClangType_Vector = enum_ZigClangTypeClass.ZigClangType_Vector;
184pub const ZigClangType_DependentVector = enum_ZigClangTypeClass.ZigClangType_DependentVector;
185pub const ZigClangType_ExtVector = enum_ZigClangTypeClass.ZigClangType_ExtVector;
186pub const ZigClangType_FunctionProto = enum_ZigClangTypeClass.ZigClangType_FunctionProto;
187pub const ZigClangType_FunctionNoProto = enum_ZigClangTypeClass.ZigClangType_FunctionNoProto;
188pub const ZigClangType_UnresolvedUsing = enum_ZigClangTypeClass.ZigClangType_UnresolvedUsing;
189pub const ZigClangType_Paren = enum_ZigClangTypeClass.ZigClangType_Paren;
190pub const ZigClangType_Typedef = enum_ZigClangTypeClass.ZigClangType_Typedef;
191pub const ZigClangType_Adjusted = enum_ZigClangTypeClass.ZigClangType_Adjusted;
192pub const ZigClangType_Decayed = enum_ZigClangTypeClass.ZigClangType_Decayed;
193pub const ZigClangType_TypeOfExpr = enum_ZigClangTypeClass.ZigClangType_TypeOfExpr;
194pub const ZigClangType_TypeOf = enum_ZigClangTypeClass.ZigClangType_TypeOf;
195pub const ZigClangType_Decltype = enum_ZigClangTypeClass.ZigClangType_Decltype;
196pub const ZigClangType_UnaryTransform = enum_ZigClangTypeClass.ZigClangType_UnaryTransform;
197pub const ZigClangType_Record = enum_ZigClangTypeClass.ZigClangType_Record;
198pub const ZigClangType_Enum = enum_ZigClangTypeClass.ZigClangType_Enum;
199pub const ZigClangType_Elaborated = enum_ZigClangTypeClass.ZigClangType_Elaborated;
200pub const ZigClangType_Attributed = enum_ZigClangTypeClass.ZigClangType_Attributed;
201pub const ZigClangType_TemplateTypeParm = enum_ZigClangTypeClass.ZigClangType_TemplateTypeParm;
202pub const ZigClangType_SubstTemplateTypeParm = enum_ZigClangTypeClass.ZigClangType_SubstTemplateTypeParm;
203pub const ZigClangType_SubstTemplateTypeParmPack = enum_ZigClangTypeClass.ZigClangType_SubstTemplateTypeParmPack;
204pub const ZigClangType_TemplateSpecialization = enum_ZigClangTypeClass.ZigClangType_TemplateSpecialization;
205pub const ZigClangType_Auto = enum_ZigClangTypeClass.ZigClangType_Auto;
206pub const ZigClangType_DeducedTemplateSpecialization = enum_ZigClangTypeClass.ZigClangType_DeducedTemplateSpecialization;
207pub const ZigClangType_InjectedClassName = enum_ZigClangTypeClass.ZigClangType_InjectedClassName;
208pub const ZigClangType_DependentName = enum_ZigClangTypeClass.ZigClangType_DependentName;
209pub const ZigClangType_DependentTemplateSpecialization = enum_ZigClangTypeClass.ZigClangType_DependentTemplateSpecialization;
210pub const ZigClangType_PackExpansion = enum_ZigClangTypeClass.ZigClangType_PackExpansion;
211pub const ZigClangType_ObjCTypeParam = enum_ZigClangTypeClass.ZigClangType_ObjCTypeParam;
212pub const ZigClangType_ObjCObject = enum_ZigClangTypeClass.ZigClangType_ObjCObject;
213pub const ZigClangType_ObjCInterface = enum_ZigClangTypeClass.ZigClangType_ObjCInterface;
214pub const ZigClangType_ObjCObjectPointer = enum_ZigClangTypeClass.ZigClangType_ObjCObjectPointer;
215pub const ZigClangType_Pipe = enum_ZigClangTypeClass.ZigClangType_Pipe;
216pub const ZigClangType_Atomic = enum_ZigClangTypeClass.ZigClangType_Atomic;
217pub const enum_ZigClangTypeClass = extern enum {
218 ZigClangType_Builtin,
219 ZigClangType_Complex,
220 ZigClangType_Pointer,
221 ZigClangType_BlockPointer,
222 ZigClangType_LValueReference,
223 ZigClangType_RValueReference,
224 ZigClangType_MemberPointer,
225 ZigClangType_ConstantArray,
226 ZigClangType_IncompleteArray,
227 ZigClangType_VariableArray,
228 ZigClangType_DependentSizedArray,
229 ZigClangType_DependentSizedExtVector,
230 ZigClangType_DependentAddressSpace,
231 ZigClangType_Vector,
232 ZigClangType_DependentVector,
233 ZigClangType_ExtVector,
234 ZigClangType_FunctionProto,
235 ZigClangType_FunctionNoProto,
236 ZigClangType_UnresolvedUsing,
237 ZigClangType_Paren,
238 ZigClangType_Typedef,
239 ZigClangType_Adjusted,
240 ZigClangType_Decayed,
241 ZigClangType_TypeOfExpr,
242 ZigClangType_TypeOf,
243 ZigClangType_Decltype,
244 ZigClangType_UnaryTransform,
245 ZigClangType_Record,
246 ZigClangType_Enum,
247 ZigClangType_Elaborated,
248 ZigClangType_Attributed,
249 ZigClangType_TemplateTypeParm,
250 ZigClangType_SubstTemplateTypeParm,
251 ZigClangType_SubstTemplateTypeParmPack,
252 ZigClangType_TemplateSpecialization,
253 ZigClangType_Auto,
254 ZigClangType_DeducedTemplateSpecialization,
255 ZigClangType_InjectedClassName,
256 ZigClangType_DependentName,
257 ZigClangType_DependentTemplateSpecialization,
258 ZigClangType_PackExpansion,
259 ZigClangType_ObjCTypeParam,
260 ZigClangType_ObjCObject,
261 ZigClangType_ObjCInterface,
262 ZigClangType_ObjCObjectPointer,
263 ZigClangType_Pipe,
264 ZigClangType_Atomic,
265};
266pub const ZigClangStmt_NoStmtClass = enum_ZigClangStmtClass.ZigClangStmt_NoStmtClass;
267pub const ZigClangStmt_GCCAsmStmtClass = enum_ZigClangStmtClass.ZigClangStmt_GCCAsmStmtClass;
268pub const ZigClangStmt_MSAsmStmtClass = enum_ZigClangStmtClass.ZigClangStmt_MSAsmStmtClass;
269pub const ZigClangStmt_AttributedStmtClass = enum_ZigClangStmtClass.ZigClangStmt_AttributedStmtClass;
270pub const ZigClangStmt_BreakStmtClass = enum_ZigClangStmtClass.ZigClangStmt_BreakStmtClass;
271pub const ZigClangStmt_CXXCatchStmtClass = enum_ZigClangStmtClass.ZigClangStmt_CXXCatchStmtClass;
272pub const ZigClangStmt_CXXForRangeStmtClass = enum_ZigClangStmtClass.ZigClangStmt_CXXForRangeStmtClass;
273pub const ZigClangStmt_CXXTryStmtClass = enum_ZigClangStmtClass.ZigClangStmt_CXXTryStmtClass;
274pub const ZigClangStmt_CapturedStmtClass = enum_ZigClangStmtClass.ZigClangStmt_CapturedStmtClass;
275pub const ZigClangStmt_CompoundStmtClass = enum_ZigClangStmtClass.ZigClangStmt_CompoundStmtClass;
276pub const ZigClangStmt_ContinueStmtClass = enum_ZigClangStmtClass.ZigClangStmt_ContinueStmtClass;
277pub const ZigClangStmt_CoreturnStmtClass = enum_ZigClangStmtClass.ZigClangStmt_CoreturnStmtClass;
278pub const ZigClangStmt_CoroutineBodyStmtClass = enum_ZigClangStmtClass.ZigClangStmt_CoroutineBodyStmtClass;
279pub const ZigClangStmt_DeclStmtClass = enum_ZigClangStmtClass.ZigClangStmt_DeclStmtClass;
280pub const ZigClangStmt_DoStmtClass = enum_ZigClangStmtClass.ZigClangStmt_DoStmtClass;
281pub const ZigClangStmt_BinaryConditionalOperatorClass = enum_ZigClangStmtClass.ZigClangStmt_BinaryConditionalOperatorClass;
282pub const ZigClangStmt_ConditionalOperatorClass = enum_ZigClangStmtClass.ZigClangStmt_ConditionalOperatorClass;
283pub const ZigClangStmt_AddrLabelExprClass = enum_ZigClangStmtClass.ZigClangStmt_AddrLabelExprClass;
284pub const ZigClangStmt_ArrayInitIndexExprClass = enum_ZigClangStmtClass.ZigClangStmt_ArrayInitIndexExprClass;
285pub const ZigClangStmt_ArrayInitLoopExprClass = enum_ZigClangStmtClass.ZigClangStmt_ArrayInitLoopExprClass;
286pub const ZigClangStmt_ArraySubscriptExprClass = enum_ZigClangStmtClass.ZigClangStmt_ArraySubscriptExprClass;
287pub const ZigClangStmt_ArrayTypeTraitExprClass = enum_ZigClangStmtClass.ZigClangStmt_ArrayTypeTraitExprClass;
288pub const ZigClangStmt_AsTypeExprClass = enum_ZigClangStmtClass.ZigClangStmt_AsTypeExprClass;
289pub const ZigClangStmt_AtomicExprClass = enum_ZigClangStmtClass.ZigClangStmt_AtomicExprClass;
290pub const ZigClangStmt_BinaryOperatorClass = enum_ZigClangStmtClass.ZigClangStmt_BinaryOperatorClass;
291pub const ZigClangStmt_CompoundAssignOperatorClass = enum_ZigClangStmtClass.ZigClangStmt_CompoundAssignOperatorClass;
292pub const ZigClangStmt_BlockExprClass = enum_ZigClangStmtClass.ZigClangStmt_BlockExprClass;
293pub const ZigClangStmt_CXXBindTemporaryExprClass = enum_ZigClangStmtClass.ZigClangStmt_CXXBindTemporaryExprClass;
294pub const ZigClangStmt_CXXBoolLiteralExprClass = enum_ZigClangStmtClass.ZigClangStmt_CXXBoolLiteralExprClass;
295pub const ZigClangStmt_CXXConstructExprClass = enum_ZigClangStmtClass.ZigClangStmt_CXXConstructExprClass;
296pub const ZigClangStmt_CXXTemporaryObjectExprClass = enum_ZigClangStmtClass.ZigClangStmt_CXXTemporaryObjectExprClass;
297pub const ZigClangStmt_CXXDefaultArgExprClass = enum_ZigClangStmtClass.ZigClangStmt_CXXDefaultArgExprClass;
298pub const ZigClangStmt_CXXDefaultInitExprClass = enum_ZigClangStmtClass.ZigClangStmt_CXXDefaultInitExprClass;
299pub const ZigClangStmt_CXXDeleteExprClass = enum_ZigClangStmtClass.ZigClangStmt_CXXDeleteExprClass;
300pub const ZigClangStmt_CXXDependentScopeMemberExprClass = enum_ZigClangStmtClass.ZigClangStmt_CXXDependentScopeMemberExprClass;
301pub const ZigClangStmt_CXXFoldExprClass = enum_ZigClangStmtClass.ZigClangStmt_CXXFoldExprClass;
302pub const ZigClangStmt_CXXInheritedCtorInitExprClass = enum_ZigClangStmtClass.ZigClangStmt_CXXInheritedCtorInitExprClass;
303pub const ZigClangStmt_CXXNewExprClass = enum_ZigClangStmtClass.ZigClangStmt_CXXNewExprClass;
304pub const ZigClangStmt_CXXNoexceptExprClass = enum_ZigClangStmtClass.ZigClangStmt_CXXNoexceptExprClass;
305pub const ZigClangStmt_CXXNullPtrLiteralExprClass = enum_ZigClangStmtClass.ZigClangStmt_CXXNullPtrLiteralExprClass;
306pub const ZigClangStmt_CXXPseudoDestructorExprClass = enum_ZigClangStmtClass.ZigClangStmt_CXXPseudoDestructorExprClass;
307pub const ZigClangStmt_CXXScalarValueInitExprClass = enum_ZigClangStmtClass.ZigClangStmt_CXXScalarValueInitExprClass;
308pub const ZigClangStmt_CXXStdInitializerListExprClass = enum_ZigClangStmtClass.ZigClangStmt_CXXStdInitializerListExprClass;
309pub const ZigClangStmt_CXXThisExprClass = enum_ZigClangStmtClass.ZigClangStmt_CXXThisExprClass;
310pub const ZigClangStmt_CXXThrowExprClass = enum_ZigClangStmtClass.ZigClangStmt_CXXThrowExprClass;
311pub const ZigClangStmt_CXXTypeidExprClass = enum_ZigClangStmtClass.ZigClangStmt_CXXTypeidExprClass;
312pub const ZigClangStmt_CXXUnresolvedConstructExprClass = enum_ZigClangStmtClass.ZigClangStmt_CXXUnresolvedConstructExprClass;
313pub const ZigClangStmt_CXXUuidofExprClass = enum_ZigClangStmtClass.ZigClangStmt_CXXUuidofExprClass;
314pub const ZigClangStmt_CallExprClass = enum_ZigClangStmtClass.ZigClangStmt_CallExprClass;
315pub const ZigClangStmt_CUDAKernelCallExprClass = enum_ZigClangStmtClass.ZigClangStmt_CUDAKernelCallExprClass;
316pub const ZigClangStmt_CXXMemberCallExprClass = enum_ZigClangStmtClass.ZigClangStmt_CXXMemberCallExprClass;
317pub const ZigClangStmt_CXXOperatorCallExprClass = enum_ZigClangStmtClass.ZigClangStmt_CXXOperatorCallExprClass;
318pub const ZigClangStmt_UserDefinedLiteralClass = enum_ZigClangStmtClass.ZigClangStmt_UserDefinedLiteralClass;
319pub const ZigClangStmt_CStyleCastExprClass = enum_ZigClangStmtClass.ZigClangStmt_CStyleCastExprClass;
320pub const ZigClangStmt_CXXFunctionalCastExprClass = enum_ZigClangStmtClass.ZigClangStmt_CXXFunctionalCastExprClass;
321pub const ZigClangStmt_CXXConstCastExprClass = enum_ZigClangStmtClass.ZigClangStmt_CXXConstCastExprClass;
322pub const ZigClangStmt_CXXDynamicCastExprClass = enum_ZigClangStmtClass.ZigClangStmt_CXXDynamicCastExprClass;
323pub const ZigClangStmt_CXXReinterpretCastExprClass = enum_ZigClangStmtClass.ZigClangStmt_CXXReinterpretCastExprClass;
324pub const ZigClangStmt_CXXStaticCastExprClass = enum_ZigClangStmtClass.ZigClangStmt_CXXStaticCastExprClass;
325pub const ZigClangStmt_ObjCBridgedCastExprClass = enum_ZigClangStmtClass.ZigClangStmt_ObjCBridgedCastExprClass;
326pub const ZigClangStmt_ImplicitCastExprClass = enum_ZigClangStmtClass.ZigClangStmt_ImplicitCastExprClass;
327pub const ZigClangStmt_CharacterLiteralClass = enum_ZigClangStmtClass.ZigClangStmt_CharacterLiteralClass;
328pub const ZigClangStmt_ChooseExprClass = enum_ZigClangStmtClass.ZigClangStmt_ChooseExprClass;
329pub const ZigClangStmt_CompoundLiteralExprClass = enum_ZigClangStmtClass.ZigClangStmt_CompoundLiteralExprClass;
330pub const ZigClangStmt_ConvertVectorExprClass = enum_ZigClangStmtClass.ZigClangStmt_ConvertVectorExprClass;
331pub const ZigClangStmt_CoawaitExprClass = enum_ZigClangStmtClass.ZigClangStmt_CoawaitExprClass;
332pub const ZigClangStmt_CoyieldExprClass = enum_ZigClangStmtClass.ZigClangStmt_CoyieldExprClass;
333pub const ZigClangStmt_DeclRefExprClass = enum_ZigClangStmtClass.ZigClangStmt_DeclRefExprClass;
334pub const ZigClangStmt_DependentCoawaitExprClass = enum_ZigClangStmtClass.ZigClangStmt_DependentCoawaitExprClass;
335pub const ZigClangStmt_DependentScopeDeclRefExprClass = enum_ZigClangStmtClass.ZigClangStmt_DependentScopeDeclRefExprClass;
336pub const ZigClangStmt_DesignatedInitExprClass = enum_ZigClangStmtClass.ZigClangStmt_DesignatedInitExprClass;
337pub const ZigClangStmt_DesignatedInitUpdateExprClass = enum_ZigClangStmtClass.ZigClangStmt_DesignatedInitUpdateExprClass;
338pub const ZigClangStmt_ExpressionTraitExprClass = enum_ZigClangStmtClass.ZigClangStmt_ExpressionTraitExprClass;
339pub const ZigClangStmt_ExtVectorElementExprClass = enum_ZigClangStmtClass.ZigClangStmt_ExtVectorElementExprClass;
340pub const ZigClangStmt_FixedPointLiteralClass = enum_ZigClangStmtClass.ZigClangStmt_FixedPointLiteralClass;
341pub const ZigClangStmt_FloatingLiteralClass = enum_ZigClangStmtClass.ZigClangStmt_FloatingLiteralClass;
342pub const ZigClangStmt_ConstantExprClass = enum_ZigClangStmtClass.ZigClangStmt_ConstantExprClass;
343pub const ZigClangStmt_ExprWithCleanupsClass = enum_ZigClangStmtClass.ZigClangStmt_ExprWithCleanupsClass;
344pub const ZigClangStmt_FunctionParmPackExprClass = enum_ZigClangStmtClass.ZigClangStmt_FunctionParmPackExprClass;
345pub const ZigClangStmt_GNUNullExprClass = enum_ZigClangStmtClass.ZigClangStmt_GNUNullExprClass;
346pub const ZigClangStmt_GenericSelectionExprClass = enum_ZigClangStmtClass.ZigClangStmt_GenericSelectionExprClass;
347pub const ZigClangStmt_ImaginaryLiteralClass = enum_ZigClangStmtClass.ZigClangStmt_ImaginaryLiteralClass;
348pub const ZigClangStmt_ImplicitValueInitExprClass = enum_ZigClangStmtClass.ZigClangStmt_ImplicitValueInitExprClass;
349pub const ZigClangStmt_InitListExprClass = enum_ZigClangStmtClass.ZigClangStmt_InitListExprClass;
350pub const ZigClangStmt_IntegerLiteralClass = enum_ZigClangStmtClass.ZigClangStmt_IntegerLiteralClass;
351pub const ZigClangStmt_LambdaExprClass = enum_ZigClangStmtClass.ZigClangStmt_LambdaExprClass;
352pub const ZigClangStmt_MSPropertyRefExprClass = enum_ZigClangStmtClass.ZigClangStmt_MSPropertyRefExprClass;
353pub const ZigClangStmt_MSPropertySubscriptExprClass = enum_ZigClangStmtClass.ZigClangStmt_MSPropertySubscriptExprClass;
354pub const ZigClangStmt_MaterializeTemporaryExprClass = enum_ZigClangStmtClass.ZigClangStmt_MaterializeTemporaryExprClass;
355pub const ZigClangStmt_MemberExprClass = enum_ZigClangStmtClass.ZigClangStmt_MemberExprClass;
356pub const ZigClangStmt_NoInitExprClass = enum_ZigClangStmtClass.ZigClangStmt_NoInitExprClass;
357pub const ZigClangStmt_OMPArraySectionExprClass = enum_ZigClangStmtClass.ZigClangStmt_OMPArraySectionExprClass;
358pub const ZigClangStmt_ObjCArrayLiteralClass = enum_ZigClangStmtClass.ZigClangStmt_ObjCArrayLiteralClass;
359pub const ZigClangStmt_ObjCAvailabilityCheckExprClass = enum_ZigClangStmtClass.ZigClangStmt_ObjCAvailabilityCheckExprClass;
360pub const ZigClangStmt_ObjCBoolLiteralExprClass = enum_ZigClangStmtClass.ZigClangStmt_ObjCBoolLiteralExprClass;
361pub const ZigClangStmt_ObjCBoxedExprClass = enum_ZigClangStmtClass.ZigClangStmt_ObjCBoxedExprClass;
362pub const ZigClangStmt_ObjCDictionaryLiteralClass = enum_ZigClangStmtClass.ZigClangStmt_ObjCDictionaryLiteralClass;
363pub const ZigClangStmt_ObjCEncodeExprClass = enum_ZigClangStmtClass.ZigClangStmt_ObjCEncodeExprClass;
364pub const ZigClangStmt_ObjCIndirectCopyRestoreExprClass = enum_ZigClangStmtClass.ZigClangStmt_ObjCIndirectCopyRestoreExprClass;
365pub const ZigClangStmt_ObjCIsaExprClass = enum_ZigClangStmtClass.ZigClangStmt_ObjCIsaExprClass;
366pub const ZigClangStmt_ObjCIvarRefExprClass = enum_ZigClangStmtClass.ZigClangStmt_ObjCIvarRefExprClass;
367pub const ZigClangStmt_ObjCMessageExprClass = enum_ZigClangStmtClass.ZigClangStmt_ObjCMessageExprClass;
368pub const ZigClangStmt_ObjCPropertyRefExprClass = enum_ZigClangStmtClass.ZigClangStmt_ObjCPropertyRefExprClass;
369pub const ZigClangStmt_ObjCProtocolExprClass = enum_ZigClangStmtClass.ZigClangStmt_ObjCProtocolExprClass;
370pub const ZigClangStmt_ObjCSelectorExprClass = enum_ZigClangStmtClass.ZigClangStmt_ObjCSelectorExprClass;
371pub const ZigClangStmt_ObjCStringLiteralClass = enum_ZigClangStmtClass.ZigClangStmt_ObjCStringLiteralClass;
372pub const ZigClangStmt_ObjCSubscriptRefExprClass = enum_ZigClangStmtClass.ZigClangStmt_ObjCSubscriptRefExprClass;
373pub const ZigClangStmt_OffsetOfExprClass = enum_ZigClangStmtClass.ZigClangStmt_OffsetOfExprClass;
374pub const ZigClangStmt_OpaqueValueExprClass = enum_ZigClangStmtClass.ZigClangStmt_OpaqueValueExprClass;
375pub const ZigClangStmt_UnresolvedLookupExprClass = enum_ZigClangStmtClass.ZigClangStmt_UnresolvedLookupExprClass;
376pub const ZigClangStmt_UnresolvedMemberExprClass = enum_ZigClangStmtClass.ZigClangStmt_UnresolvedMemberExprClass;
377pub const ZigClangStmt_PackExpansionExprClass = enum_ZigClangStmtClass.ZigClangStmt_PackExpansionExprClass;
378pub const ZigClangStmt_ParenExprClass = enum_ZigClangStmtClass.ZigClangStmt_ParenExprClass;
379pub const ZigClangStmt_ParenListExprClass = enum_ZigClangStmtClass.ZigClangStmt_ParenListExprClass;
380pub const ZigClangStmt_PredefinedExprClass = enum_ZigClangStmtClass.ZigClangStmt_PredefinedExprClass;
381pub const ZigClangStmt_PseudoObjectExprClass = enum_ZigClangStmtClass.ZigClangStmt_PseudoObjectExprClass;
382pub const ZigClangStmt_ShuffleVectorExprClass = enum_ZigClangStmtClass.ZigClangStmt_ShuffleVectorExprClass;
383pub const ZigClangStmt_SizeOfPackExprClass = enum_ZigClangStmtClass.ZigClangStmt_SizeOfPackExprClass;
384pub const ZigClangStmt_StmtExprClass = enum_ZigClangStmtClass.ZigClangStmt_StmtExprClass;
385pub const ZigClangStmt_StringLiteralClass = enum_ZigClangStmtClass.ZigClangStmt_StringLiteralClass;
386pub const ZigClangStmt_SubstNonTypeTemplateParmExprClass = enum_ZigClangStmtClass.ZigClangStmt_SubstNonTypeTemplateParmExprClass;
387pub const ZigClangStmt_SubstNonTypeTemplateParmPackExprClass = enum_ZigClangStmtClass.ZigClangStmt_SubstNonTypeTemplateParmPackExprClass;
388pub const ZigClangStmt_TypeTraitExprClass = enum_ZigClangStmtClass.ZigClangStmt_TypeTraitExprClass;
389pub const ZigClangStmt_TypoExprClass = enum_ZigClangStmtClass.ZigClangStmt_TypoExprClass;
390pub const ZigClangStmt_UnaryExprOrTypeTraitExprClass = enum_ZigClangStmtClass.ZigClangStmt_UnaryExprOrTypeTraitExprClass;
391pub const ZigClangStmt_UnaryOperatorClass = enum_ZigClangStmtClass.ZigClangStmt_UnaryOperatorClass;
392pub const ZigClangStmt_VAArgExprClass = enum_ZigClangStmtClass.ZigClangStmt_VAArgExprClass;
393pub const ZigClangStmt_ForStmtClass = enum_ZigClangStmtClass.ZigClangStmt_ForStmtClass;
394pub const ZigClangStmt_GotoStmtClass = enum_ZigClangStmtClass.ZigClangStmt_GotoStmtClass;
395pub const ZigClangStmt_IfStmtClass = enum_ZigClangStmtClass.ZigClangStmt_IfStmtClass;
396pub const ZigClangStmt_IndirectGotoStmtClass = enum_ZigClangStmtClass.ZigClangStmt_IndirectGotoStmtClass;
397pub const ZigClangStmt_LabelStmtClass = enum_ZigClangStmtClass.ZigClangStmt_LabelStmtClass;
398pub const ZigClangStmt_MSDependentExistsStmtClass = enum_ZigClangStmtClass.ZigClangStmt_MSDependentExistsStmtClass;
399pub const ZigClangStmt_NullStmtClass = enum_ZigClangStmtClass.ZigClangStmt_NullStmtClass;
400pub const ZigClangStmt_OMPAtomicDirectiveClass = enum_ZigClangStmtClass.ZigClangStmt_OMPAtomicDirectiveClass;
401pub const ZigClangStmt_OMPBarrierDirectiveClass = enum_ZigClangStmtClass.ZigClangStmt_OMPBarrierDirectiveClass;
402pub const ZigClangStmt_OMPCancelDirectiveClass = enum_ZigClangStmtClass.ZigClangStmt_OMPCancelDirectiveClass;
403pub const ZigClangStmt_OMPCancellationPointDirectiveClass = enum_ZigClangStmtClass.ZigClangStmt_OMPCancellationPointDirectiveClass;
404pub const ZigClangStmt_OMPCriticalDirectiveClass = enum_ZigClangStmtClass.ZigClangStmt_OMPCriticalDirectiveClass;
405pub const ZigClangStmt_OMPFlushDirectiveClass = enum_ZigClangStmtClass.ZigClangStmt_OMPFlushDirectiveClass;
406pub const ZigClangStmt_OMPDistributeDirectiveClass = enum_ZigClangStmtClass.ZigClangStmt_OMPDistributeDirectiveClass;
407pub const ZigClangStmt_OMPDistributeParallelForDirectiveClass = enum_ZigClangStmtClass.ZigClangStmt_OMPDistributeParallelForDirectiveClass;
408pub const ZigClangStmt_OMPDistributeParallelForSimdDirectiveClass = enum_ZigClangStmtClass.ZigClangStmt_OMPDistributeParallelForSimdDirectiveClass;
409pub const ZigClangStmt_OMPDistributeSimdDirectiveClass = enum_ZigClangStmtClass.ZigClangStmt_OMPDistributeSimdDirectiveClass;
410pub const ZigClangStmt_OMPForDirectiveClass = enum_ZigClangStmtClass.ZigClangStmt_OMPForDirectiveClass;
411pub const ZigClangStmt_OMPForSimdDirectiveClass = enum_ZigClangStmtClass.ZigClangStmt_OMPForSimdDirectiveClass;
412pub const ZigClangStmt_OMPParallelForDirectiveClass = enum_ZigClangStmtClass.ZigClangStmt_OMPParallelForDirectiveClass;
413pub const ZigClangStmt_OMPParallelForSimdDirectiveClass = enum_ZigClangStmtClass.ZigClangStmt_OMPParallelForSimdDirectiveClass;
414pub const ZigClangStmt_OMPSimdDirectiveClass = enum_ZigClangStmtClass.ZigClangStmt_OMPSimdDirectiveClass;
415pub const ZigClangStmt_OMPTargetParallelForSimdDirectiveClass = enum_ZigClangStmtClass.ZigClangStmt_OMPTargetParallelForSimdDirectiveClass;
416pub const ZigClangStmt_OMPTargetSimdDirectiveClass = enum_ZigClangStmtClass.ZigClangStmt_OMPTargetSimdDirectiveClass;
417pub const ZigClangStmt_OMPTargetTeamsDistributeDirectiveClass = enum_ZigClangStmtClass.ZigClangStmt_OMPTargetTeamsDistributeDirectiveClass;
418pub const ZigClangStmt_OMPTargetTeamsDistributeParallelForDirectiveClass = enum_ZigClangStmtClass.ZigClangStmt_OMPTargetTeamsDistributeParallelForDirectiveClass;
419pub const ZigClangStmt_OMPTargetTeamsDistributeParallelForSimdDirectiveClass = enum_ZigClangStmtClass.ZigClangStmt_OMPTargetTeamsDistributeParallelForSimdDirectiveClass;
420pub const ZigClangStmt_OMPTargetTeamsDistributeSimdDirectiveClass = enum_ZigClangStmtClass.ZigClangStmt_OMPTargetTeamsDistributeSimdDirectiveClass;
421pub const ZigClangStmt_OMPTaskLoopDirectiveClass = enum_ZigClangStmtClass.ZigClangStmt_OMPTaskLoopDirectiveClass;
422pub const ZigClangStmt_OMPTaskLoopSimdDirectiveClass = enum_ZigClangStmtClass.ZigClangStmt_OMPTaskLoopSimdDirectiveClass;
423pub const ZigClangStmt_OMPTeamsDistributeDirectiveClass = enum_ZigClangStmtClass.ZigClangStmt_OMPTeamsDistributeDirectiveClass;
424pub const ZigClangStmt_OMPTeamsDistributeParallelForDirectiveClass = enum_ZigClangStmtClass.ZigClangStmt_OMPTeamsDistributeParallelForDirectiveClass;
425pub const ZigClangStmt_OMPTeamsDistributeParallelForSimdDirectiveClass = enum_ZigClangStmtClass.ZigClangStmt_OMPTeamsDistributeParallelForSimdDirectiveClass;
426pub const ZigClangStmt_OMPTeamsDistributeSimdDirectiveClass = enum_ZigClangStmtClass.ZigClangStmt_OMPTeamsDistributeSimdDirectiveClass;
427pub const ZigClangStmt_OMPMasterDirectiveClass = enum_ZigClangStmtClass.ZigClangStmt_OMPMasterDirectiveClass;
428pub const ZigClangStmt_OMPOrderedDirectiveClass = enum_ZigClangStmtClass.ZigClangStmt_OMPOrderedDirectiveClass;
429pub const ZigClangStmt_OMPParallelDirectiveClass = enum_ZigClangStmtClass.ZigClangStmt_OMPParallelDirectiveClass;
430pub const ZigClangStmt_OMPParallelSectionsDirectiveClass = enum_ZigClangStmtClass.ZigClangStmt_OMPParallelSectionsDirectiveClass;
431pub const ZigClangStmt_OMPSectionDirectiveClass = enum_ZigClangStmtClass.ZigClangStmt_OMPSectionDirectiveClass;
432pub const ZigClangStmt_OMPSectionsDirectiveClass = enum_ZigClangStmtClass.ZigClangStmt_OMPSectionsDirectiveClass;
433pub const ZigClangStmt_OMPSingleDirectiveClass = enum_ZigClangStmtClass.ZigClangStmt_OMPSingleDirectiveClass;
434pub const ZigClangStmt_OMPTargetDataDirectiveClass = enum_ZigClangStmtClass.ZigClangStmt_OMPTargetDataDirectiveClass;
435pub const ZigClangStmt_OMPTargetDirectiveClass = enum_ZigClangStmtClass.ZigClangStmt_OMPTargetDirectiveClass;
436pub const ZigClangStmt_OMPTargetEnterDataDirectiveClass = enum_ZigClangStmtClass.ZigClangStmt_OMPTargetEnterDataDirectiveClass;
437pub const ZigClangStmt_OMPTargetExitDataDirectiveClass = enum_ZigClangStmtClass.ZigClangStmt_OMPTargetExitDataDirectiveClass;
438pub const ZigClangStmt_OMPTargetParallelDirectiveClass = enum_ZigClangStmtClass.ZigClangStmt_OMPTargetParallelDirectiveClass;
439pub const ZigClangStmt_OMPTargetParallelForDirectiveClass = enum_ZigClangStmtClass.ZigClangStmt_OMPTargetParallelForDirectiveClass;
440pub const ZigClangStmt_OMPTargetTeamsDirectiveClass = enum_ZigClangStmtClass.ZigClangStmt_OMPTargetTeamsDirectiveClass;
441pub const ZigClangStmt_OMPTargetUpdateDirectiveClass = enum_ZigClangStmtClass.ZigClangStmt_OMPTargetUpdateDirectiveClass;
442pub const ZigClangStmt_OMPTaskDirectiveClass = enum_ZigClangStmtClass.ZigClangStmt_OMPTaskDirectiveClass;
443pub const ZigClangStmt_OMPTaskgroupDirectiveClass = enum_ZigClangStmtClass.ZigClangStmt_OMPTaskgroupDirectiveClass;
444pub const ZigClangStmt_OMPTaskwaitDirectiveClass = enum_ZigClangStmtClass.ZigClangStmt_OMPTaskwaitDirectiveClass;
445pub const ZigClangStmt_OMPTaskyieldDirectiveClass = enum_ZigClangStmtClass.ZigClangStmt_OMPTaskyieldDirectiveClass;
446pub const ZigClangStmt_OMPTeamsDirectiveClass = enum_ZigClangStmtClass.ZigClangStmt_OMPTeamsDirectiveClass;
447pub const ZigClangStmt_ObjCAtCatchStmtClass = enum_ZigClangStmtClass.ZigClangStmt_ObjCAtCatchStmtClass;
448pub const ZigClangStmt_ObjCAtFinallyStmtClass = enum_ZigClangStmtClass.ZigClangStmt_ObjCAtFinallyStmtClass;
449pub const ZigClangStmt_ObjCAtSynchronizedStmtClass = enum_ZigClangStmtClass.ZigClangStmt_ObjCAtSynchronizedStmtClass;
450pub const ZigClangStmt_ObjCAtThrowStmtClass = enum_ZigClangStmtClass.ZigClangStmt_ObjCAtThrowStmtClass;
451pub const ZigClangStmt_ObjCAtTryStmtClass = enum_ZigClangStmtClass.ZigClangStmt_ObjCAtTryStmtClass;
452pub const ZigClangStmt_ObjCAutoreleasePoolStmtClass = enum_ZigClangStmtClass.ZigClangStmt_ObjCAutoreleasePoolStmtClass;
453pub const ZigClangStmt_ObjCForCollectionStmtClass = enum_ZigClangStmtClass.ZigClangStmt_ObjCForCollectionStmtClass;
454pub const ZigClangStmt_ReturnStmtClass = enum_ZigClangStmtClass.ZigClangStmt_ReturnStmtClass;
455pub const ZigClangStmt_SEHExceptStmtClass = enum_ZigClangStmtClass.ZigClangStmt_SEHExceptStmtClass;
456pub const ZigClangStmt_SEHFinallyStmtClass = enum_ZigClangStmtClass.ZigClangStmt_SEHFinallyStmtClass;
457pub const ZigClangStmt_SEHLeaveStmtClass = enum_ZigClangStmtClass.ZigClangStmt_SEHLeaveStmtClass;
458pub const ZigClangStmt_SEHTryStmtClass = enum_ZigClangStmtClass.ZigClangStmt_SEHTryStmtClass;
459pub const ZigClangStmt_CaseStmtClass = enum_ZigClangStmtClass.ZigClangStmt_CaseStmtClass;
460pub const ZigClangStmt_DefaultStmtClass = enum_ZigClangStmtClass.ZigClangStmt_DefaultStmtClass;
461pub const ZigClangStmt_SwitchStmtClass = enum_ZigClangStmtClass.ZigClangStmt_SwitchStmtClass;
462pub const ZigClangStmt_WhileStmtClass = enum_ZigClangStmtClass.ZigClangStmt_WhileStmtClass;
463pub const enum_ZigClangStmtClass = extern enum {
464 ZigClangStmt_NoStmtClass = 0,
465 ZigClangStmt_GCCAsmStmtClass = 1,
466 ZigClangStmt_MSAsmStmtClass = 2,
467 ZigClangStmt_AttributedStmtClass = 3,
468 ZigClangStmt_BreakStmtClass = 4,
469 ZigClangStmt_CXXCatchStmtClass = 5,
470 ZigClangStmt_CXXForRangeStmtClass = 6,
471 ZigClangStmt_CXXTryStmtClass = 7,
472 ZigClangStmt_CapturedStmtClass = 8,
473 ZigClangStmt_CompoundStmtClass = 9,
474 ZigClangStmt_ContinueStmtClass = 10,
475 ZigClangStmt_CoreturnStmtClass = 11,
476 ZigClangStmt_CoroutineBodyStmtClass = 12,
477 ZigClangStmt_DeclStmtClass = 13,
478 ZigClangStmt_DoStmtClass = 14,
479 ZigClangStmt_BinaryConditionalOperatorClass = 15,
480 ZigClangStmt_ConditionalOperatorClass = 16,
481 ZigClangStmt_AddrLabelExprClass = 17,
482 ZigClangStmt_ArrayInitIndexExprClass = 18,
483 ZigClangStmt_ArrayInitLoopExprClass = 19,
484 ZigClangStmt_ArraySubscriptExprClass = 20,
485 ZigClangStmt_ArrayTypeTraitExprClass = 21,
486 ZigClangStmt_AsTypeExprClass = 22,
487 ZigClangStmt_AtomicExprClass = 23,
488 ZigClangStmt_BinaryOperatorClass = 24,
489 ZigClangStmt_CompoundAssignOperatorClass = 25,
490 ZigClangStmt_BlockExprClass = 26,
491 ZigClangStmt_CXXBindTemporaryExprClass = 27,
492 ZigClangStmt_CXXBoolLiteralExprClass = 28,
493 ZigClangStmt_CXXConstructExprClass = 29,
494 ZigClangStmt_CXXTemporaryObjectExprClass = 30,
495 ZigClangStmt_CXXDefaultArgExprClass = 31,
496 ZigClangStmt_CXXDefaultInitExprClass = 32,
497 ZigClangStmt_CXXDeleteExprClass = 33,
498 ZigClangStmt_CXXDependentScopeMemberExprClass = 34,
499 ZigClangStmt_CXXFoldExprClass = 35,
500 ZigClangStmt_CXXInheritedCtorInitExprClass = 36,
501 ZigClangStmt_CXXNewExprClass = 37,
502 ZigClangStmt_CXXNoexceptExprClass = 38,
503 ZigClangStmt_CXXNullPtrLiteralExprClass = 39,
504 ZigClangStmt_CXXPseudoDestructorExprClass = 40,
505 ZigClangStmt_CXXScalarValueInitExprClass = 41,
506 ZigClangStmt_CXXStdInitializerListExprClass = 42,
507 ZigClangStmt_CXXThisExprClass = 43,
508 ZigClangStmt_CXXThrowExprClass = 44,
509 ZigClangStmt_CXXTypeidExprClass = 45,
510 ZigClangStmt_CXXUnresolvedConstructExprClass = 46,
511 ZigClangStmt_CXXUuidofExprClass = 47,
512 ZigClangStmt_CallExprClass = 48,
513 ZigClangStmt_CUDAKernelCallExprClass = 49,
514 ZigClangStmt_CXXMemberCallExprClass = 50,
515 ZigClangStmt_CXXOperatorCallExprClass = 51,
516 ZigClangStmt_UserDefinedLiteralClass = 52,
517 ZigClangStmt_CStyleCastExprClass = 53,
518 ZigClangStmt_CXXFunctionalCastExprClass = 54,
519 ZigClangStmt_CXXConstCastExprClass = 55,
520 ZigClangStmt_CXXDynamicCastExprClass = 56,
521 ZigClangStmt_CXXReinterpretCastExprClass = 57,
522 ZigClangStmt_CXXStaticCastExprClass = 58,
523 ZigClangStmt_ObjCBridgedCastExprClass = 59,
524 ZigClangStmt_ImplicitCastExprClass = 60,
525 ZigClangStmt_CharacterLiteralClass = 61,
526 ZigClangStmt_ChooseExprClass = 62,
527 ZigClangStmt_CompoundLiteralExprClass = 63,
528 ZigClangStmt_ConvertVectorExprClass = 64,
529 ZigClangStmt_CoawaitExprClass = 65,
530 ZigClangStmt_CoyieldExprClass = 66,
531 ZigClangStmt_DeclRefExprClass = 67,
532 ZigClangStmt_DependentCoawaitExprClass = 68,
533 ZigClangStmt_DependentScopeDeclRefExprClass = 69,
534 ZigClangStmt_DesignatedInitExprClass = 70,
535 ZigClangStmt_DesignatedInitUpdateExprClass = 71,
536 ZigClangStmt_ExpressionTraitExprClass = 72,
537 ZigClangStmt_ExtVectorElementExprClass = 73,
538 ZigClangStmt_FixedPointLiteralClass = 74,
539 ZigClangStmt_FloatingLiteralClass = 75,
540 ZigClangStmt_ConstantExprClass = 76,
541 ZigClangStmt_ExprWithCleanupsClass = 77,
542 ZigClangStmt_FunctionParmPackExprClass = 78,
543 ZigClangStmt_GNUNullExprClass = 79,
544 ZigClangStmt_GenericSelectionExprClass = 80,
545 ZigClangStmt_ImaginaryLiteralClass = 81,
546 ZigClangStmt_ImplicitValueInitExprClass = 82,
547 ZigClangStmt_InitListExprClass = 83,
548 ZigClangStmt_IntegerLiteralClass = 84,
549 ZigClangStmt_LambdaExprClass = 85,
550 ZigClangStmt_MSPropertyRefExprClass = 86,
551 ZigClangStmt_MSPropertySubscriptExprClass = 87,
552 ZigClangStmt_MaterializeTemporaryExprClass = 88,
553 ZigClangStmt_MemberExprClass = 89,
554 ZigClangStmt_NoInitExprClass = 90,
555 ZigClangStmt_OMPArraySectionExprClass = 91,
556 ZigClangStmt_ObjCArrayLiteralClass = 92,
557 ZigClangStmt_ObjCAvailabilityCheckExprClass = 93,
558 ZigClangStmt_ObjCBoolLiteralExprClass = 94,
559 ZigClangStmt_ObjCBoxedExprClass = 95,
560 ZigClangStmt_ObjCDictionaryLiteralClass = 96,
561 ZigClangStmt_ObjCEncodeExprClass = 97,
562 ZigClangStmt_ObjCIndirectCopyRestoreExprClass = 98,
563 ZigClangStmt_ObjCIsaExprClass = 99,
564 ZigClangStmt_ObjCIvarRefExprClass = 100,
565 ZigClangStmt_ObjCMessageExprClass = 101,
566 ZigClangStmt_ObjCPropertyRefExprClass = 102,
567 ZigClangStmt_ObjCProtocolExprClass = 103,
568 ZigClangStmt_ObjCSelectorExprClass = 104,
569 ZigClangStmt_ObjCStringLiteralClass = 105,
570 ZigClangStmt_ObjCSubscriptRefExprClass = 106,
571 ZigClangStmt_OffsetOfExprClass = 107,
572 ZigClangStmt_OpaqueValueExprClass = 108,
573 ZigClangStmt_UnresolvedLookupExprClass = 109,
574 ZigClangStmt_UnresolvedMemberExprClass = 110,
575 ZigClangStmt_PackExpansionExprClass = 111,
576 ZigClangStmt_ParenExprClass = 112,
577 ZigClangStmt_ParenListExprClass = 113,
578 ZigClangStmt_PredefinedExprClass = 114,
579 ZigClangStmt_PseudoObjectExprClass = 115,
580 ZigClangStmt_ShuffleVectorExprClass = 116,
581 ZigClangStmt_SizeOfPackExprClass = 117,
582 ZigClangStmt_StmtExprClass = 118,
583 ZigClangStmt_StringLiteralClass = 119,
584 ZigClangStmt_SubstNonTypeTemplateParmExprClass = 120,
585 ZigClangStmt_SubstNonTypeTemplateParmPackExprClass = 121,
586 ZigClangStmt_TypeTraitExprClass = 122,
587 ZigClangStmt_TypoExprClass = 123,
588 ZigClangStmt_UnaryExprOrTypeTraitExprClass = 124,
589 ZigClangStmt_UnaryOperatorClass = 125,
590 ZigClangStmt_VAArgExprClass = 126,
591 ZigClangStmt_ForStmtClass = 127,
592 ZigClangStmt_GotoStmtClass = 128,
593 ZigClangStmt_IfStmtClass = 129,
594 ZigClangStmt_IndirectGotoStmtClass = 130,
595 ZigClangStmt_LabelStmtClass = 131,
596 ZigClangStmt_MSDependentExistsStmtClass = 132,
597 ZigClangStmt_NullStmtClass = 133,
598 ZigClangStmt_OMPAtomicDirectiveClass = 134,
599 ZigClangStmt_OMPBarrierDirectiveClass = 135,
600 ZigClangStmt_OMPCancelDirectiveClass = 136,
601 ZigClangStmt_OMPCancellationPointDirectiveClass = 137,
602 ZigClangStmt_OMPCriticalDirectiveClass = 138,
603 ZigClangStmt_OMPFlushDirectiveClass = 139,
604 ZigClangStmt_OMPDistributeDirectiveClass = 140,
605 ZigClangStmt_OMPDistributeParallelForDirectiveClass = 141,
606 ZigClangStmt_OMPDistributeParallelForSimdDirectiveClass = 142,
607 ZigClangStmt_OMPDistributeSimdDirectiveClass = 143,
608 ZigClangStmt_OMPForDirectiveClass = 144,
609 ZigClangStmt_OMPForSimdDirectiveClass = 145,
610 ZigClangStmt_OMPParallelForDirectiveClass = 146,
611 ZigClangStmt_OMPParallelForSimdDirectiveClass = 147,
612 ZigClangStmt_OMPSimdDirectiveClass = 148,
613 ZigClangStmt_OMPTargetParallelForSimdDirectiveClass = 149,
614 ZigClangStmt_OMPTargetSimdDirectiveClass = 150,
615 ZigClangStmt_OMPTargetTeamsDistributeDirectiveClass = 151,
616 ZigClangStmt_OMPTargetTeamsDistributeParallelForDirectiveClass = 152,
617 ZigClangStmt_OMPTargetTeamsDistributeParallelForSimdDirectiveClass = 153,
618 ZigClangStmt_OMPTargetTeamsDistributeSimdDirectiveClass = 154,
619 ZigClangStmt_OMPTaskLoopDirectiveClass = 155,
620 ZigClangStmt_OMPTaskLoopSimdDirectiveClass = 156,
621 ZigClangStmt_OMPTeamsDistributeDirectiveClass = 157,
622 ZigClangStmt_OMPTeamsDistributeParallelForDirectiveClass = 158,
623 ZigClangStmt_OMPTeamsDistributeParallelForSimdDirectiveClass = 159,
624 ZigClangStmt_OMPTeamsDistributeSimdDirectiveClass = 160,
625 ZigClangStmt_OMPMasterDirectiveClass = 161,
626 ZigClangStmt_OMPOrderedDirectiveClass = 162,
627 ZigClangStmt_OMPParallelDirectiveClass = 163,
628 ZigClangStmt_OMPParallelSectionsDirectiveClass = 164,
629 ZigClangStmt_OMPSectionDirectiveClass = 165,
630 ZigClangStmt_OMPSectionsDirectiveClass = 166,
631 ZigClangStmt_OMPSingleDirectiveClass = 167,
632 ZigClangStmt_OMPTargetDataDirectiveClass = 168,
633 ZigClangStmt_OMPTargetDirectiveClass = 169,
634 ZigClangStmt_OMPTargetEnterDataDirectiveClass = 170,
635 ZigClangStmt_OMPTargetExitDataDirectiveClass = 171,
636 ZigClangStmt_OMPTargetParallelDirectiveClass = 172,
637 ZigClangStmt_OMPTargetParallelForDirectiveClass = 173,
638 ZigClangStmt_OMPTargetTeamsDirectiveClass = 174,
639 ZigClangStmt_OMPTargetUpdateDirectiveClass = 175,
640 ZigClangStmt_OMPTaskDirectiveClass = 176,
641 ZigClangStmt_OMPTaskgroupDirectiveClass = 177,
642 ZigClangStmt_OMPTaskwaitDirectiveClass = 178,
643 ZigClangStmt_OMPTaskyieldDirectiveClass = 179,
644 ZigClangStmt_OMPTeamsDirectiveClass = 180,
645 ZigClangStmt_ObjCAtCatchStmtClass = 181,
646 ZigClangStmt_ObjCAtFinallyStmtClass = 182,
647 ZigClangStmt_ObjCAtSynchronizedStmtClass = 183,
648 ZigClangStmt_ObjCAtThrowStmtClass = 184,
649 ZigClangStmt_ObjCAtTryStmtClass = 185,
650 ZigClangStmt_ObjCAutoreleasePoolStmtClass = 186,
651 ZigClangStmt_ObjCForCollectionStmtClass = 187,
652 ZigClangStmt_ReturnStmtClass = 188,
653 ZigClangStmt_SEHExceptStmtClass = 189,
654 ZigClangStmt_SEHFinallyStmtClass = 190,
655 ZigClangStmt_SEHLeaveStmtClass = 191,
656 ZigClangStmt_SEHTryStmtClass = 192,
657 ZigClangStmt_CaseStmtClass = 193,
658 ZigClangStmt_DefaultStmtClass = 194,
659 ZigClangStmt_SwitchStmtClass = 195,
660 ZigClangStmt_WhileStmtClass = 196,
661};
662pub const ZigClangCK_Dependent = enum_ZigClangCK._Dependent;
663pub const ZigClangCK_BitCast = enum_ZigClangCK._BitCast;
664pub const ZigClangCK_LValueBitCast = enum_ZigClangCK._LValueBitCast;
665pub const ZigClangCK_LValueToRValue = enum_ZigClangCK._LValueToRValue;
666pub const ZigClangCK_NoOp = enum_ZigClangCK._NoOp;
667pub const ZigClangCK_BaseToDerived = enum_ZigClangCK._BaseToDerived;
668pub const ZigClangCK_DerivedToBase = enum_ZigClangCK._DerivedToBase;
669pub const ZigClangCK_UncheckedDerivedToBase = enum_ZigClangCK._UncheckedDerivedToBase;
670pub const ZigClangCK_Dynamic = enum_ZigClangCK._Dynamic;
671pub const ZigClangCK_ToUnion = enum_ZigClangCK._ToUnion;
672pub const ZigClangCK_ArrayToPointerDecay = enum_ZigClangCK._ArrayToPointerDecay;
673pub const ZigClangCK_FunctionToPointerDecay = enum_ZigClangCK._FunctionToPointerDecay;
674pub const ZigClangCK_NullToPointer = enum_ZigClangCK._NullToPointer;
675pub const ZigClangCK_NullToMemberPointer = enum_ZigClangCK._NullToMemberPointer;
676pub const ZigClangCK_BaseToDerivedMemberPointer = enum_ZigClangCK._BaseToDerivedMemberPointer;
677pub const ZigClangCK_DerivedToBaseMemberPointer = enum_ZigClangCK._DerivedToBaseMemberPointer;
678pub const ZigClangCK_MemberPointerToBoolean = enum_ZigClangCK._MemberPointerToBoolean;
679pub const ZigClangCK_ReinterpretMemberPointer = enum_ZigClangCK._ReinterpretMemberPointer;
680pub const ZigClangCK_UserDefinedConversion = enum_ZigClangCK._UserDefinedConversion;
681pub const ZigClangCK_ConstructorConversion = enum_ZigClangCK._ConstructorConversion;
682pub const ZigClangCK_IntegralToPointer = enum_ZigClangCK._IntegralToPointer;
683pub const ZigClangCK_PointerToIntegral = enum_ZigClangCK._PointerToIntegral;
684pub const ZigClangCK_PointerToBoolean = enum_ZigClangCK._PointerToBoolean;
685pub const ZigClangCK_ToVoid = enum_ZigClangCK._ToVoid;
686pub const ZigClangCK_VectorSplat = enum_ZigClangCK._VectorSplat;
687pub const ZigClangCK_IntegralCast = enum_ZigClangCK._IntegralCast;
688pub const ZigClangCK_IntegralToBoolean = enum_ZigClangCK._IntegralToBoolean;
689pub const ZigClangCK_IntegralToFloating = enum_ZigClangCK._IntegralToFloating;
690pub const ZigClangCK_FixedPointCast = enum_ZigClangCK._FixedPointCast;
691pub const ZigClangCK_FixedPointToBoolean = enum_ZigClangCK._FixedPointToBoolean;
692pub const ZigClangCK_FloatingToIntegral = enum_ZigClangCK._FloatingToIntegral;
693pub const ZigClangCK_FloatingToBoolean = enum_ZigClangCK._FloatingToBoolean;
694pub const ZigClangCK_BooleanToSignedIntegral = enum_ZigClangCK._BooleanToSignedIntegral;
695pub const ZigClangCK_FloatingCast = enum_ZigClangCK._FloatingCast;
696pub const ZigClangCK_CPointerToObjCPointerCast = enum_ZigClangCK._CPointerToObjCPointerCast;
697pub const ZigClangCK_BlockPointerToObjCPointerCast = enum_ZigClangCK._BlockPointerToObjCPointerCast;
698pub const ZigClangCK_AnyPointerToBlockPointerCast = enum_ZigClangCK._AnyPointerToBlockPointerCast;
699pub const ZigClangCK_ObjCObjectLValueCast = enum_ZigClangCK._ObjCObjectLValueCast;
700pub const ZigClangCK_FloatingRealToComplex = enum_ZigClangCK._FloatingRealToComplex;
701pub const ZigClangCK_FloatingComplexToReal = enum_ZigClangCK._FloatingComplexToReal;
702pub const ZigClangCK_FloatingComplexToBoolean = enum_ZigClangCK._FloatingComplexToBoolean;
703pub const ZigClangCK_FloatingComplexCast = enum_ZigClangCK._FloatingComplexCast;
704pub const ZigClangCK_FloatingComplexToIntegralComplex = enum_ZigClangCK._FloatingComplexToIntegralComplex;
705pub const ZigClangCK_IntegralRealToComplex = enum_ZigClangCK._IntegralRealToComplex;
706pub const ZigClangCK_IntegralComplexToReal = enum_ZigClangCK._IntegralComplexToReal;
707pub const ZigClangCK_IntegralComplexToBoolean = enum_ZigClangCK._IntegralComplexToBoolean;
708pub const ZigClangCK_IntegralComplexCast = enum_ZigClangCK._IntegralComplexCast;
709pub const ZigClangCK_IntegralComplexToFloatingComplex = enum_ZigClangCK._IntegralComplexToFloatingComplex;
710pub const ZigClangCK_ARCProduceObject = enum_ZigClangCK._ARCProduceObject;
711pub const ZigClangCK_ARCConsumeObject = enum_ZigClangCK._ARCConsumeObject;
712pub const ZigClangCK_ARCReclaimReturnedObject = enum_ZigClangCK._ARCReclaimReturnedObject;
713pub const ZigClangCK_ARCExtendBlockObject = enum_ZigClangCK._ARCExtendBlockObject;
714pub const ZigClangCK_AtomicToNonAtomic = enum_ZigClangCK._AtomicToNonAtomic;
715pub const ZigClangCK_NonAtomicToAtomic = enum_ZigClangCK._NonAtomicToAtomic;
716pub const ZigClangCK_CopyAndAutoreleaseBlockObject = enum_ZigClangCK._CopyAndAutoreleaseBlockObject;
717pub const ZigClangCK_BuiltinFnToFnPtr = enum_ZigClangCK._BuiltinFnToFnPtr;
718pub const ZigClangCK_ZeroToOCLOpaqueType = enum_ZigClangCK._ZeroToOCLOpaqueType;
719pub const ZigClangCK_AddressSpaceConversion = enum_ZigClangCK._AddressSpaceConversion;
720pub const ZigClangCK_IntToOCLSampler = enum_ZigClangCK._IntToOCLSampler;
721pub const enum_ZigClangCK = extern enum {
722 _Dependent,
723 _BitCast,
724 _LValueBitCast,
725 _LValueToRValue,
726 _NoOp,
727 _BaseToDerived,
728 _DerivedToBase,
729 _UncheckedDerivedToBase,
730 _Dynamic,
731 _ToUnion,
732 _ArrayToPointerDecay,
733 _FunctionToPointerDecay,
734 _NullToPointer,
735 _NullToMemberPointer,
736 _BaseToDerivedMemberPointer,
737 _DerivedToBaseMemberPointer,
738 _MemberPointerToBoolean,
739 _ReinterpretMemberPointer,
740 _UserDefinedConversion,
741 _ConstructorConversion,
742 _IntegralToPointer,
743 _PointerToIntegral,
744 _PointerToBoolean,
745 _ToVoid,
746 _VectorSplat,
747 _IntegralCast,
748 _IntegralToBoolean,
749 _IntegralToFloating,
750 _FixedPointCast,
751 _FixedPointToBoolean,
752 _FloatingToIntegral,
753 _FloatingToBoolean,
754 _BooleanToSignedIntegral,
755 _FloatingCast,
756 _CPointerToObjCPointerCast,
757 _BlockPointerToObjCPointerCast,
758 _AnyPointerToBlockPointerCast,
759 _ObjCObjectLValueCast,
760 _FloatingRealToComplex,
761 _FloatingComplexToReal,
762 _FloatingComplexToBoolean,
763 _FloatingComplexCast,
764 _FloatingComplexToIntegralComplex,
765 _IntegralRealToComplex,
766 _IntegralComplexToReal,
767 _IntegralComplexToBoolean,
768 _IntegralComplexCast,
769 _IntegralComplexToFloatingComplex,
770 _ARCProduceObject,
771 _ARCConsumeObject,
772 _ARCReclaimReturnedObject,
773 _ARCExtendBlockObject,
774 _AtomicToNonAtomic,
775 _NonAtomicToAtomic,
776 _CopyAndAutoreleaseBlockObject,
777 _BuiltinFnToFnPtr,
778 _ZeroToOCLOpaqueType,
779 _AddressSpaceConversion,
780 _IntToOCLSampler,
781};
782pub const ZigClangAPValueUninitialized = enum_ZigClangAPValueKind.ZigClangAPValueUninitialized;
783pub const ZigClangAPValueInt = enum_ZigClangAPValueKind.ZigClangAPValueInt;
784pub const ZigClangAPValueFloat = enum_ZigClangAPValueKind.ZigClangAPValueFloat;
785pub const ZigClangAPValueComplexInt = enum_ZigClangAPValueKind.ZigClangAPValueComplexInt;
786pub const ZigClangAPValueComplexFloat = enum_ZigClangAPValueKind.ZigClangAPValueComplexFloat;
787pub const ZigClangAPValueLValue = enum_ZigClangAPValueKind.ZigClangAPValueLValue;
788pub const ZigClangAPValueVector = enum_ZigClangAPValueKind.ZigClangAPValueVector;
789pub const ZigClangAPValueArray = enum_ZigClangAPValueKind.ZigClangAPValueArray;
790pub const ZigClangAPValueStruct = enum_ZigClangAPValueKind.ZigClangAPValueStruct;
791pub const ZigClangAPValueUnion = enum_ZigClangAPValueKind.ZigClangAPValueUnion;
792pub const ZigClangAPValueMemberPointer = enum_ZigClangAPValueKind.ZigClangAPValueMemberPointer;
793pub const ZigClangAPValueAddrLabelDiff = enum_ZigClangAPValueKind.ZigClangAPValueAddrLabelDiff;
794pub const enum_ZigClangAPValueKind = extern enum {
795 ZigClangAPValueUninitialized,
796 ZigClangAPValueInt,
797 ZigClangAPValueFloat,
798 ZigClangAPValueComplexInt,
799 ZigClangAPValueComplexFloat,
800 ZigClangAPValueLValue,
801 ZigClangAPValueVector,
802 ZigClangAPValueArray,
803 ZigClangAPValueStruct,
804 ZigClangAPValueUnion,
805 ZigClangAPValueMemberPointer,
806 ZigClangAPValueAddrLabelDiff,
807};
808pub extern fn ZigClangSourceManager_getSpellingLoc(arg0: ?*const struct_ZigClangSourceManager, Loc: struct_ZigClangSourceLocation) struct_ZigClangSourceLocation;
809pub extern fn ZigClangSourceManager_getFilename(arg0: ?*const struct_ZigClangSourceManager, SpellingLoc: struct_ZigClangSourceLocation) [*c]const u8;
810pub extern fn ZigClangSourceManager_getSpellingLineNumber(arg0: ?*const struct_ZigClangSourceManager, Loc: struct_ZigClangSourceLocation) c_uint;
811pub extern fn ZigClangSourceManager_getSpellingColumnNumber(arg0: ?*const struct_ZigClangSourceManager, Loc: struct_ZigClangSourceLocation) c_uint;
812pub extern fn ZigClangSourceManager_getCharacterData(arg0: ?*const struct_ZigClangSourceManager, SL: struct_ZigClangSourceLocation) [*c]const u8;
813pub extern fn ZigClangASTContext_getPointerType(arg0: ?*const struct_ZigClangASTContext, T: struct_ZigClangQualType) struct_ZigClangQualType;
814pub extern fn ZigClangASTUnit_getASTContext(arg0: ?*struct_ZigClangASTUnit) ?*struct_ZigClangASTContext;
815pub extern fn ZigClangASTUnit_getSourceManager(arg0: ?*struct_ZigClangASTUnit) ?*struct_ZigClangSourceManager;
816pub extern fn ZigClangASTUnit_visitLocalTopLevelDecls(arg0: ?*struct_ZigClangASTUnit, context: ?*c_void, Fn: ?extern fn (?*c_void, ?*const struct_ZigClangDecl) bool) bool;
817pub extern fn ZigClangRecordType_getDecl(record_ty: ?*const struct_ZigClangRecordType) ?*const struct_ZigClangRecordDecl;
818pub extern fn ZigClangEnumType_getDecl(record_ty: ?*const struct_ZigClangEnumType) ?*const struct_ZigClangEnumDecl;
819pub extern fn ZigClangRecordDecl_getCanonicalDecl(record_decl: ?*const struct_ZigClangRecordDecl) ?*const struct_ZigClangTagDecl;
820pub extern fn ZigClangEnumDecl_getCanonicalDecl(arg0: ?*const struct_ZigClangEnumDecl) ?*const struct_ZigClangTagDecl;
821pub extern fn ZigClangTypedefNameDecl_getCanonicalDecl(arg0: ?*const struct_ZigClangTypedefNameDecl) ?*const struct_ZigClangTypedefNameDecl;
822pub extern fn ZigClangRecordDecl_getDefinition(arg0: ?*const struct_ZigClangRecordDecl) ?*const struct_ZigClangRecordDecl;
823pub extern fn ZigClangEnumDecl_getDefinition(arg0: ?*const struct_ZigClangEnumDecl) ?*const struct_ZigClangEnumDecl;
824pub extern fn ZigClangRecordDecl_getLocation(arg0: ?*const struct_ZigClangRecordDecl) struct_ZigClangSourceLocation;
825pub extern fn ZigClangEnumDecl_getLocation(arg0: ?*const struct_ZigClangEnumDecl) struct_ZigClangSourceLocation;
826pub extern fn ZigClangTypedefNameDecl_getLocation(arg0: ?*const struct_ZigClangTypedefNameDecl) struct_ZigClangSourceLocation;
827pub extern fn ZigClangRecordDecl_isUnion(record_decl: ?*const struct_ZigClangRecordDecl) bool;
828pub extern fn ZigClangRecordDecl_isStruct(record_decl: ?*const struct_ZigClangRecordDecl) bool;
829pub extern fn ZigClangRecordDecl_isAnonymousStructOrUnion(record_decl: ?*const struct_ZigClangRecordDecl) bool;
830pub extern fn ZigClangEnumDecl_getIntegerType(arg0: ?*const struct_ZigClangEnumDecl) struct_ZigClangQualType;
831pub extern fn ZigClangDecl_getName_bytes_begin(decl: ?*const struct_ZigClangDecl) [*c]const u8;
832pub extern fn ZigClangSourceLocation_eq(a: struct_ZigClangSourceLocation, b: struct_ZigClangSourceLocation) bool;
833pub extern fn ZigClangTypedefType_getDecl(arg0: ?*const struct_ZigClangTypedefType) ?*const struct_ZigClangTypedefNameDecl;
834pub extern fn ZigClangTypedefNameDecl_getUnderlyingType(arg0: ?*const struct_ZigClangTypedefNameDecl) struct_ZigClangQualType;
835pub extern fn ZigClangQualType_getCanonicalType(arg0: struct_ZigClangQualType) struct_ZigClangQualType;
836pub extern fn ZigClangQualType_getTypePtr(arg0: struct_ZigClangQualType) ?*const struct_ZigClangType;
837pub extern fn ZigClangQualType_addConst(arg0: [*c]struct_ZigClangQualType) void;
838pub extern fn ZigClangQualType_eq(arg0: struct_ZigClangQualType, arg1: struct_ZigClangQualType) bool;
839pub extern fn ZigClangQualType_isConstQualified(arg0: struct_ZigClangQualType) bool;
840pub extern fn ZigClangQualType_isVolatileQualified(arg0: struct_ZigClangQualType) bool;
841pub extern fn ZigClangQualType_isRestrictQualified(arg0: struct_ZigClangQualType) bool;
842pub extern fn ZigClangType_getTypeClass(self: ?*const struct_ZigClangType) enum_ZigClangTypeClass;
843pub extern fn ZigClangType_isVoidType(self: ?*const struct_ZigClangType) bool;
844pub extern fn ZigClangType_getTypeClassName(self: ?*const struct_ZigClangType) [*c]const u8;
845pub extern fn ZigClangStmt_getBeginLoc(self: ?*const struct_ZigClangStmt) struct_ZigClangSourceLocation;
846pub extern fn ZigClangStmt_getStmtClass(self: ?*const struct_ZigClangStmt) enum_ZigClangStmtClass;
847pub extern fn ZigClangStmt_classof_Expr(self: ?*const struct_ZigClangStmt) bool;
848pub extern fn ZigClangExpr_getStmtClass(self: ?*const struct_ZigClangExpr) enum_ZigClangStmtClass;
849pub extern fn ZigClangExpr_getType(self: ?*const struct_ZigClangExpr) struct_ZigClangQualType;
850pub extern fn ZigClangExpr_getBeginLoc(self: ?*const struct_ZigClangExpr) struct_ZigClangSourceLocation;
851pub extern fn ZigClangAPValue_getKind(self: ?*const struct_ZigClangAPValue) enum_ZigClangAPValueKind;
852pub extern fn ZigClangAPValue_getInt(self: ?*const struct_ZigClangAPValue) ?*const struct_ZigClangAPSInt;
853pub extern fn ZigClangAPValue_getArrayInitializedElts(self: ?*const struct_ZigClangAPValue) c_uint;
854pub extern fn ZigClangAPValue_getArrayInitializedElt(self: ?*const struct_ZigClangAPValue, i: c_uint) ?*const struct_ZigClangAPValue;
855pub extern fn ZigClangAPValue_getArrayFiller(self: ?*const struct_ZigClangAPValue) ?*const struct_ZigClangAPValue;
856pub extern fn ZigClangAPValue_getArraySize(self: ?*const struct_ZigClangAPValue) c_uint;
857pub extern fn ZigClangAPValue_getLValueBase(self: ?*const struct_ZigClangAPValue) struct_ZigClangAPValueLValueBase;
858pub extern fn ZigClangAPSInt_isSigned(self: ?*const struct_ZigClangAPSInt) bool;
859pub extern fn ZigClangAPSInt_isNegative(self: ?*const struct_ZigClangAPSInt) bool;
860pub extern fn ZigClangAPSInt_negate(self: ?*const struct_ZigClangAPSInt) ?*const struct_ZigClangAPSInt;
861pub extern fn ZigClangAPSInt_free(self: ?*const struct_ZigClangAPSInt) void;
862pub extern fn ZigClangAPSInt_getRawData(self: ?*const struct_ZigClangAPSInt) [*c]const u64;
863pub extern fn ZigClangAPSInt_getNumWords(self: ?*const struct_ZigClangAPSInt) c_uint;
864pub extern fn ZigClangAPValueLValueBase_dyn_cast_Expr(self: struct_ZigClangAPValueLValueBase) ?*const struct_ZigClangExpr;
865pub const ZigClangSourceLocation = struct_ZigClangSourceLocation;
866pub const ZigClangQualType = struct_ZigClangQualType;
867pub const ZigClangAPValueLValueBase = struct_ZigClangAPValueLValueBase;
868pub const ZigClangAPValue = struct_ZigClangAPValue;
869pub const ZigClangAPSInt = struct_ZigClangAPSInt;
870pub const ZigClangASTContext = struct_ZigClangASTContext;
871pub const ZigClangASTUnit = struct_ZigClangASTUnit;
872pub const ZigClangArraySubscriptExpr = struct_ZigClangArraySubscriptExpr;
873pub const ZigClangArrayType = struct_ZigClangArrayType;
874pub const ZigClangAttributedType = struct_ZigClangAttributedType;
875pub const ZigClangBinaryOperator = struct_ZigClangBinaryOperator;
876pub const ZigClangBreakStmt = struct_ZigClangBreakStmt;
877pub const ZigClangBuiltinType = struct_ZigClangBuiltinType;
878pub const ZigClangCStyleCastExpr = struct_ZigClangCStyleCastExpr;
879pub const ZigClangCallExpr = struct_ZigClangCallExpr;
880pub const ZigClangCaseStmt = struct_ZigClangCaseStmt;
881pub const ZigClangCompoundAssignOperator = struct_ZigClangCompoundAssignOperator;
882pub const ZigClangCompoundStmt = struct_ZigClangCompoundStmt;
883pub const ZigClangConditionalOperator = struct_ZigClangConditionalOperator;
884pub const ZigClangConstantArrayType = struct_ZigClangConstantArrayType;
885pub const ZigClangContinueStmt = struct_ZigClangContinueStmt;
886pub const ZigClangDecayedType = struct_ZigClangDecayedType;
887pub const ZigClangDecl = struct_ZigClangDecl;
888pub const ZigClangDeclRefExpr = struct_ZigClangDeclRefExpr;
889pub const ZigClangDeclStmt = struct_ZigClangDeclStmt;
890pub const ZigClangDefaultStmt = struct_ZigClangDefaultStmt;
891pub const ZigClangDiagnosticOptions = struct_ZigClangDiagnosticOptions;
892pub const ZigClangDiagnosticsEngine = struct_ZigClangDiagnosticsEngine;
893pub const ZigClangDoStmt = struct_ZigClangDoStmt;
894pub const ZigClangElaboratedType = struct_ZigClangElaboratedType;
895pub const ZigClangEnumConstantDecl = struct_ZigClangEnumConstantDecl;
896pub const ZigClangEnumDecl = struct_ZigClangEnumDecl;
897pub const ZigClangEnumType = struct_ZigClangEnumType;
898pub const ZigClangExpr = struct_ZigClangExpr;
899pub const ZigClangFieldDecl = struct_ZigClangFieldDecl;
900pub const ZigClangFileID = struct_ZigClangFileID;
901pub const ZigClangForStmt = struct_ZigClangForStmt;
902pub const ZigClangFullSourceLoc = struct_ZigClangFullSourceLoc;
903pub const ZigClangFunctionDecl = struct_ZigClangFunctionDecl;
904pub const ZigClangFunctionProtoType = struct_ZigClangFunctionProtoType;
905pub const ZigClangIfStmt = struct_ZigClangIfStmt;
906pub const ZigClangImplicitCastExpr = struct_ZigClangImplicitCastExpr;
907pub const ZigClangIncompleteArrayType = struct_ZigClangIncompleteArrayType;
908pub const ZigClangIntegerLiteral = struct_ZigClangIntegerLiteral;
909pub const ZigClangMacroDefinitionRecord = struct_ZigClangMacroDefinitionRecord;
910pub const ZigClangMemberExpr = struct_ZigClangMemberExpr;
911pub const ZigClangNamedDecl = struct_ZigClangNamedDecl;
912pub const ZigClangNone = struct_ZigClangNone;
913pub const ZigClangPCHContainerOperations = struct_ZigClangPCHContainerOperations;
914pub const ZigClangParenExpr = struct_ZigClangParenExpr;
915pub const ZigClangParenType = struct_ZigClangParenType;
916pub const ZigClangParmVarDecl = struct_ZigClangParmVarDecl;
917pub const ZigClangPointerType = struct_ZigClangPointerType;
918pub const ZigClangPreprocessedEntity = struct_ZigClangPreprocessedEntity;
919pub const ZigClangRecordDecl = struct_ZigClangRecordDecl;
920pub const ZigClangRecordType = struct_ZigClangRecordType;
921pub const ZigClangReturnStmt = struct_ZigClangReturnStmt;
922pub const ZigClangSkipFunctionBodiesScope = struct_ZigClangSkipFunctionBodiesScope;
923pub const ZigClangSourceManager = struct_ZigClangSourceManager;
924pub const ZigClangSourceRange = struct_ZigClangSourceRange;
925pub const ZigClangStmt = struct_ZigClangStmt;
926pub const ZigClangStorageClass = struct_ZigClangStorageClass;
927pub const ZigClangStringLiteral = struct_ZigClangStringLiteral;
928pub const ZigClangStringRef = struct_ZigClangStringRef;
929pub const ZigClangSwitchStmt = struct_ZigClangSwitchStmt;
930pub const ZigClangTagDecl = struct_ZigClangTagDecl;
931pub const ZigClangType = struct_ZigClangType;
932pub const ZigClangTypedefNameDecl = struct_ZigClangTypedefNameDecl;
933pub const ZigClangTypedefType = struct_ZigClangTypedefType;
934pub const ZigClangUnaryExprOrTypeTraitExpr = struct_ZigClangUnaryExprOrTypeTraitExpr;
935pub const ZigClangUnaryOperator = struct_ZigClangUnaryOperator;
936pub const ZigClangValueDecl = struct_ZigClangValueDecl;
937pub const ZigClangVarDecl = struct_ZigClangVarDecl;
938pub const ZigClangWhileStmt = struct_ZigClangWhileStmt;
939pub const ZigClangBO = enum_ZigClangBO;
940pub const ZigClangUO = enum_ZigClangUO;
941pub const ZigClangTypeClass = enum_ZigClangTypeClass;
942pub const ZigClangStmtClass = enum_ZigClangStmtClass;
943pub const ZigClangCK = enum_ZigClangCK;
944pub const ZigClangAPValueKind = enum_ZigClangAPValueKind;
src-self-hosted/stage1.zig+92-3
...@@ -1,8 +1,7 @@...@@ -1,8 +1,7 @@
1// This is Zig code that is used by both stage1 and stage2.1// This is Zig code that is used by both stage1 and stage2.
2// The prototypes in src/userland.h must match these definitions.2// The prototypes in src/userland.h must match these definitions.
3comptime {3
4 _ = @import("translate_c.zig");4const std = @import("std");
5}
65
7pub const info_zen =6pub const info_zen =
8 \\7 \\
...@@ -29,3 +28,93 @@ export fn stage2_zen(ptr: *[*]const u8, len: *usize) void {...@@ -29,3 +28,93 @@ export fn stage2_zen(ptr: *[*]const u8, len: *usize) void {
29export fn stage2_panic(ptr: [*]const u8, len: usize) void {28export fn stage2_panic(ptr: [*]const u8, len: usize) void {
30 @panic(ptr[0..len]);29 @panic(ptr[0..len]);
31}30}
31
32const TranslateMode = extern enum {
33 import,
34 translate,
35};
36
37const Error = extern enum {
38 None,
39 OutOfMemory,
40 InvalidFormat,
41 SemanticAnalyzeFail,
42 AccessDenied,
43 Interrupted,
44 SystemResources,
45 FileNotFound,
46 FileSystem,
47 FileTooBig,
48 DivByZero,
49 Overflow,
50 PathAlreadyExists,
51 Unexpected,
52 ExactDivRemainder,
53 NegativeDenominator,
54 ShiftedOutOneBits,
55 CCompileErrors,
56 EndOfFile,
57 IsDir,
58 NotDir,
59 UnsupportedOperatingSystem,
60 SharingViolation,
61 PipeBusy,
62 PrimitiveTypeNotFound,
63 CacheUnavailable,
64 PathTooLong,
65 CCompilerCannotFindFile,
66 ReadingDepFile,
67 InvalidDepFile,
68 MissingArchitecture,
69 MissingOperatingSystem,
70 UnknownArchitecture,
71 UnknownOperatingSystem,
72 UnknownABI,
73 InvalidFilename,
74 DiskQuota,
75 DiskSpace,
76 UnexpectedWriteFailure,
77 UnexpectedSeekFailure,
78 UnexpectedFileTruncationFailure,
79 Unimplemented,
80 OperationAborted,
81 BrokenPipe,
82 NoSpaceLeft,
83};
84
85const FILE = std.c.FILE;
86const ast = std.zig.ast;
87
88/// Args should have a null terminating last arg.
89export fn stage2_translate_c(
90 out_ast: **ast.Tree,
91 args_begin: [*]?[*]const u8,
92 args_end: [*]?[*]const u8,
93 mode: TranslateMode,
94) Error {
95 const translate_c = @import("translate_c.zig");
96 out_ast.* = translate_c.translate(args_begin, args_end, switch (mode) {
97 .import => translate_c.Mode.import,
98 .translate => translate_c.Mode.translate,
99 }) catch |err| switch (err) {
100 error.Unimplemented => return Error.Unimplemented,
101 };
102 return Error.None;
103}
104
105export fn stage2_render_ast(tree: *ast.Tree, output_file: *FILE) Error {
106 const c_out_stream = &std.io.COutStream.init(output_file).stream;
107 _ = std.zig.render(std.heap.c_allocator, c_out_stream, tree) catch |e| switch (e) {
108 error.SystemResources => return Error.SystemResources,
109 error.OperationAborted => return Error.OperationAborted,
110 error.BrokenPipe => return Error.BrokenPipe,
111 error.DiskQuota => return Error.DiskQuota,
112 error.FileTooBig => return Error.FileTooBig,
113 error.NoSpaceLeft => return Error.NoSpaceLeft,
114 error.AccessDenied => return Error.AccessDenied,
115 error.OutOfMemory => return Error.OutOfMemory,
116 error.Unexpected => return Error.Unexpected,
117 error.InputOutput => return Error.FileSystem,
118 };
119 return Error.None;
120}
src-self-hosted/translate_c.zig+9-2
...@@ -2,7 +2,14 @@...@@ -2,7 +2,14 @@
2// and stage2. Currently it's not used by anything, as it's not feature complete.2// and stage2. Currently it's not used by anything, as it's not feature complete.
33
4const std = @import("std");4const std = @import("std");
5const ast = std.zig.ast;
6use @import("clang.zig");
57
6export fn stage2_translate_c() void {8pub const Mode = enum {
7 std.debug.panic("unimplemented");9 import,
10 translate,
11};
12
13pub fn translate(args_begin: [*]?[*]const u8, args_end: [*]?[*]const u8, mode: Mode) !*ast.Tree {
14 return error.Unimplemented;
8}15}
src/analyze.cpp+1-1
...@@ -3725,7 +3725,7 @@ static void analyze_fn_body(CodeGen *g, ZigFn *fn_table_entry) {...@@ -3725,7 +3725,7 @@ static void analyze_fn_body(CodeGen *g, ZigFn *fn_table_entry) {
3725 }3725 }
3726 if (g->verbose_ir) {3726 if (g->verbose_ir) {
3727 fprintf(stderr, "\n");3727 fprintf(stderr, "\n");
3728 ast_render(g, stderr, fn_table_entry->body_node, 4);3728 ast_render(stderr, fn_table_entry->body_node, 4);
3729 fprintf(stderr, "\n{ // (IR)\n");3729 fprintf(stderr, "\n{ // (IR)\n");
3730 ir_print(g, stderr, &fn_table_entry->ir_executable, 4);3730 ir_print(g, stderr, &fn_table_entry->ir_executable, 4);
3731 fprintf(stderr, "}\n");3731 fprintf(stderr, "}\n");
src/analyze.hpp+2
...@@ -247,4 +247,6 @@ Error create_c_object_cache(CodeGen *g, CacheHash **out_cache_hash, bool verbose...@@ -247,4 +247,6 @@ Error create_c_object_cache(CodeGen *g, CacheHash **out_cache_hash, bool verbose
247LLVMTypeRef get_llvm_type(CodeGen *g, ZigType *type);247LLVMTypeRef get_llvm_type(CodeGen *g, ZigType *type);
248ZigLLVMDIType *get_llvm_di_type(CodeGen *g, ZigType *type);248ZigLLVMDIType *get_llvm_di_type(CodeGen *g, ZigType *type);
249249
250void add_cc_args(CodeGen *g, ZigList<const char *> &args, const char *out_dep_path, bool translate_c);
251
250#endif252#endif
src/ast_render.cpp+1-3
...@@ -296,7 +296,6 @@ void ast_print(FILE *f, AstNode *node, int indent) {...@@ -296,7 +296,6 @@ void ast_print(FILE *f, AstNode *node, int indent) {
296296
297297
298struct AstRender {298struct AstRender {
299 CodeGen *codegen;
300 int indent;299 int indent;
301 int indent_size;300 int indent_size;
302 FILE *f;301 FILE *f;
...@@ -1170,9 +1169,8 @@ static void render_node_extra(AstRender *ar, AstNode *node, bool grouped) {...@@ -1170,9 +1169,8 @@ static void render_node_extra(AstRender *ar, AstNode *node, bool grouped) {
1170}1169}
11711170
11721171
1173void ast_render(CodeGen *codegen, FILE *f, AstNode *node, int indent_size) {1172void ast_render(FILE *f, AstNode *node, int indent_size) {
1174 AstRender ar = {0};1173 AstRender ar = {0};
1175 ar.codegen = codegen;
1176 ar.f = f;1174 ar.f = f;
1177 ar.indent_size = indent_size;1175 ar.indent_size = indent_size;
1178 ar.indent = 0;1176 ar.indent = 0;
src/ast_render.hpp+1-1
...@@ -15,6 +15,6 @@...@@ -15,6 +15,6 @@
1515
16void ast_print(FILE *f, AstNode *node, int indent);16void ast_print(FILE *f, AstNode *node, int indent);
1717
18void ast_render(CodeGen *codegen, FILE *f, AstNode *node, int indent_size);18void ast_render(FILE *f, AstNode *node, int indent_size);
1919
20#endif20#endif
src/codegen.cpp+156-115
...@@ -8153,7 +8153,128 @@ static void detect_libc(CodeGen *g) {...@@ -8153,7 +8153,128 @@ static void detect_libc(CodeGen *g) {
8153 }8153 }
8154}8154}
81558155
8156AstNode *codegen_translate_c(CodeGen *g, Buf *full_path, bool use_userland_implementation) {8156// does not add the "cc" arg
8157void add_cc_args(CodeGen *g, ZigList<const char *> &args, const char *out_dep_path, bool translate_c) {
8158 if (out_dep_path != nullptr) {
8159 args.append("-MD");
8160 args.append("-MV");
8161 args.append("-MF");
8162 args.append(out_dep_path);
8163 }
8164
8165 args.append("-nostdinc");
8166 args.append("-fno-spell-checking");
8167
8168 if (translate_c) {
8169 // TODO these args shouldn't be special from the non-translate-c args, probably.
8170 args.append("-nobuiltininc");
8171 args.append("-nostdinc++");
8172 if (g->libc_link_lib == nullptr) {
8173 args.append("-nolibc");
8174 }
8175
8176 // this gives us access to preprocessing entities, presumably at
8177 // the cost of performance
8178 args.append("-Xclang");
8179 args.append("-detailed-preprocessing-record");
8180 } else {
8181 switch (g->err_color) {
8182 case ErrColorAuto:
8183 break;
8184 case ErrColorOff:
8185 args.append("-fno-color-diagnostics");
8186 args.append("-fno-caret-diagnostics");
8187 break;
8188 case ErrColorOn:
8189 args.append("-fcolor-diagnostics");
8190 args.append("-fcaret-diagnostics");
8191 break;
8192 }
8193 }
8194
8195 args.append("-isystem");
8196 args.append(buf_ptr(g->zig_c_headers_dir));
8197
8198 for (size_t i = 0; i < g->libc_include_dir_len; i += 1) {
8199 Buf *include_dir = g->libc_include_dir_list[i];
8200 args.append("-isystem");
8201 args.append(buf_ptr(include_dir));
8202 }
8203
8204 if (g->zig_target->is_native) {
8205 args.append("-march=native");
8206 } else {
8207 args.append("-target");
8208 args.append(buf_ptr(&g->triple_str));
8209 }
8210 if (g->zig_target->os == OsFreestanding) {
8211 args.append("-ffreestanding");
8212 }
8213
8214 if (!g->strip_debug_symbols) {
8215 args.append("-g");
8216 }
8217
8218 switch (g->build_mode) {
8219 case BuildModeDebug:
8220 // windows c runtime requires -D_DEBUG if using debug libraries
8221 args.append("-D_DEBUG");
8222
8223 if (g->libc_link_lib != nullptr) {
8224 args.append("-fstack-protector-strong");
8225 args.append("--param");
8226 args.append("ssp-buffer-size=4");
8227 } else {
8228 args.append("-fno-stack-protector");
8229 }
8230 args.append("-fno-omit-frame-pointer");
8231 break;
8232 case BuildModeSafeRelease:
8233 // See the comment in the BuildModeFastRelease case for why we pass -O2 rather
8234 // than -O3 here.
8235 args.append("-O2");
8236 if (g->libc_link_lib != nullptr) {
8237 args.append("-D_FORTIFY_SOURCE=2");
8238 args.append("-fstack-protector-strong");
8239 args.append("--param");
8240 args.append("ssp-buffer-size=4");
8241 } else {
8242 args.append("-fno-stack-protector");
8243 }
8244 args.append("-fomit-frame-pointer");
8245 break;
8246 case BuildModeFastRelease:
8247 args.append("-DNDEBUG");
8248 // Here we pass -O2 rather than -O3 because, although we do the equivalent of
8249 // -O3 in Zig code, the justification for the difference here is that Zig
8250 // has better detection and prevention of undefined behavior, so -O3 is safer for
8251 // Zig code than it is for C code. Also, C programmers are used to their code
8252 // running in -O2 and thus the -O3 path has been tested less.
8253 args.append("-O2");
8254 args.append("-fno-stack-protector");
8255 args.append("-fomit-frame-pointer");
8256 break;
8257 case BuildModeSmallRelease:
8258 args.append("-DNDEBUG");
8259 args.append("-Os");
8260 args.append("-fno-stack-protector");
8261 args.append("-fomit-frame-pointer");
8262 break;
8263 }
8264
8265 if (target_supports_fpic(g->zig_target) && g->have_pic) {
8266 args.append("-fPIC");
8267 }
8268
8269 for (size_t arg_i = 0; arg_i < g->clang_argv_len; arg_i += 1) {
8270 args.append(g->clang_argv[arg_i]);
8271 }
8272
8273
8274}
8275
8276void codegen_translate_c(CodeGen *g, Buf *full_path, FILE *out_file, bool use_userland_implementation) {
8277 Error err;
8157 Buf *src_basename = buf_alloc();8278 Buf *src_basename = buf_alloc();
8158 Buf *src_dirname = buf_alloc();8279 Buf *src_dirname = buf_alloc();
8159 os_path_split(full_path, src_dirname, src_basename);8280 os_path_split(full_path, src_dirname, src_basename);
...@@ -8165,30 +8286,45 @@ AstNode *codegen_translate_c(CodeGen *g, Buf *full_path, bool use_userland_imple...@@ -8165,30 +8286,45 @@ AstNode *codegen_translate_c(CodeGen *g, Buf *full_path, bool use_userland_imple
81658286
8166 init(g);8287 init(g);
81678288
8289 Stage2TranslateMode trans_mode = buf_ends_with_str(full_path, ".h") ?
8290 Stage2TranslateModeImport : Stage2TranslateModeTranslate;
8291
8292
8293 ZigList<const char *> clang_argv = {0};
8294 add_cc_args(g, clang_argv, nullptr, true);
8295
8296 clang_argv.append("-c");
8297 clang_argv.append(buf_ptr(full_path));
8298
8299 clang_argv.append(nullptr); // to make the [start...end] argument work
8300
8168 if (use_userland_implementation) {8301 if (use_userland_implementation) {
8169 // TODO improve this8302 Stage2Ast *ast;
8170 stage2_translate_c();8303 if ((err = stage2_translate_c(&ast, &clang_argv.at(0), &clang_argv.last(), trans_mode))) {
8171 zig_panic("TODO");8304 zig_panic("TODO");
8172 }8305 }
8306 stage2_render_ast(ast, out_file);
8307 } else {
8308 ZigList<ErrorMsg *> errors = {0};
8309 AstNode *root_node;
81738310
8174 ZigList<ErrorMsg *> errors = {0};8311 err = parse_h_file(g, &root_node, &clang_argv.at(0), &clang_argv.last(), trans_mode, &errors);
8175 AstNode *root_node;
8176 Error err = parse_h_file(&root_node, &errors, buf_ptr(full_path), g, nullptr);
81778312
8178 if (err == ErrorCCompileErrors && errors.length > 0) {8313 if (err == ErrorCCompileErrors && errors.length > 0) {
8179 for (size_t i = 0; i < errors.length; i += 1) {8314 for (size_t i = 0; i < errors.length; i += 1) {
8180 ErrorMsg *err_msg = errors.at(i);8315 ErrorMsg *err_msg = errors.at(i);
8181 print_err_msg(err_msg, g->err_color);8316 print_err_msg(err_msg, g->err_color);
8317 }
8318 exit(1);
8182 }8319 }
8183 exit(1);
8184 }
81858320
8186 if (err) {8321 if (err) {
8187 fprintf(stderr, "unable to parse C file: %s\n", err_str(err));8322 fprintf(stderr, "unable to parse C file: %s\n", err_str(err));
8188 exit(1);8323 exit(1);
8189 }8324 }
81908325
8191 return root_node;8326 ast_render(out_file, root_node, 4);
8327 }
8192}8328}
81938329
8194static ZigType *add_special_code(CodeGen *g, ZigPackage *package, const char *basename) {8330static ZigType *add_special_code(CodeGen *g, ZigPackage *package, const char *basename) {
...@@ -8507,93 +8643,7 @@ static void gen_c_object(CodeGen *g, Buf *self_exe_path, CFile *c_file) {...@@ -8507,93 +8643,7 @@ static void gen_c_object(CodeGen *g, Buf *self_exe_path, CFile *c_file) {
8507 args.append("cc");8643 args.append("cc");
85088644
8509 Buf *out_dep_path = buf_sprintf("%s.d", buf_ptr(out_obj_path));8645 Buf *out_dep_path = buf_sprintf("%s.d", buf_ptr(out_obj_path));
8510 args.append("-MD");8646 add_cc_args(g, args, buf_ptr(out_dep_path), false);
8511 args.append("-MV");
8512 args.append("-MF");
8513 args.append(buf_ptr(out_dep_path));
8514
8515 args.append("-nostdinc");
8516 args.append("-fno-spell-checking");
8517
8518 switch (g->err_color) {
8519 case ErrColorAuto:
8520 break;
8521 case ErrColorOff:
8522 args.append("-fno-color-diagnostics");
8523 args.append("-fno-caret-diagnostics");
8524 break;
8525 case ErrColorOn:
8526 args.append("-fcolor-diagnostics");
8527 args.append("-fcaret-diagnostics");
8528 break;
8529 }
8530
8531 args.append("-isystem");
8532 args.append(buf_ptr(g->zig_c_headers_dir));
8533
8534 for (size_t i = 0; i < g->libc_include_dir_len; i += 1) {
8535 Buf *include_dir = g->libc_include_dir_list[i];
8536 args.append("-isystem");
8537 args.append(buf_ptr(include_dir));
8538 }
8539
8540 if (g->zig_target->is_native) {
8541 args.append("-march=native");
8542 } else {
8543 args.append("-target");
8544 args.append(buf_ptr(&g->triple_str));
8545 }
8546 if (g->zig_target->os == OsFreestanding) {
8547 args.append("-ffreestanding");
8548 }
8549
8550 if (!g->strip_debug_symbols) {
8551 args.append("-g");
8552 }
8553
8554 switch (g->build_mode) {
8555 case BuildModeDebug:
8556 if (g->libc_link_lib != nullptr) {
8557 args.append("-fstack-protector-strong");
8558 args.append("--param");
8559 args.append("ssp-buffer-size=4");
8560 } else {
8561 args.append("-fno-stack-protector");
8562 }
8563 args.append("-fno-omit-frame-pointer");
8564 break;
8565 case BuildModeSafeRelease:
8566 // See the comment in the BuildModeFastRelease case for why we pass -O2 rather
8567 // than -O3 here.
8568 args.append("-O2");
8569 if (g->libc_link_lib != nullptr) {
8570 args.append("-D_FORTIFY_SOURCE=2");
8571 args.append("-fstack-protector-strong");
8572 args.append("--param");
8573 args.append("ssp-buffer-size=4");
8574 } else {
8575 args.append("-fno-stack-protector");
8576 }
8577 args.append("-fomit-frame-pointer");
8578 break;
8579 case BuildModeFastRelease:
8580 args.append("-DNDEBUG");
8581 // Here we pass -O2 rather than -O3 because, although we do the equivalent of
8582 // -O3 in Zig code, the justification for the difference here is that Zig
8583 // has better detection and prevention of undefined behavior, so -O3 is safer for
8584 // Zig code than it is for C code. Also, C programmers are used to their code
8585 // running in -O2 and thus the -O3 path has been tested less.
8586 args.append("-O2");
8587 args.append("-fno-stack-protector");
8588 args.append("-fomit-frame-pointer");
8589 break;
8590 case BuildModeSmallRelease:
8591 args.append("-DNDEBUG");
8592 args.append("-Os");
8593 args.append("-fno-stack-protector");
8594 args.append("-fomit-frame-pointer");
8595 break;
8596 }
85978647
8598 args.append("-o");8648 args.append("-o");
8599 args.append(buf_ptr(out_obj_path));8649 args.append(buf_ptr(out_obj_path));
...@@ -8601,19 +8651,10 @@ static void gen_c_object(CodeGen *g, Buf *self_exe_path, CFile *c_file) {...@@ -8601,19 +8651,10 @@ static void gen_c_object(CodeGen *g, Buf *self_exe_path, CFile *c_file) {
8601 args.append("-c");8651 args.append("-c");
8602 args.append(buf_ptr(c_source_file));8652 args.append(buf_ptr(c_source_file));
86038653
8604 if (target_supports_fpic(g->zig_target) && g->have_pic) {
8605 args.append("-fPIC");
8606 }
8607
8608 for (size_t arg_i = 0; arg_i < g->clang_argv_len; arg_i += 1) {
8609 args.append(g->clang_argv[arg_i]);
8610 }
8611
8612 for (size_t arg_i = 0; arg_i < c_file->args.length; arg_i += 1) {8654 for (size_t arg_i = 0; arg_i < c_file->args.length; arg_i += 1) {
8613 args.append(c_file->args.at(arg_i));8655 args.append(c_file->args.at(arg_i));
8614 }8656 }
86158657
8616
8617 if (g->verbose_cc) {8658 if (g->verbose_cc) {
8618 print_zig_cc_cmd("zig", &args);8659 print_zig_cc_cmd("zig", &args);
8619 }8660 }
src/codegen.hpp+2-1
...@@ -12,6 +12,7 @@...@@ -12,6 +12,7 @@
12#include "errmsg.hpp"12#include "errmsg.hpp"
13#include "target.hpp"13#include "target.hpp"
14#include "libc_installation.hpp"14#include "libc_installation.hpp"
15#include "userland.h"
1516
16#include <stdio.h>17#include <stdio.h>
1718
...@@ -50,7 +51,7 @@ ZigPackage *codegen_create_package(CodeGen *g, const char *root_src_dir, const c...@@ -50,7 +51,7 @@ ZigPackage *codegen_create_package(CodeGen *g, const char *root_src_dir, const c
50void codegen_add_assembly(CodeGen *g, Buf *path);51void codegen_add_assembly(CodeGen *g, Buf *path);
51void codegen_add_object(CodeGen *g, Buf *object_path);52void codegen_add_object(CodeGen *g, Buf *object_path);
5253
53AstNode *codegen_translate_c(CodeGen *g, Buf *path, bool use_userland_implementation);54void codegen_translate_c(CodeGen *g, Buf *full_path, FILE *out_file, bool use_userland_implementation);
5455
55Buf *codegen_generate_builtin_source(CodeGen *g);56Buf *codegen_generate_builtin_source(CodeGen *g);
5657
src/error.cpp+4
...@@ -50,6 +50,10 @@ const char *err_str(Error err) {...@@ -50,6 +50,10 @@ const char *err_str(Error err) {
50 case ErrorUnexpectedWriteFailure: return "unexpected write failure";50 case ErrorUnexpectedWriteFailure: return "unexpected write failure";
51 case ErrorUnexpectedSeekFailure: return "unexpected seek failure";51 case ErrorUnexpectedSeekFailure: return "unexpected seek failure";
52 case ErrorUnexpectedFileTruncationFailure: return "unexpected file truncation failure";52 case ErrorUnexpectedFileTruncationFailure: return "unexpected file truncation failure";
53 case ErrorUnimplemented: return "unimplemented";
54 case ErrorOperationAborted: return "operation aborted";
55 case ErrorBrokenPipe: return "broken pipe";
56 case ErrorNoSpaceLeft: return "no space left";
53 }57 }
54 return "(invalid error)";58 return "(invalid error)";
55}59}
src/error.hpp+1-43
...@@ -8,49 +8,7 @@...@@ -8,49 +8,7 @@
8#ifndef ERROR_HPP8#ifndef ERROR_HPP
9#define ERROR_HPP9#define ERROR_HPP
1010
11enum Error {11#include "userland.h"
12 ErrorNone,
13 ErrorNoMem,
14 ErrorInvalidFormat,
15 ErrorSemanticAnalyzeFail,
16 ErrorAccess,
17 ErrorInterrupted,
18 ErrorSystemResources,
19 ErrorFileNotFound,
20 ErrorFileSystem,
21 ErrorFileTooBig,
22 ErrorDivByZero,
23 ErrorOverflow,
24 ErrorPathAlreadyExists,
25 ErrorUnexpected,
26 ErrorExactDivRemainder,
27 ErrorNegativeDenominator,
28 ErrorShiftedOutOneBits,
29 ErrorCCompileErrors,
30 ErrorEndOfFile,
31 ErrorIsDir,
32 ErrorNotDir,
33 ErrorUnsupportedOperatingSystem,
34 ErrorSharingViolation,
35 ErrorPipeBusy,
36 ErrorPrimitiveTypeNotFound,
37 ErrorCacheUnavailable,
38 ErrorPathTooLong,
39 ErrorCCompilerCannotFindFile,
40 ErrorReadingDepFile,
41 ErrorInvalidDepFile,
42 ErrorMissingArchitecture,
43 ErrorMissingOperatingSystem,
44 ErrorUnknownArchitecture,
45 ErrorUnknownOperatingSystem,
46 ErrorUnknownABI,
47 ErrorInvalidFilename,
48 ErrorDiskQuota,
49 ErrorDiskSpace,
50 ErrorUnexpectedWriteFailure,
51 ErrorUnexpectedSeekFailure,
52 ErrorUnexpectedFileTruncationFailure,
53};
5412
55const char *err_str(Error err);13const char *err_str(Error err);
5614
src/ir.cpp+17-5
...@@ -10350,7 +10350,7 @@ ConstExprValue *ir_eval_const_value(CodeGen *codegen, Scope *scope, AstNode *nod...@@ -10350,7 +10350,7 @@ ConstExprValue *ir_eval_const_value(CodeGen *codegen, Scope *scope, AstNode *nod
1035010350
10351 if (codegen->verbose_ir) {10351 if (codegen->verbose_ir) {
10352 fprintf(stderr, "\nSource: ");10352 fprintf(stderr, "\nSource: ");
10353 ast_render(codegen, stderr, node, 4);10353 ast_render(stderr, node, 4);
10354 fprintf(stderr, "\n{ // (IR)\n");10354 fprintf(stderr, "\n{ // (IR)\n");
10355 ir_print(codegen, stderr, ir_executable, 2);10355 ir_print(codegen, stderr, ir_executable, 2);
10356 fprintf(stderr, "}\n");10356 fprintf(stderr, "}\n");
...@@ -19092,11 +19092,23 @@ static IrInstruction *ir_analyze_instruction_c_import(IrAnalyze *ira, IrInstruct...@@ -19092,11 +19092,23 @@ static IrInstruction *ir_analyze_instruction_c_import(IrAnalyze *ira, IrInstruct
19092 fprintf(stderr, "@cImport source: %s\n", buf_ptr(&tmp_c_file_path));19092 fprintf(stderr, "@cImport source: %s\n", buf_ptr(&tmp_c_file_path));
19093 }19093 }
1909419094
19095 ZigList<ErrorMsg *> errors = {0};
19096
19097 Buf *tmp_dep_file = buf_sprintf("%s.d", buf_ptr(&tmp_c_file_path));19095 Buf *tmp_dep_file = buf_sprintf("%s.d", buf_ptr(&tmp_c_file_path));
19096
19097 ZigList<const char *> clang_argv = {0};
19098
19099 add_cc_args(ira->codegen, clang_argv, buf_ptr(tmp_dep_file), true);
19100
19101 clang_argv.append("-c");
19102 clang_argv.append(buf_ptr(&tmp_c_file_path));
19103
19104 clang_argv.append(nullptr); // to make the [start...end] argument work
19105
19106 ZigList<ErrorMsg *> errors = {0};
19098 AstNode *root_node;19107 AstNode *root_node;
19099 if ((err = parse_h_file(&root_node, &errors, buf_ptr(&tmp_c_file_path), ira->codegen, tmp_dep_file))) {19108
19109 if ((err = parse_h_file(ira->codegen, &root_node, &clang_argv.at(0), &clang_argv.last(),
19110 Stage2TranslateModeImport, &errors)))
19111 {
19100 if (err != ErrorCCompileErrors) {19112 if (err != ErrorCCompileErrors) {
19101 ir_add_error_node(ira, node, buf_sprintf("C import failed: %s", err_str(err)));19113 ir_add_error_node(ira, node, buf_sprintf("C import failed: %s", err_str(err)));
19102 return ira->codegen->invalid_instruction;19114 return ira->codegen->invalid_instruction;
...@@ -19139,7 +19151,7 @@ static IrInstruction *ir_analyze_instruction_c_import(IrAnalyze *ira, IrInstruct...@@ -19139,7 +19151,7 @@ static IrInstruction *ir_analyze_instruction_c_import(IrAnalyze *ira, IrInstruct
19139 buf_sprintf("C import failed: unable to open output file: %s", strerror(errno)));19151 buf_sprintf("C import failed: unable to open output file: %s", strerror(errno)));
19140 return ira->codegen->invalid_instruction;19152 return ira->codegen->invalid_instruction;
19141 }19153 }
19142 ast_render(ira->codegen, out_file, root_node, 4);19154 ast_render(out_file, root_node, 4);
19143 if (fclose(out_file) != 0) {19155 if (fclose(out_file) != 0) {
19144 ir_add_error_node(ira, node,19156 ir_add_error_node(ira, node,
19145 buf_sprintf("C import failed: unable to write to output file: %s", strerror(errno)));19157 buf_sprintf("C import failed: unable to write to output file: %s", strerror(errno)));
src/main.cpp+1-2
...@@ -1188,8 +1188,7 @@ int main(int argc, char **argv) {...@@ -1188,8 +1188,7 @@ int main(int argc, char **argv) {
1188 zig_unreachable();1188 zig_unreachable();
1189 }1189 }
1190 } else if (cmd == CmdTranslateC || cmd == CmdTranslateCUserland) {1190 } else if (cmd == CmdTranslateC || cmd == CmdTranslateCUserland) {
1191 AstNode *root_node = codegen_translate_c(g, in_file_buf, cmd == CmdTranslateCUserland);1191 codegen_translate_c(g, in_file_buf, stdout, cmd == CmdTranslateCUserland);
1192 ast_render(g, stdout, root_node, 4);
1193 if (timing_info)1192 if (timing_info)
1194 codegen_print_timing_report(g, stderr);1193 codegen_print_timing_report(g, stderr);
1195 return EXIT_SUCCESS;1194 return EXIT_SUCCESS;
src/translate_c.cpp+4-90
...@@ -5018,14 +5018,14 @@ static void process_preprocessor_entities(Context *c, ZigClangASTUnit *zunit) {...@@ -5018,14 +5018,14 @@ static void process_preprocessor_entities(Context *c, ZigClangASTUnit *zunit) {
5018 }5018 }
5019}5019}
50205020
5021Error parse_h_file(AstNode **out_root_node, ZigList<ErrorMsg *> *errors, const char *target_file,5021Error parse_h_file(CodeGen *codegen, AstNode **out_root_node, const char **args_begin, const char **args_end,
5022 CodeGen *codegen, Buf *tmp_dep_file)5022 Stage2TranslateMode mode, ZigList<ErrorMsg *> *errors)
5023{5023{
5024 Context context = {0};5024 Context context = {0};
5025 Context *c = &context;5025 Context *c = &context;
5026 c->warnings_on = codegen->verbose_cimport;5026 c->warnings_on = codegen->verbose_cimport;
5027 c->errors = errors;5027 c->errors = errors;
5028 if (buf_ends_with_str(buf_create_from_str(target_file), ".h")) {5028 if (mode == Stage2TranslateModeImport) {
5029 c->visib_mod = VisibModPub;5029 c->visib_mod = VisibModPub;
5030 c->want_export = false;5030 c->want_export = false;
5031 } else {5031 } else {
...@@ -5039,92 +5039,6 @@ Error parse_h_file(AstNode **out_root_node, ZigList<ErrorMsg *> *errors, const c...@@ -5039,92 +5039,6 @@ Error parse_h_file(AstNode **out_root_node, ZigList<ErrorMsg *> *errors, const c
5039 c->codegen = codegen;5039 c->codegen = codegen;
5040 c->global_scope = trans_scope_root_create(c);5040 c->global_scope = trans_scope_root_create(c);
50415041
5042 ZigList<const char *> clang_argv = {0};
5043
5044 clang_argv.append("-x");
5045 clang_argv.append("c");
5046
5047 if (tmp_dep_file != nullptr) {
5048 clang_argv.append("-MD");
5049 clang_argv.append("-MV");
5050 clang_argv.append("-MF");
5051 clang_argv.append(buf_ptr(tmp_dep_file));
5052 }
5053
5054 if (c->codegen->zig_target->is_native) {
5055 char *ZIG_PARSEC_CFLAGS = getenv("ZIG_NATIVE_PARSEC_CFLAGS");
5056 if (ZIG_PARSEC_CFLAGS) {
5057 Buf tmp_buf = BUF_INIT;
5058 char *start = ZIG_PARSEC_CFLAGS;
5059 char *space = strstr(start, " ");
5060 while (space) {
5061 if (space - start > 0) {
5062 buf_init_from_mem(&tmp_buf, start, space - start);
5063 clang_argv.append(buf_ptr(buf_create_from_buf(&tmp_buf)));
5064 }
5065 start = space + 1;
5066 space = strstr(start, " ");
5067 }
5068 buf_init_from_str(&tmp_buf, start);
5069 clang_argv.append(buf_ptr(buf_create_from_buf(&tmp_buf)));
5070 }
5071 }
5072
5073 clang_argv.append("-nobuiltininc");
5074 clang_argv.append("-nostdinc");
5075 clang_argv.append("-nostdinc++");
5076 if (codegen->libc_link_lib == nullptr) {
5077 clang_argv.append("-nolibc");
5078 }
5079
5080 clang_argv.append("-isystem");
5081 clang_argv.append(buf_ptr(codegen->zig_c_headers_dir));
5082
5083 for (size_t i = 0; i < codegen->libc_include_dir_len; i += 1) {
5084 Buf *include_dir = codegen->libc_include_dir_list[i];
5085 clang_argv.append("-isystem");
5086 clang_argv.append(buf_ptr(include_dir));
5087 }
5088
5089 // windows c runtime requires -D_DEBUG if using debug libraries
5090 if (codegen->build_mode == BuildModeDebug) {
5091 clang_argv.append("-D_DEBUG");
5092 }
5093
5094 for (size_t i = 0; i < codegen->clang_argv_len; i += 1) {
5095 clang_argv.append(codegen->clang_argv[i]);
5096 }
5097
5098 // we don't need spell checking and it slows things down
5099 clang_argv.append("-fno-spell-checking");
5100
5101 // this gives us access to preprocessing entities, presumably at
5102 // the cost of performance
5103 clang_argv.append("-Xclang");
5104 clang_argv.append("-detailed-preprocessing-record");
5105
5106 if (c->codegen->zig_target->is_native) {
5107 clang_argv.append("-march=native");
5108 } else {
5109 clang_argv.append("-target");
5110 clang_argv.append(buf_ptr(&c->codegen->triple_str));
5111 }
5112 if (c->codegen->zig_target->os == OsFreestanding) {
5113 clang_argv.append("-ffreestanding");
5114 }
5115
5116 clang_argv.append(target_file);
5117
5118 if (codegen->verbose_cc) {
5119 fprintf(stderr, "clang");
5120 for (size_t i = 0; i < clang_argv.length; i += 1) {
5121 fprintf(stderr, " %s", clang_argv.at(i));
5122 }
5123 fprintf(stderr, "\n");
5124 }
5125
5126 // to make the [start...end] argument work
5127 clang_argv.append(nullptr);
51285042
5129 clang::IntrusiveRefCntPtr<clang::DiagnosticsEngine> diags(clang::CompilerInstance::createDiagnostics(new clang::DiagnosticOptions));5043 clang::IntrusiveRefCntPtr<clang::DiagnosticsEngine> diags(clang::CompilerInstance::createDiagnostics(new clang::DiagnosticOptions));
51305044
...@@ -5139,7 +5053,7 @@ Error parse_h_file(AstNode **out_root_node, ZigList<ErrorMsg *> *errors, const c...@@ -5139,7 +5053,7 @@ Error parse_h_file(AstNode **out_root_node, ZigList<ErrorMsg *> *errors, const c
5139 const char *resources_path = buf_ptr(codegen->zig_c_headers_dir);5053 const char *resources_path = buf_ptr(codegen->zig_c_headers_dir);
5140 std::unique_ptr<clang::ASTUnit> err_unit;5054 std::unique_ptr<clang::ASTUnit> err_unit;
5141 ZigClangASTUnit *ast_unit = reinterpret_cast<ZigClangASTUnit *>(clang::ASTUnit::LoadFromCommandLine(5055 ZigClangASTUnit *ast_unit = reinterpret_cast<ZigClangASTUnit *>(clang::ASTUnit::LoadFromCommandLine(
5142 &clang_argv.at(0), &clang_argv.last(),5056 args_begin, args_end,
5143 pch_container_ops, diags, resources_path,5057 pch_container_ops, diags, resources_path,
5144 only_local_decls, capture_diagnostics, clang::None, true, 0, clang::TU_Complete,5058 only_local_decls, capture_diagnostics, clang::None, true, 0, clang::TU_Complete,
5145 false, false, allow_pch_with_compiler_errors, clang::SkipFunctionBodiesScope::None,5059 false, false, allow_pch_with_compiler_errors, clang::SkipFunctionBodiesScope::None,
src/translate_c.hpp+2-2
...@@ -11,7 +11,7 @@...@@ -11,7 +11,7 @@
1111
12#include "all_types.hpp"12#include "all_types.hpp"
1313
14Error parse_h_file(AstNode **out_root_node, ZigList<ErrorMsg *> *errors, const char *target_file,14Error parse_h_file(CodeGen *codegen, AstNode **out_root_node, const char **args_begin, const char **args_end,
15 CodeGen *codegen, Buf *tmp_dep_file);15 Stage2TranslateMode mode, ZigList<ErrorMsg *> *errors);
1616
17#endif17#endif
src/userland.cpp+9-1
...@@ -2,11 +2,14 @@...@@ -2,11 +2,14 @@
2// src-self-hosted/stage1.zig2// src-self-hosted/stage1.zig
33
4#include "userland.h"4#include "userland.h"
5#include "ast_render.hpp"
5#include <stdio.h>6#include <stdio.h>
6#include <stdlib.h>7#include <stdlib.h>
7#include <string.h>8#include <string.h>
89
9void stage2_translate_c(void) {10Error stage2_translate_c(struct Stage2Ast **out_ast,
11 const char **args_begin, const char **args_end, enum Stage2TranslateMode mode)
12{
10 const char *msg = "stage0 called stage2_translate_c";13 const char *msg = "stage0 called stage2_translate_c";
11 stage2_panic(msg, strlen(msg));14 stage2_panic(msg, strlen(msg));
12}15}
...@@ -22,3 +25,8 @@ void stage2_panic(const char *ptr, size_t len) {...@@ -22,3 +25,8 @@ void stage2_panic(const char *ptr, size_t len) {
22 fflush(stderr);25 fflush(stderr);
23 abort();26 abort();
24}27}
28
29void stage2_render_ast(struct Stage2Ast *ast, FILE *output_file) {
30 const char *msg = "stage0 called stage2_render_ast";
31 stage2_panic(msg, strlen(msg));
32}
src/userland.h+70-2
...@@ -9,6 +9,7 @@...@@ -9,6 +9,7 @@
9#define ZIG_USERLAND_H9#define ZIG_USERLAND_H
1010
11#include <stddef.h>11#include <stddef.h>
12#include <stdio.h>
1213
13#ifdef __cplusplus14#ifdef __cplusplus
14#define ZIG_USERLAND_EXTERN_C extern "C"15#define ZIG_USERLAND_EXTERN_C extern "C"
...@@ -16,10 +17,77 @@...@@ -16,10 +17,77 @@
16#define ZIG_USERLAND_EXTERN_C17#define ZIG_USERLAND_EXTERN_C
17#endif18#endif
1819
19ZIG_USERLAND_EXTERN_C void stage2_translate_c(void);20#if defined(_MSC_VER)
21#define ZIG_USERLAND_ATTRIBUTE_NORETURN __declspec(noreturn)
22#else
23#define ZIG_USERLAND_ATTRIBUTE_NORETURN __attribute__((noreturn))
24#endif
25
26// The types and declarations in this file must match both those in userland.cpp and
27// src-self-hosted/stage1.zig.
28
29enum Error {
30 ErrorNone,
31 ErrorNoMem,
32 ErrorInvalidFormat,
33 ErrorSemanticAnalyzeFail,
34 ErrorAccess,
35 ErrorInterrupted,
36 ErrorSystemResources,
37 ErrorFileNotFound,
38 ErrorFileSystem,
39 ErrorFileTooBig,
40 ErrorDivByZero,
41 ErrorOverflow,
42 ErrorPathAlreadyExists,
43 ErrorUnexpected,
44 ErrorExactDivRemainder,
45 ErrorNegativeDenominator,
46 ErrorShiftedOutOneBits,
47 ErrorCCompileErrors,
48 ErrorEndOfFile,
49 ErrorIsDir,
50 ErrorNotDir,
51 ErrorUnsupportedOperatingSystem,
52 ErrorSharingViolation,
53 ErrorPipeBusy,
54 ErrorPrimitiveTypeNotFound,
55 ErrorCacheUnavailable,
56 ErrorPathTooLong,
57 ErrorCCompilerCannotFindFile,
58 ErrorReadingDepFile,
59 ErrorInvalidDepFile,
60 ErrorMissingArchitecture,
61 ErrorMissingOperatingSystem,
62 ErrorUnknownArchitecture,
63 ErrorUnknownOperatingSystem,
64 ErrorUnknownABI,
65 ErrorInvalidFilename,
66 ErrorDiskQuota,
67 ErrorDiskSpace,
68 ErrorUnexpectedWriteFailure,
69 ErrorUnexpectedSeekFailure,
70 ErrorUnexpectedFileTruncationFailure,
71 ErrorUnimplemented,
72 ErrorOperationAborted,
73 ErrorBrokenPipe,
74 ErrorNoSpaceLeft,
75};
76
77enum Stage2TranslateMode {
78 Stage2TranslateModeImport,
79 Stage2TranslateModeTranslate,
80};
81
82struct Stage2Ast;
83
84ZIG_USERLAND_EXTERN_C Error stage2_translate_c(struct Stage2Ast **out_ast,
85 const char **args_begin, const char **args_end, enum Stage2TranslateMode mode);
86
87ZIG_USERLAND_EXTERN_C void stage2_render_ast(struct Stage2Ast *ast, FILE *output_file);
2088
21ZIG_USERLAND_EXTERN_C void stage2_zen(const char **ptr, size_t *len);89ZIG_USERLAND_EXTERN_C void stage2_zen(const char **ptr, size_t *len);
2290
23ZIG_USERLAND_EXTERN_C void stage2_panic(const char *ptr, size_t len);91ZIG_USERLAND_EXTERN_C ZIG_USERLAND_ATTRIBUTE_NORETURN void stage2_panic(const char *ptr, size_t len);
2492
25#endif93#endif
src/zig_clang.h+84-83
...@@ -9,6 +9,7 @@...@@ -9,6 +9,7 @@
9#define ZIG_ZIG_CLANG_H9#define ZIG_ZIG_CLANG_H
1010
11#include <inttypes.h>11#include <inttypes.h>
12#include <stdbool.h>
1213
13#ifdef __cplusplus14#ifdef __cplusplus
14#define ZIG_EXTERN_C extern "C"15#define ZIG_EXTERN_C extern "C"
...@@ -17,8 +18,8 @@...@@ -17,8 +18,8 @@
17#endif18#endif
1819
19// ATTENTION: If you modify this file, be sure to update the corresponding20// ATTENTION: If you modify this file, be sure to update the corresponding
20// extern function declarations in the self-hosted compiler.21// extern function declarations in the self-hosted compiler file
21// Note: not yet, we don't have the corresponding clang.zig yet.22// src-self-hosted/clang.zig.
2223
23struct ZigClangSourceLocation {24struct ZigClangSourceLocation {
24 unsigned ID;25 unsigned ID;
...@@ -486,86 +487,86 @@ enum ZigClangAPValueKind {...@@ -486,86 +487,86 @@ enum ZigClangAPValueKind {
486 ZigClangAPValueAddrLabelDiff,487 ZigClangAPValueAddrLabelDiff,
487};488};
488489
489ZIG_EXTERN_C ZigClangSourceLocation ZigClangSourceManager_getSpellingLoc(const ZigClangSourceManager *,490ZIG_EXTERN_C struct ZigClangSourceLocation ZigClangSourceManager_getSpellingLoc(const struct ZigClangSourceManager *,
490 ZigClangSourceLocation Loc);491 struct ZigClangSourceLocation Loc);
491ZIG_EXTERN_C const char *ZigClangSourceManager_getFilename(const ZigClangSourceManager *,492ZIG_EXTERN_C const char *ZigClangSourceManager_getFilename(const struct ZigClangSourceManager *,
492 ZigClangSourceLocation SpellingLoc);493 struct ZigClangSourceLocation SpellingLoc);
493ZIG_EXTERN_C unsigned ZigClangSourceManager_getSpellingLineNumber(const ZigClangSourceManager *,494ZIG_EXTERN_C unsigned ZigClangSourceManager_getSpellingLineNumber(const struct ZigClangSourceManager *,
494 ZigClangSourceLocation Loc);495 struct ZigClangSourceLocation Loc);
495ZIG_EXTERN_C unsigned ZigClangSourceManager_getSpellingColumnNumber(const ZigClangSourceManager *,496ZIG_EXTERN_C unsigned ZigClangSourceManager_getSpellingColumnNumber(const struct ZigClangSourceManager *,
496 ZigClangSourceLocation Loc);497 struct ZigClangSourceLocation Loc);
497ZIG_EXTERN_C const char* ZigClangSourceManager_getCharacterData(const ZigClangSourceManager *,498ZIG_EXTERN_C const char* ZigClangSourceManager_getCharacterData(const struct ZigClangSourceManager *,
498 ZigClangSourceLocation SL);499 struct ZigClangSourceLocation SL);
499500
500ZIG_EXTERN_C ZigClangQualType ZigClangASTContext_getPointerType(const ZigClangASTContext*, ZigClangQualType T);501ZIG_EXTERN_C struct ZigClangQualType ZigClangASTContext_getPointerType(const struct ZigClangASTContext*, struct ZigClangQualType T);
501502
502ZIG_EXTERN_C ZigClangASTContext *ZigClangASTUnit_getASTContext(ZigClangASTUnit *);503ZIG_EXTERN_C struct ZigClangASTContext *ZigClangASTUnit_getASTContext(struct ZigClangASTUnit *);
503ZIG_EXTERN_C ZigClangSourceManager *ZigClangASTUnit_getSourceManager(ZigClangASTUnit *);504ZIG_EXTERN_C struct ZigClangSourceManager *ZigClangASTUnit_getSourceManager(struct ZigClangASTUnit *);
504ZIG_EXTERN_C bool ZigClangASTUnit_visitLocalTopLevelDecls(ZigClangASTUnit *, void *context, 505ZIG_EXTERN_C bool ZigClangASTUnit_visitLocalTopLevelDecls(struct ZigClangASTUnit *, void *context,
505 bool (*Fn)(void *context, const ZigClangDecl *decl));506 bool (*Fn)(void *context, const struct ZigClangDecl *decl));
506507
507ZIG_EXTERN_C const ZigClangRecordDecl *ZigClangRecordType_getDecl(const ZigClangRecordType *record_ty);508ZIG_EXTERN_C const struct ZigClangRecordDecl *ZigClangRecordType_getDecl(const struct ZigClangRecordType *record_ty);
508ZIG_EXTERN_C const ZigClangEnumDecl *ZigClangEnumType_getDecl(const ZigClangEnumType *record_ty);509ZIG_EXTERN_C const struct ZigClangEnumDecl *ZigClangEnumType_getDecl(const struct ZigClangEnumType *record_ty);
509510
510ZIG_EXTERN_C const ZigClangTagDecl *ZigClangRecordDecl_getCanonicalDecl(const ZigClangRecordDecl *record_decl);511ZIG_EXTERN_C const struct ZigClangTagDecl *ZigClangRecordDecl_getCanonicalDecl(const struct ZigClangRecordDecl *record_decl);
511ZIG_EXTERN_C const ZigClangTagDecl *ZigClangEnumDecl_getCanonicalDecl(const ZigClangEnumDecl *);512ZIG_EXTERN_C const struct ZigClangTagDecl *ZigClangEnumDecl_getCanonicalDecl(const struct ZigClangEnumDecl *);
512ZIG_EXTERN_C const ZigClangTypedefNameDecl *ZigClangTypedefNameDecl_getCanonicalDecl(const ZigClangTypedefNameDecl *);513ZIG_EXTERN_C const struct ZigClangTypedefNameDecl *ZigClangTypedefNameDecl_getCanonicalDecl(const struct ZigClangTypedefNameDecl *);
513514
514ZIG_EXTERN_C const ZigClangRecordDecl *ZigClangRecordDecl_getDefinition(const ZigClangRecordDecl *);515ZIG_EXTERN_C const struct ZigClangRecordDecl *ZigClangRecordDecl_getDefinition(const struct ZigClangRecordDecl *);
515ZIG_EXTERN_C const ZigClangEnumDecl *ZigClangEnumDecl_getDefinition(const ZigClangEnumDecl *);516ZIG_EXTERN_C const struct ZigClangEnumDecl *ZigClangEnumDecl_getDefinition(const struct ZigClangEnumDecl *);
516517
517ZIG_EXTERN_C ZigClangSourceLocation ZigClangRecordDecl_getLocation(const ZigClangRecordDecl *);518ZIG_EXTERN_C struct ZigClangSourceLocation ZigClangRecordDecl_getLocation(const struct ZigClangRecordDecl *);
518ZIG_EXTERN_C ZigClangSourceLocation ZigClangEnumDecl_getLocation(const ZigClangEnumDecl *);519ZIG_EXTERN_C struct ZigClangSourceLocation ZigClangEnumDecl_getLocation(const struct ZigClangEnumDecl *);
519ZIG_EXTERN_C ZigClangSourceLocation ZigClangTypedefNameDecl_getLocation(const ZigClangTypedefNameDecl *);520ZIG_EXTERN_C struct ZigClangSourceLocation ZigClangTypedefNameDecl_getLocation(const struct ZigClangTypedefNameDecl *);
520521
521ZIG_EXTERN_C bool ZigClangRecordDecl_isUnion(const ZigClangRecordDecl *record_decl);522ZIG_EXTERN_C bool ZigClangRecordDecl_isUnion(const struct ZigClangRecordDecl *record_decl);
522ZIG_EXTERN_C bool ZigClangRecordDecl_isStruct(const ZigClangRecordDecl *record_decl);523ZIG_EXTERN_C bool ZigClangRecordDecl_isStruct(const struct ZigClangRecordDecl *record_decl);
523ZIG_EXTERN_C bool ZigClangRecordDecl_isAnonymousStructOrUnion(const ZigClangRecordDecl *record_decl);524ZIG_EXTERN_C bool ZigClangRecordDecl_isAnonymousStructOrUnion(const struct ZigClangRecordDecl *record_decl);
524525
525ZIG_EXTERN_C ZigClangQualType ZigClangEnumDecl_getIntegerType(const ZigClangEnumDecl *);526ZIG_EXTERN_C struct ZigClangQualType ZigClangEnumDecl_getIntegerType(const struct ZigClangEnumDecl *);
526527
527ZIG_EXTERN_C const char *ZigClangDecl_getName_bytes_begin(const ZigClangDecl *decl);528ZIG_EXTERN_C const char *ZigClangDecl_getName_bytes_begin(const struct ZigClangDecl *decl);
528529
529ZIG_EXTERN_C bool ZigClangSourceLocation_eq(ZigClangSourceLocation a, ZigClangSourceLocation b);530ZIG_EXTERN_C bool ZigClangSourceLocation_eq(struct ZigClangSourceLocation a, struct ZigClangSourceLocation b);
530531
531ZIG_EXTERN_C const ZigClangTypedefNameDecl *ZigClangTypedefType_getDecl(const ZigClangTypedefType *);532ZIG_EXTERN_C const struct ZigClangTypedefNameDecl *ZigClangTypedefType_getDecl(const struct ZigClangTypedefType *);
532ZIG_EXTERN_C ZigClangQualType ZigClangTypedefNameDecl_getUnderlyingType(const ZigClangTypedefNameDecl *);533ZIG_EXTERN_C struct ZigClangQualType ZigClangTypedefNameDecl_getUnderlyingType(const struct ZigClangTypedefNameDecl *);
533534
534ZIG_EXTERN_C ZigClangQualType ZigClangQualType_getCanonicalType(ZigClangQualType);535ZIG_EXTERN_C struct ZigClangQualType ZigClangQualType_getCanonicalType(struct ZigClangQualType);
535ZIG_EXTERN_C const ZigClangType *ZigClangQualType_getTypePtr(ZigClangQualType);536ZIG_EXTERN_C const struct ZigClangType *ZigClangQualType_getTypePtr(struct ZigClangQualType);
536ZIG_EXTERN_C void ZigClangQualType_addConst(ZigClangQualType *);537ZIG_EXTERN_C void ZigClangQualType_addConst(struct ZigClangQualType *);
537ZIG_EXTERN_C bool ZigClangQualType_eq(ZigClangQualType, ZigClangQualType);538ZIG_EXTERN_C bool ZigClangQualType_eq(struct ZigClangQualType, struct ZigClangQualType);
538ZIG_EXTERN_C bool ZigClangQualType_isConstQualified(ZigClangQualType);539ZIG_EXTERN_C bool ZigClangQualType_isConstQualified(struct ZigClangQualType);
539ZIG_EXTERN_C bool ZigClangQualType_isVolatileQualified(ZigClangQualType);540ZIG_EXTERN_C bool ZigClangQualType_isVolatileQualified(struct ZigClangQualType);
540ZIG_EXTERN_C bool ZigClangQualType_isRestrictQualified(ZigClangQualType);541ZIG_EXTERN_C bool ZigClangQualType_isRestrictQualified(struct ZigClangQualType);
541542
542ZIG_EXTERN_C ZigClangTypeClass ZigClangType_getTypeClass(const ZigClangType *self);543ZIG_EXTERN_C enum ZigClangTypeClass ZigClangType_getTypeClass(const struct ZigClangType *self);
543ZIG_EXTERN_C bool ZigClangType_isVoidType(const ZigClangType *self);544ZIG_EXTERN_C bool ZigClangType_isVoidType(const struct ZigClangType *self);
544ZIG_EXTERN_C const char *ZigClangType_getTypeClassName(const ZigClangType *self);545ZIG_EXTERN_C const char *ZigClangType_getTypeClassName(const struct ZigClangType *self);
545546
546ZIG_EXTERN_C ZigClangSourceLocation ZigClangStmt_getBeginLoc(const ZigClangStmt *self);547ZIG_EXTERN_C struct ZigClangSourceLocation ZigClangStmt_getBeginLoc(const struct ZigClangStmt *self);
547ZIG_EXTERN_C ZigClangStmtClass ZigClangStmt_getStmtClass(const ZigClangStmt *self);548ZIG_EXTERN_C enum ZigClangStmtClass ZigClangStmt_getStmtClass(const struct ZigClangStmt *self);
548ZIG_EXTERN_C bool ZigClangStmt_classof_Expr(const ZigClangStmt *self);549ZIG_EXTERN_C bool ZigClangStmt_classof_Expr(const struct ZigClangStmt *self);
549550
550ZIG_EXTERN_C ZigClangStmtClass ZigClangExpr_getStmtClass(const ZigClangExpr *self);551ZIG_EXTERN_C enum ZigClangStmtClass ZigClangExpr_getStmtClass(const struct ZigClangExpr *self);
551ZIG_EXTERN_C ZigClangQualType ZigClangExpr_getType(const ZigClangExpr *self);552ZIG_EXTERN_C struct ZigClangQualType ZigClangExpr_getType(const struct ZigClangExpr *self);
552ZIG_EXTERN_C ZigClangSourceLocation ZigClangExpr_getBeginLoc(const ZigClangExpr *self);553ZIG_EXTERN_C struct ZigClangSourceLocation ZigClangExpr_getBeginLoc(const struct ZigClangExpr *self);
553554
554ZIG_EXTERN_C ZigClangAPValueKind ZigClangAPValue_getKind(const ZigClangAPValue *self);555ZIG_EXTERN_C enum ZigClangAPValueKind ZigClangAPValue_getKind(const struct ZigClangAPValue *self);
555ZIG_EXTERN_C const ZigClangAPSInt *ZigClangAPValue_getInt(const ZigClangAPValue *self);556ZIG_EXTERN_C const struct ZigClangAPSInt *ZigClangAPValue_getInt(const struct ZigClangAPValue *self);
556ZIG_EXTERN_C unsigned ZigClangAPValue_getArrayInitializedElts(const ZigClangAPValue *self);557ZIG_EXTERN_C unsigned ZigClangAPValue_getArrayInitializedElts(const struct ZigClangAPValue *self);
557ZIG_EXTERN_C const ZigClangAPValue *ZigClangAPValue_getArrayInitializedElt(const ZigClangAPValue *self, unsigned i);558ZIG_EXTERN_C const struct ZigClangAPValue *ZigClangAPValue_getArrayInitializedElt(const struct ZigClangAPValue *self, unsigned i);
558ZIG_EXTERN_C const ZigClangAPValue *ZigClangAPValue_getArrayFiller(const ZigClangAPValue *self);559ZIG_EXTERN_C const struct ZigClangAPValue *ZigClangAPValue_getArrayFiller(const struct ZigClangAPValue *self);
559ZIG_EXTERN_C unsigned ZigClangAPValue_getArraySize(const ZigClangAPValue *self);560ZIG_EXTERN_C unsigned ZigClangAPValue_getArraySize(const struct ZigClangAPValue *self);
560ZIG_EXTERN_C ZigClangAPValueLValueBase ZigClangAPValue_getLValueBase(const ZigClangAPValue *self);561ZIG_EXTERN_C struct ZigClangAPValueLValueBase ZigClangAPValue_getLValueBase(const struct ZigClangAPValue *self);
561562
562ZIG_EXTERN_C bool ZigClangAPSInt_isSigned(const ZigClangAPSInt *self);563ZIG_EXTERN_C bool ZigClangAPSInt_isSigned(const struct ZigClangAPSInt *self);
563ZIG_EXTERN_C bool ZigClangAPSInt_isNegative(const ZigClangAPSInt *self);564ZIG_EXTERN_C bool ZigClangAPSInt_isNegative(const struct ZigClangAPSInt *self);
564ZIG_EXTERN_C const ZigClangAPSInt *ZigClangAPSInt_negate(const ZigClangAPSInt *self);565ZIG_EXTERN_C const struct ZigClangAPSInt *ZigClangAPSInt_negate(const struct ZigClangAPSInt *self);
565ZIG_EXTERN_C void ZigClangAPSInt_free(const ZigClangAPSInt *self);566ZIG_EXTERN_C void ZigClangAPSInt_free(const struct ZigClangAPSInt *self);
566ZIG_EXTERN_C const uint64_t *ZigClangAPSInt_getRawData(const ZigClangAPSInt *self);567ZIG_EXTERN_C const uint64_t *ZigClangAPSInt_getRawData(const struct ZigClangAPSInt *self);
567ZIG_EXTERN_C unsigned ZigClangAPSInt_getNumWords(const ZigClangAPSInt *self);568ZIG_EXTERN_C unsigned ZigClangAPSInt_getNumWords(const struct ZigClangAPSInt *self);
568569
569ZIG_EXTERN_C const ZigClangExpr *ZigClangAPValueLValueBase_dyn_cast_Expr(ZigClangAPValueLValueBase self);570ZIG_EXTERN_C const struct ZigClangExpr *ZigClangAPValueLValueBase_dyn_cast_Expr(struct ZigClangAPValueLValueBase self);
570571
571#endif572#endif
std/c.zig+4
...@@ -12,6 +12,10 @@ pub use switch (builtin.os) {...@@ -12,6 +12,10 @@ pub use switch (builtin.os) {
1212
13// TODO https://github.com/ziglang/zig/issues/265 on this whole file13// TODO https://github.com/ziglang/zig/issues/265 on this whole file
1414
15pub const FILE = @OpaqueType();
16pub extern "c" fn fwrite(ptr: [*]const u8, size_of_type: usize, item_count: usize, stream: *FILE) usize;
17pub extern "c" fn fread(ptr: [*]u8, size_of_type: usize, item_count: usize, stream: *FILE) usize;
18
15pub extern "c" fn abort() noreturn;19pub extern "c" fn abort() noreturn;
16pub extern "c" fn exit(code: c_int) noreturn;20pub extern "c" fn exit(code: c_int) noreturn;
17pub extern "c" fn isatty(fd: c_int) c_int;21pub extern "c" fn isatty(fd: c_int) c_int;
std/io.zig+18-12
...@@ -36,6 +36,7 @@ pub fn getStdIn() GetStdIoErrs!File {...@@ -36,6 +36,7 @@ pub fn getStdIn() GetStdIoErrs!File {
36}36}
3737
38pub const SeekableStream = @import("io/seekable_stream.zig").SeekableStream;38pub const SeekableStream = @import("io/seekable_stream.zig").SeekableStream;
39pub const COutStream = @import("io/c_out_stream.zig").COutStream;
3940
40pub fn InStream(comptime ReadError: type) type {41pub fn InStream(comptime ReadError: type) type {
41 return struct {42 return struct {
...@@ -1089,8 +1090,10 @@ test "io.readLineSliceFrom" {...@@ -1089,8 +1090,10 @@ test "io.readLineSliceFrom" {
1089}1090}
10901091
1091pub const Packing = enum {1092pub const Packing = enum {
1092 Byte, /// Pack data to byte alignment1093 /// Pack data to byte alignment
1093 Bit, /// Pack data to bit alignment1094 Byte,
1095 /// Pack data to bit alignment
1096 Bit,
1094};1097};
10951098
1096/// Creates a deserializer that deserializes types from any stream.1099/// Creates a deserializer that deserializes types from any stream.
...@@ -1111,10 +1114,12 @@ pub fn Deserializer(comptime endian: builtin.Endian, comptime packing: Packing,...@@ -1111,10 +1114,12 @@ pub fn Deserializer(comptime endian: builtin.Endian, comptime packing: Packing,
1111 pub const Stream = InStream(Error);1114 pub const Stream = InStream(Error);
11121115
1113 pub fn init(in_stream: *Stream) Self {1116 pub fn init(in_stream: *Stream) Self {
1114 return Self{ .in_stream = switch (packing) {1117 return Self{
1115 .Bit => BitInStream(endian, Stream.Error).init(in_stream),1118 .in_stream = switch (packing) {
1116 .Byte => in_stream,1119 .Bit => BitInStream(endian, Stream.Error).init(in_stream),
1117 } };1120 .Byte => in_stream,
1121 },
1122 };
1118 }1123 }
11191124
1120 pub fn alignToByte(self: *Self) void {1125 pub fn alignToByte(self: *Self) void {
...@@ -1281,7 +1286,7 @@ pub fn Deserializer(comptime endian: builtin.Endian, comptime packing: Packing,...@@ -1281,7 +1286,7 @@ pub fn Deserializer(comptime endian: builtin.Endian, comptime packing: Packing,
1281 ptr.* = null;1286 ptr.* = null;
1282 return;1287 return;
1283 }1288 }
1284 1289
1285 ptr.* = OC(undefined); //make it non-null so the following .? is guaranteed safe1290 ptr.* = OC(undefined); //make it non-null so the following .? is guaranteed safe
1286 const val_ptr = &ptr.*.?;1291 const val_ptr = &ptr.*.?;
1287 try self.deserializeInto(val_ptr);1292 try self.deserializeInto(val_ptr);
...@@ -1320,10 +1325,12 @@ pub fn Serializer(comptime endian: builtin.Endian, comptime packing: Packing, co...@@ -1320,10 +1325,12 @@ pub fn Serializer(comptime endian: builtin.Endian, comptime packing: Packing, co
1320 pub const Stream = OutStream(Error);1325 pub const Stream = OutStream(Error);
13211326
1322 pub fn init(out_stream: *Stream) Self {1327 pub fn init(out_stream: *Stream) Self {
1323 return Self{ .out_stream = switch (packing) {1328 return Self{
1324 .Bit => BitOutStream(endian, Stream.Error).init(out_stream),1329 .out_stream = switch (packing) {
1325 .Byte => out_stream,1330 .Bit => BitOutStream(endian, Stream.Error).init(out_stream),
1326 } };1331 .Byte => out_stream,
1332 },
1333 };
1327 }1334 }
13281335
1329 /// Flushes any unwritten bits to the stream1336 /// Flushes any unwritten bits to the stream
...@@ -1450,4 +1457,3 @@ test "import io tests" {...@@ -1450,4 +1457,3 @@ test "import io tests" {
1450 _ = @import("io_test.zig");1457 _ = @import("io_test.zig");
1451 }1458 }
1452}1459}
1453
std/io/c_out_stream.zig created+44
...@@ -0,0 +1,44 @@
1const std = @import("../std.zig");
2const OutStream = std.io.OutStream;
3const builtin = @import("builtin");
4const posix = std.os.posix;
5
6/// TODO make std.os.FILE use *FILE when linking libc and this just becomes
7/// std.io.FileOutStream because std.os.File.write would do this when linking
8/// libc.
9pub const COutStream = struct {
10 pub const Error = std.os.File.WriteError;
11 pub const Stream = OutStream(Error);
12
13 stream: Stream,
14 c_file: *std.c.FILE,
15
16 pub fn init(c_file: *std.c.FILE) COutStream {
17 return COutStream{
18 .c_file = c_file,
19 .stream = Stream{ .writeFn = writeFn },
20 };
21 }
22
23 fn writeFn(out_stream: *Stream, bytes: []const u8) Error!void {
24 const self = @fieldParentPtr(COutStream, "stream", out_stream);
25 const amt_written = std.c.fwrite(bytes.ptr, 1, bytes.len, self.c_file);
26 if (amt_written == bytes.len) return;
27 const errno = std.c._errno().*;
28 switch (errno) {
29 0 => unreachable,
30 posix.EINVAL => unreachable,
31 posix.EFAULT => unreachable,
32 posix.EAGAIN => unreachable, // this is a blocking API
33 posix.EBADF => unreachable, // always a race condition
34 posix.EDESTADDRREQ => unreachable, // connect was never called
35 posix.EDQUOT => return error.DiskQuota,
36 posix.EFBIG => return error.FileTooBig,
37 posix.EIO => return error.InputOutput,
38 posix.ENOSPC => return error.NoSpaceLeft,
39 posix.EPERM => return error.AccessDenied,
40 posix.EPIPE => return error.BrokenPipe,
41 else => return std.os.unexpectedErrorPosix(@intCast(usize, errno)),
42 }
43 }
44};