From fca75fd06a1a4e2fcf49bb0871c6a624701e6806 Mon Sep 17 00:00:00 2001 From: glx22 Date: Wed, 4 Jun 2025 17:26:00 +0200 Subject: [PATCH] Codechange: Use brace counting to detect end of class in squirrel-exporter --- cmake/scripts/SquirrelExport.cmake | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/cmake/scripts/SquirrelExport.cmake b/cmake/scripts/SquirrelExport.cmake index 109ad0328c..3b5a7f291c 100644 --- a/cmake/scripts/SquirrelExport.cmake +++ b/cmake/scripts/SquirrelExport.cmake @@ -73,9 +73,7 @@ macro(reset_reader) unset(STATIC_METHODS) unset(CLS) unset(START_SQUIRREL_DEFINE_ON_NEXT_LINE) - set(CLS_LEVEL 0) unset(CLS_IN_API) - set(BRACE_LEVEL 0) endmacro() reset_reader() @@ -83,6 +81,9 @@ reset_reader() file(STRINGS "${SCRIPT_API_FILE}" SOURCE_LINES) set(NUM_LINE 0) +set(CLS_LEVEL 0) +set(BRACE_LEVEL 0) + macro(doxygen_check) if(NOT "${DOXYGEN_SKIP}" STREQUAL "") message(FATAL_ERROR "${SCRIPT_API_FILE}:${NUM_LINE}: a DOXYGEN_API block was not properly closed") @@ -156,6 +157,13 @@ foreach(LINE IN LISTS SOURCE_LINES) continue() endif() + # Count braces to skip function bodies + string(REGEX REPLACE "[^{]" "" OPENING_BRACES "${LINE}") + string(LENGTH "${OPENING_BRACES}" OPENING_BRACES) + string(REGEX REPLACE "[^}]" "" CLOSING_BRACES "${LINE}") + string(LENGTH "${CLOSING_BRACES}" CLOSING_BRACES) + math(EXPR BRACE_LEVEL "${BRACE_LEVEL} + ${OPENING_BRACES} - ${CLOSING_BRACES}") + # Ignore forward declarations of classes if("${LINE}" MATCHES "^(\t*)class(.*);") continue() @@ -274,7 +282,7 @@ foreach(LINE IN LISTS SOURCE_LINES) endif() # Maybe the end of the class, if so we can start with the Squirrel export pretty soon - if("${LINE}" MATCHES "};") + if(BRACE_LEVEL LESS CLS_LEVEL) math(EXPR CLS_LEVEL "${CLS_LEVEL} - 1") if(CLS_LEVEL) unset(IN_ENUM) @@ -529,13 +537,9 @@ foreach(LINE IN LISTS SOURCE_LINES) continue() endif() - # Count braces to skip function bodies - string(REGEX REPLACE "[^{]" "" OPENING_BRACES "${LINE}") - string(LENGTH "${OPENING_BRACES}" OPENING_BRACES) - string(REGEX REPLACE "[^}]" "" CLOSING_BRACES "${LINE}") - string(LENGTH "${CLOSING_BRACES}" CLOSING_BRACES) - set(OLD_BRACE_LEVEL "${BRACE_LEVEL}") - math(EXPR BRACE_LEVEL "${BRACE_LEVEL} + ${OPENING_BRACES} - ${CLOSING_BRACES}") + if(NOT BRACE_LEVEL EQUAL CLS_LEVEL) + continue() + endif() # Add enums if(IN_ENUM) @@ -565,10 +569,6 @@ foreach(LINE IN LISTS SOURCE_LINES) continue() endif() - if(OLD_BRACE_LEVEL) - continue() - endif() - # Add a const (non-enum) value if("${LINE}" MATCHES "^[ \t]*static const [^ ]+ ([^ ]+) = -?\\(?[^ ]*\\)?[^ ]+;") list(APPEND CONST_VALUES "${CMAKE_MATCH_1}")