Commit a7c9aa7ddb
Changed files (3)
src/translate_c.cpp
@@ -14,19 +14,6 @@
#include "parser.hpp"
#include "zig_clang.h"
-#if __GNUC__ >= 8
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wclass-memaccess"
-#endif
-
-#include <clang/Frontend/ASTUnit.h>
-#include <clang/Frontend/CompilerInstance.h>
-#include <clang/AST/Expr.h>
-
-#if __GNUC__ >= 8
-#pragma GCC diagnostic pop
-#endif
-
#include <string.h>
struct Alias {
@@ -129,37 +116,6 @@ static AstNode *trans_ap_value(Context *c, const ZigClangAPValue *ap_value, ZigC
ZigClangSourceLocation source_loc);
static bool c_is_unsigned_integer(Context *c, ZigClangQualType qt);
-static const ZigClangAPSInt *bitcast(const llvm::APSInt *src) {
- return reinterpret_cast<const ZigClangAPSInt *>(src);
-}
-
-static const ZigClangAPValue *bitcast(const clang::APValue *src) {
- return reinterpret_cast<const ZigClangAPValue *>(src);
-}
-
-//static const ZigClangStmt *bitcast(const clang::Stmt *src) {
-// return reinterpret_cast<const ZigClangStmt *>(src);
-//}
-
-static const ZigClangExpr *bitcast(const clang::Expr *src) {
- return reinterpret_cast<const ZigClangExpr *>(src);
-}
-
-static ZigClangSourceLocation bitcast(clang::SourceLocation src) {
- ZigClangSourceLocation dest;
- memcpy(&dest, static_cast<void *>(&src), sizeof(ZigClangSourceLocation));
- return dest;
-}
-static ZigClangQualType bitcast(clang::QualType src) {
- ZigClangQualType dest;
- memcpy(&dest, static_cast<void *>(&src), sizeof(ZigClangQualType));
- return dest;
-}
-//static clang::QualType bitcast(ZigClangQualType src) {
-// clang::QualType dest;
-// memcpy(&dest, static_cast<void *>(&src), sizeof(ZigClangQualType));
-// return dest;
-//}
ATTRIBUTE_PRINTF(3, 4)
static void emit_warning(Context *c, ZigClangSourceLocation sl, const char *format, ...) {
@@ -521,10 +477,10 @@ static AstNode *trans_create_node_apint(Context *c, const ZigClangAPSInt *aps_in
return node;
}
-static AstNode *trans_create_node_apfloat(Context *c, const llvm::APFloat &ap_float) {
+static AstNode *trans_create_node_apfloat(Context *c, const ZigClangAPFloat *ap_float) {
uint8_t buf[128];
- size_t written = ap_float.convertToHexString((char *)buf, 0, false,
- llvm::APFloat::rmNearestTiesToEven);
+ size_t written = ZigClangAPFloat_convertToHexString(ap_float, (char *)buf, 0, false,
+ ZigClangAPFloat_roundingMode_NearestTiesToEven);
AstNode *node = trans_create_node(c, NodeTypeFloatLiteral);
node->data.float_literal.bigfloat = allocate<BigFloat>(1);
if (bigfloat_init_buf(node->data.float_literal.bigfloat, buf, written)) {
@@ -868,13 +824,14 @@ static bool type_is_opaque(Context *c, const ZigClangType *ty, ZigClangSourceLoc
if (record_def == nullptr) {
return true;
}
- for (auto it = reinterpret_cast<const clang::RecordDecl *>(record_def)->field_begin(),
- it_end = reinterpret_cast<const clang::RecordDecl *>(record_def)->field_end();
- it != it_end; ++it)
+ for (ZigClangRecordDecl_field_iterator it = ZigClangRecordDecl_field_begin(record_def),
+ it_end = ZigClangRecordDecl_field_end(record_def);
+ ZigClangRecordDecl_field_iterator_neq(it, it_end);
+ it = ZigClangRecordDecl_field_iterator_next(it))
{
- const clang::FieldDecl *field_decl = *it;
+ const ZigClangFieldDecl *field_decl = ZigClangRecordDecl_field_iterator_deref(it);
- if (field_decl->isBitField()) {
+ if (ZigClangFieldDecl_isBitField(field_decl)) {
return true;
}
}
@@ -1393,8 +1350,8 @@ static AstNode *trans_integer_literal(Context *c, ResultUsed result_used, const
}
static AstNode *trans_floating_literal(Context *c, ResultUsed result_used, const ZigClangFloatingLiteral *stmt) {
- llvm::APFloat result{0.0f};
- if (!reinterpret_cast<const clang::FloatingLiteral *>(stmt)->EvaluateAsFloat(result, *reinterpret_cast<clang::ASTContext *>(c->ctx))) {
+ ZigClangAPFloat *result;
+ if (!ZigClangExpr_EvaluateAsFloat((const ZigClangExpr *)stmt, &result, c->ctx)) {
emit_warning(c, ZigClangExpr_getBeginLoc((ZigClangExpr*)stmt), "invalid floating literal");
return nullptr;
}
@@ -1434,15 +1391,14 @@ static AstNode *trans_character_literal(Context *c, ResultUsed result_used, cons
static AstNode *trans_constant_expr(Context *c, ResultUsed result_used, const ZigClangConstantExpr *expr) {
const ZigClangExpr *as_expr = reinterpret_cast<const ZigClangExpr *>(expr);
- clang::Expr::EvalResult result;
- if (!reinterpret_cast<const clang::ConstantExpr *>(expr)->EvaluateAsConstantExpr(result,
- clang::Expr::EvaluateForCodeGen,
- *reinterpret_cast<clang::ASTContext *>(c->ctx)))
+ ZigClangExprEvalResult result;
+ if (!ZigClangExpr_EvaluateAsConstantExpr((const ZigClangExpr *)expr, &result,
+ ZigClangExpr_EvaluateForCodeGen, c->ctx))
{
emit_warning(c, ZigClangExpr_getBeginLoc(as_expr), "invalid constant expression");
return nullptr;
}
- AstNode *node = trans_ap_value(c, bitcast(&result.Val), ZigClangExpr_getType(as_expr),
+ AstNode *node = trans_ap_value(c, &result.Val, ZigClangExpr_getType(as_expr),
ZigClangExpr_getBeginLoc(as_expr));
return maybe_suppress_result(c, result_used, node);
}
@@ -2452,16 +2408,18 @@ static int trans_local_declaration(Context *c, TransScope *scope, const ZigClang
TransScopeBlock *scope_block = trans_scope_block_find(scope);
assert(scope_block != nullptr);
- for (auto iter = reinterpret_cast<const clang::DeclStmt *>(stmt)->decl_begin();
- iter != reinterpret_cast<const clang::DeclStmt *>(stmt)->decl_end(); iter++) {
- ZigClangDecl *decl = reinterpret_cast<ZigClangDecl *>(*iter);
+ for (ZigClangDeclStmt_const_decl_iterator iter = ZigClangDeclStmt_decl_begin(stmt),
+ iter_end = ZigClangDeclStmt_decl_end(stmt);
+ iter != iter_end; ++iter)
+ {
+ ZigClangDecl *decl = *iter;
switch (ZigClangDecl_getKind(decl)) {
case ZigClangDeclVar: {
- clang::VarDecl *var_decl = (clang::VarDecl *)decl;
- ZigClangQualType qual_type = bitcast(var_decl->getTypeSourceInfo()->getType());
+ ZigClangVarDecl *var_decl = (ZigClangVarDecl *)decl;
+ ZigClangQualType qual_type = ZigClangVarDecl_getTypeSourceInfo_getType(var_decl);
AstNode *init_node = nullptr;
- if (var_decl->hasInit()) {
- init_node = trans_expr(c, ResultUsedYes, scope, bitcast(var_decl->getInit()), TransRValue);
+ if (ZigClangVarDecl_hasInit(var_decl)) {
+ init_node = trans_expr(c, ResultUsedYes, scope, ZigClangVarDecl_getInit(var_decl), TransRValue);
if (init_node == nullptr)
return ErrorUnexpected;
@@ -4317,12 +4275,13 @@ static AstNode *resolve_enum_decl(Context *c, const ZigClangEnumDecl *enum_decl)
bool pure_enum = true;
uint32_t field_count = 0;
- for (auto it = reinterpret_cast<const clang::EnumDecl *>(enum_def)->enumerator_begin(),
- it_end = reinterpret_cast<const clang::EnumDecl *>(enum_def)->enumerator_end();
- it != it_end; ++it, field_count += 1)
+ for (ZigClangEnumDecl_enumerator_iterator it = ZigClangEnumDecl_enumerator_begin(enum_def),
+ it_end = ZigClangEnumDecl_enumerator_end(enum_def);
+ ZigClangEnumDecl_enumerator_iterator_neq(it, it_end);
+ it = ZigClangEnumDecl_enumerator_iterator_next(it), field_count += 1)
{
- const clang::EnumConstantDecl *enum_const = *it;
- if (enum_const->getInitExpr()) {
+ const ZigClangEnumConstantDecl *enum_const = ZigClangEnumDecl_enumerator_iterator_deref(it);
+ if (ZigClangEnumConstantDecl_getInitExpr(enum_const)) {
pure_enum = false;
}
}
@@ -4343,11 +4302,12 @@ static AstNode *resolve_enum_decl(Context *c, const ZigClangEnumDecl *enum_decl)
}
enum_node->data.container_decl.fields.resize(field_count);
uint32_t i = 0;
- for (auto it = reinterpret_cast<const clang::EnumDecl *>(enum_def)->enumerator_begin(),
- it_end = reinterpret_cast<const clang::EnumDecl *>(enum_def)->enumerator_end();
- it != it_end; ++it, i += 1)
+ for (ZigClangEnumDecl_enumerator_iterator it = ZigClangEnumDecl_enumerator_begin(enum_def),
+ it_end = ZigClangEnumDecl_enumerator_end(enum_def);
+ ZigClangEnumDecl_enumerator_iterator_neq(it, it_end);
+ it = ZigClangEnumDecl_enumerator_iterator_next(it), i += 1)
{
- const clang::EnumConstantDecl *enum_const = *it;
+ const ZigClangEnumConstantDecl *enum_const = ZigClangEnumDecl_enumerator_iterator_deref(it);
Buf *enum_val_name = buf_create_from_str(ZigClangDecl_getName_bytes_begin((const ZigClangDecl *)enum_const));
Buf *field_name;
@@ -4358,7 +4318,7 @@ static AstNode *resolve_enum_decl(Context *c, const ZigClangEnumDecl *enum_decl)
}
AstNode *int_node = pure_enum && !is_anonymous ?
- nullptr : trans_create_node_apint(c, bitcast(&enum_const->getInitVal()));
+ nullptr : trans_create_node_apint(c, ZigClangEnumConstantDecl_getInitVal(enum_const));
AstNode *field_node = trans_create_node(c, NodeTypeStructField);
field_node->data.struct_field.name = field_name;
field_node->data.struct_field.type = nullptr;
@@ -4438,15 +4398,16 @@ static AstNode *resolve_record_decl(Context *c, const ZigClangRecordDecl *record
// count fields and validate
uint32_t field_count = 0;
- for (auto it = reinterpret_cast<const clang::RecordDecl *>(record_def)->field_begin(),
- it_end = reinterpret_cast<const clang::RecordDecl *>(record_def)->field_end();
- it != it_end; ++it, field_count += 1)
+ for (ZigClangRecordDecl_field_iterator it = ZigClangRecordDecl_field_begin(record_def),
+ it_end = ZigClangRecordDecl_field_end(record_def);
+ ZigClangRecordDecl_field_iterator_neq(it, it_end);
+ it = ZigClangRecordDecl_field_iterator_next(it), field_count += 1)
{
- const clang::FieldDecl *field_decl = *it;
+ const ZigClangFieldDecl *field_decl = ZigClangRecordDecl_field_iterator_deref(it);
- if (field_decl->isBitField()) {
- emit_warning(c, bitcast(field_decl->getLocation()), "%s %s demoted to opaque type - has bitfield",
- container_kind_name,
+ if (ZigClangFieldDecl_isBitField(field_decl)) {
+ emit_warning(c, ZigClangFieldDecl_getLocation(field_decl),
+ "%s %s demoted to opaque type - has bitfield", container_kind_name,
is_anonymous ? "(anon)" : buf_ptr(bare_name));
return demote_struct_to_opaque(c, record_decl, full_type_name, bare_name);
}
@@ -4468,19 +4429,20 @@ static AstNode *resolve_record_decl(Context *c, const ZigClangRecordDecl *record
}
uint32_t i = 0;
- for (auto it = reinterpret_cast<const clang::RecordDecl *>(record_def)->field_begin(),
- it_end = reinterpret_cast<const clang::RecordDecl *>(record_def)->field_end();
- it != it_end; ++it, i += 1)
+ for (ZigClangRecordDecl_field_iterator it = ZigClangRecordDecl_field_begin(record_def),
+ it_end = ZigClangRecordDecl_field_end(record_def);
+ ZigClangRecordDecl_field_iterator_neq(it, it_end);
+ it = ZigClangRecordDecl_field_iterator_next(it), i += 1)
{
- const clang::FieldDecl *field_decl = *it;
+ const ZigClangFieldDecl *field_decl = ZigClangRecordDecl_field_iterator_deref(it);
AstNode *field_node = trans_create_node(c, NodeTypeStructField);
field_node->data.struct_field.name = buf_create_from_str(ZigClangDecl_getName_bytes_begin((const ZigClangDecl *)field_decl));
- field_node->data.struct_field.type = trans_qual_type(c, bitcast(field_decl->getType()),
- bitcast(field_decl->getLocation()));
+ field_node->data.struct_field.type = trans_qual_type(c, ZigClangFieldDecl_getType(field_decl),
+ ZigClangFieldDecl_getLocation(field_decl));
if (field_node->data.struct_field.type == nullptr) {
- emit_warning(c, bitcast(field_decl->getLocation()),
+ emit_warning(c, ZigClangFieldDecl_getLocation(field_decl),
"%s %s demoted to opaque type - unresolved type",
container_kind_name,
is_anonymous ? "(anon)" : buf_ptr(bare_name));
@@ -4522,8 +4484,8 @@ static AstNode *trans_ap_value(Context *c, const ZigClangAPValue *ap_value, ZigC
init_node->data.container_init_expr.type = arr_type_node;
init_node->data.container_init_expr.kind = ContainerInitKindArray;
- const clang::Type *qt_type = reinterpret_cast<const clang::Type *>(ZigClangQualType_getTypePtr(qt));
- ZigClangQualType child_qt = bitcast(qt_type->getAsArrayTypeUnsafe()->getElementType());
+ const ZigClangType *qt_type = ZigClangQualType_getTypePtr(qt);
+ ZigClangQualType child_qt = ZigClangArrayType_getElementType(ZigClangType_getAsArrayTypeUnsafe(qt_type));
for (size_t i = 0; i < init_count; i += 1) {
const ZigClangAPValue *elem_ap_val = ZigClangAPValue_getArrayInitializedElt(ap_value, i);
@@ -4569,8 +4531,7 @@ static AstNode *trans_ap_value(Context *c, const ZigClangAPValue *ap_value, ZigC
if (const ZigClangExpr *expr = ZigClangAPValueLValueBase_dyn_cast_Expr(lval_base)) {
return trans_expr(c, ResultUsedYes, &c->global_scope->base, expr, TransRValue);
}
- //const clang::ValueDecl *value_decl = lval_base.get<const clang::ValueDecl *>();
- emit_warning(c, source_loc, "TODO handle initializer LValue clang::ValueDecl");
+ emit_warning(c, source_loc, "TODO handle initializer LValue ValueDecl");
return nullptr;
}
case ZigClangAPValueFloat:
@@ -4607,43 +4568,43 @@ static AstNode *trans_ap_value(Context *c, const ZigClangAPValue *ap_value, ZigC
zig_unreachable();
}
-static void visit_var_decl(Context *c, const clang::VarDecl *var_decl) {
+static void visit_var_decl(Context *c, const ZigClangVarDecl *var_decl) {
Buf *name = buf_create_from_str(ZigClangDecl_getName_bytes_begin((const ZigClangDecl *)var_decl));
- switch (var_decl->getTLSKind()) {
- case clang::VarDecl::TLS_None:
+ switch (ZigClangVarDecl_getTLSKind(var_decl)) {
+ case ZigClangVarDecl_TLSKind_None:
break;
- case clang::VarDecl::TLS_Static:
- emit_warning(c, bitcast(var_decl->getLocation()),
+ case ZigClangVarDecl_TLSKind_Static:
+ emit_warning(c, ZigClangVarDecl_getLocation(var_decl),
"ignoring variable '%s' - static thread local storage", buf_ptr(name));
return;
- case clang::VarDecl::TLS_Dynamic:
- emit_warning(c, bitcast(var_decl->getLocation()),
+ case ZigClangVarDecl_TLSKind_Dynamic:
+ emit_warning(c, ZigClangVarDecl_getLocation(var_decl),
"ignoring variable '%s' - dynamic thread local storage", buf_ptr(name));
return;
}
- ZigClangQualType qt = bitcast(var_decl->getType());
- AstNode *var_type = trans_qual_type(c, qt, bitcast(var_decl->getLocation()));
+ ZigClangQualType qt = ZigClangVarDecl_getType(var_decl);
+ AstNode *var_type = trans_qual_type(c, qt, ZigClangVarDecl_getLocation(var_decl));
if (var_type == nullptr) {
- emit_warning(c, bitcast(var_decl->getLocation()), "ignoring variable '%s' - unresolved type", buf_ptr(name));
+ emit_warning(c, ZigClangVarDecl_getLocation(var_decl), "ignoring variable '%s' - unresolved type", buf_ptr(name));
return;
}
- bool is_extern = var_decl->hasExternalStorage();
- bool is_static = var_decl->isFileVarDecl();
+ bool is_extern = ZigClangVarDecl_hasExternalStorage(var_decl);
+ bool is_static = ZigClangVarDecl_isFileVarDecl(var_decl);
bool is_const = ZigClangQualType_isConstQualified(qt);
if (is_static && !is_extern) {
AstNode *init_node;
- if (var_decl->hasInit()) {
- const ZigClangAPValue *ap_value = bitcast(var_decl->evaluateValue());
+ if (ZigClangVarDecl_hasInit(var_decl)) {
+ const ZigClangAPValue *ap_value = ZigClangVarDecl_evaluateValue(var_decl);
if (ap_value == nullptr) {
- emit_warning(c, bitcast(var_decl->getLocation()),
+ emit_warning(c, ZigClangVarDecl_getLocation(var_decl),
"ignoring variable '%s' - unable to evaluate initializer", buf_ptr(name));
return;
}
- init_node = trans_ap_value(c, ap_value, qt, bitcast(var_decl->getLocation()));
+ init_node = trans_ap_value(c, ap_value, qt, ZigClangVarDecl_getLocation(var_decl));
if (init_node == nullptr)
return;
} else {
@@ -4662,7 +4623,7 @@ static void visit_var_decl(Context *c, const clang::VarDecl *var_decl) {
return;
}
- emit_warning(c, bitcast(var_decl->getLocation()),
+ emit_warning(c, ZigClangVarDecl_getLocation(var_decl),
"ignoring variable '%s' - non-extern, non-static variable", buf_ptr(name));
return;
}
@@ -4684,7 +4645,7 @@ static bool decl_visitor(void *context, const ZigClangDecl *decl) {
resolve_record_decl(c, reinterpret_cast<const ZigClangRecordDecl *>(decl));
break;
case ZigClangDeclVar:
- visit_var_decl(c, reinterpret_cast<const clang::VarDecl *>(decl));
+ visit_var_decl(c, reinterpret_cast<const ZigClangVarDecl *>(decl));
break;
default:
emit_warning(c, ZigClangDecl_getLocation(decl), "ignoring %s decl", ZigClangDecl_getDeclKindName(decl));
@@ -5114,25 +5075,26 @@ static void process_macro(Context *c, CTokenize *ctok, Buf *name, const char *ch
c->macro_table.put(name, result_node);
}
-static void process_preprocessor_entities(Context *c, ZigClangASTUnit *zunit) {
- clang::ASTUnit *unit = reinterpret_cast<clang::ASTUnit *>(zunit);
+static void process_preprocessor_entities(Context *c, ZigClangASTUnit *unit) {
CTokenize ctok = {{0}};
// TODO if we see #undef, delete it from the table
+ for (ZigClangPreprocessingRecord_iterator it = ZigClangASTUnit_getLocalPreprocessingEntities_begin(unit),
+ it_end = ZigClangASTUnit_getLocalPreprocessingEntities_end(unit); it.I != it_end.I; it.I += 1)
+ {
+ ZigClangPreprocessedEntity *entity = ZigClangPreprocessingRecord_iterator_deref(it);
- for (clang::PreprocessedEntity *entity : unit->getLocalPreprocessingEntities()) {
- switch (entity->getKind()) {
- case clang::PreprocessedEntity::InvalidKind:
- case clang::PreprocessedEntity::InclusionDirectiveKind:
- case clang::PreprocessedEntity::MacroExpansionKind:
+ switch (ZigClangPreprocessedEntity_getKind(entity)) {
+ case ZigClangPreprocessedEntity_InvalidKind:
+ case ZigClangPreprocessedEntity_InclusionDirectiveKind:
+ case ZigClangPreprocessedEntity_MacroExpansionKind:
continue;
- case clang::PreprocessedEntity::MacroDefinitionKind:
+ case ZigClangPreprocessedEntity_MacroDefinitionKind:
{
- clang::MacroDefinitionRecord *macro = static_cast<clang::MacroDefinitionRecord *>(entity);
- const char *raw_name = macro->getName()->getNameStart();
- clang::SourceRange range = macro->getSourceRange();
- ZigClangSourceLocation begin_loc = bitcast(range.getBegin());
- ZigClangSourceLocation end_loc = bitcast(range.getEnd());
+ ZigClangMacroDefinitionRecord *macro = reinterpret_cast<ZigClangMacroDefinitionRecord *>(entity);
+ const char *raw_name = ZigClangMacroDefinitionRecord_getName_getNameStart(macro);
+ ZigClangSourceLocation begin_loc = ZigClangMacroDefinitionRecord_getSourceRange_getBegin(macro);
+ ZigClangSourceLocation end_loc = ZigClangMacroDefinitionRecord_getSourceRange_getEnd(macro);
if (ZigClangSourceLocation_eq(begin_loc, end_loc)) {
// this means it is a macro without a value
src/zig_clang.cpp
@@ -1346,6 +1346,31 @@ static_assert((clang::ElaboratedTypeKeyword)ZigClangETK_Enum == clang::ETK_Enum,
static_assert((clang::ElaboratedTypeKeyword)ZigClangETK_Typename == clang::ETK_Typename, "");
static_assert((clang::ElaboratedTypeKeyword)ZigClangETK_None == clang::ETK_None, "");
+void ZigClang_detect_enum_EntityKind(clang::PreprocessedEntity::EntityKind x) {
+ switch (x) {
+ case clang::PreprocessedEntity::InvalidKind:
+ case clang::PreprocessedEntity::MacroExpansionKind:
+ case clang::PreprocessedEntity::MacroDefinitionKind:
+ case clang::PreprocessedEntity::InclusionDirectiveKind:
+ break;
+ }
+}
+static_assert((clang::PreprocessedEntity::EntityKind)ZigClangPreprocessedEntity_InvalidKind == clang::PreprocessedEntity::InvalidKind, "");
+static_assert((clang::PreprocessedEntity::EntityKind)ZigClangPreprocessedEntity_MacroExpansionKind == clang::PreprocessedEntity::MacroExpansionKind, "");
+static_assert((clang::PreprocessedEntity::EntityKind)ZigClangPreprocessedEntity_MacroDefinitionKind == clang::PreprocessedEntity::MacroDefinitionKind, "");
+static_assert((clang::PreprocessedEntity::EntityKind)ZigClangPreprocessedEntity_InclusionDirectiveKind == clang::PreprocessedEntity::InclusionDirectiveKind, "");
+
+
+void ZigClang_detect_enum_ConstExprUsage(clang::Expr::ConstExprUsage x) {
+ switch (x) {
+ case clang::Expr::EvaluateForCodeGen:
+ case clang::Expr::EvaluateForMangling:
+ break;
+ }
+}
+static_assert((clang::Expr::ConstExprUsage)ZigClangExpr_EvaluateForCodeGen == clang::Expr::EvaluateForCodeGen, "");
+static_assert((clang::Expr::ConstExprUsage)ZigClangExpr_EvaluateForMangling == clang::Expr::EvaluateForMangling, "");
+
static_assert(sizeof(ZigClangAPValue) == sizeof(clang::APValue), "");
@@ -1406,6 +1431,43 @@ static ZigClangDeclStmt_const_decl_iterator bitcast(clang::DeclStmt::const_decl_
return dest;
}
+static_assert(sizeof(ZigClangPreprocessingRecord_iterator) == sizeof(clang::PreprocessingRecord::iterator), "");
+static ZigClangPreprocessingRecord_iterator bitcast(clang::PreprocessingRecord::iterator src) {
+ ZigClangPreprocessingRecord_iterator dest;
+ memcpy(&dest, static_cast<void *>(&src), sizeof(ZigClangPreprocessingRecord_iterator));
+ return dest;
+}
+static clang::PreprocessingRecord::iterator bitcast(ZigClangPreprocessingRecord_iterator src) {
+ clang::PreprocessingRecord::iterator dest;
+ memcpy(&dest, static_cast<void *>(&src), sizeof(ZigClangPreprocessingRecord_iterator));
+ return dest;
+}
+
+static_assert(sizeof(ZigClangRecordDecl_field_iterator) == sizeof(clang::RecordDecl::field_iterator), "");
+static ZigClangRecordDecl_field_iterator bitcast(clang::RecordDecl::field_iterator src) {
+ ZigClangRecordDecl_field_iterator dest;
+ memcpy(&dest, static_cast<void *>(&src), sizeof(ZigClangRecordDecl_field_iterator));
+ return dest;
+}
+static clang::RecordDecl::field_iterator bitcast(ZigClangRecordDecl_field_iterator src) {
+ clang::RecordDecl::field_iterator dest;
+ memcpy(&dest, static_cast<void *>(&src), sizeof(ZigClangRecordDecl_field_iterator));
+ return dest;
+}
+
+static_assert(sizeof(ZigClangEnumDecl_enumerator_iterator) == sizeof(clang::EnumDecl::enumerator_iterator), "");
+static ZigClangEnumDecl_enumerator_iterator bitcast(clang::EnumDecl::enumerator_iterator src) {
+ ZigClangEnumDecl_enumerator_iterator dest;
+ memcpy(&dest, static_cast<void *>(&src), sizeof(ZigClangEnumDecl_enumerator_iterator));
+ return dest;
+}
+static clang::EnumDecl::enumerator_iterator bitcast(ZigClangEnumDecl_enumerator_iterator src) {
+ clang::EnumDecl::enumerator_iterator dest;
+ memcpy(&dest, static_cast<void *>(&src), sizeof(ZigClangEnumDecl_enumerator_iterator));
+ return dest;
+}
+
+
ZigClangSourceLocation ZigClangSourceManager_getSpellingLoc(const ZigClangSourceManager *self,
ZigClangSourceLocation Loc)
{
@@ -1462,6 +1524,28 @@ bool ZigClangASTUnit_visitLocalTopLevelDecls(ZigClangASTUnit *self, void *contex
reinterpret_cast<bool (*)(void *, const clang::Decl *)>(Fn));
}
+struct ZigClangPreprocessingRecord_iterator ZigClangASTUnit_getLocalPreprocessingEntities_begin(
+ struct ZigClangASTUnit *self)
+{
+ auto casted = reinterpret_cast<const clang::ASTUnit *>(self);
+ return bitcast(casted->getLocalPreprocessingEntities().begin());
+}
+
+struct ZigClangPreprocessingRecord_iterator ZigClangASTUnit_getLocalPreprocessingEntities_end(
+ struct ZigClangASTUnit *self)
+{
+ auto casted = reinterpret_cast<const clang::ASTUnit *>(self);
+ return bitcast(casted->getLocalPreprocessingEntities().end());
+}
+
+struct ZigClangPreprocessedEntity *ZigClangPreprocessingRecord_iterator_deref(
+ struct ZigClangPreprocessingRecord_iterator self)
+{
+ clang::PreprocessingRecord::iterator casted = bitcast(self);
+ clang::PreprocessedEntity *result = *casted;
+ return reinterpret_cast<ZigClangPreprocessedEntity *>(result);
+}
+
const ZigClangRecordDecl *ZigClangRecordType_getDecl(const ZigClangRecordType *record_ty) {
const clang::RecordDecl *record_decl = reinterpret_cast<const clang::RecordType *>(record_ty)->getDecl();
return reinterpret_cast<const ZigClangRecordDecl *>(record_decl);
@@ -1674,6 +1758,12 @@ const char *ZigClangType_getTypeClassName(const ZigClangType *self) {
return casted->getTypeClassName();
}
+const ZigClangArrayType *ZigClangType_getAsArrayTypeUnsafe(const ZigClangType *self) {
+ auto casted = reinterpret_cast<const clang::Type *>(self);
+ const clang::ArrayType *result = casted->getAsArrayTypeUnsafe();
+ return reinterpret_cast<const ZigClangArrayType *>(result);
+}
+
ZigClangSourceLocation ZigClangStmt_getBeginLoc(const ZigClangStmt *self) {
auto casted = reinterpret_cast<const clang::Stmt *>(self);
return bitcast(casted->getBeginLoc());
@@ -1712,6 +1802,29 @@ bool ZigClangExpr_EvaluateAsBooleanCondition(const ZigClangExpr *self, bool *res
return casted->EvaluateAsBooleanCondition(*result, *casted_ctx, in_constant_context);
}
+bool ZigClangExpr_EvaluateAsFloat(const ZigClangExpr *self, ZigClangAPFloat **result,
+ const struct ZigClangASTContext *ctx)
+{
+ llvm::APFloat *ap_float = new llvm::APFloat(0.0f);
+ *result = reinterpret_cast<ZigClangAPFloat *>(ap_float);
+ auto casted = reinterpret_cast<const clang::Expr *>(self);
+ auto casted_ctx = reinterpret_cast<const clang::ASTContext *>(ctx);
+ return casted->EvaluateAsFloat(*ap_float, *casted_ctx);
+}
+
+bool ZigClangExpr_EvaluateAsConstantExpr(const ZigClangExpr *self, ZigClangExprEvalResult *result,
+ ZigClangExpr_ConstExprUsage usage, const struct ZigClangASTContext *ctx)
+{
+ auto casted_self = reinterpret_cast<const clang::Expr *>(self);
+ auto casted_ctx = reinterpret_cast<const clang::ASTContext *>(ctx);
+ clang::Expr::EvalResult eval_result;
+ if (!casted_self->EvaluateAsConstantExpr(eval_result, (clang::Expr::ConstExprUsage)usage, *casted_ctx)) {
+ return false;
+ }
+ *result = bitcast(eval_result);
+ return true;
+}
+
ZigClangAPValueKind ZigClangAPValue_getKind(const ZigClangAPValue *self) {
auto casted = reinterpret_cast<const clang::APValue *>(self);
return (ZigClangAPValueKind)casted->getKind();
@@ -1911,6 +2024,11 @@ struct ZigClangQualType ZigClangVarDecl_getType(const struct ZigClangVarDecl *se
return bitcast(casted->getType());
}
+struct ZigClangQualType ZigClangVarDecl_getTypeSourceInfo_getType(const struct ZigClangVarDecl *self) {
+ auto casted = reinterpret_cast<const clang::VarDecl *>(self);
+ return bitcast(casted->getTypeSourceInfo()->getType());
+}
+
const struct ZigClangExpr *ZigClangVarDecl_getInit(const struct ZigClangVarDecl *self) {
auto casted = reinterpret_cast<const clang::VarDecl *>(self);
return reinterpret_cast<const ZigClangExpr *>(casted->getInit());
@@ -1921,6 +2039,32 @@ enum ZigClangVarDecl_TLSKind ZigClangVarDecl_getTLSKind(const ZigClangVarDecl *s
return (ZigClangVarDecl_TLSKind)casted->getTLSKind();
}
+struct ZigClangSourceLocation ZigClangVarDecl_getLocation(const struct ZigClangVarDecl *self) {
+ auto casted = reinterpret_cast<const clang::VarDecl *>(self);
+ return bitcast(casted->getLocation());
+}
+
+bool ZigClangVarDecl_hasExternalStorage(const struct ZigClangVarDecl *self) {
+ auto casted = reinterpret_cast<const clang::VarDecl *>(self);
+ return casted->hasExternalStorage();
+}
+
+bool ZigClangVarDecl_isFileVarDecl(const struct ZigClangVarDecl *self) {
+ auto casted = reinterpret_cast<const clang::VarDecl *>(self);
+ return casted->isFileVarDecl();
+}
+
+bool ZigClangVarDecl_hasInit(const struct ZigClangVarDecl *self) {
+ auto casted = reinterpret_cast<const clang::VarDecl *>(self);
+ return casted->hasInit();
+}
+
+const ZigClangAPValue * ZigClangVarDecl_evaluateValue(const struct ZigClangVarDecl *self) {
+ auto casted = reinterpret_cast<const clang::VarDecl *>(self);
+ const clang::APValue *result = casted->evaluateValue();
+ return reinterpret_cast<const ZigClangAPValue *>(result);
+}
+
enum ZigClangBuiltinTypeKind ZigClangBuiltinType_getKind(const struct ZigClangBuiltinType *self) {
auto casted = reinterpret_cast<const clang::BuiltinType *>(self);
return (ZigClangBuiltinTypeKind)casted->getKind();
@@ -2396,3 +2540,122 @@ const struct ZigClangExpr *ZigClangParenExpr_getSubExpr(const struct ZigClangPar
auto casted = reinterpret_cast<const clang::ParenExpr *>(self);
return reinterpret_cast<const struct ZigClangExpr *>(casted->getSubExpr());
}
+
+enum ZigClangPreprocessedEntity_EntityKind ZigClangPreprocessedEntity_getKind(
+ const struct ZigClangPreprocessedEntity *self)
+{
+ auto casted = reinterpret_cast<const clang::PreprocessedEntity *>(self);
+ return (ZigClangPreprocessedEntity_EntityKind)casted->getKind();
+}
+
+const char *ZigClangMacroDefinitionRecord_getName_getNameStart(const struct ZigClangMacroDefinitionRecord *self) {
+ auto casted = reinterpret_cast<const clang::MacroDefinitionRecord *>(self);
+ return casted->getName()->getNameStart();
+}
+
+struct ZigClangSourceLocation ZigClangMacroDefinitionRecord_getSourceRange_getBegin(const struct ZigClangMacroDefinitionRecord *self) {
+ auto casted = reinterpret_cast<const clang::MacroDefinitionRecord *>(self);
+ return bitcast(casted->getSourceRange().getBegin());
+}
+
+struct ZigClangSourceLocation ZigClangMacroDefinitionRecord_getSourceRange_getEnd(const struct ZigClangMacroDefinitionRecord *self) {
+ auto casted = reinterpret_cast<const clang::MacroDefinitionRecord *>(self);
+ return bitcast(casted->getSourceRange().getEnd());
+}
+
+ZigClangRecordDecl_field_iterator ZigClangRecordDecl_field_begin(const struct ZigClangRecordDecl *self) {
+ auto casted = reinterpret_cast<const clang::RecordDecl *>(self);
+ return bitcast(casted->field_begin());
+}
+
+ZigClangRecordDecl_field_iterator ZigClangRecordDecl_field_end(const struct ZigClangRecordDecl *self) {
+ auto casted = reinterpret_cast<const clang::RecordDecl *>(self);
+ return bitcast(casted->field_end());
+}
+
+bool ZigClangFieldDecl_isBitField(const struct ZigClangFieldDecl *self) {
+ auto casted = reinterpret_cast<const clang::FieldDecl *>(self);
+ return casted->isBitField();
+}
+
+ZigClangSourceLocation ZigClangFieldDecl_getLocation(const struct ZigClangFieldDecl *self) {
+ auto casted = reinterpret_cast<const clang::FieldDecl *>(self);
+ return bitcast(casted->getLocation());
+}
+
+ZigClangQualType ZigClangFieldDecl_getType(const struct ZigClangFieldDecl *self) {
+ auto casted = reinterpret_cast<const clang::FieldDecl *>(self);
+ return bitcast(casted->getType());
+}
+
+ZigClangRecordDecl_field_iterator ZigClangRecordDecl_field_iterator_next(
+ struct ZigClangRecordDecl_field_iterator self)
+{
+ clang::RecordDecl::field_iterator casted = bitcast(self);
+ ++casted;
+ return bitcast(casted);
+}
+
+const struct ZigClangFieldDecl * ZigClangRecordDecl_field_iterator_deref(
+ struct ZigClangRecordDecl_field_iterator self)
+{
+ clang::RecordDecl::field_iterator casted = bitcast(self);
+ const clang::FieldDecl *result = *casted;
+ return reinterpret_cast<const ZigClangFieldDecl *>(result);
+}
+
+bool ZigClangRecordDecl_field_iterator_neq(
+ struct ZigClangRecordDecl_field_iterator a,
+ struct ZigClangRecordDecl_field_iterator b)
+{
+ clang::RecordDecl::field_iterator casted_a = bitcast(a);
+ clang::RecordDecl::field_iterator casted_b = bitcast(b);
+ return casted_a != casted_b;
+}
+
+ZigClangEnumDecl_enumerator_iterator ZigClangEnumDecl_enumerator_begin(const struct ZigClangEnumDecl *self) {
+ auto casted = reinterpret_cast<const clang::EnumDecl *>(self);
+ return bitcast(casted->enumerator_begin());
+}
+
+ZigClangEnumDecl_enumerator_iterator ZigClangEnumDecl_enumerator_end(const struct ZigClangEnumDecl *self) {
+ auto casted = reinterpret_cast<const clang::EnumDecl *>(self);
+ return bitcast(casted->enumerator_end());
+}
+
+ZigClangEnumDecl_enumerator_iterator ZigClangEnumDecl_enumerator_iterator_next(
+ struct ZigClangEnumDecl_enumerator_iterator self)
+{
+ clang::EnumDecl::enumerator_iterator casted = bitcast(self);
+ ++casted;
+ return bitcast(casted);
+}
+
+const struct ZigClangEnumConstantDecl * ZigClangEnumDecl_enumerator_iterator_deref(
+ struct ZigClangEnumDecl_enumerator_iterator self)
+{
+ clang::EnumDecl::enumerator_iterator casted = bitcast(self);
+ const clang::EnumConstantDecl *result = *casted;
+ return reinterpret_cast<const ZigClangEnumConstantDecl *>(result);
+}
+
+bool ZigClangEnumDecl_enumerator_iterator_neq(
+ struct ZigClangEnumDecl_enumerator_iterator a,
+ struct ZigClangEnumDecl_enumerator_iterator b)
+{
+ clang::EnumDecl::enumerator_iterator casted_a = bitcast(a);
+ clang::EnumDecl::enumerator_iterator casted_b = bitcast(b);
+ return casted_a != casted_b;
+}
+
+const struct ZigClangExpr *ZigClangEnumConstantDecl_getInitExpr(const struct ZigClangEnumConstantDecl *self) {
+ auto casted = reinterpret_cast<const clang::EnumConstantDecl *>(self);
+ const clang::Expr *result = casted->getInitExpr();
+ return reinterpret_cast<const ZigClangExpr *>(result);
+}
+
+const struct ZigClangAPSInt *ZigClangEnumConstantDecl_getInitVal(const struct ZigClangEnumConstantDecl *self) {
+ auto casted = reinterpret_cast<const clang::EnumConstantDecl *>(self);
+ const llvm::APSInt *result = &casted->getInitVal();
+ return reinterpret_cast<const ZigClangAPSInt *>(result);
+}
src/zig_clang.h
@@ -122,6 +122,7 @@ struct ZigClangParmVarDecl;
struct ZigClangPointerType;
struct ZigClangPredefinedExpr;
struct ZigClangPreprocessedEntity;
+struct ZigClangPreprocessingRecord;
struct ZigClangRecordDecl;
struct ZigClangRecordType;
struct ZigClangReturnStmt;
@@ -146,6 +147,19 @@ struct ZigClangWhileStmt;
typedef struct ZigClangStmt *const * ZigClangCompoundStmt_const_body_iterator;
typedef struct ZigClangDecl *const * ZigClangDeclStmt_const_decl_iterator;
+struct ZigClangRecordDecl_field_iterator {
+ void *opaque;
+};
+
+struct ZigClangEnumDecl_enumerator_iterator {
+ void *opaque;
+};
+
+struct ZigClangPreprocessingRecord_iterator {
+ int I;
+ struct ZigClangPreprocessingRecord *Self;
+};
+
enum ZigClangBO {
ZigClangBO_PtrMemD,
ZigClangBO_PtrMemI,
@@ -790,6 +804,18 @@ enum ZigClangElaboratedTypeKeyword {
ZigClangETK_None,
};
+enum ZigClangPreprocessedEntity_EntityKind {
+ ZigClangPreprocessedEntity_InvalidKind,
+ ZigClangPreprocessedEntity_MacroExpansionKind,
+ ZigClangPreprocessedEntity_MacroDefinitionKind,
+ ZigClangPreprocessedEntity_InclusionDirectiveKind,
+};
+
+enum ZigClangExpr_ConstExprUsage {
+ ZigClangExpr_EvaluateForCodeGen,
+ ZigClangExpr_EvaluateForMangling,
+};
+
ZIG_EXTERN_C struct ZigClangSourceLocation ZigClangSourceManager_getSpellingLoc(const struct ZigClangSourceManager *,
struct ZigClangSourceLocation Loc);
ZIG_EXTERN_C const char *ZigClangSourceManager_getFilename(const struct ZigClangSourceManager *,
@@ -814,6 +840,13 @@ ZIG_EXTERN_C struct ZigClangASTContext *ZigClangASTUnit_getASTContext(struct Zig
ZIG_EXTERN_C struct ZigClangSourceManager *ZigClangASTUnit_getSourceManager(struct ZigClangASTUnit *);
ZIG_EXTERN_C bool ZigClangASTUnit_visitLocalTopLevelDecls(struct ZigClangASTUnit *, void *context,
bool (*Fn)(void *context, const struct ZigClangDecl *decl));
+ZIG_EXTERN_C struct ZigClangPreprocessingRecord_iterator ZigClangASTUnit_getLocalPreprocessingEntities_begin(struct ZigClangASTUnit *);
+ZIG_EXTERN_C struct ZigClangPreprocessingRecord_iterator ZigClangASTUnit_getLocalPreprocessingEntities_end(struct ZigClangASTUnit *);
+
+ZIG_EXTERN_C struct ZigClangPreprocessedEntity *ZigClangPreprocessingRecord_iterator_deref(
+ struct ZigClangPreprocessingRecord_iterator);
+
+ZIG_EXTERN_C enum ZigClangPreprocessedEntity_EntityKind ZigClangPreprocessedEntity_getKind(const struct ZigClangPreprocessedEntity *);
ZIG_EXTERN_C const struct ZigClangRecordDecl *ZigClangRecordType_getDecl(const struct ZigClangRecordType *record_ty);
ZIG_EXTERN_C const struct ZigClangEnumDecl *ZigClangEnumType_getDecl(const struct ZigClangEnumType *record_ty);
@@ -840,8 +873,22 @@ ZIG_EXTERN_C const struct ZigClangStmt *ZigClangFunctionDecl_getBody(const struc
ZIG_EXTERN_C bool ZigClangRecordDecl_isUnion(const struct ZigClangRecordDecl *record_decl);
ZIG_EXTERN_C bool ZigClangRecordDecl_isStruct(const struct ZigClangRecordDecl *record_decl);
ZIG_EXTERN_C bool ZigClangRecordDecl_isAnonymousStructOrUnion(const struct ZigClangRecordDecl *record_decl);
+ZIG_EXTERN_C ZigClangRecordDecl_field_iterator ZigClangRecordDecl_field_begin(const struct ZigClangRecordDecl *);
+ZIG_EXTERN_C ZigClangRecordDecl_field_iterator ZigClangRecordDecl_field_end(const struct ZigClangRecordDecl *);
+ZIG_EXTERN_C ZigClangRecordDecl_field_iterator ZigClangRecordDecl_field_iterator_next(struct ZigClangRecordDecl_field_iterator);
+ZIG_EXTERN_C const struct ZigClangFieldDecl * ZigClangRecordDecl_field_iterator_deref(struct ZigClangRecordDecl_field_iterator);
+ZIG_EXTERN_C bool ZigClangRecordDecl_field_iterator_neq(
+ struct ZigClangRecordDecl_field_iterator a,
+ struct ZigClangRecordDecl_field_iterator b);
ZIG_EXTERN_C struct ZigClangQualType ZigClangEnumDecl_getIntegerType(const struct ZigClangEnumDecl *);
+ZIG_EXTERN_C ZigClangEnumDecl_enumerator_iterator ZigClangEnumDecl_enumerator_begin(const struct ZigClangEnumDecl *);
+ZIG_EXTERN_C ZigClangEnumDecl_enumerator_iterator ZigClangEnumDecl_enumerator_end(const struct ZigClangEnumDecl *);
+ZIG_EXTERN_C ZigClangEnumDecl_enumerator_iterator ZigClangEnumDecl_enumerator_iterator_next(struct ZigClangEnumDecl_enumerator_iterator);
+ZIG_EXTERN_C const struct ZigClangEnumConstantDecl * ZigClangEnumDecl_enumerator_iterator_deref(struct ZigClangEnumDecl_enumerator_iterator);
+ZIG_EXTERN_C bool ZigClangEnumDecl_enumerator_iterator_neq(
+ struct ZigClangEnumDecl_enumerator_iterator a,
+ struct ZigClangEnumDecl_enumerator_iterator b);
ZIG_EXTERN_C const char *ZigClangDecl_getName_bytes_begin(const struct ZigClangDecl *decl);
ZIG_EXTERN_C enum ZigClangDeclKind ZigClangDecl_getKind(const struct ZigClangDecl *decl);
@@ -850,6 +897,12 @@ ZIG_EXTERN_C const char *ZigClangDecl_getDeclKindName(const struct ZigClangDecl
ZIG_EXTERN_C struct ZigClangQualType ZigClangVarDecl_getType(const struct ZigClangVarDecl *);
ZIG_EXTERN_C const struct ZigClangExpr *ZigClangVarDecl_getInit(const struct ZigClangVarDecl *var_decl);
ZIG_EXTERN_C enum ZigClangVarDecl_TLSKind ZigClangVarDecl_getTLSKind(const struct ZigClangVarDecl *var_decl);
+ZIG_EXTERN_C struct ZigClangSourceLocation ZigClangVarDecl_getLocation(const struct ZigClangVarDecl *);
+ZIG_EXTERN_C bool ZigClangVarDecl_hasExternalStorage(const struct ZigClangVarDecl *);
+ZIG_EXTERN_C bool ZigClangVarDecl_isFileVarDecl(const struct ZigClangVarDecl *);
+ZIG_EXTERN_C bool ZigClangVarDecl_hasInit(const struct ZigClangVarDecl *);
+ZIG_EXTERN_C const struct ZigClangAPValue *ZigClangVarDecl_evaluateValue(const struct ZigClangVarDecl *);
+ZIG_EXTERN_C struct ZigClangQualType ZigClangVarDecl_getTypeSourceInfo_getType(const struct ZigClangVarDecl *);
ZIG_EXTERN_C bool ZigClangSourceLocation_eq(struct ZigClangSourceLocation a, struct ZigClangSourceLocation b);
@@ -869,6 +922,7 @@ ZIG_EXTERN_C enum ZigClangTypeClass ZigClangType_getTypeClass(const struct ZigCl
ZIG_EXTERN_C struct ZigClangQualType ZigClangType_getPointeeType(const struct ZigClangType *self);
ZIG_EXTERN_C bool ZigClangType_isVoidType(const struct ZigClangType *self);
ZIG_EXTERN_C const char *ZigClangType_getTypeClassName(const struct ZigClangType *self);
+ZIG_EXTERN_C const struct ZigClangArrayType *ZigClangType_getAsArrayTypeUnsafe(const struct ZigClangType *self);
ZIG_EXTERN_C struct ZigClangSourceLocation ZigClangStmt_getBeginLoc(const struct ZigClangStmt *self);
ZIG_EXTERN_C enum ZigClangStmtClass ZigClangStmt_getStmtClass(const struct ZigClangStmt *self);
@@ -879,6 +933,10 @@ ZIG_EXTERN_C struct ZigClangQualType ZigClangExpr_getType(const struct ZigClangE
ZIG_EXTERN_C struct ZigClangSourceLocation ZigClangExpr_getBeginLoc(const struct ZigClangExpr *self);
ZIG_EXTERN_C bool ZigClangExpr_EvaluateAsBooleanCondition(const struct ZigClangExpr *self,
bool *result, const struct ZigClangASTContext *ctx, bool in_constant_context);
+ZIG_EXTERN_C bool ZigClangExpr_EvaluateAsFloat(const struct ZigClangExpr *self,
+ ZigClangAPFloat **result, const struct ZigClangASTContext *ctx);
+ZIG_EXTERN_C bool ZigClangExpr_EvaluateAsConstantExpr(const struct ZigClangExpr *,
+ struct ZigClangExprEvalResult *, ZigClangExpr_ConstExprUsage, const struct ZigClangASTContext *);
ZIG_EXTERN_C enum ZigClangAPValueKind ZigClangAPValue_getKind(const struct ZigClangAPValue *self);
ZIG_EXTERN_C const struct ZigClangAPSInt *ZigClangAPValue_getInt(const struct ZigClangAPValue *self);
@@ -1031,4 +1089,15 @@ ZIG_EXTERN_C const struct ZigClangStmt *ZigClangCaseStmt_getSubStmt(const struct
ZIG_EXTERN_C const struct ZigClangStmt *ZigClangDefaultStmt_getSubStmt(const struct ZigClangDefaultStmt *);
ZIG_EXTERN_C const struct ZigClangExpr *ZigClangParenExpr_getSubExpr(const struct ZigClangParenExpr *);
+
+ZIG_EXTERN_C const char *ZigClangMacroDefinitionRecord_getName_getNameStart(const struct ZigClangMacroDefinitionRecord *);
+ZIG_EXTERN_C struct ZigClangSourceLocation ZigClangMacroDefinitionRecord_getSourceRange_getBegin(const struct ZigClangMacroDefinitionRecord *);
+ZIG_EXTERN_C struct ZigClangSourceLocation ZigClangMacroDefinitionRecord_getSourceRange_getEnd(const struct ZigClangMacroDefinitionRecord *);
+
+ZIG_EXTERN_C bool ZigClangFieldDecl_isBitField(const struct ZigClangFieldDecl *);
+ZIG_EXTERN_C struct ZigClangQualType ZigClangFieldDecl_getType(const struct ZigClangFieldDecl *);
+ZIG_EXTERN_C struct ZigClangSourceLocation ZigClangFieldDecl_getLocation(const struct ZigClangFieldDecl *);
+
+ZIG_EXTERN_C const struct ZigClangExpr *ZigClangEnumConstantDecl_getInitExpr(const struct ZigClangEnumConstantDecl *);
+ZIG_EXTERN_C const struct ZigClangAPSInt *ZigClangEnumConstantDecl_getInitVal(const struct ZigClangEnumConstantDecl *);
#endif