From abbc78f4d34e89aa42032310a8a6343ce263d69a Mon Sep 17 00:00:00 2001 From: Thorulf Neustrup Date: Tue, 23 Jan 2024 11:22:10 +0100 Subject: [PATCH] Apply feature checker together with typechecker --- src/typechecker.cpp | 36 ++++++++++++++---------------------- 1 file changed, 14 insertions(+), 22 deletions(-) diff --git a/src/typechecker.cpp b/src/typechecker.cpp index c27b1fb4..f229e334 100644 --- a/src/typechecker.cpp +++ b/src/typechecker.cpp @@ -2596,14 +2596,20 @@ bool TypeChecker::isUniqueReference(expression_t expr) const } } +static void static_analysis(Document& doc){ + if(!doc.has_errors()){ + TypeChecker checker(doc); + doc.accept(checker); + FeatureChecker fchecker(doc); + doc.set_supported_methods(fchecker.get_supported_methods()); + } +} + bool parse_XTA(FILE* file, Document* doc, bool newxta) { DocumentBuilder builder(*doc); parse_XTA(file, &builder, newxta); - if (!doc->has_errors()) { - TypeChecker checker(*doc); - doc->accept(checker); - } + static_analysis(*doc); return !doc->has_errors(); } @@ -2611,10 +2617,7 @@ bool parse_XTA(const char* buffer, Document* doc, bool newxta) { DocumentBuilder builder(*doc); parse_XTA(buffer, &builder, newxta); - if (!doc->has_errors()) { - TypeChecker checker(*doc); - doc->accept(checker); - } + static_analysis(*doc); return !doc->has_errors(); } @@ -2628,12 +2631,7 @@ int32_t parse_XML_buffer(const char* buffer, Document* doc, bool newxta, return err; } - if (!doc->has_errors()) { - TypeChecker checker(*doc); - doc->accept(checker); - FeatureChecker fchecker(*doc); - doc->set_supported_methods(fchecker.get_supported_methods()); - } + static_analysis(*doc); return 0; } @@ -2646,10 +2644,7 @@ int32_t parse_XML_file(const char* file, Document* doc, bool newxta, const std:: return err; } - if (!doc->has_errors()) { - TypeChecker checker(*doc); - doc->accept(checker); - } + static_analysis(*doc); return 0; } @@ -2662,10 +2657,7 @@ int32_t parse_XML_fd(int fd, Document* doc, bool newxta, const std::vectorhas_errors()) { - TypeChecker checker(*doc); - doc->accept(checker); - } + static_analysis(*doc); return 0; }