| ... | @@ -90,7 +90,7 @@ struct Context { | ... | @@ -90,7 +90,7 @@ struct Context { |
| 90 | bool warnings_on; | 90 | bool warnings_on; |
| 91 | | 91 | |
| 92 | CodeGen *codegen; | 92 | CodeGen *codegen; |
| 93 | clang::ASTContext *ctx; | 93 | ZigClangASTContext *ctx; |
| 94 | | 94 | |
| 95 | TransScopeRoot *global_scope; | 95 | TransScopeRoot *global_scope; |
| 96 | HashMap<Buf *, bool, buf_hash, buf_eql_buf> ptr_params; | 96 | HashMap<Buf *, bool, buf_hash, buf_eql_buf> ptr_params; |
| ... | @@ -132,6 +132,16 @@ static ZigClangSourceLocation bitcast(clang::SourceLocation src) { | ... | @@ -132,6 +132,16 @@ static ZigClangSourceLocation bitcast(clang::SourceLocation src) { |
| 132 | memcpy(&dest, &src, sizeof(ZigClangSourceLocation)); | 132 | memcpy(&dest, &src, sizeof(ZigClangSourceLocation)); |
| 133 | return dest; | 133 | return dest; |
| 134 | } | 134 | } |
| | 135 | static ZigClangQualType bitcast(clang::QualType src) { |
| | 136 | ZigClangQualType dest; |
| | 137 | memcpy(&dest, &src, sizeof(ZigClangQualType)); |
| | 138 | return dest; |
| | 139 | } |
| | 140 | static clang::QualType bitcast(ZigClangQualType src) { |
| | 141 | clang::QualType dest; |
| | 142 | memcpy(&dest, &src, sizeof(ZigClangQualType)); |
| | 143 | return dest; |
| | 144 | } |
| 135 | | 145 | |
| 136 | ATTRIBUTE_PRINTF(3, 4) | 146 | ATTRIBUTE_PRINTF(3, 4) |
| 137 | static void emit_warning(Context *c, const clang::SourceLocation &clang_sl, const char *format, ...) { | 147 | static void emit_warning(Context *c, const clang::SourceLocation &clang_sl, const char *format, ...) { |
| ... | @@ -509,7 +519,7 @@ static clang::QualType get_expr_qual_type(Context *c, const clang::Expr *expr) { | ... | @@ -509,7 +519,7 @@ static clang::QualType get_expr_qual_type(Context *c, const clang::Expr *expr) { |
| 509 | const clang::ArrayType *array_type = static_cast<const clang::ArrayType *>(array_qt.getTypePtr()); | 519 | const clang::ArrayType *array_type = static_cast<const clang::ArrayType *>(array_qt.getTypePtr()); |
| 510 | clang::QualType pointee_qt = array_type->getElementType(); | 520 | clang::QualType pointee_qt = array_type->getElementType(); |
| 511 | pointee_qt.addConst(); | 521 | pointee_qt.addConst(); |
| 512 | return c->ctx->getPointerType(pointee_qt); | 522 | return bitcast(ZigClangASTContext_getPointerType(c->ctx, bitcast(pointee_qt))); |
| 513 | } | 523 | } |
| 514 | } | 524 | } |
| 515 | } | 525 | } |
| ... | @@ -1221,7 +1231,7 @@ static AstNode *trans_return_stmt(Context *c, TransScope *scope, const clang::Re | ... | @@ -1221,7 +1231,7 @@ static AstNode *trans_return_stmt(Context *c, TransScope *scope, const clang::Re |
| 1221 | | 1231 | |
| 1222 | static AstNode *trans_integer_literal(Context *c, const clang::IntegerLiteral *stmt) { | 1232 | static AstNode *trans_integer_literal(Context *c, const clang::IntegerLiteral *stmt) { |
| 1223 | llvm::APSInt result; | 1233 | llvm::APSInt result; |
| 1224 | if (!stmt->EvaluateAsInt(result, *c->ctx)) { | 1234 | if (!stmt->EvaluateAsInt(result, *reinterpret_cast<clang::ASTContext *>(c->ctx))) { |
| 1225 | emit_warning(c, stmt->getLocStart(), "invalid integer literal"); | 1235 | emit_warning(c, stmt->getLocStart(), "invalid integer literal"); |
| 1226 | return nullptr; | 1236 | return nullptr; |
| 1227 | } | 1237 | } |
| ... | @@ -4240,7 +4250,8 @@ static void visit_var_decl(Context *c, const clang::VarDecl *var_decl) { | ... | @@ -4240,7 +4250,8 @@ static void visit_var_decl(Context *c, const clang::VarDecl *var_decl) { |
| 4240 | return; | 4250 | return; |
| 4241 | } | 4251 | } |
| 4242 | | 4252 | |
| 4243 | static bool decl_visitor(void *context, const clang::Decl *decl) { | 4253 | static bool decl_visitor(void *context, const ZigClangDecl *zdecl) { |
| | 4254 | const clang::Decl *decl = reinterpret_cast<const clang::Decl *>(zdecl); |
| 4244 | Context *c = (Context*)context; | 4255 | Context *c = (Context*)context; |
| 4245 | | 4256 | |
| 4246 | switch (decl->getKind()) { | 4257 | switch (decl->getKind()) { |
| ... | @@ -4678,12 +4689,13 @@ static void process_macro(Context *c, CTokenize *ctok, Buf *name, const char *ch | ... | @@ -4678,12 +4689,13 @@ static void process_macro(Context *c, CTokenize *ctok, Buf *name, const char *ch |
| 4678 | c->macro_table.put(name, result_node); | 4689 | c->macro_table.put(name, result_node); |
| 4679 | } | 4690 | } |
| 4680 | | 4691 | |
| 4681 | static void process_preprocessor_entities(Context *c, clang::ASTUnit &unit) { | 4692 | static void process_preprocessor_entities(Context *c, ZigClangASTUnit *zunit) { |
| | 4693 | clang::ASTUnit *unit = reinterpret_cast<clang::ASTUnit *>(zunit); |
| 4682 | CTokenize ctok = {{0}}; | 4694 | CTokenize ctok = {{0}}; |
| 4683 | | 4695 | |
| 4684 | // TODO if we see #undef, delete it from the table | 4696 | // TODO if we see #undef, delete it from the table |
| 4685 | | 4697 | |
| 4686 | for (clang::PreprocessedEntity *entity : unit.getLocalPreprocessingEntities()) { | 4698 | for (clang::PreprocessedEntity *entity : unit->getLocalPreprocessingEntities()) { |
| 4687 | switch (entity->getKind()) { | 4699 | switch (entity->getKind()) { |
| 4688 | case clang::PreprocessedEntity::InvalidKind: | 4700 | case clang::PreprocessedEntity::InvalidKind: |
| 4689 | case clang::PreprocessedEntity::InclusionDirectiveKind: | 4701 | case clang::PreprocessedEntity::InclusionDirectiveKind: |
| ... | @@ -4832,7 +4844,7 @@ Error parse_h_file(ImportTableEntry *import, ZigList<ErrorMsg *> *errors, const | ... | @@ -4832,7 +4844,7 @@ Error parse_h_file(ImportTableEntry *import, ZigList<ErrorMsg *> *errors, const |
| 4832 | bool for_serialization = false; | 4844 | bool for_serialization = false; |
| 4833 | const char *resources_path = buf_ptr(codegen->zig_c_headers_dir); | 4845 | const char *resources_path = buf_ptr(codegen->zig_c_headers_dir); |
| 4834 | std::unique_ptr<clang::ASTUnit> err_unit; | 4846 | std::unique_ptr<clang::ASTUnit> err_unit; |
| 4835 | std::unique_ptr<clang::ASTUnit> ast_unit(clang::ASTUnit::LoadFromCommandLine( | 4847 | ZigClangASTUnit *ast_unit = reinterpret_cast<ZigClangASTUnit *>(clang::ASTUnit::LoadFromCommandLine( |
| 4836 | &clang_argv.at(0), &clang_argv.last(), | 4848 | &clang_argv.at(0), &clang_argv.last(), |
| 4837 | pch_container_ops, diags, resources_path, | 4849 | pch_container_ops, diags, resources_path, |
| 4838 | only_local_decls, capture_diagnostics, clang::None, true, 0, clang::TU_Complete, | 4850 | only_local_decls, capture_diagnostics, clang::None, true, 0, clang::TU_Complete, |
| ... | @@ -4847,7 +4859,7 @@ Error parse_h_file(ImportTableEntry *import, ZigList<ErrorMsg *> *errors, const | ... | @@ -4847,7 +4859,7 @@ Error parse_h_file(ImportTableEntry *import, ZigList<ErrorMsg *> *errors, const |
| 4847 | | 4859 | |
| 4848 | if (diags->getClient()->getNumErrors() > 0) { | 4860 | if (diags->getClient()->getNumErrors() > 0) { |
| 4849 | if (ast_unit) { | 4861 | if (ast_unit) { |
| 4850 | err_unit = std::move(ast_unit); | 4862 | err_unit = std::unique_ptr<clang::ASTUnit>(reinterpret_cast<clang::ASTUnit *>(ast_unit)); |
| 4851 | } | 4863 | } |
| 4852 | | 4864 | |
| 4853 | for (clang::ASTUnit::stored_diag_iterator it = err_unit->stored_diag_begin(), | 4865 | for (clang::ASTUnit::stored_diag_iterator it = err_unit->stored_diag_begin(), |
| ... | @@ -4894,14 +4906,14 @@ Error parse_h_file(ImportTableEntry *import, ZigList<ErrorMsg *> *errors, const | ... | @@ -4894,14 +4906,14 @@ Error parse_h_file(ImportTableEntry *import, ZigList<ErrorMsg *> *errors, const |
| 4894 | return ErrorCCompileErrors; | 4906 | return ErrorCCompileErrors; |
| 4895 | } | 4907 | } |
| 4896 | | 4908 | |
| 4897 | c->ctx = &ast_unit->getASTContext(); | 4909 | c->ctx = ZigClangASTUnit_getASTContext(ast_unit); |
| 4898 | c->source_manager = reinterpret_cast<ZigClangSourceManager *>(&ast_unit->getSourceManager()); | 4910 | c->source_manager = ZigClangASTUnit_getSourceManager(ast_unit); |
| 4899 | c->root = trans_create_node(c, NodeTypeContainerDecl); | 4911 | c->root = trans_create_node(c, NodeTypeContainerDecl); |
| 4900 | c->root->data.container_decl.is_root = true; | 4912 | c->root->data.container_decl.is_root = true; |
| 4901 | | 4913 | |
| 4902 | ast_unit->visitLocalTopLevelDecls(c, decl_visitor); | 4914 | ZigClangASTUnit_visitLocalTopLevelDecls(ast_unit, c, decl_visitor); |
| 4903 | | 4915 | |
| 4904 | process_preprocessor_entities(c, *ast_unit); | 4916 | process_preprocessor_entities(c, ast_unit); |
| 4905 | | 4917 | |
| 4906 | render_macros(c); | 4918 | render_macros(c); |
| 4907 | render_aliases(c); | 4919 | render_aliases(c); |