feat(faz2): sembol tablosu — isim çözümleme + scope + referans toplama (#71)
- parser: parseFunctionDecl() parametreleri artık AST'ye alıyor (FunctionDeclNode::params alanı eklendi; declarations.hpp/cpp güncellendi) - parser: parseDeclaration() kullanıcı-tanımlı tip (struct alanı) desteği - ast_json: addArray() m_hasArrayItem sıfırlama hatası düzeltildi (birden fazla dizi alanı içeren düğümlerde bozuk JSON üretimi giderildi) - src/symbol/: Symbol, Scope, SymbolTable, SymbolCollector eklendi * İki geçiş: pass1 global hoist, pass2 gövde + declare-before-use * E001 tanımsız isim, E002 çift tanım, E010 döngüsel struct * print builtin tohumlama (TODO: #89 katalog) - cli/symbols: yeni SymbolTable/Collector kullanıyor; tip + refs çıktısı - examples/symbols/: dup.sqt, undef.sqt, cyclic.sqt test fixture'ları Doğrulama: build/saqut symbols file:examples/fibonacci.sqt → 0 hata, 10 sembol examples/symbols/dup.sqt → E002 examples/symbols/undef.sqt → E001 examples/symbols/cyclic.sqt → E010 tests/run.sh → TUM TESTLER GECTI AST JSON → geçerli Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
ea5bcee490
commit
ba08bf4511
Binary file not shown.
|
|
@ -1,60 +1,17 @@
|
||||||
# ninja log v7
|
# ninja log v7
|
||||||
0 1451 1779867877701788943 CMakeFiles/saqut.dir/src/core/sourcefile.cpp.o da6f5fc90e87e6b1
|
1 2432 1781560000479022647 CMakeFiles/saqut.dir/src/core/sourcefile.cpp.o da6f5fc90e87e6b1
|
||||||
0 1246 1779867877703024703 CMakeFiles/saqut.dir/src/lexer/lexer.cpp.o 90eeec811f2137e6
|
1 1218 1781560000479623743 CMakeFiles/saqut.dir/src/lexer/lexer.cpp.o 90eeec811f2137e6
|
||||||
1451 2772 1779867879152793461 CMakeFiles/saqut.dir/src/tokenizer/tokenizer.cpp.o a01677f8bb4f4dbc
|
2433 3980 1781560002911027568 CMakeFiles/saqut.dir/src/tokenizer/tokenizer.cpp.o a01677f8bb4f4dbc
|
||||||
1246 2891 1779867878947792823 CMakeFiles/saqut.dir/src/parser/parser.cpp.o 2c65b7be26cead32
|
1 1408 1781786522326465778 CMakeFiles/saqut.dir/src/parser/parser.cpp.o 2c65b7be26cead32
|
||||||
5 2061 1779867877706788958 CMakeFiles/saqut.dir/src/parser/nodes/program.cpp.o ac5bbcd74d87561a
|
1 2454 1781786563274205322 CMakeFiles/saqut.dir/src/parser/nodes/program.cpp.o ac5bbcd74d87561a
|
||||||
1 2213 1779867877703621428 CMakeFiles/saqut.dir/src/parser/nodes/identifier.cpp.o eb96bb4b1eb4ad80
|
1 2570 1781786563274005192 CMakeFiles/saqut.dir/src/parser/nodes/identifier.cpp.o eb96bb4b1eb4ad80
|
||||||
1 2296 1779867877703518257 CMakeFiles/saqut.dir/src/parser/nodes/expressions.cpp.o 4057e3d63c63a1ab
|
1 2619 1781786563273914998 CMakeFiles/saqut.dir/src/parser/nodes/expressions.cpp.o 4057e3d63c63a1ab
|
||||||
1 2529 1779867877703709398 CMakeFiles/saqut.dir/src/parser/nodes/literal.cpp.o 78f2c4da7c9b2281
|
1 2552 1781786563274095617 CMakeFiles/saqut.dir/src/parser/nodes/literal.cpp.o 78f2c4da7c9b2281
|
||||||
7 2335 1779867877708788964 CMakeFiles/saqut.dir/src/parser/nodes/statements.cpp.o b5c20724bbf3648c
|
1 2664 1781786563274315492 CMakeFiles/saqut.dir/src/parser/nodes/statements.cpp.o b5c20724bbf3648c
|
||||||
0 2098 1779867877703316205 CMakeFiles/saqut.dir/src/parser/nodes/binary_expr.cpp.o d2e2bb2f8a63c6d2
|
1 2656 1781786563273513379 CMakeFiles/saqut.dir/src/parser/nodes/binary_expr.cpp.o d2e2bb2f8a63c6d2
|
||||||
0 2499 1779867877703412857 CMakeFiles/saqut.dir/src/parser/nodes/declarations.cpp.o b6c56f04a257f685
|
1 2517 1781786563273824541 CMakeFiles/saqut.dir/src/parser/nodes/declarations.cpp.o b6c56f04a257f685
|
||||||
0 2892 1779867877703230815 CMakeFiles/saqut.dir/src/main.cpp.o 110c26cb1d0c3a23
|
1 2736 1781786295699197219 CMakeFiles/saqut.dir/src/main.cpp.o 110c26cb1d0c3a23
|
||||||
2892 2983 1779867880593797950 saqut 89052e51305cb697
|
2664 2825 1781786565936516467 saqut 8525928b86934b0a
|
||||||
0 22 1779868368456818650 build.ninja 1876a59d627a585
|
0 22 1781786586571540360 build.ninja 1876a59d627a585
|
||||||
0 22 1779868368456217236 /home/saqut/Masaüstü/saqutcompiler/build/cmake_install.cmake 1876a59d627a585
|
0 22 1781786586571540360 /home/saqut/Masaüstü/saqutcompiler/build/cmake_install.cmake 1876a59d627a585
|
||||||
1 1528 1779868368464217284 CMakeFiles/saqut.dir/src/lexer/lexer.cpp.o 90eeec811f2137e6
|
1 2086 1781786305407208932 CMakeFiles/saqut.dir/src/symbol/symbol_collector.cpp.o 3348f498f369213d
|
||||||
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
|
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ CMAKE_AR:FILEPATH=/usr/bin/ar
|
||||||
CMAKE_BUILD_TYPE:STRING=Debug
|
CMAKE_BUILD_TYPE:STRING=Debug
|
||||||
|
|
||||||
//CXX compiler
|
//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
|
//A wrapper around 'ar' adding the appropriate '--plugin' option
|
||||||
// for the GCC compiler
|
// 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
|
//Minor version of cmake used to create the current loaded cache
|
||||||
CMAKE_CACHE_MINOR_VERSION:INTERNAL=3
|
CMAKE_CACHE_MINOR_VERSION:INTERNAL=3
|
||||||
//Patch version of cmake used to create the current loaded cache
|
//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.
|
//Path to CMake executable.
|
||||||
CMAKE_COMMAND:INTERNAL=/usr/bin/cmake
|
CMAKE_COMMAND:INTERNAL=/usr/bin/cmake
|
||||||
//Path to cpack program executable.
|
//Path to cpack program executable.
|
||||||
|
|
|
||||||
|
|
@ -1187,3 +1187,308 @@ events:
|
||||||
Running the CXX compiler's linker: "/usr/bin/ld" "-v"
|
Running the CXX compiler's linker: "/usr/bin/ld" "-v"
|
||||||
GNU ld (GNU Binutils) 2.46.0
|
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
|
||||||
|
...
|
||||||
|
|
|
||||||
|
|
@ -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
|
OBJECT_FILE_DIR = CMakeFiles/saqut.dir/src/parser
|
||||||
TARGET_SUPPORT_DIR = CMakeFiles/saqut.dir
|
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
|
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
|
CONFIG = Debug
|
||||||
DEP_FILE = CMakeFiles/saqut.dir/src/tokenizer/tokenizer.cpp.o.d
|
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
|
# 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
|
CONFIG = Debug
|
||||||
DEP_FILE = CMakeFiles/saqut.dir/link.d
|
DEP_FILE = CMakeFiles/saqut.dir/link.d
|
||||||
FLAGS = -g
|
FLAGS = -g
|
||||||
|
|
@ -221,14 +230,14 @@ build all: phony saqut
|
||||||
#############################################
|
#############################################
|
||||||
# Re-run CMake if any of its inputs changed.
|
# 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
|
pool = console
|
||||||
|
|
||||||
|
|
||||||
#############################################
|
#############################################
|
||||||
# A missing CMake input file is not an error.
|
# 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
|
||||||
|
|
||||||
|
|
||||||
#############################################
|
#############################################
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
// E002 — aynı scope'ta çift tanım
|
||||||
|
int main() {
|
||||||
|
int x = 1;
|
||||||
|
int x = 2;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
// E001 — tanımsız isim
|
||||||
|
int main() {
|
||||||
|
int x = y + 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
// saQut CLI — symbols komutu (sembol tablosu)
|
// saQut CLI — symbols komutu (sembol tablosu — Faz 2)
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
|
|
||||||
#ifndef SAQUT_CLI_SYMBOLS
|
#ifndef SAQUT_CLI_SYMBOLS
|
||||||
|
|
@ -9,7 +9,9 @@
|
||||||
#include "cli/args.hpp"
|
#include "cli/args.hpp"
|
||||||
#include "tokenizer/tokenizer.hpp"
|
#include "tokenizer/tokenizer.hpp"
|
||||||
#include "parser/parser.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) {
|
inline int cmdSymbols(const CliArgs& args) {
|
||||||
std::string source = readSource(args);
|
std::string source = readSource(args);
|
||||||
|
|
@ -27,7 +29,11 @@ inline int cmdSymbols(const CliArgs& args) {
|
||||||
return 1;
|
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 << "Sembol Tablosu (" << symbols.size() << " sembol):\n";
|
||||||
std::cout << "────────────────────────────────────────────\n";
|
std::cout << "────────────────────────────────────────────\n";
|
||||||
|
|
@ -36,23 +42,27 @@ inline int cmdSymbols(const CliArgs& args) {
|
||||||
std::cout << " (sembol bulunamadı)\n";
|
std::cout << " (sembol bulunamadı)\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto& s : symbols) {
|
for (Symbol* s : symbols) {
|
||||||
std::cout << " [" << s.kind << "] " << s.type << " " << s.name << "\n";
|
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";
|
std::cout << "────────────────────────────────────────────\n";
|
||||||
|
|
||||||
int fnCount = 0, varCount = 0;
|
if (diag.hasErrors()) {
|
||||||
for (auto& s : symbols) {
|
std::cerr << "\n";
|
||||||
if (s.kind == "function") fnCount++;
|
diag.printAll(std::cerr);
|
||||||
else if (s.kind == "variable") varCount++;
|
|
||||||
}
|
}
|
||||||
std::cout << "Fonksiyon: " << fnCount
|
|
||||||
<< " | Değişken: " << varCount << "\n";
|
|
||||||
|
|
||||||
delete ast;
|
delete ast;
|
||||||
for (auto* t : tokens) delete t;
|
for (auto* t : tokens) delete t;
|
||||||
return 0;
|
return diag.hasErrors() ? 1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // SAQUT_CLI_SYMBOLS
|
#endif // SAQUT_CLI_SYMBOLS
|
||||||
|
|
|
||||||
|
|
@ -187,7 +187,10 @@ public:
|
||||||
if (m_hasFields) m_ss << ",\n";
|
if (m_hasFields) m_ss << ",\n";
|
||||||
m_ss << m_indentInner << "\"" << jsonEscape(key) << "\": [";
|
m_ss << m_indentInner << "\"" << jsonEscape(key) << "\": [";
|
||||||
m_arrayDepth++;
|
m_arrayDepth++;
|
||||||
|
bool saved = m_hasArrayItem;
|
||||||
|
m_hasArrayItem = false; // her dizi kendi virgül sayacıyla başlar
|
||||||
callback();
|
callback();
|
||||||
|
m_hasArrayItem = saved;
|
||||||
m_arrayDepth--;
|
m_arrayDepth--;
|
||||||
m_ss << "\n" << m_indentInner << "]";
|
m_ss << "\n" << m_indentInner << "]";
|
||||||
m_hasFields = true;
|
m_hasFields = true;
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,9 @@ std::string FunctionDeclNode::toJson(int depth) {
|
||||||
obj.add("kind", "FunctionDecl");
|
obj.add("kind", "FunctionDecl");
|
||||||
obj.add("name", name);
|
obj.add("name", name);
|
||||||
obj.add("returnType", returnType);
|
obj.add("returnType", returnType);
|
||||||
|
obj.addArray("params", [&]() {
|
||||||
|
for (auto* p : params) obj.addItem(p->toJson(depth + 2));
|
||||||
|
});
|
||||||
obj.addArray("children", [&]() {
|
obj.addArray("children", [&]() {
|
||||||
for (auto* child : children) obj.addItem(child->toJson(depth + 2));
|
for (auto* child : children) obj.addItem(child->toJson(depth + 2));
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -3,10 +3,13 @@
|
||||||
|
|
||||||
#include "parser/ast_node.hpp"
|
#include "parser/ast_node.hpp"
|
||||||
|
|
||||||
|
class VariableDeclNode; // fwd — FunctionDeclNode::params için
|
||||||
|
|
||||||
class FunctionDeclNode : public ASTNode {
|
class FunctionDeclNode : public ASTNode {
|
||||||
public:
|
public:
|
||||||
std::string name;
|
std::string name;
|
||||||
std::string returnType;
|
std::string returnType;
|
||||||
|
std::vector<VariableDeclNode*> params; // TODO(faz2): parametreler
|
||||||
FunctionDeclNode();
|
FunctionDeclNode();
|
||||||
void log(int indent = 0) override;
|
void log(int indent = 0) override;
|
||||||
std::string toJson(int depth = 0) override;
|
std::string toJson(int depth = 0) override;
|
||||||
|
|
|
||||||
|
|
@ -91,6 +91,16 @@ ASTNode* Parser::parseDeclaration() {
|
||||||
if (ct.type == TokenType::KW_STRUCT)
|
if (ct.type == TokenType::KW_STRUCT)
|
||||||
return parseStructDecl();
|
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();
|
return parseStatement();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -293,8 +303,26 @@ ASTNode* Parser::parseFunctionDecl() {
|
||||||
if (currentToken().type == TokenType::LPAREN) {
|
if (currentToken().type == TokenType::LPAREN) {
|
||||||
nextToken();
|
nextToken();
|
||||||
while (currentToken().type != TokenType::RPAREN &&
|
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();
|
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)
|
if (currentToken().type == TokenType::RPAREN)
|
||||||
nextToken();
|
nextToken();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,37 @@
|
||||||
|
#ifndef SAQUT_SYMBOL_SCOPE
|
||||||
|
#define SAQUT_SYMBOL_SCOPE
|
||||||
|
|
||||||
|
#include <unordered_map>
|
||||||
|
#include <vector>
|
||||||
|
#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<std::string, Symbol*> table; // non-owning
|
||||||
|
std::vector<Symbol*> order; // ekleme sırası
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // SAQUT_SYMBOL_SCOPE
|
||||||
|
|
@ -0,0 +1,34 @@
|
||||||
|
#ifndef SAQUT_SYMBOL_SYMBOL
|
||||||
|
#define SAQUT_SYMBOL_SYMBOL
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
#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<SourceLocation> references;
|
||||||
|
Scope* scope = nullptr;
|
||||||
|
bool isBuiltin = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // SAQUT_SYMBOL_SYMBOL
|
||||||
|
|
@ -0,0 +1,377 @@
|
||||||
|
#include "symbol/symbol_collector.hpp"
|
||||||
|
#include <functional>
|
||||||
|
#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<Type> 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<std::string, int> color;
|
||||||
|
for (auto& kv : structFields_) color[kv.first] = 0;
|
||||||
|
|
||||||
|
std::function<bool(const std::string&)> 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,37 @@
|
||||||
|
#ifndef SAQUT_SYMBOL_COLLECTOR
|
||||||
|
#define SAQUT_SYMBOL_COLLECTOR
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <unordered_map>
|
||||||
|
#include <vector>
|
||||||
|
#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<std::string, std::vector<std::string>> structFields_;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // SAQUT_SYMBOL_COLLECTOR
|
||||||
|
|
@ -0,0 +1,65 @@
|
||||||
|
#ifndef SAQUT_SYMBOL_TABLE
|
||||||
|
#define SAQUT_SYMBOL_TABLE
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
#include <vector>
|
||||||
|
#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<Symbol>();
|
||||||
|
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<Symbol*> allSymbols() const {
|
||||||
|
std::vector<Symbol*> 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<Scope>(p));
|
||||||
|
return scopes_.back().get();
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<std::unique_ptr<Scope>> scopes_;
|
||||||
|
std::vector<std::unique_ptr<Symbol>> pool_;
|
||||||
|
Scope* global_ = nullptr;
|
||||||
|
Scope* current_ = nullptr;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // SAQUT_SYMBOL_TABLE
|
||||||
Loading…
Reference in New Issue