1
0
Fork 0

Codechange: Use brace counting to detect end of class in squirrel-exporter

pull/14323/head
glx22 2025-06-04 17:26:00 +02:00 committed by Loïc Guilloux
parent 6482e16564
commit fca75fd06a
1 changed files with 14 additions and 14 deletions

View File

@ -73,9 +73,7 @@ macro(reset_reader)
unset(STATIC_METHODS) unset(STATIC_METHODS)
unset(CLS) unset(CLS)
unset(START_SQUIRREL_DEFINE_ON_NEXT_LINE) unset(START_SQUIRREL_DEFINE_ON_NEXT_LINE)
set(CLS_LEVEL 0)
unset(CLS_IN_API) unset(CLS_IN_API)
set(BRACE_LEVEL 0)
endmacro() endmacro()
reset_reader() reset_reader()
@ -83,6 +81,9 @@ reset_reader()
file(STRINGS "${SCRIPT_API_FILE}" SOURCE_LINES) file(STRINGS "${SCRIPT_API_FILE}" SOURCE_LINES)
set(NUM_LINE 0) set(NUM_LINE 0)
set(CLS_LEVEL 0)
set(BRACE_LEVEL 0)
macro(doxygen_check) macro(doxygen_check)
if(NOT "${DOXYGEN_SKIP}" STREQUAL "") if(NOT "${DOXYGEN_SKIP}" STREQUAL "")
message(FATAL_ERROR "${SCRIPT_API_FILE}:${NUM_LINE}: a DOXYGEN_API block was not properly closed") 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() continue()
endif() 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 # Ignore forward declarations of classes
if("${LINE}" MATCHES "^(\t*)class(.*);") if("${LINE}" MATCHES "^(\t*)class(.*);")
continue() continue()
@ -274,7 +282,7 @@ foreach(LINE IN LISTS SOURCE_LINES)
endif() endif()
# Maybe the end of the class, if so we can start with the Squirrel export pretty soon # 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") math(EXPR CLS_LEVEL "${CLS_LEVEL} - 1")
if(CLS_LEVEL) if(CLS_LEVEL)
unset(IN_ENUM) unset(IN_ENUM)
@ -529,13 +537,9 @@ foreach(LINE IN LISTS SOURCE_LINES)
continue() continue()
endif() endif()
# Count braces to skip function bodies if(NOT BRACE_LEVEL EQUAL CLS_LEVEL)
string(REGEX REPLACE "[^{]" "" OPENING_BRACES "${LINE}") continue()
string(LENGTH "${OPENING_BRACES}" OPENING_BRACES) endif()
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}")
# Add enums # Add enums
if(IN_ENUM) if(IN_ENUM)
@ -565,10 +569,6 @@ foreach(LINE IN LISTS SOURCE_LINES)
continue() continue()
endif() endif()
if(OLD_BRACE_LEVEL)
continue()
endif()
# Add a const (non-enum) value # Add a const (non-enum) value
if("${LINE}" MATCHES "^[ \t]*static const [^ ]+ ([^ ]+) = -?\\(?[^ ]*\\)?[^ ]+;") if("${LINE}" MATCHES "^[ \t]*static const [^ ]+ ([^ ]+) = -?\\(?[^ ]*\\)?[^ ]+;")
list(APPEND CONST_VALUES "${CMAKE_MATCH_1}") list(APPEND CONST_VALUES "${CMAKE_MATCH_1}")