mirror of
https://github.com/ziglang/zig.git
synced 2026-02-21 00:35:10 +00:00
finish conversion of translate_c.cpp to use zig_clang.h
See #1964 translate_c.cpp now exclusively uses the clang API via zig_clang.h shaves off 5 seconds from building zig when translate_c.cpp (or any h files it uses) change.
This commit is contained in:
parent
f84086132f
commit
a7c9aa7ddb
@ -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
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user