diff --git a/build/.ninja_deps b/build/.ninja_deps index 53faad2..5664a6a 100644 Binary files a/build/.ninja_deps and b/build/.ninja_deps differ diff --git a/build/.ninja_log b/build/.ninja_log index 15fd4f7..c61abbc 100644 --- a/build/.ninja_log +++ b/build/.ninja_log @@ -1,60 +1,17 @@ # ninja log v7 -0 1451 1779867877701788943 CMakeFiles/saqut.dir/src/core/sourcefile.cpp.o da6f5fc90e87e6b1 -0 1246 1779867877703024703 CMakeFiles/saqut.dir/src/lexer/lexer.cpp.o 90eeec811f2137e6 -1451 2772 1779867879152793461 CMakeFiles/saqut.dir/src/tokenizer/tokenizer.cpp.o a01677f8bb4f4dbc -1246 2891 1779867878947792823 CMakeFiles/saqut.dir/src/parser/parser.cpp.o 2c65b7be26cead32 -5 2061 1779867877706788958 CMakeFiles/saqut.dir/src/parser/nodes/program.cpp.o ac5bbcd74d87561a -1 2213 1779867877703621428 CMakeFiles/saqut.dir/src/parser/nodes/identifier.cpp.o eb96bb4b1eb4ad80 -1 2296 1779867877703518257 CMakeFiles/saqut.dir/src/parser/nodes/expressions.cpp.o 4057e3d63c63a1ab -1 2529 1779867877703709398 CMakeFiles/saqut.dir/src/parser/nodes/literal.cpp.o 78f2c4da7c9b2281 -7 2335 1779867877708788964 CMakeFiles/saqut.dir/src/parser/nodes/statements.cpp.o b5c20724bbf3648c -0 2098 1779867877703316205 CMakeFiles/saqut.dir/src/parser/nodes/binary_expr.cpp.o d2e2bb2f8a63c6d2 -0 2499 1779867877703412857 CMakeFiles/saqut.dir/src/parser/nodes/declarations.cpp.o b6c56f04a257f685 -0 2892 1779867877703230815 CMakeFiles/saqut.dir/src/main.cpp.o 110c26cb1d0c3a23 -2892 2983 1779867880593797950 saqut 89052e51305cb697 -0 22 1779868368456818650 build.ninja 1876a59d627a585 -0 22 1779868368456217236 /home/saqut/Masaüstü/saqutcompiler/build/cmake_install.cmake 1876a59d627a585 -1 1528 1779868368464217284 CMakeFiles/saqut.dir/src/lexer/lexer.cpp.o 90eeec811f2137e6 -1 1768 1779868368465401047 CMakeFiles/saqut.dir/src/parser/nodes/program.cpp.o ac5bbcd74d87561a -1 2006 1779868368464927313 CMakeFiles/saqut.dir/src/parser/nodes/binary_expr.cpp.o d2e2bb2f8a63c6d2 -1 2109 1779868368465099051 CMakeFiles/saqut.dir/src/parser/nodes/expressions.cpp.o 4057e3d63c63a1ab -1 2216 1779868368465200112 CMakeFiles/saqut.dir/src/parser/nodes/identifier.cpp.o eb96bb4b1eb4ad80 -4 2421 1779868368467294710 CMakeFiles/saqut.dir/src/parser/nodes/statements.cpp.o b5c20724bbf3648c -1 2425 1779868368465010538 CMakeFiles/saqut.dir/src/parser/nodes/declarations.cpp.o b6c56f04a257f685 -1 2450 1779868368465293953 CMakeFiles/saqut.dir/src/parser/nodes/literal.cpp.o 78f2c4da7c9b2281 -4 2468 1779868368468417782 CMakeFiles/saqut.dir/src/parser/parser.cpp.o 2c65b7be26cead32 -1528 2575 1779868369991226412 CMakeFiles/saqut.dir/src/tokenizer/tokenizer.cpp.o a01677f8bb4f4dbc -1 2887 1779868368464815959 CMakeFiles/saqut.dir/src/main.cpp.o 110c26cb1d0c3a23 -2887 2980 1779868371350234528 saqut 89052e51305cb697 -2 1845 1781360349526488567 CMakeFiles/saqut.dir/src/tokenizer/tokenizer.cpp.o a01677f8bb4f4dbc -2 1991 1781360349525864955 CMakeFiles/saqut.dir/src/parser/parser.cpp.o 2c65b7be26cead32 -1 2031 1781360349525052844 CMakeFiles/saqut.dir/src/parser/nodes/binary_expr.cpp.o d2e2bb2f8a63c6d2 -1 2080 1781360349525452259 CMakeFiles/saqut.dir/src/parser/nodes/literal.cpp.o 78f2c4da7c9b2281 -1 2083 1781360349525558767 CMakeFiles/saqut.dir/src/parser/nodes/program.cpp.o ac5bbcd74d87561a -1 2090 1781360349525147077 CMakeFiles/saqut.dir/src/parser/nodes/declarations.cpp.o b6c56f04a257f685 -2 2155 1781360349525690109 CMakeFiles/saqut.dir/src/parser/nodes/statements.cpp.o b5c20724bbf3648c -1 2240 1781360349525339814 CMakeFiles/saqut.dir/src/parser/nodes/identifier.cpp.o eb96bb4b1eb4ad80 -1 2355 1781360349525238105 CMakeFiles/saqut.dir/src/parser/nodes/expressions.cpp.o 4057e3d63c63a1ab -1 2750 1781360349524108829 CMakeFiles/saqut.dir/src/main.cpp.o 110c26cb1d0c3a23 -2750 2867 1781360352273116183 saqut 89052e51305cb697 -1 1640 1781361120993563298 CMakeFiles/saqut.dir/src/parser/nodes/literal.cpp.o 78f2c4da7c9b2281 -1 1661 1781361120993456534 CMakeFiles/saqut.dir/src/parser/nodes/identifier.cpp.o eb96bb4b1eb4ad80 -2 1669 1781361120993689645 CMakeFiles/saqut.dir/src/parser/nodes/program.cpp.o ac5bbcd74d87561a -1 1681 1781361120993213226 CMakeFiles/saqut.dir/src/parser/nodes/declarations.cpp.o b6c56f04a257f685 -1 1686 1781361120993117012 CMakeFiles/saqut.dir/src/parser/nodes/binary_expr.cpp.o d2e2bb2f8a63c6d2 -3 1712 1781361120994511341 CMakeFiles/saqut.dir/src/parser/nodes/statements.cpp.o b5c20724bbf3648c -1 1723 1781361120993344591 CMakeFiles/saqut.dir/src/parser/nodes/expressions.cpp.o 4057e3d63c63a1ab -1 2281 1781361120992511333 CMakeFiles/saqut.dir/src/main.cpp.o 110c26cb1d0c3a23 -2281 2374 1781361123272520466 saqut 89052e51305cb697 -2 1202 1781361145332901008 CMakeFiles/saqut.dir/src/parser/nodes/statements.cpp.o b5c20724bbf3648c -2 1435 1781361145332608544 CMakeFiles/saqut.dir/src/parser/nodes/literal.cpp.o 78f2c4da7c9b2281 -1 1472 1781361145332432199 CMakeFiles/saqut.dir/src/parser/nodes/expressions.cpp.o 4057e3d63c63a1ab -2 1506 1781361145332792284 CMakeFiles/saqut.dir/src/parser/nodes/program.cpp.o ac5bbcd74d87561a -1 1544 1781361145332547154 CMakeFiles/saqut.dir/src/parser/nodes/identifier.cpp.o eb96bb4b1eb4ad80 -1 1549 1781361145331608540 CMakeFiles/saqut.dir/src/parser/nodes/binary_expr.cpp.o d2e2bb2f8a63c6d2 -1 1569 1781361145332294897 CMakeFiles/saqut.dir/src/parser/nodes/declarations.cpp.o b6c56f04a257f685 -1569 1661 1781361146899614781 saqut 89052e51305cb697 -1 1470 1781361261444064707 CMakeFiles/saqut.dir/src/main.cpp.o 110c26cb1d0c3a23 -1471 1563 1781361262914070415 saqut 89052e51305cb697 -0 1462 1781361334065345164 CMakeFiles/saqut.dir/src/main.cpp.o 110c26cb1d0c3a23 -1462 1555 1781361335527350781 saqut 89052e51305cb697 +1 2432 1781560000479022647 CMakeFiles/saqut.dir/src/core/sourcefile.cpp.o da6f5fc90e87e6b1 +1 1218 1781560000479623743 CMakeFiles/saqut.dir/src/lexer/lexer.cpp.o 90eeec811f2137e6 +2433 3980 1781560002911027568 CMakeFiles/saqut.dir/src/tokenizer/tokenizer.cpp.o a01677f8bb4f4dbc +1 1408 1781786522326465778 CMakeFiles/saqut.dir/src/parser/parser.cpp.o 2c65b7be26cead32 +1 2454 1781786563274205322 CMakeFiles/saqut.dir/src/parser/nodes/program.cpp.o ac5bbcd74d87561a +1 2570 1781786563274005192 CMakeFiles/saqut.dir/src/parser/nodes/identifier.cpp.o eb96bb4b1eb4ad80 +1 2619 1781786563273914998 CMakeFiles/saqut.dir/src/parser/nodes/expressions.cpp.o 4057e3d63c63a1ab +1 2552 1781786563274095617 CMakeFiles/saqut.dir/src/parser/nodes/literal.cpp.o 78f2c4da7c9b2281 +1 2664 1781786563274315492 CMakeFiles/saqut.dir/src/parser/nodes/statements.cpp.o b5c20724bbf3648c +1 2656 1781786563273513379 CMakeFiles/saqut.dir/src/parser/nodes/binary_expr.cpp.o d2e2bb2f8a63c6d2 +1 2517 1781786563273824541 CMakeFiles/saqut.dir/src/parser/nodes/declarations.cpp.o b6c56f04a257f685 +1 2736 1781786295699197219 CMakeFiles/saqut.dir/src/main.cpp.o 110c26cb1d0c3a23 +2664 2825 1781786565936516467 saqut 8525928b86934b0a +0 22 1781786586571540360 build.ninja 1876a59d627a585 +0 22 1781786586571540360 /home/saqut/Masaüstü/saqutcompiler/build/cmake_install.cmake 1876a59d627a585 +1 2086 1781786305407208932 CMakeFiles/saqut.dir/src/symbol/symbol_collector.cpp.o 3348f498f369213d diff --git a/build/CMakeCache.txt b/build/CMakeCache.txt index 98eaaae..b4d4dc7 100644 --- a/build/CMakeCache.txt +++ b/build/CMakeCache.txt @@ -25,7 +25,7 @@ CMAKE_AR:FILEPATH=/usr/bin/ar CMAKE_BUILD_TYPE:STRING=Debug //CXX compiler -CMAKE_CXX_COMPILER:FILEPATH=/usr/bin/c++ +CMAKE_CXX_COMPILER:STRING=/usr/bin/c++ //A wrapper around 'ar' adding the appropriate '--plugin' option // for the GCC compiler @@ -235,7 +235,7 @@ CMAKE_CACHE_MAJOR_VERSION:INTERNAL=4 //Minor version of cmake used to create the current loaded cache CMAKE_CACHE_MINOR_VERSION:INTERNAL=3 //Patch version of cmake used to create the current loaded cache -CMAKE_CACHE_PATCH_VERSION:INTERNAL=2 +CMAKE_CACHE_PATCH_VERSION:INTERNAL=3 //Path to CMake executable. CMAKE_COMMAND:INTERNAL=/usr/bin/cmake //Path to cpack program executable. diff --git a/build/CMakeFiles/CMakeConfigureLog.yaml b/build/CMakeFiles/CMakeConfigureLog.yaml index 4ab8233..bcd7c88 100644 --- a/build/CMakeFiles/CMakeConfigureLog.yaml +++ b/build/CMakeFiles/CMakeConfigureLog.yaml @@ -1187,3 +1187,308 @@ events: Running the CXX compiler's linker: "/usr/bin/ld" "-v" GNU ld (GNU Binutils) 2.46.0 ... + +--- +events: + - + kind: "message-v1" + backtrace: + - "/usr/share/cmake/Modules/CMakeDetermineSystem.cmake:212 (message)" + - "CMakeLists.txt:2 (project)" + message: | + The system is: Linux - 7.0.10-1-MANJARO - x86_64 + - + kind: "find-v1" + backtrace: + - "/usr/share/cmake/Modules/CMakeDetermineCompilerId.cmake:468 (find_file)" + - "/usr/share/cmake/Modules/CMakeDetermineCompilerId.cmake:506 (CMAKE_DETERMINE_COMPILER_ID_WRITE)" + - "/usr/share/cmake/Modules/CMakeDetermineCompilerId.cmake:8 (CMAKE_DETERMINE_COMPILER_ID_BUILD)" + - "/usr/share/cmake/Modules/CMakeDetermineCompilerId.cmake:64 (__determine_compiler_id_test)" + - "/usr/share/cmake/Modules/CMakeDetermineCXXCompiler.cmake:125 (CMAKE_DETERMINE_COMPILER_ID)" + - "CMakeLists.txt:2 (project)" + mode: "file" + variable: "src_in" + description: "Path to a file." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "CMakeCXXCompilerId.cpp.in" + candidate_directories: + - "/usr/share/cmake/Modules/" + found: "/usr/share/cmake/Modules/CMakeCXXCompilerId.cpp.in" + search_context: + ENV{PATH}: + - "/home/saqut/.local/bin" + - "/home/saqut/.local/bin" + - "/home/saqut/.local/bin" + - "/usr/local/bin" + - "/usr/bin" + - "/bin" + - "/usr/local/sbin" + - "/opt/cuda/bin" + - "/var/lib/flatpak/exports/bin" + - "/usr/lib/jvm/default/bin" + - "/usr/bin/site_perl" + - "/usr/bin/vendor_perl" + - "/usr/bin/core_perl" + CMAKE_INSTALL_PREFIX: "/usr/local" + - + kind: "message-v1" + backtrace: + - "/usr/share/cmake/Modules/CMakeDetermineCompilerId.cmake:17 (message)" + - "/usr/share/cmake/Modules/CMakeDetermineCompilerId.cmake:64 (__determine_compiler_id_test)" + - "/usr/share/cmake/Modules/CMakeDetermineCXXCompiler.cmake:125 (CMAKE_DETERMINE_COMPILER_ID)" + - "CMakeLists.txt:2 (project)" + message: | + Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" succeeded. + Compiler: /usr/bin/c++ + Build flags: + Id flags: + + The output was: + 0 + + + Compilation of the CXX compiler identification source "CMakeCXXCompilerId.cpp" produced "a.out" + + The CXX compiler identification is GNU, found in: + /home/saqut/Masaüstü/saqutcompiler/build/CMakeFiles/4.3.3/CompilerIdCXX/a.out + + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake/Modules/CMakeDetermineCompilerABI.cmake:83 (try_compile)" + - "/usr/share/cmake/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:2 (project)" + checks: + - "Detecting CXX compiler ABI info" + directories: + source: "/home/saqut/Masa\u00fcst\u00fc/saqutcompiler/build/CMakeFiles/CMakeScratch/TryCompile-OqZJyT" + binary: "/home/saqut/Masa\u00fcst\u00fc/saqutcompiler/build/CMakeFiles/CMakeScratch/TryCompile-OqZJyT" + cmakeVariables: + CMAKE_CXX_FLAGS: "" + CMAKE_CXX_FLAGS_DEBUG: "-g" + CMAKE_CXX_SCAN_FOR_MODULES: "OFF" + CMAKE_CXX_STDLIB_MODULES_JSON: "" + CMAKE_EXE_LINKER_FLAGS: "" + buildResult: + variable: "CMAKE_CXX_ABI_COMPILED" + cached: true + stdout: | + Change Dir: '/home/saqut/Masaüstü/saqutcompiler/build/CMakeFiles/CMakeScratch/TryCompile-OqZJyT' + + Run Build Command(s): /usr/bin/ninja -v cmTC_cb4a5 + [1/2] /usr/bin/c++ -v -o CMakeFiles/cmTC_cb4a5.dir/CMakeCXXCompilerABI.cpp.o -c /usr/share/cmake/Modules/CMakeCXXCompilerABI.cpp + Using built-in specs. + COLLECT_GCC=/usr/bin/c++ + Target: x86_64-pc-linux-gnu + Configured with: /build/gcc/src/gcc/configure --enable-languages=ada,c,c++,d,fortran,go,lto,m2,objc,obj-c++,rust,cobol --enable-bootstrap --prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://gitlab.archlinux.org/archlinux/packaging/packages/gcc/-/issues --with-build-config=bootstrap-lto --with-linker-hash-style=gnu --with-system-zlib --enable-cet=auto --enable-checking=release --enable-clocale=gnu --enable-default-pie --enable-default-ssp --enable-gnu-indirect-function --enable-gnu-unique-object --enable-libstdcxx-backtrace --enable-link-serialization=1 --enable-linker-build-id --enable-lto --enable-multilib --enable-plugin --enable-shared --enable-threads=posix --disable-libssp --disable-libstdcxx-pch --disable-werror --disable-fixincludes + Thread model: posix + Supported LTO compression algorithms: zlib zstd + gcc version 16.1.1 20260430 (GCC) + COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_cb4a5.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_cb4a5.dir/' + /usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/cc1plus -quiet -v -D_GNU_SOURCE /usr/share/cmake/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpdir CMakeFiles/cmTC_cb4a5.dir/ -dumpbase CMakeCXXCompilerABI.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -version -o /tmp/ccE5rYpo.s + GNU C++20 (GCC) version 16.1.1 20260430 (x86_64-pc-linux-gnu) + compiled by GNU C version 16.1.1 20260430, GMP version 6.3.0, MPFR version 4.2.2, MPC version 1.4.1, isl version isl-0.27-GMP + + GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 + ignoring nonexistent directory "/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/include-fixed" + ignoring nonexistent directory "/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../../../x86_64-pc-linux-gnu/include" + #include "..." search starts here: + #include <...> search starts here: + /usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../../../include/c++/16.1.1 + /usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../../../include/c++/16.1.1/x86_64-pc-linux-gnu + /usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../../../include/c++/16.1.1/backward + /usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/include + /usr/local/include + /usr/include + End of search list. + Compiler executable checksum: d47d0c990a24bc0dbaf3bd00656bd5f3 + COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_cb4a5.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_cb4a5.dir/' + as -v --64 -o CMakeFiles/cmTC_cb4a5.dir/CMakeCXXCompilerABI.cpp.o /tmp/ccE5rYpo.s + GNU assembler version 2.46.0 (x86_64-pc-linux-gnu) using BFD version (GNU Binutils) 2.46.0 + COMPILER_PATH=/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/:/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/ + LIBRARY_PATH=/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../../../lib/:/lib/../lib/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../../:/lib/:/usr/lib/ + COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_cb4a5.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_cb4a5.dir/CMakeCXXCompilerABI.cpp.' + [2/2] : && /usr/bin/c++ -v -Wl,-v CMakeFiles/cmTC_cb4a5.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_cb4a5 && : + Using built-in specs. + COLLECT_GCC=/usr/bin/c++ + COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/lto-wrapper + Target: x86_64-pc-linux-gnu + Configured with: /build/gcc/src/gcc/configure --enable-languages=ada,c,c++,d,fortran,go,lto,m2,objc,obj-c++,rust,cobol --enable-bootstrap --prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://gitlab.archlinux.org/archlinux/packaging/packages/gcc/-/issues --with-build-config=bootstrap-lto --with-linker-hash-style=gnu --with-system-zlib --enable-cet=auto --enable-checking=release --enable-clocale=gnu --enable-default-pie --enable-default-ssp --enable-gnu-indirect-function --enable-gnu-unique-object --enable-libstdcxx-backtrace --enable-link-serialization=1 --enable-linker-build-id --enable-lto --enable-multilib --enable-plugin --enable-shared --enable-threads=posix --disable-libssp --disable-libstdcxx-pch --disable-werror --disable-fixincludes + Thread model: posix + Supported LTO compression algorithms: zlib zstd + gcc version 16.1.1 20260430 (GCC) + COMPILER_PATH=/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/:/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/ + LIBRARY_PATH=/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../../../lib/:/lib/../lib/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../../:/lib/:/usr/lib/ + COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_cb4a5' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_cb4a5.' + /usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/collect2 -plugin /usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/lto-wrapper -plugin-opt=-fresolution=/tmp/cc4Zp6V6.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-latomic_asneeded -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -o cmTC_cb4a5 /usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../../../lib/Scrt1.o /usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../../../lib/crti.o /usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/crtbeginS.o -L/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1 -L/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../../../lib -L/lib/../lib -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../.. -L/lib -L/usr/lib -v CMakeFiles/cmTC_cb4a5.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -latomic_asneeded -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/crtendS.o /usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../../../lib/crtn.o + collect2 version 16.1.1 20260430 + /usr/bin/ld -plugin /usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/lto-wrapper -plugin-opt=-fresolution=/tmp/cc4Zp6V6.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-latomic_asneeded -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -o cmTC_cb4a5 /usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../../../lib/Scrt1.o /usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../../../lib/crti.o /usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/crtbeginS.o -L/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1 -L/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../../../lib -L/lib/../lib -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../.. -L/lib -L/usr/lib -v CMakeFiles/cmTC_cb4a5.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -latomic_asneeded -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/crtendS.o /usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../../../lib/crtn.o + GNU ld (GNU Binutils) 2.46.0 + COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_cb4a5' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_cb4a5.' + + exitCode: 0 + - + kind: "message-v1" + backtrace: + - "/usr/share/cmake/Modules/CMakeDetermineCompilerABI.cmake:217 (message)" + - "/usr/share/cmake/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:2 (project)" + message: | + Parsed CXX implicit include dir info: rv=done + found start of include info + found start of implicit include info + add: [/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../../../include/c++/16.1.1] + add: [/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../../../include/c++/16.1.1/x86_64-pc-linux-gnu] + add: [/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../../../include/c++/16.1.1/backward] + add: [/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/include] + add: [/usr/local/include] + add: [/usr/include] + end of search list found + collapse include dir [/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../../../include/c++/16.1.1] ==> [/usr/include/c++/16.1.1] + collapse include dir [/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../../../include/c++/16.1.1/x86_64-pc-linux-gnu] ==> [/usr/include/c++/16.1.1/x86_64-pc-linux-gnu] + collapse include dir [/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../../../include/c++/16.1.1/backward] ==> [/usr/include/c++/16.1.1/backward] + collapse include dir [/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/include] ==> [/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/include] + collapse include dir [/usr/local/include] ==> [/usr/local/include] + collapse include dir [/usr/include] ==> [/usr/include] + implicit include dirs: [/usr/include/c++/16.1.1;/usr/include/c++/16.1.1/x86_64-pc-linux-gnu;/usr/include/c++/16.1.1/backward;/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/include;/usr/local/include;/usr/include] + + + - + kind: "message-v1" + backtrace: + - "/usr/share/cmake/Modules/CMakeDetermineCompilerABI.cmake:253 (message)" + - "/usr/share/cmake/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:2 (project)" + message: | + Parsed CXX implicit link information: + link line regex: [^( *|.*[/\\])(ld[0-9]*(|\\.[a-rt-z][a-z]*|\\.s[a-np-z][a-z]*|\\.so[a-z]+)|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\\]+-)?ld|collect2)[^/\\]*( |$)] + linker tool regex: [^[ ]*(->|"|[0-9]+>[ -]*Build:[ 0-9]+ ms[ ]*)?[ ]*(([^"]*[/\\])?(ld[0-9]*(|\\.[a-rt-z][a-z]*|\\.s[a-np-z][a-z]*|\\.so[a-z]+)))("|,| |$)] + ignore line: [Change Dir: '/home/saqut/Masaüstü/saqutcompiler/build/CMakeFiles/CMakeScratch/TryCompile-OqZJyT'] + ignore line: [] + ignore line: [Run Build Command(s): /usr/bin/ninja -v cmTC_cb4a5] + ignore line: [[1/2] /usr/bin/c++ -v -o CMakeFiles/cmTC_cb4a5.dir/CMakeCXXCompilerABI.cpp.o -c /usr/share/cmake/Modules/CMakeCXXCompilerABI.cpp] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/c++] + ignore line: [Target: x86_64-pc-linux-gnu] + ignore line: [Configured with: /build/gcc/src/gcc/configure --enable-languages=ada c c++ d fortran go lto m2 objc obj-c++ rust cobol --enable-bootstrap --prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://gitlab.archlinux.org/archlinux/packaging/packages/gcc/-/issues --with-build-config=bootstrap-lto --with-linker-hash-style=gnu --with-system-zlib --enable-cet=auto --enable-checking=release --enable-clocale=gnu --enable-default-pie --enable-default-ssp --enable-gnu-indirect-function --enable-gnu-unique-object --enable-libstdcxx-backtrace --enable-link-serialization=1 --enable-linker-build-id --enable-lto --enable-multilib --enable-plugin --enable-shared --enable-threads=posix --disable-libssp --disable-libstdcxx-pch --disable-werror --disable-fixincludes] + ignore line: [Thread model: posix] + ignore line: [Supported LTO compression algorithms: zlib zstd] + ignore line: [gcc version 16.1.1 20260430 (GCC) ] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_cb4a5.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_cb4a5.dir/'] + ignore line: [ /usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/cc1plus -quiet -v -D_GNU_SOURCE /usr/share/cmake/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpdir CMakeFiles/cmTC_cb4a5.dir/ -dumpbase CMakeCXXCompilerABI.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -version -o /tmp/ccE5rYpo.s] + ignore line: [GNU C++20 (GCC) version 16.1.1 20260430 (x86_64-pc-linux-gnu)] + ignore line: [ compiled by GNU C version 16.1.1 20260430 GMP version 6.3.0 MPFR version 4.2.2 MPC version 1.4.1 isl version isl-0.27-GMP] + ignore line: [] + ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/include-fixed"] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../../../x86_64-pc-linux-gnu/include"] + ignore line: [#include "..." search starts here:] + ignore line: [#include <...> search starts here:] + ignore line: [ /usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../../../include/c++/16.1.1] + ignore line: [ /usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../../../include/c++/16.1.1/x86_64-pc-linux-gnu] + ignore line: [ /usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../../../include/c++/16.1.1/backward] + ignore line: [ /usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/include] + ignore line: [ /usr/local/include] + ignore line: [ /usr/include] + ignore line: [End of search list.] + ignore line: [Compiler executable checksum: d47d0c990a24bc0dbaf3bd00656bd5f3] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_cb4a5.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_cb4a5.dir/'] + ignore line: [ as -v --64 -o CMakeFiles/cmTC_cb4a5.dir/CMakeCXXCompilerABI.cpp.o /tmp/ccE5rYpo.s] + ignore line: [GNU assembler version 2.46.0 (x86_64-pc-linux-gnu) using BFD version (GNU Binutils) 2.46.0] + ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/:/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../../../lib/:/lib/../lib/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_cb4a5.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_cb4a5.dir/CMakeCXXCompilerABI.cpp.'] + ignore line: [[2/2] : && /usr/bin/c++ -v -Wl -v CMakeFiles/cmTC_cb4a5.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_cb4a5 && :] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/c++] + ignore line: [COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/lto-wrapper] + ignore line: [Target: x86_64-pc-linux-gnu] + ignore line: [Configured with: /build/gcc/src/gcc/configure --enable-languages=ada c c++ d fortran go lto m2 objc obj-c++ rust cobol --enable-bootstrap --prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://gitlab.archlinux.org/archlinux/packaging/packages/gcc/-/issues --with-build-config=bootstrap-lto --with-linker-hash-style=gnu --with-system-zlib --enable-cet=auto --enable-checking=release --enable-clocale=gnu --enable-default-pie --enable-default-ssp --enable-gnu-indirect-function --enable-gnu-unique-object --enable-libstdcxx-backtrace --enable-link-serialization=1 --enable-linker-build-id --enable-lto --enable-multilib --enable-plugin --enable-shared --enable-threads=posix --disable-libssp --disable-libstdcxx-pch --disable-werror --disable-fixincludes] + ignore line: [Thread model: posix] + ignore line: [Supported LTO compression algorithms: zlib zstd] + ignore line: [gcc version 16.1.1 20260430 (GCC) ] + ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/:/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../../../lib/:/lib/../lib/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_cb4a5' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_cb4a5.'] + link line: [ /usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/collect2 -plugin /usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/lto-wrapper -plugin-opt=-fresolution=/tmp/cc4Zp6V6.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-latomic_asneeded -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -o cmTC_cb4a5 /usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../../../lib/Scrt1.o /usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../../../lib/crti.o /usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/crtbeginS.o -L/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1 -L/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../../../lib -L/lib/../lib -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../.. -L/lib -L/usr/lib -v CMakeFiles/cmTC_cb4a5.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -latomic_asneeded -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/crtendS.o /usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../../../lib/crtn.o] + arg [/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/collect2] ==> ignore + arg [-plugin] ==> ignore + arg [/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/liblto_plugin.so] ==> ignore + arg [-plugin-opt=/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/lto-wrapper] ==> ignore + arg [-plugin-opt=-fresolution=/tmp/cc4Zp6V6.res] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-latomic_asneeded] ==> ignore + arg [-plugin-opt=-pass-through=-lc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [--build-id] ==> ignore + arg [--eh-frame-hdr] ==> ignore + arg [--hash-style=gnu] ==> ignore + arg [-m] ==> ignore + arg [elf_x86_64] ==> ignore + arg [-dynamic-linker] ==> ignore + arg [/lib64/ld-linux-x86-64.so.2] ==> ignore + arg [-pie] ==> ignore + arg [-o] ==> ignore + arg [cmTC_cb4a5] ==> ignore + arg [/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../../../lib/Scrt1.o] ==> obj [/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../../../lib/Scrt1.o] + arg [/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../../../lib/crti.o] ==> obj [/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../../../lib/crti.o] + arg [/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/crtbeginS.o] ==> obj [/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/crtbeginS.o] + arg [-L/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1] ==> dir [/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1] + arg [-L/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../../../lib] ==> dir [/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../../../lib] + arg [-L/lib/../lib] ==> dir [/lib/../lib] + arg [-L/usr/lib/../lib] ==> dir [/usr/lib/../lib] + arg [-L/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../..] ==> dir [/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../..] + arg [-L/lib] ==> dir [/lib] + arg [-L/usr/lib] ==> dir [/usr/lib] + arg [-v] ==> ignore + arg [CMakeFiles/cmTC_cb4a5.dir/CMakeCXXCompilerABI.cpp.o] ==> ignore + arg [-lstdc++] ==> lib [stdc++] + arg [-lm] ==> lib [m] + arg [-lgcc_s] ==> lib [gcc_s] + arg [-lgcc] ==> lib [gcc] + arg [-latomic_asneeded] ==> lib [atomic_asneeded] + arg [-lc] ==> lib [c] + arg [-lgcc_s] ==> lib [gcc_s] + arg [-lgcc] ==> lib [gcc] + arg [/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/crtendS.o] ==> obj [/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/crtendS.o] + arg [/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../../../lib/crtn.o] ==> obj [/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../../../lib/crtn.o] + ignore line: [collect2 version 16.1.1 20260430] + ignore line: [/usr/bin/ld -plugin /usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/lto-wrapper -plugin-opt=-fresolution=/tmp/cc4Zp6V6.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-latomic_asneeded -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -o cmTC_cb4a5 /usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../../../lib/Scrt1.o /usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../../../lib/crti.o /usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/crtbeginS.o -L/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1 -L/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../../../lib -L/lib/../lib -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../.. -L/lib -L/usr/lib -v CMakeFiles/cmTC_cb4a5.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -latomic_asneeded -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/crtendS.o /usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../../../lib/crtn.o] + linker tool for 'CXX': /usr/bin/ld + collapse obj [/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../../../lib/Scrt1.o] ==> [/usr/lib/Scrt1.o] + collapse obj [/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../../../lib/crti.o] ==> [/usr/lib/crti.o] + collapse obj [/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../../../lib/crtn.o] ==> [/usr/lib/crtn.o] + collapse library dir [/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1] ==> [/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1] + collapse library dir [/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../../../lib] ==> [/usr/lib] + collapse library dir [/lib/../lib] ==> [/lib] + collapse library dir [/usr/lib/../lib] ==> [/usr/lib] + collapse library dir [/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../..] ==> [/usr/lib] + collapse library dir [/lib] ==> [/lib] + collapse library dir [/usr/lib] ==> [/usr/lib] + implicit libs: [stdc++;m;gcc_s;gcc;atomic_asneeded;c;gcc_s;gcc] + implicit objs: [/usr/lib/Scrt1.o;/usr/lib/crti.o;/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/crtbeginS.o;/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/crtendS.o;/usr/lib/crtn.o] + implicit dirs: [/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1;/usr/lib;/lib] + implicit fwks: [] + + + - + kind: "message-v1" + backtrace: + - "/usr/share/cmake/Modules/Internal/CMakeDetermineLinkerId.cmake:38 (message)" + - "/usr/share/cmake/Modules/CMakeDetermineCompilerABI.cmake:299 (cmake_determine_linker_id)" + - "/usr/share/cmake/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:2 (project)" + message: | + Running the CXX compiler's linker: "/usr/bin/ld" "-v" + GNU ld (GNU Binutils) 2.46.0 +... diff --git a/build/build.ninja b/build/build.ninja index e1adc35..3bf1809 100644 --- a/build/build.ninja +++ b/build/build.ninja @@ -148,6 +148,15 @@ build CMakeFiles/saqut.dir/src/parser/parser.cpp.o: CXX_COMPILER__saqut_unscanne OBJECT_FILE_DIR = CMakeFiles/saqut.dir/src/parser TARGET_SUPPORT_DIR = CMakeFiles/saqut.dir +build CMakeFiles/saqut.dir/src/symbol/symbol_collector.cpp.o: CXX_COMPILER__saqut_unscanned_Debug /home/saqut/Masaüstü/saqutcompiler/src/symbol/symbol_collector.cpp || cmake_object_order_depends_target_saqut + CONFIG = Debug + DEP_FILE = CMakeFiles/saqut.dir/src/symbol/symbol_collector.cpp.o.d + FLAGS = -g -std=gnu++20 -Wall -Wextra -g -O0 + INCLUDES = -I/home/saqut/Masaüstü/saqutcompiler/src + OBJECT_DIR = CMakeFiles/saqut.dir + OBJECT_FILE_DIR = CMakeFiles/saqut.dir/src/symbol + TARGET_SUPPORT_DIR = CMakeFiles/saqut.dir + build CMakeFiles/saqut.dir/src/tokenizer/tokenizer.cpp.o: CXX_COMPILER__saqut_unscanned_Debug /home/saqut/Masaüstü/saqutcompiler/src/tokenizer/tokenizer.cpp || cmake_object_order_depends_target_saqut CONFIG = Debug DEP_FILE = CMakeFiles/saqut.dir/src/tokenizer/tokenizer.cpp.o.d @@ -165,7 +174,7 @@ build CMakeFiles/saqut.dir/src/tokenizer/tokenizer.cpp.o: CXX_COMPILER__saqut_un ############################################# # Link the executable saqut -build saqut: CXX_EXECUTABLE_LINKER__saqut_Debug CMakeFiles/saqut.dir/src/core/sourcefile.cpp.o CMakeFiles/saqut.dir/src/lexer/lexer.cpp.o CMakeFiles/saqut.dir/src/main.cpp.o CMakeFiles/saqut.dir/src/parser/nodes/binary_expr.cpp.o CMakeFiles/saqut.dir/src/parser/nodes/declarations.cpp.o CMakeFiles/saqut.dir/src/parser/nodes/expressions.cpp.o CMakeFiles/saqut.dir/src/parser/nodes/identifier.cpp.o CMakeFiles/saqut.dir/src/parser/nodes/literal.cpp.o CMakeFiles/saqut.dir/src/parser/nodes/program.cpp.o CMakeFiles/saqut.dir/src/parser/nodes/statements.cpp.o CMakeFiles/saqut.dir/src/parser/parser.cpp.o CMakeFiles/saqut.dir/src/tokenizer/tokenizer.cpp.o +build saqut: CXX_EXECUTABLE_LINKER__saqut_Debug CMakeFiles/saqut.dir/src/core/sourcefile.cpp.o CMakeFiles/saqut.dir/src/lexer/lexer.cpp.o CMakeFiles/saqut.dir/src/main.cpp.o CMakeFiles/saqut.dir/src/parser/nodes/binary_expr.cpp.o CMakeFiles/saqut.dir/src/parser/nodes/declarations.cpp.o CMakeFiles/saqut.dir/src/parser/nodes/expressions.cpp.o CMakeFiles/saqut.dir/src/parser/nodes/identifier.cpp.o CMakeFiles/saqut.dir/src/parser/nodes/literal.cpp.o CMakeFiles/saqut.dir/src/parser/nodes/program.cpp.o CMakeFiles/saqut.dir/src/parser/nodes/statements.cpp.o CMakeFiles/saqut.dir/src/parser/parser.cpp.o CMakeFiles/saqut.dir/src/symbol/symbol_collector.cpp.o CMakeFiles/saqut.dir/src/tokenizer/tokenizer.cpp.o CONFIG = Debug DEP_FILE = CMakeFiles/saqut.dir/link.d FLAGS = -g @@ -221,14 +230,14 @@ build all: phony saqut ############################################# # Re-run CMake if any of its inputs changed. -build build.ninja /home/saqut/Masaüstü/saqutcompiler/build/cmake_install.cmake: RERUN_CMAKE | /home/saqut/Masaüstü/saqutcompiler/CMakeLists.txt /usr/share/cmake/Modules/CMakeCXXInformation.cmake /usr/share/cmake/Modules/CMakeCommonLanguageInclude.cmake /usr/share/cmake/Modules/CMakeGenericSystem.cmake /usr/share/cmake/Modules/CMakeInitializeConfigs.cmake /usr/share/cmake/Modules/CMakeLanguageInformation.cmake /usr/share/cmake/Modules/CMakeSystemSpecificInformation.cmake /usr/share/cmake/Modules/CMakeSystemSpecificInitialize.cmake /usr/share/cmake/Modules/Compiler/CMakeCommonCompilerMacros.cmake /usr/share/cmake/Modules/Compiler/GNU-CXX.cmake /usr/share/cmake/Modules/Compiler/GNU.cmake /usr/share/cmake/Modules/Internal/CMakeCXXLinkerInformation.cmake /usr/share/cmake/Modules/Internal/CMakeCommonLinkerInformation.cmake /usr/share/cmake/Modules/Linker/GNU-CXX.cmake /usr/share/cmake/Modules/Linker/GNU.cmake /usr/share/cmake/Modules/Platform/Linker/GNU.cmake /usr/share/cmake/Modules/Platform/Linker/Linux-GNU-CXX.cmake /usr/share/cmake/Modules/Platform/Linker/Linux-GNU.cmake /usr/share/cmake/Modules/Platform/Linux-GNU-CXX.cmake /usr/share/cmake/Modules/Platform/Linux-GNU.cmake /usr/share/cmake/Modules/Platform/Linux-Initialize.cmake /usr/share/cmake/Modules/Platform/Linux.cmake /usr/share/cmake/Modules/Platform/UnixPaths.cmake CMakeCache.txt CMakeFiles/4.3.2/CMakeCXXCompiler.cmake CMakeFiles/4.3.2/CMakeSystem.cmake +build build.ninja /home/saqut/Masaüstü/saqutcompiler/build/cmake_install.cmake: RERUN_CMAKE | /home/saqut/Masaüstü/saqutcompiler/CMakeLists.txt /usr/share/cmake/Modules/CMakeCXXInformation.cmake /usr/share/cmake/Modules/CMakeCommonLanguageInclude.cmake /usr/share/cmake/Modules/CMakeGenericSystem.cmake /usr/share/cmake/Modules/CMakeInitializeConfigs.cmake /usr/share/cmake/Modules/CMakeLanguageInformation.cmake /usr/share/cmake/Modules/CMakeSystemSpecificInformation.cmake /usr/share/cmake/Modules/CMakeSystemSpecificInitialize.cmake /usr/share/cmake/Modules/Compiler/CMakeCommonCompilerMacros.cmake /usr/share/cmake/Modules/Compiler/GNU-CXX.cmake /usr/share/cmake/Modules/Compiler/GNU.cmake /usr/share/cmake/Modules/Internal/CMakeCXXLinkerInformation.cmake /usr/share/cmake/Modules/Internal/CMakeCommonLinkerInformation.cmake /usr/share/cmake/Modules/Linker/GNU-CXX.cmake /usr/share/cmake/Modules/Linker/GNU.cmake /usr/share/cmake/Modules/Platform/Linker/GNU.cmake /usr/share/cmake/Modules/Platform/Linker/Linux-GNU-CXX.cmake /usr/share/cmake/Modules/Platform/Linker/Linux-GNU.cmake /usr/share/cmake/Modules/Platform/Linux-GNU-CXX.cmake /usr/share/cmake/Modules/Platform/Linux-GNU.cmake /usr/share/cmake/Modules/Platform/Linux-Initialize.cmake /usr/share/cmake/Modules/Platform/Linux.cmake /usr/share/cmake/Modules/Platform/UnixPaths.cmake CMakeCache.txt CMakeFiles/4.3.3/CMakeCXXCompiler.cmake CMakeFiles/4.3.3/CMakeSystem.cmake pool = console ############################################# # A missing CMake input file is not an error. -build /home/saqut/Masaüstü/saqutcompiler/CMakeLists.txt /usr/share/cmake/Modules/CMakeCXXInformation.cmake /usr/share/cmake/Modules/CMakeCommonLanguageInclude.cmake /usr/share/cmake/Modules/CMakeGenericSystem.cmake /usr/share/cmake/Modules/CMakeInitializeConfigs.cmake /usr/share/cmake/Modules/CMakeLanguageInformation.cmake /usr/share/cmake/Modules/CMakeSystemSpecificInformation.cmake /usr/share/cmake/Modules/CMakeSystemSpecificInitialize.cmake /usr/share/cmake/Modules/Compiler/CMakeCommonCompilerMacros.cmake /usr/share/cmake/Modules/Compiler/GNU-CXX.cmake /usr/share/cmake/Modules/Compiler/GNU.cmake /usr/share/cmake/Modules/Internal/CMakeCXXLinkerInformation.cmake /usr/share/cmake/Modules/Internal/CMakeCommonLinkerInformation.cmake /usr/share/cmake/Modules/Linker/GNU-CXX.cmake /usr/share/cmake/Modules/Linker/GNU.cmake /usr/share/cmake/Modules/Platform/Linker/GNU.cmake /usr/share/cmake/Modules/Platform/Linker/Linux-GNU-CXX.cmake /usr/share/cmake/Modules/Platform/Linker/Linux-GNU.cmake /usr/share/cmake/Modules/Platform/Linux-GNU-CXX.cmake /usr/share/cmake/Modules/Platform/Linux-GNU.cmake /usr/share/cmake/Modules/Platform/Linux-Initialize.cmake /usr/share/cmake/Modules/Platform/Linux.cmake /usr/share/cmake/Modules/Platform/UnixPaths.cmake CMakeCache.txt CMakeFiles/4.3.2/CMakeCXXCompiler.cmake CMakeFiles/4.3.2/CMakeSystem.cmake: phony +build /home/saqut/Masaüstü/saqutcompiler/CMakeLists.txt /usr/share/cmake/Modules/CMakeCXXInformation.cmake /usr/share/cmake/Modules/CMakeCommonLanguageInclude.cmake /usr/share/cmake/Modules/CMakeGenericSystem.cmake /usr/share/cmake/Modules/CMakeInitializeConfigs.cmake /usr/share/cmake/Modules/CMakeLanguageInformation.cmake /usr/share/cmake/Modules/CMakeSystemSpecificInformation.cmake /usr/share/cmake/Modules/CMakeSystemSpecificInitialize.cmake /usr/share/cmake/Modules/Compiler/CMakeCommonCompilerMacros.cmake /usr/share/cmake/Modules/Compiler/GNU-CXX.cmake /usr/share/cmake/Modules/Compiler/GNU.cmake /usr/share/cmake/Modules/Internal/CMakeCXXLinkerInformation.cmake /usr/share/cmake/Modules/Internal/CMakeCommonLinkerInformation.cmake /usr/share/cmake/Modules/Linker/GNU-CXX.cmake /usr/share/cmake/Modules/Linker/GNU.cmake /usr/share/cmake/Modules/Platform/Linker/GNU.cmake /usr/share/cmake/Modules/Platform/Linker/Linux-GNU-CXX.cmake /usr/share/cmake/Modules/Platform/Linker/Linux-GNU.cmake /usr/share/cmake/Modules/Platform/Linux-GNU-CXX.cmake /usr/share/cmake/Modules/Platform/Linux-GNU.cmake /usr/share/cmake/Modules/Platform/Linux-Initialize.cmake /usr/share/cmake/Modules/Platform/Linux.cmake /usr/share/cmake/Modules/Platform/UnixPaths.cmake CMakeCache.txt CMakeFiles/4.3.3/CMakeCXXCompiler.cmake CMakeFiles/4.3.3/CMakeSystem.cmake: phony ############################################# diff --git a/examples/symbols/cyclic.sqt b/examples/symbols/cyclic.sqt new file mode 100644 index 0000000..4a1b373 --- /dev/null +++ b/examples/symbols/cyclic.sqt @@ -0,0 +1,12 @@ +// E010 — döngüsel struct (by-value çevrim → sonsuz boyut) +struct A { + B b; +} + +struct B { + A a; +} + +int main() { + return 0; +} diff --git a/examples/symbols/dup.sqt b/examples/symbols/dup.sqt new file mode 100644 index 0000000..ae8f5e6 --- /dev/null +++ b/examples/symbols/dup.sqt @@ -0,0 +1,6 @@ +// E002 — aynı scope'ta çift tanım +int main() { + int x = 1; + int x = 2; + return 0; +} diff --git a/examples/symbols/undef.sqt b/examples/symbols/undef.sqt new file mode 100644 index 0000000..2efc0e0 --- /dev/null +++ b/examples/symbols/undef.sqt @@ -0,0 +1,5 @@ +// E001 — tanımsız isim +int main() { + int x = y + 1; + return 0; +} diff --git a/src/cli/commands/symbols.hpp b/src/cli/commands/symbols.hpp index 0eeb865..90b4b4b 100644 --- a/src/cli/commands/symbols.hpp +++ b/src/cli/commands/symbols.hpp @@ -1,5 +1,5 @@ // ============================================================================ -// saQut CLI — symbols komutu (sembol tablosu) +// saQut CLI — symbols komutu (sembol tablosu — Faz 2) // ============================================================================ #ifndef SAQUT_CLI_SYMBOLS @@ -9,7 +9,9 @@ #include "cli/args.hpp" #include "tokenizer/tokenizer.hpp" #include "parser/parser.hpp" -#include "json.hpp" +#include "symbol/symbol_table.hpp" +#include "symbol/symbol_collector.hpp" +#include "diagnostic/diagnostic_engine.hpp" inline int cmdSymbols(const CliArgs& args) { std::string source = readSource(args); @@ -27,7 +29,11 @@ inline int cmdSymbols(const CliArgs& args) { return 1; } - auto symbols = collectSymbols(ast); + SymbolTable table; + DiagnosticEngine diag; + SymbolCollector(table, diag).collect(ast); + + auto symbols = table.allSymbols(); std::cout << "Sembol Tablosu (" << symbols.size() << " sembol):\n"; std::cout << "────────────────────────────────────────────\n"; @@ -36,23 +42,27 @@ inline int cmdSymbols(const CliArgs& args) { std::cout << " (sembol bulunamadı)\n"; } - for (auto& s : symbols) { - std::cout << " [" << s.kind << "] " << s.type << " " << s.name << "\n"; + for (Symbol* s : symbols) { + if (s->isBuiltin) continue; // builtinleri çıktıda gösterme + std::cout << " [" << symbolKindName(s->kind) << "] " + << s->type.toString() << " " << s->name + << " @" << s->definitionLoc.shortString() + << " refs(" << s->references.size() << "):"; + for (auto& r : s->references) + std::cout << " " << r.shortString(); + std::cout << "\n"; } std::cout << "────────────────────────────────────────────\n"; - int fnCount = 0, varCount = 0; - for (auto& s : symbols) { - if (s.kind == "function") fnCount++; - else if (s.kind == "variable") varCount++; + if (diag.hasErrors()) { + std::cerr << "\n"; + diag.printAll(std::cerr); } - std::cout << "Fonksiyon: " << fnCount - << " | Değişken: " << varCount << "\n"; delete ast; for (auto* t : tokens) delete t; - return 0; + return diag.hasErrors() ? 1 : 0; } #endif // SAQUT_CLI_SYMBOLS diff --git a/src/parser/ast_json.hpp b/src/parser/ast_json.hpp index b7130a7..a4d0a91 100644 --- a/src/parser/ast_json.hpp +++ b/src/parser/ast_json.hpp @@ -187,7 +187,10 @@ public: if (m_hasFields) m_ss << ",\n"; m_ss << m_indentInner << "\"" << jsonEscape(key) << "\": ["; m_arrayDepth++; + bool saved = m_hasArrayItem; + m_hasArrayItem = false; // her dizi kendi virgül sayacıyla başlar callback(); + m_hasArrayItem = saved; m_arrayDepth--; m_ss << "\n" << m_indentInner << "]"; m_hasFields = true; diff --git a/src/parser/nodes/declarations.cpp b/src/parser/nodes/declarations.cpp index e4357fb..994f81e 100644 --- a/src/parser/nodes/declarations.cpp +++ b/src/parser/nodes/declarations.cpp @@ -12,6 +12,9 @@ std::string FunctionDeclNode::toJson(int depth) { obj.add("kind", "FunctionDecl"); obj.add("name", name); obj.add("returnType", returnType); + obj.addArray("params", [&]() { + for (auto* p : params) obj.addItem(p->toJson(depth + 2)); + }); obj.addArray("children", [&]() { for (auto* child : children) obj.addItem(child->toJson(depth + 2)); }); diff --git a/src/parser/nodes/declarations.hpp b/src/parser/nodes/declarations.hpp index 20bf751..8779b82 100644 --- a/src/parser/nodes/declarations.hpp +++ b/src/parser/nodes/declarations.hpp @@ -3,10 +3,13 @@ #include "parser/ast_node.hpp" +class VariableDeclNode; // fwd — FunctionDeclNode::params için + class FunctionDeclNode : public ASTNode { public: std::string name; std::string returnType; + std::vector params; // TODO(faz2): parametreler FunctionDeclNode(); void log(int indent = 0) override; std::string toJson(int depth = 0) override; diff --git a/src/parser/parser.cpp b/src/parser/parser.cpp index 7f0e7e7..398abde 100644 --- a/src/parser/parser.cpp +++ b/src/parser/parser.cpp @@ -91,6 +91,16 @@ ASTNode* Parser::parseDeclaration() { if (ct.type == TokenType::KW_STRUCT) return parseStructDecl(); + // Kullanıcı tanımlı tip adı (struct tipi) ile değişken/fonksiyon bildirimi + if (ct.type == TokenType::IDENTIFIER) { + auto la1 = lookahead(1); + auto la2 = lookahead(2); + if (la1.type == TokenType::IDENTIFIER && la2.type == TokenType::LPAREN) + return parseFunctionDecl(); + if (la1.type == TokenType::IDENTIFIER) + return parseVariableDecl(); + } + return parseStatement(); } @@ -293,8 +303,26 @@ ASTNode* Parser::parseFunctionDecl() { if (currentToken().type == TokenType::LPAREN) { nextToken(); while (currentToken().type != TokenType::RPAREN && - currentToken().type != TokenType::SVR_VOID) + currentToken().type != TokenType::SVR_VOID) { + auto typeTok = currentToken(); + bool isTypeKw = typeTok.is({ + TokenType::KW_VOID, TokenType::KW_INT, TokenType::KW_FLOAT_TYPE, + TokenType::KW_DOUBLE, TokenType::KW_BOOL, TokenType::KW_CHAR, + TokenType::KW_STRING_TYPE, TokenType::KW_AUTO + }) || typeTok.type == TokenType::IDENTIFIER; + if (!isTypeKw || !typeTok.token) break; + std::string paramType = typeTok.token->token; nextToken(); + if (currentToken().type != TokenType::IDENTIFIER || !currentToken().token) break; + VariableDeclNode* param = new VariableDeclNode(); + param->loc = currentToken().token->loc; + param->varType = paramType; + param->name = currentToken().token->token; + nextToken(); + fn->params.push_back(param); + if (currentToken().type == TokenType::COMMA) + nextToken(); + } if (currentToken().type == TokenType::RPAREN) nextToken(); } diff --git a/src/symbol/scope.hpp b/src/symbol/scope.hpp new file mode 100644 index 0000000..74d0ad4 --- /dev/null +++ b/src/symbol/scope.hpp @@ -0,0 +1,37 @@ +#ifndef SAQUT_SYMBOL_SCOPE +#define SAQUT_SYMBOL_SCOPE + +#include +#include +#include "symbol/symbol.hpp" + +class Scope { +public: + Scope* parent = nullptr; + explicit Scope(Scope* p = nullptr) : parent(p) {} + + // Bu scope'a ekle. Aynı adda varsa nullptr (duplicate → çağıran E002 verir). + Symbol* defineLocal(Symbol* s) { + if (table.count(s->name)) return nullptr; + table[s->name] = s; + order.push_back(s); + s->scope = this; + return s; + } + + Symbol* lookupLocal(const std::string& n) { + auto it = table.find(n); + return it == table.end() ? nullptr : it->second; + } + + Symbol* resolve(const std::string& n) { + for (Scope* s = this; s; s = s->parent) + if (auto* r = s->lookupLocal(n)) return r; + return nullptr; + } + + std::unordered_map table; // non-owning + std::vector order; // ekleme sırası +}; + +#endif // SAQUT_SYMBOL_SCOPE diff --git a/src/symbol/symbol.hpp b/src/symbol/symbol.hpp new file mode 100644 index 0000000..4328d7d --- /dev/null +++ b/src/symbol/symbol.hpp @@ -0,0 +1,34 @@ +#ifndef SAQUT_SYMBOL_SYMBOL +#define SAQUT_SYMBOL_SYMBOL + +#include +#include +#include "core/type.hpp" +#include "core/location.hpp" + +enum class SymbolKind { Variable, Function, Parameter, Struct, Field }; + +inline const char* symbolKindName(SymbolKind k) { + switch (k) { + case SymbolKind::Variable: return "variable"; + case SymbolKind::Function: return "function"; + case SymbolKind::Parameter: return "parameter"; + case SymbolKind::Struct: return "struct"; + case SymbolKind::Field: return "field"; + } + return "?"; +} + +class Scope; + +struct Symbol { + std::string name; + SymbolKind kind = SymbolKind::Variable; + Type type; + SourceLocation definitionLoc; + std::vector references; + Scope* scope = nullptr; + bool isBuiltin = false; +}; + +#endif // SAQUT_SYMBOL_SYMBOL diff --git a/src/symbol/symbol_collector.cpp b/src/symbol/symbol_collector.cpp new file mode 100644 index 0000000..c4295b6 --- /dev/null +++ b/src/symbol/symbol_collector.cpp @@ -0,0 +1,377 @@ +#include "symbol/symbol_collector.hpp" +#include +#include "parser/nodes/program.hpp" +#include "parser/nodes/declarations.hpp" +#include "parser/nodes/statements.hpp" +#include "parser/nodes/expressions.hpp" +#include "parser/nodes/binary_expr.hpp" +#include "parser/nodes/identifier.hpp" + +// ───────────────────────────────────────────────────────────────────────────── +// collect — dört aşamalı toplama +// ───────────────────────────────────────────────────────────────────────────── + +void SymbolCollector::collect(ASTNode* program) { + if (!program) return; + seedBuiltins(); + pass1Globals(program); + checkStructCycles(); + pass2Bodies(program); +} + +// ───────────────────────────────────────────────────────────────────────────── +// seedBuiltins — global scope'a yerleşik fonksiyonları ekle +// ───────────────────────────────────────────────────────────────────────────── + +void SymbolCollector::seedBuiltins() { + // TODO(#89 builtin kataloğu): geçici; ileride gerçek katalog gelecek. + Symbol* s = table_.define("print", SymbolKind::Function, + Type::function(Type::Void(), {}), + SourceLocation{}); + if (s) s->isBuiltin = true; +} + +// ───────────────────────────────────────────────────────────────────────────── +// typeFromName — tip adından Type üret; bilinmiyorsa E007 +// ───────────────────────────────────────────────────────────────────────────── + +Type SymbolCollector::typeFromName(const std::string& n, const SourceLocation& loc) { + Type t = Type::fromName(n); + if (!t.isError()) return t; + if (structFields_.count(n)) return Type::structType(n); + // TODO(faz2/faz3): bilinmeyen tip tam E007 tanısı + diag_.report("E007", loc, "Bilinmeyen tip: '" + n + "'"); + return Type::error(); +} + +// ───────────────────────────────────────────────────────────────────────────── +// pass1Globals — üst-seviye isimleri hoist eder (gövdelere girmez) +// ───────────────────────────────────────────────────────────────────────────── + +void SymbolCollector::pass1Globals(ASTNode* program) { + for (ASTNode* child : program->getChildren()) { + switch (child->kind) { + + case ASTKind::FunctionDecl: { + auto* fn = (FunctionDeclNode*)child; + // parametre tiplerini topla + std::vector paramTypes; + for (auto* p : fn->params) + paramTypes.push_back(typeFromName(p->varType, p->loc)); + Type retType = typeFromName(fn->returnType, fn->loc); + Symbol* s = table_.define(fn->name, SymbolKind::Function, + Type::function(retType, paramTypes), + fn->loc); + if (!s) + diag_.report("E002", fn->loc, + "'" + fn->name + "' zaten bu kapsamda tanımlı"); + break; + } + + case ASTKind::StructDecl: { + auto* st = (StructDeclNode*)child; + Symbol* s = table_.define(st->name, SymbolKind::Struct, + Type::structType(st->name), st->loc); + if (!s) { + diag_.report("E002", st->loc, + "'" + st->name + "' zaten bu kapsamda tanımlı"); + break; + } + // struct alan isimlerini cycle check için kaydet + for (ASTNode* fieldNode : st->getChildren()) { + if (fieldNode->kind == ASTKind::VariableDecl) { + auto* vd = (VariableDeclNode*)fieldNode; + // yalnızca struct tipindeki alanları izle + Type ft = Type::fromName(vd->varType); + if (ft.isError()) // primitif değilse struct tipi olabilir + structFields_[st->name].push_back(vd->varType); + } + } + break; + } + + case ASTKind::VariableDecl: { + auto* vd = (VariableDeclNode*)child; + Symbol* s = table_.define(vd->name, SymbolKind::Variable, + typeFromName(vd->varType, vd->loc), + vd->loc); + if (!s) + diag_.report("E002", vd->loc, + "'" + vd->name + "' zaten bu kapsamda tanımlı"); + // Sibling VariableDecl'ler (int a, b;) + for (ASTNode* sib : vd->getChildren()) { + if (sib->kind == ASTKind::VariableDecl) { + auto* sv = (VariableDeclNode*)sib; + Symbol* ss = table_.define(sv->name, SymbolKind::Variable, + typeFromName(sv->varType, sv->loc), + sv->loc); + if (!ss) + diag_.report("E002", sv->loc, + "'" + sv->name + "' zaten bu kapsamda tanımlı"); + } + } + break; + } + + default: + break; + } + } +} + +// ───────────────────────────────────────────────────────────────────────────── +// checkStructCycles — E010 döngüsel struct (by-value çevrim → sonsuz boyut) +// ───────────────────────────────────────────────────────────────────────────── + +void SymbolCollector::checkStructCycles() { + // white=0 / gray=1 / black=2 + std::unordered_map color; + for (auto& kv : structFields_) color[kv.first] = 0; + + std::function dfs = [&](const std::string& name) -> bool { + auto it = color.find(name); + if (it == color.end()) return false; // primitif / bilinmeyen → çevrim değil + if (it->second == 1) return true; // gray → back-edge → çevrim! + if (it->second == 2) return false; // black → zaten işlendi + + it->second = 1; // gri yap + auto fit = structFields_.find(name); + if (fit != structFields_.end()) { + for (const std::string& dep : fit->second) { + if (dfs(dep)) return true; + } + } + it->second = 2; // siyah yap + return false; + }; + + for (auto& kv : structFields_) { + if (color[kv.first] == 0) { + // DFS başlat + color[kv.first] = 1; + for (const std::string& dep : kv.second) { + if (dfs(dep)) { + // tanımlama konumunu bulmak için global scope'ta ara + Symbol* s = table_.global()->lookupLocal(kv.first); + SourceLocation loc = s ? s->definitionLoc : SourceLocation{}; + diag_.report("E010", loc, + "Döngüsel struct: '" + kv.first + "' by-value sonsuz boyut oluşturur"); + break; + } + } + color[kv.first] = 2; + } + } +} + +// ───────────────────────────────────────────────────────────────────────────── +// pass2Bodies — fonksiyon gövdelerini gez; isim çözümle + referans topla +// ───────────────────────────────────────────────────────────────────────────── + +void SymbolCollector::pass2Bodies(ASTNode* program) { + for (ASTNode* child : program->getChildren()) { + switch (child->kind) { + + case ASTKind::FunctionDecl: { + auto* fn = (FunctionDeclNode*)child; + table_.enterScope(); + // parametreleri tanımla + for (auto* p : fn->params) { + Symbol* s = table_.define(p->name, SymbolKind::Parameter, + typeFromName(p->varType, p->loc), p->loc); + if (!s) + diag_.report("E002", p->loc, + "Parametre '" + p->name + "' zaten tanımlı"); + } + // gövdeyi gez (children[0] = BlockNode) + auto& ch = fn->getChildren(); + if (!ch.empty()) walkStmt(ch[0]); + table_.exitScope(); + break; + } + + case ASTKind::VariableDecl: { + // global değişken başlatıcısı (declare-before-use) + auto* vd = (VariableDeclNode*)child; + if (vd->initExpr) walkExpr(vd->initExpr); + // TODO(faz2): global init sırası kontrolü (fibonacci'de global var yok) + for (ASTNode* sib : vd->getChildren()) { + if (sib->kind == ASTKind::VariableDecl) { + auto* sv = (VariableDeclNode*)sib; + if (sv->initExpr) walkExpr(sv->initExpr); + } + } + break; + } + + case ASTKind::StructDecl: + break; // pass2'de gövde gezme gerekmez + + default: + break; + } + } +} + +// ───────────────────────────────────────────────────────────────────────────── +// walkStmt — ifade bloğunu gez +// ───────────────────────────────────────────────────────────────────────────── + +void SymbolCollector::walkStmt(ASTNode* node) { + if (!node) return; + + switch (node->kind) { + + case ASTKind::Block: { + table_.enterScope(); + for (ASTNode* child : node->getChildren()) walkStmt(child); + table_.exitScope(); + break; + } + + case ASTKind::VariableDecl: { + auto* vd = (VariableDeclNode*)node; + // Önce başlatıcıyı gez (kendini görmesin) + if (vd->initExpr) walkExpr(vd->initExpr); + // Sonra tanımla + Symbol* s = table_.define(vd->name, SymbolKind::Variable, + typeFromName(vd->varType, vd->loc), vd->loc); + if (!s) + diag_.report("E002", vd->loc, + "'" + vd->name + "' zaten bu kapsamda tanımlı"); + // Sibling VariableDecl'ler (int a, b;) — TODO: fibonacci'de yok + for (ASTNode* sib : vd->getChildren()) { + if (sib->kind == ASTKind::VariableDecl) { + auto* sv = (VariableDeclNode*)sib; + if (sv->initExpr) walkExpr(sv->initExpr); + Symbol* ss = table_.define(sv->name, SymbolKind::Variable, + typeFromName(sv->varType, sv->loc), sv->loc); + if (!ss) + diag_.report("E002", sv->loc, + "'" + sv->name + "' zaten bu kapsamda tanımlı"); + } + } + break; + } + + case ASTKind::IfStatement: { + auto* ifn = (IfStatementNode*)node; + if (ifn->condition) walkExpr(ifn->condition); + if (ifn->thenBranch) walkStmt(ifn->thenBranch); + if (ifn->elseBranch) walkStmt(ifn->elseBranch); + break; + } + + case ASTKind::WhileStatement: { + auto* ws = (WhileStatementNode*)node; + if (ws->condition) walkExpr(ws->condition); + if (ws->body) walkStmt(ws->body); + break; + } + + case ASTKind::ForStatement: { + auto* fs = (ForStatementNode*)node; + table_.enterScope(); // init değişkeni döngüye ait + if (fs->init) { + if (fs->init->kind == ASTKind::VariableDecl) walkStmt(fs->init); + else walkExpr(fs->init); + } + if (fs->condition) walkExpr(fs->condition); + if (fs->update) walkExpr(fs->update); + if (fs->body) walkStmt(fs->body); + table_.exitScope(); + break; + } + + case ASTKind::DoWhileStatement: { + auto* dw = (DoWhileStatementNode*)node; + if (dw->body) walkStmt(dw->body); + if (dw->condition) walkExpr(dw->condition); + break; + } + + case ASTKind::ReturnStatement: { + auto* rs = (ReturnStatementNode*)node; + if (rs->value) walkExpr(rs->value); + break; + } + + case ASTKind::ExpressionStatement: { + auto* es = (ExpressionStatementNode*)node; + if (es->expression) walkExpr(es->expression); + break; + } + + case ASTKind::BreakStatement: + case ASTKind::ContinueStatement: + break; // yaprak + + default: + break; + } +} + +// ───────────────────────────────────────────────────────────────────────────── +// walkExpr — ifade ağacında isimleri çöz +// ───────────────────────────────────────────────────────────────────────────── + +void SymbolCollector::walkExpr(ASTNode* node) { + if (!node) return; + + switch (node->kind) { + + case ASTKind::Identifier: { + auto* id = (IdentifierNode*)node; + if (!id->parserToken.token) break; + std::string name = id->parserToken.token->token; + Symbol* s = table_.resolve(name); + if (s) { + id->resolvedSymbol = s; + table_.addReference(s, id->loc); + } else { + diag_.report("E001", id->loc, + "'" + name + "' tanımlı değil"); + } + break; + } + + case ASTKind::BinaryExpression: { + auto* bin = (BinaryExpressionNode*)node; + if (bin->Left) walkExpr(bin->Left); + if (bin->Right) walkExpr(bin->Right); + break; + } + + case ASTKind::Call: { + auto* call = (CallExpressionNode*)node; + if (call->callee) walkExpr(call->callee); + for (ASTNode* arg : call->arguments) walkExpr(arg); + break; + } + + case ASTKind::Postfix: { + auto* pf = (PostfixNode*)node; + if (pf->operand) walkExpr(pf->operand); + break; + } + + case ASTKind::MemberAccess: { + auto* ma = (MemberAccessNode*)node; + if (ma->object) walkExpr(ma->object); // member çözümü Faz 3 → TODO + break; + } + + case ASTKind::IndexExpression: { + auto* ie = (IndexExpressionNode*)node; + if (ie->object) walkExpr(ie->object); + if (ie->index) walkExpr(ie->index); + break; + } + + case ASTKind::Literal: + break; // yaprak + + default: + break; + } +} diff --git a/src/symbol/symbol_collector.hpp b/src/symbol/symbol_collector.hpp new file mode 100644 index 0000000..ec267e3 --- /dev/null +++ b/src/symbol/symbol_collector.hpp @@ -0,0 +1,37 @@ +#ifndef SAQUT_SYMBOL_COLLECTOR +#define SAQUT_SYMBOL_COLLECTOR + +#include +#include +#include +#include "symbol/symbol_table.hpp" +#include "diagnostic/diagnostic_engine.hpp" +#include "core/type.hpp" +#include "core/location.hpp" +#include "parser/ast_node.hpp" + +class SymbolCollector { +public: + SymbolCollector(SymbolTable& t, DiagnosticEngine& d) : table_(t), diag_(d) {} + + // seedBuiltins → pass1 → structCycles(E010) → pass2 + void collect(ASTNode* program); + +private: + void seedBuiltins(); + void pass1Globals(ASTNode* program); + void checkStructCycles(); + void pass2Bodies(ASTNode* program); + void walkStmt(ASTNode* node); + void walkExpr(ASTNode* node); + + Type typeFromName(const std::string& n, const SourceLocation& loc); + + SymbolTable& table_; + DiagnosticEngine& diag_; + + // struct adı → içerdiği struct-tip alan adları (cycle check için) + std::unordered_map> structFields_; +}; + +#endif // SAQUT_SYMBOL_COLLECTOR diff --git a/src/symbol/symbol_table.hpp b/src/symbol/symbol_table.hpp new file mode 100644 index 0000000..8ff6624 --- /dev/null +++ b/src/symbol/symbol_table.hpp @@ -0,0 +1,65 @@ +#ifndef SAQUT_SYMBOL_TABLE +#define SAQUT_SYMBOL_TABLE + +#include +#include +#include "symbol/scope.hpp" + +class SymbolTable { +public: + SymbolTable() { + global_ = newScope(nullptr); + current_ = global_; + } + + Scope* global() { return global_; } + Scope* current() { return current_; } + + Scope* enterScope() { + current_ = newScope(current_); + return current_; + } + + void exitScope() { + if (current_->parent) current_ = current_->parent; + } + + // current scope'ta tanımla; duplicate → nullptr döner + Symbol* define(const std::string& name, SymbolKind k, Type t, SourceLocation loc) { + auto s = std::make_unique(); + s->name = name; + s->kind = k; + s->type = std::move(t); + s->definitionLoc = loc; + Symbol* raw = s.get(); + if (!current_->defineLocal(raw)) return nullptr; // duplicate + pool_.push_back(std::move(s)); + return raw; + } + + Symbol* resolve(const std::string& n) { return current_->resolve(n); } + + void addReference(Symbol* s, SourceLocation loc) { + if (s) s->references.push_back(loc); + } + + std::vector allSymbols() const { + std::vector result; + result.reserve(pool_.size()); + for (const auto& s : pool_) result.push_back(s.get()); + return result; + } + +private: + Scope* newScope(Scope* p) { + scopes_.push_back(std::make_unique(p)); + return scopes_.back().get(); + } + + std::vector> scopes_; + std::vector> pool_; + Scope* global_ = nullptr; + Scope* current_ = nullptr; +}; + +#endif // SAQUT_SYMBOL_TABLE