From a39b5da0f8241cb0ca79daee181263912185e2f4 Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Wed, 5 Aug 2026 20:11:38 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9F=BA=E6=9C=AC=E7=A8=B3=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TransPyV/temp/_phase1_manifest.json | 1 - TransPyV/temp/_sha1_map.txt | 82 ----- TransPyV/temp/_shared_sym.json | Bin 1984300 -> 0 bytes _RemoveDebug.py | 84 ----- _console.py | 197 ----------- includes/ast/__init__.vp | 2 +- includes/ast/lexer.vp | 8 + includes/binascii.vp | 2 +- includes/llvmlite/__module.vp | 8 +- includes/llvmlite/__types.vp | 187 ++++++++++- includes/memhub.vp | 122 ++++++- includes/os/__init__.vp | 41 +-- includes/shutil.vp | 2 +- includes/stdlib.vp | 3 +- includes/w32/fileio.vp | 2 +- includes/zlib/pyzlib.vp | 2 + includes/zlib/zdef.vp | 1 - lib/Projectrans/__init__.py | 3 +- lib/core/Handles/HandlesAssign.py | 5 + lib/core/Handles/HandlesAugAssign.py | 23 +- lib/core/Handles/HandlesClassDef.py | 6 +- lib/core/Handles/HandlesExprAttr.py | 66 ---- lib/core/Handles/HandlesFunctions.py | 10 +- lib/core/LLVMCG/ExprGen.py | 18 + run_err.txt | 0 run_out.txt | 478 --------------------------- run_output.txt | 1 - 27 files changed, 392 insertions(+), 962 deletions(-) delete mode 100644 TransPyV/temp/_phase1_manifest.json delete mode 100644 TransPyV/temp/_sha1_map.txt delete mode 100644 TransPyV/temp/_shared_sym.json delete mode 100644 _RemoveDebug.py delete mode 100644 _console.py delete mode 100644 run_err.txt delete mode 100644 run_out.txt delete mode 100644 run_output.txt diff --git a/TransPyV/temp/_phase1_manifest.json b/TransPyV/temp/_phase1_manifest.json deleted file mode 100644 index b74797d..0000000 --- a/TransPyV/temp/_phase1_manifest.json +++ /dev/null @@ -1 +0,0 @@ -{"D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\Projectrans\\Config.vp": {"sha1": "c0042adc0b7ec5df", "mtime": 1785332415.2264168, "size": 14060}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\Projectrans\\Utils.vp": {"sha1": "4650533467115342", "mtime": 1785332415.2054548, "size": 4900}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\StubGen\\Converter.vp": {"sha1": "edfb76eb5b11cb51", "mtime": 1785470008.8908188, "size": 36399}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\StubGen\\VpiReader.vp": {"sha1": "3395dd5ebf7032b7", "mtime": 1785688467.8441546, "size": 21045}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\__init__.vp": {"sha1": "c2a4277744568003", "mtime": 1785424554.7031634, "size": 820}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\BuildPipeline.vp": {"sha1": "0029b86ca4ba3c8a", "mtime": 1785469972.0876107, "size": 25400}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesAnnAssign.vp": {"sha1": "b7705a803012e701", "mtime": 1785478290.7112954, "size": 25035}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesAssign.vp": {"sha1": "4614c82057c20ce0", "mtime": 1785612002.0288458, "size": 26204}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesAugAssign.vp": {"sha1": "0d60272ffec7421e", "mtime": 1785478333.5054357, "size": 14418}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesBase.vp": {"sha1": "63a3d17e96a083ac", "mtime": 1785332415.2080498, "size": 8740}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesBody.vp": {"sha1": "144543e5c3a8e884", "mtime": 1785500799.3788817, "size": 10543}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesClassDef.vp": {"sha1": "22b233500a91b82a", "mtime": 1785688461.7589297, "size": 147577}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesEnum.vp": {"sha1": "d8379d695f0ce7ea", "mtime": 1785598131.284988, "size": 8533}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesExpr.vp": {"sha1": "ebe9603dbffb6a35", "mtime": 1785478439.6070976, "size": 155333}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesExprCall.vp": {"sha1": "1d86dddccc01909b", "mtime": 1785688462.1500714, "size": 296707}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesExprOps.vp": {"sha1": "ede39cea216a347e", "mtime": 1785478524.0725746, "size": 13507}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesFor.vp": {"sha1": "456fb516ba3c5002", "mtime": 1785332415.1896677, "size": 17319}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesFunctions.vp": {"sha1": "f33eba0679c883b5", "mtime": 1785580039.9426627, "size": 49481}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesIf.vp": {"sha1": "f4cdbca2f8802c12", "mtime": 1785390159.3673935, "size": 5626}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesImports.vp": {"sha1": "c34e22cc668c6a6e", "mtime": 1785424554.7057025, "size": 25292}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesMain.vp": {"sha1": "4a7b57e6bd18f65e", "mtime": 1785332415.1935978, "size": 21362}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesMatch.vp": {"sha1": "4eb645a9b00ea530", "mtime": 1785688462.3238158, "size": 39328}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesNonlocal.vp": {"sha1": "3e7835a9deb60427", "mtime": 1785485362.3779018, "size": 7459}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesReturn.vp": {"sha1": "9224f6a9c894a6cf", "mtime": 1785478537.512802, "size": 6346}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesStruct.vp": {"sha1": "d539c830f47d8334", "mtime": 1785688462.3561263, "size": 48050}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesTranslator.vp": {"sha1": "d064df0bb07fe1ff", "mtime": 1785688462.4070482, "size": 24182}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesType.vp": {"sha1": "6a25d9b413498b72", "mtime": 1785608629.9467041, "size": 80761}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesVar.vp": {"sha1": "ea374464a0b93230", "mtime": 1785474869.3558953, "size": 16575}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesWhile.vp": {"sha1": "8dc65d4c71e2936a", "mtime": 1785390170.5239043, "size": 5202}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\IncludesScanner.vp": {"sha1": "55be14b41dd7ca15", "mtime": 1785424554.7031634, "size": 13067}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Phase1.vp": {"sha1": "8a526c65749808c5", "mtime": 1785470618.1566038, "size": 51263}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Phase2.vp": {"sha1": "f34071b7cf6c8158", "mtime": 1785469983.5727682, "size": 49494}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\StubMerger.vp": {"sha1": "0bae3da2213d51e9", "mtime": 1785600884.7381954, "size": 104586}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\VLogger.vp": {"sha1": "bdf5730851fb95f2", "mtime": 1785332415.2542837, "size": 10068}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\main.vp": {"sha1": "a6c58174a4b03877", "mtime": 1785612916.0578, "size": 28757}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\_list.vp": {"sha1": "7cadfe07e983fd90", "mtime": 1785338614.5410473, "size": 3238}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\argparse.vp": {"sha1": "b370d93b74bf55cc", "mtime": 1785347242.759819, "size": 18275}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\ast\\__init__.vp": {"sha1": "f3444ec56937284f", "mtime": 1785332415.2553575, "size": 3421}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\ast\\astaux.vp": {"sha1": "4337fb260448bbe2", "mtime": 1784006094.7981195, "size": 11489}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\ast\\base.vp": {"sha1": "22bc0df83b3f0e62", "mtime": 1785332415.1850114, "size": 14992}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\ast\\exprs.vp": {"sha1": "b543bc1dfb592119", "mtime": 1785332415.2436252, "size": 40886}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\ast\\lexer.vp": {"sha1": "e217def267d3d4a8", "mtime": 1785332415.2310088, "size": 24109}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\ast\\match.vp": {"sha1": "4dd6b3f1427d1cc5", "mtime": 1782961799.8492737, "size": 12309}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\ast\\parser.vp": {"sha1": "fde6db0747bdd959", "mtime": 1785348036.106818, "size": 87525}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\ast\\stmts.vp": {"sha1": "657e182b27c2a022", "mtime": 1783929993.759902, "size": 37926}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\ast\\tokens.vp": {"sha1": "b547ac4f380bddb6", "mtime": 1783165480.469121, "size": 13722}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\atom.vp": {"sha1": "aa246c6e6aa30484", "mtime": 1785389628.701967, "size": 1198}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\hashlib\\__init__.vp": {"sha1": "96837bcc64032444", "mtime": 1777902641.540433, "size": 186}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\hashlib\\__md5.vp": {"sha1": "19f8024d10c828e8", "mtime": 1784356818.7075372, "size": 5847}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\hashlib\\__sha1.vp": {"sha1": "0df65b8ed15664b0", "mtime": 1784356827.656474, "size": 4516}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\hashlib\\__sha256.vp": {"sha1": "c9d54a4158f7f5a8", "mtime": 1782266203.9352357, "size": 5332}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\hashlib\\__sha512.vp": {"sha1": "6ff26590374ae6fc", "mtime": 1782266223.3380039, "size": 7162}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\hashtable.vp": {"sha1": "2b77d783c41d21d1", "mtime": 1785424554.7031634, "size": 9719}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\json\\__init__.vp": {"sha1": "6ddf430432a0e373", "mtime": 1785424554.7204792, "size": 7707}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\json\\__parser.vp": {"sha1": "240a9a4157959a9f", "mtime": 1782826918.100951, "size": 7517}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\json\\__writer.vp": {"sha1": "20cd49775c100a38", "mtime": 1782826901.8906734, "size": 3784}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\linkedlist.vp": {"sha1": "a5e9a83e9db303ad", "mtime": 1785337078.812168, "size": 17137}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\llvmlite\\__init__.vp": {"sha1": "33d64eeb99369a85", "mtime": 1785480244.1533804, "size": 17045}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\llvmlite\\__builder.vp": {"sha1": "a7748ef067f79205", "mtime": 1785688461.307784, "size": 52267}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\llvmlite\\__function.vp": {"sha1": "874bac141c97bae9", "mtime": 1785342172.222551, "size": 30049}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\llvmlite\\__module.vp": {"sha1": "692919c5a194ac8d", "mtime": 1785332415.2502255, "size": 23144}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\llvmlite\\__types.vp": {"sha1": "295b7ed2c244f309", "mtime": 1785486521.0491738, "size": 20633}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\llvmlite\\__values.vp": {"sha1": "f9e36e2cd6fa659f", "mtime": 1784566611.8301415, "size": 6739}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\llvmlite\\__verify.vp": {"sha1": "6b3bc463fd044545", "mtime": 1784566611.82952, "size": 14751}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\memhub.vp": {"sha1": "c2d8b39bbdb8380a", "mtime": 1785684738.5654402, "size": 22256}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\platmacro.vp": {"sha1": "b57252077e6b596b", "mtime": 1785332415.2187803, "size": 1266}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\posix.vp": {"sha1": "28de517e3820658a", "mtime": 1785335629.2014928, "size": 10586}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\stdarg.vp": {"sha1": "71e0a3ffcb3ebfad", "mtime": 1781258888.113146, "size": 277}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\stdint.vp": {"sha1": "f5522571bcce7bcb", "mtime": 1785563642.3805652, "size": 4356}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\stdio.vp": {"sha1": "285b6aa29a34754d", "mtime": 1785332415.1829746, "size": 561}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\stdlib.vp": {"sha1": "3aa6057398be5673", "mtime": 1785319487.0321114, "size": 374}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\string.vp": {"sha1": "ffaf70367668b227", "mtime": 1785671630.828129, "size": 11048}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\subprocess.vp": {"sha1": "a335eb99f2e34479", "mtime": 1785319401.2041914, "size": 7841}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\sys.vp": {"sha1": "0c67644125bea0fd", "mtime": 1785325556.7317626, "size": 5606}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\viperio.vp": {"sha1": "c9f4be41ca1cc2b4", "mtime": 1782812279.506002, "size": 1556}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\viperlib.vp": {"sha1": "f6ab8989f3545e83", "mtime": 1785568198.234555, "size": 59045}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\w32\\fileio.vp": {"sha1": "72dbbb563aa943b0", "mtime": 1785332415.1891341, "size": 13751}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\w32\\win32base.vp": {"sha1": "fc980acec33d69a7", "mtime": 1785332415.2228394, "size": 2653}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\w32\\win32console.vp": {"sha1": "bbdf3bbd4c3bc28c", "mtime": 1781200703.5338137, "size": 5604}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\w32\\win32file.vp": {"sha1": "f6b51804a0ba8ff0", "mtime": 1782531158.744144, "size": 8424}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\w32\\win32process.vp": {"sha1": "067c78e9f121dce3", "mtime": 1781200703.5409546, "size": 4802}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\w32\\win32sync.vp": {"sha1": "06f53cc594b4ac6c", "mtime": 1782297500.2581685, "size": 4726}} \ No newline at end of file diff --git a/TransPyV/temp/_sha1_map.txt b/TransPyV/temp/_sha1_map.txt deleted file mode 100644 index f44dcbc..0000000 --- a/TransPyV/temp/_sha1_map.txt +++ /dev/null @@ -1,82 +0,0 @@ -0029b86ca4ba3c8a:lib/core/BuildPipeline.vp -067c78e9f121dce3:includes/w32\win32process.vp -06f53cc594b4ac6c:includes/w32\win32sync.vp -0bae3da2213d51e9:lib/core/StubMerger.vp -0c67644125bea0fd:includes/sys.vp -0d60272ffec7421e:lib/core/Handles/HandlesAugAssign.vp -0df65b8ed15664b0:includes/hashlib\__sha1.vp -144543e5c3a8e884:lib/core/Handles/HandlesBody.vp -19f8024d10c828e8:includes/hashlib\__md5.vp -1d86dddccc01909b:lib/core/Handles/HandlesExprCall.vp -20cd49775c100a38:includes/json\__writer.vp -22b233500a91b82a:lib/core/Handles/HandlesClassDef.vp -22bc0df83b3f0e62:includes/ast\base.vp -240a9a4157959a9f:includes/json\__parser.vp -285b6aa29a34754d:includes/stdio.vp -28de517e3820658a:includes/posix.vp -295b7ed2c244f309:includes/llvmlite\__types.vp -2b77d783c41d21d1:includes/hashtable.vp -3395dd5ebf7032b7:lib/StubGen/VpiReader.vp -33d64eeb99369a85:includes/llvmlite\__init__.vp -3aa6057398be5673:includes/stdlib.vp -3e7835a9deb60427:lib/core/Handles/HandlesNonlocal.vp -4337fb260448bbe2:includes/ast\astaux.vp -456fb516ba3c5002:lib/core/Handles/HandlesFor.vp -4614c82057c20ce0:lib/core/Handles/HandlesAssign.vp -4650533467115342:lib/Projectrans/Utils.vp -4a7b57e6bd18f65e:lib/core/Handles/HandlesMain.vp -4dd6b3f1427d1cc5:includes/ast\match.vp -4eb645a9b00ea530:lib/core/Handles/HandlesMatch.vp -55be14b41dd7ca15:lib/core/IncludesScanner.vp -63a3d17e96a083ac:lib/core/Handles/HandlesBase.vp -657e182b27c2a022:includes/ast\stmts.vp -692919c5a194ac8d:includes/llvmlite\__module.vp -6a25d9b413498b72:lib/core/Handles/HandlesType.vp -6b3bc463fd044545:includes/llvmlite\__verify.vp -6ddf430432a0e373:includes/json\__init__.vp -6ff26590374ae6fc:includes/hashlib\__sha512.vp -71e0a3ffcb3ebfad:includes/stdarg.vp -72dbbb563aa943b0:includes/w32\fileio.vp -7cadfe07e983fd90:includes/_list.vp -874bac141c97bae9:includes/llvmlite\__function.vp -8a526c65749808c5:lib/core/Phase1.vp -8dc65d4c71e2936a:lib/core/Handles/HandlesWhile.vp -9224f6a9c894a6cf:lib/core/Handles/HandlesReturn.vp -96837bcc64032444:includes/hashlib\__init__.vp -a335eb99f2e34479:includes/subprocess.vp -a5e9a83e9db303ad:includes/linkedlist.vp -a6c58174a4b03877:main.vp -a7748ef067f79205:includes/llvmlite\__builder.vp -aa246c6e6aa30484:includes/atom.vp -b370d93b74bf55cc:includes/argparse.vp -b543bc1dfb592119:includes/ast\exprs.vp -b547ac4f380bddb6:includes/ast\tokens.vp -b57252077e6b596b:includes/platmacro.vp -b7705a803012e701:lib/core/Handles/HandlesAnnAssign.vp -bbdf3bbd4c3bc28c:includes/w32\win32console.vp -bdf5730851fb95f2:lib/core/VLogger.vp -c0042adc0b7ec5df:lib/Projectrans/Config.vp -c2a4277744568003:lib/__init__.vp -c2d8b39bbdb8380a:includes/memhub.vp -c34e22cc668c6a6e:lib/core/Handles/HandlesImports.vp -c9d54a4158f7f5a8:includes/hashlib\__sha256.vp -c9f4be41ca1cc2b4:includes/viperio.vp -d064df0bb07fe1ff:lib/core/Handles/HandlesTranslator.vp -d539c830f47d8334:lib/core/Handles/HandlesStruct.vp -d8379d695f0ce7ea:lib/core/Handles/HandlesEnum.vp -e217def267d3d4a8:includes/ast\lexer.vp -ea374464a0b93230:lib/core/Handles/HandlesVar.vp -ebe9603dbffb6a35:lib/core/Handles/HandlesExpr.vp -ede39cea216a347e:lib/core/Handles/HandlesExprOps.vp -edfb76eb5b11cb51:lib/StubGen/Converter.vp -f33eba0679c883b5:lib/core/Handles/HandlesFunctions.vp -f34071b7cf6c8158:lib/core/Phase2.vp -f3444ec56937284f:includes/ast\__init__.vp -f4cdbca2f8802c12:lib/core/Handles/HandlesIf.vp -f5522571bcce7bcb:includes/stdint.vp -f6ab8989f3545e83:includes/viperlib.vp -f6b51804a0ba8ff0:includes/w32\win32file.vp -f9e36e2cd6fa659f:includes/llvmlite\__values.vp -fc980acec33d69a7:includes/w32\win32base.vp -fde6db0747bdd959:includes/ast\parser.vp -ffaf70367668b227:includes/string.vp diff --git a/TransPyV/temp/_shared_sym.json b/TransPyV/temp/_shared_sym.json deleted file mode 100644 index 8c81d8fbbde1dd26379936ca43039eb933f588fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1984300 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

5~5W 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¨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 diff --git a/_RemoveDebug.py b/_RemoveDebug.py deleted file mode 100644 index 7b6fdab..0000000 --- a/_RemoveDebug.py +++ /dev/null @@ -1,84 +0,0 @@ -# -*- coding: utf-8 -*- -import pathlib - -# 1. VpiReader.vp -p = pathlib.Path(r'd:\Users\TermiNexus\Desktop\TransPyC\TransPyV\App\lib\StubGen\VpiReader.vp') -c = p.read_text(encoding='utf-8') -lines = c.split('\n') -new_lines = [] -skip = False -for i, line in enumerate(lines): - if 'DEBUG: sha1_buf length mismatch' in line: - skip = True - # also skip preceding lines - while new_lines and ('_buflen' in new_lines[-1] or 'sha1_buf' in new_lines[-1] or len(new_lines[-1].strip()) == 0 or new_lines[-1].strip().startswith('#')): - new_lines.pop() - continue - if skip: - if 'sys.exit(1)' in line: - skip = False - continue - if 'stdio.' in line or '_buflen' in line: - continue - if line.strip() == '' or line.strip().startswith('if _buflen'): - continue - skip = False - new_lines.append(line) -p.write_text('\n'.join(new_lines), encoding='utf-8') -print('VpiReader.vp done') - -# 2. HandlesFunctions.vp -p2 = pathlib.Path(r'd:\Users\TermiNexus\Desktop\TransPyC\TransPyV\App\lib\core\Handles\HandlesFunctions.vp') -c2 = p2.read_text(encoding='utf-8') -lines2 = c2.split('\n') -new_lines2 = [] -skip2 = False -for line in lines2: - if 'DEBUG: double-dot in _mangle_name' in line: - skip2 = True - while new_lines2 and ('_mi' in new_lines2[-1] or 'mangled[_mi' in new_lines2[-1] or 'stdio.' in new_lines2[-1] or 'sys.exit' in new_lines2[-1] or new_lines2[-1].strip().startswith('#')): - new_lines2.pop() - continue - if skip2: - if 'sys.exit(1)' in line: - skip2 = False - continue - if 'stdio.' in line or '_mi' in line or 'mangled[_mi' in line or line.strip().startswith('if mangled'): - continue - if line.strip() == '' or line.strip() == 'return mangled': - if line.strip() == 'return mangled': - new_lines2.append(line) - skip2 = False - continue - skip2 = False - new_lines2.append(line) -p2.write_text('\n'.join(new_lines2), encoding='utf-8') -print('HandlesFunctions.vp done') - -# 3. HandlesExprCall.vp -p3 = pathlib.Path(r'd:\Users\TermiNexus\Desktop\TransPyC\TransPyV\App\lib\core\Handles\HandlesExprCall.vp') -c3 = p3.read_text(encoding='utf-8') -lines3 = c3.split('\n') -new_lines3 = [] -skip3 = False -for line in lines3: - if 'DEBUG: double-dot in call_name' in line: - skip3 = True - while new_lines3 and ('_cni' in new_lines3[-1] or 'call_name[_cni' in new_lines3[-1] or 'stdio.' in new_lines3[-1] or 'sys.exit' in new_lines3[-1] or new_lines3[-1].strip().startswith('#')): - new_lines3.pop() - continue - if skip3: - if 'sys.exit(1)' in line: - skip3 = False - continue - if 'stdio.' in line or '_cni' in line or 'call_name[_cni' in line or line.strip().startswith('if call_name'): - continue - if line.strip() == '' or line.strip().startswith('#'): - if line.strip().startswith('#'): - new_lines3.append(line) - skip3 = False - continue - skip3 = False - new_lines3.append(line) -p3.write_text('\n'.join(new_lines3), encoding='utf-8') -print('HandlesExprCall.vp done') diff --git a/_console.py b/_console.py deleted file mode 100644 index c6b2531..0000000 --- a/_console.py +++ /dev/null @@ -1,197 +0,0 @@ -import tkinter as tk -from tkinter import scrolledtext -import subprocess -import threading -import sys -import os -import queue -import time - - - -class ConsoleApp: - def __init__(self, root, args): - self.root = root - self.args = args - self.proc = None - self.output_queue = queue.Queue() - - # 获取系统当前编码,尽量保证原样输出 - self.encoding = sys.stdout.encoding or 'utf-8' - - # 记录最后一次收到输出的时间 - self.last_output_time = time.time() - - root.title("AI 交互终端") - root.geometry("900x600") - - # GUI 布局 - # 输出区域 - self.text_area = scrolledtext.ScrolledText(root, wrap=tk.WORD, font=("Consolas", 10)) - self.text_area.pack(expand=True, fill='both', padx=5, pady=5) - - # 输入区域 - input_frame = tk.Frame(root) - input_frame.pack(fill='x', padx=5, pady=5) - - self.entry = tk.Entry(input_frame, font=("Consolas", 10)) - self.entry.pack(side=tk.LEFT, expand=True, fill='x') - self.entry.bind('', self.send_input) - - # 说话模式复选框 - self.speak_mode = tk.BooleanVar(value=False) - self.speak_check = tk.Checkbutton(input_frame, text="提示AI(说话)", variable=self.speak_mode, font=("Consolas", 9)) - self.speak_check.pack(side=tk.RIGHT, padx=5) - - self.kill_btn = tk.Button(input_frame, text="强制终止进程", command=self.force_terminate, bg="red", fg="white") - self.kill_btn.pack(side=tk.RIGHT, padx=5) - - # 状态栏 (用于显示无输出时长) - status_frame = tk.Frame(root) - status_frame.pack(fill='x', padx=5, pady=(0, 5)) - self.time_label = tk.Label(status_frame, text="无输出时长: 00:00", font=("Consolas", 10), fg="gray") - self.time_label.pack(side=tk.RIGHT) - - # 启动子进程 (合并 stderr 到 stdout) - try: - self.proc = subprocess.Popen( - self.args, - stdin=subprocess.PIPE, - stdout=subprocess.PIPE, - stderr=subprocess.STDOUT, - bufsize=0 # 无缓冲,确保实时性 - ) - except Exception as e: - print(f"启动进程失败: {e}") - sys.exit(1) - - # 启动读取子进程输出的线程 - self.output_thread = threading.Thread(target=self.read_output, daemon=True) - self.output_thread.start() - - # 启动读取当前脚本控制台输入的线程 (允许直接在终端输入) - self.stdin_thread = threading.Thread(target=self.read_stdin, daemon=True) - self.stdin_thread.start() - - # 窗口关闭事件 - self.root.protocol("WM_DELETE_WINDOW", self.on_closing) - - # 开始轮询队列更新GUI - self.update_gui() - - def read_output(self): - """后台线程:实时读取子进程的输出""" - fd = self.proc.stdout.fileno() - while True: - try: - byte_data = os.read(fd, 1024) - if not byte_data: - break # 进程结束 - - # 只要收到数据,就更新最后输出时间 - self.last_output_time = time.time() - - # 1. 实时输出到当前脚本的 stdout (不加任何前缀) - sys.stdout.buffer.write(byte_data) - sys.stdout.buffer.flush() - - # 2. 放入队列供 GUI 使用 - try: - text = byte_data.decode(self.encoding, errors='replace') - except: - text = byte_data.decode('utf-8', errors='replace') - self.output_queue.put(text) - except OSError: - break # 管道已关闭 - - def read_stdin(self): - """后台线程:实时读取宿主控制台的 stdin 并转发给子进程""" - while True: - line = sys.stdin.readline() - if not line: - break - try: - self.proc.stdin.write(line.encode(self.encoding, errors='replace')) - self.proc.stdin.flush() - except: - break - - def send_input(self, event): - """GUI 输入框回车事件""" - text = self.entry.get() - self.entry.delete(0, tk.END) - if not text: - return - - # 如果勾选了"提示AI",则直接输出到当前脚本的 stdout,不发给子进程 - if self.speak_mode.get(): - speak_text = text + '\n' - # 输出到当前脚本控制台,供 AI 捕获 - sys.stdout.buffer.write(speak_text.encode(self.encoding, errors='replace')) - sys.stdout.buffer.flush() - - # 在 GUI 中回显,让用户知道说了什么(使用不同颜色区分) - self.text_area.insert(tk.END, speak_text, 'speak_tag') - self.text_area.tag_config('speak_tag', foreground="blue") - self.text_area.see(tk.END) - else: - # 正常模式:发给子进程 - text += '\n' - try: - self.proc.stdin.write(text.encode(self.encoding, errors='replace')) - self.proc.stdin.flush() - except Exception as e: - self.output_queue.put(f"\n[输入发送失败: {e}]\n") - - def force_terminate(self): - """强制终止子进程""" - if self.proc and self.proc.poll() is None: - print("用户终止了应用程序") # 输出到控制台 stdout - self.output_queue.put("\n[用户终止了应用程序]\n") - self.proc.kill() - - def on_closing(self): - """关闭窗口时终止子进程""" - if self.proc and self.proc.poll() is None: - self.proc.kill() - self.root.destroy() - - def update_gui(self): - """主线程:从队列获取数据并更新GUI""" - try: - while True: - text = self.output_queue.get_nowait() - self.text_area.insert(tk.END, text) - self.text_area.see(tk.END) - except queue.Empty: - pass - - # 计算并更新无输出时长 - if self.proc and self.proc.poll() is None: - idle_seconds = int(time.time() - self.last_output_time) - mins = idle_seconds // 60 - secs = idle_seconds % 60 - self.time_label.config(text=f"无输出时长: {mins:02d}:{secs:02d}") - else: - self.time_label.config(text="进程已结束") - - # 检查进程是否已结束 - if self.proc and self.proc.poll() is not None: - if self.output_queue.empty(): - self.kill_btn.config(state=tk.DISABLED, bg="grey", text="进程已结束") - # 进程结束且输出已读取完毕,自动关闭程序 - self.root.destroy() - return # 停止轮询 - - # 每 200ms 轮询一次 (减少CPU占用,时间显示不需要50ms那么频繁) - self.root.after(200, self.update_gui) - -if __name__ == "__main__": - if len(sys.argv) < 2: - print("用法: python ai_console.py [args...]") - print("示例: python ai_console.py cmd") - sys.exit(1) - - root = tk.Tk() - app = ConsoleApp(root, sys.argv[1:]) - root.mainloop() \ No newline at end of file diff --git a/includes/ast/__init__.vp b/includes/ast/__init__.vp index 0a28ee7..d373d86 100644 --- a/includes/ast/__init__.vp +++ b/includes/ast/__init__.vp @@ -17,7 +17,7 @@ from .base import ( _init_ast, _copy_str, _set_pos, _inherit_pos, _set_parent_list, _binop_from_op, _augop_from_op, _cmpop_from_op, _emit, _emit_str, _emit_int, _dump_list, - dump, + dump, _op_name, ) # 语句节点 from .stmts import ( diff --git a/includes/ast/lexer.vp b/includes/ast/lexer.vp index c9a5d0e..0bc7170 100644 --- a/includes/ast/lexer.vp +++ b/includes/ast/lexer.vp @@ -553,6 +553,14 @@ def _read_string(lx: Lexer | t.CPtr): conv_buf[wpos] = '\t' elif next_ch == 'r': conv_buf[wpos] = '\r' + elif next_ch == 'f': + conv_buf[wpos] = '\f' + elif next_ch == 'v': + conv_buf[wpos] = '\v' + elif next_ch == 'a': + conv_buf[wpos] = '\a' + elif next_ch == 'b': + conv_buf[wpos] = '\b' elif next_ch == '\\': conv_buf[wpos] = '\\' elif next_ch == '\'': diff --git a/includes/binascii.vp b/includes/binascii.vp index 4c9b7b5..e51cc08 100644 --- a/includes/binascii.vp +++ b/includes/binascii.vp @@ -154,7 +154,7 @@ def a2b_hex(hexstr: str, length: t.CInt) -> str: out[oi] = '\0' return out -def unhexlify(data: str, length: t.CInt): +def unhexlify(data: str, length: t.CInt) -> bytes: return a2b_hex(data, length) def b2a_base64(data: str, length: t.CInt) -> str: diff --git a/includes/llvmlite/__module.vp b/includes/llvmlite/__module.vp index 87ef5bd..80cbfeb 100644 --- a/includes/llvmlite/__module.vp +++ b/includes/llvmlite/__module.vp @@ -504,10 +504,10 @@ def _print_global(buf: t.CChar | t.CPtr, size: t.CSizeT, _append_cstr(buf, size, "global ") # 类型 - ty_buf: t.CChar | t.CPtr = pool.alloc(128) + ty_buf: t.CChar | t.CPtr = pool.alloc(512) if ty_buf is not None: ty_buf[0] = '\0' - TypePrint(ty_buf, 128, gv.Ty, pool) + TypePrint(ty_buf, 512, gv.Ty, pool) _append_cstr(buf, size, ty_buf) # 初始化值 @@ -541,10 +541,10 @@ def _print_global_stub(buf: t.CChar | t.CPtr, size: t.CSizeT, _append_cstr(buf, size, " = external global ") # 类型 - ty_buf: t.CChar | t.CPtr = pool.alloc(128) + ty_buf: t.CChar | t.CPtr = pool.alloc(512) if ty_buf is not None: ty_buf[0] = '\0' - TypePrint(ty_buf, 128, gv.Ty, pool) + TypePrint(ty_buf, 512, gv.Ty, pool) _append_cstr(buf, size, ty_buf) diff --git a/includes/llvmlite/__types.vp b/includes/llvmlite/__types.vp index 3162bb1..540bb52 100644 --- a/includes/llvmlite/__types.vp +++ b/includes/llvmlite/__types.vp @@ -4,6 +4,7 @@ import viperlib import string import memhub import stdio +import stdlib from linkedlist import GSListNode @@ -383,8 +384,23 @@ def TypePrint(buf: t.CChar | t.CPtr, size: t.CSizeT, pool 用于递归打印子类型时分配临时缓冲区。 """ + _TypePrintDepth(buf, size, ty, pool, 0) + + +# 递归深度上限:悬空/自引用的 LLVMType 树(1b reset 后内存被复用)会导致 +# Ptr(pointee)/Struct(fields)/Func(params) 无限递归,每次递归分配临时缓冲 +# 造成 OOM(单文件暴涨 900MB 根因)。超过 100 层即停止打印。 +TYPEPRINT_MAX_DEPTH: t.CDefine = 100 + +def _TypePrintDepth(buf: t.CChar | t.CPtr, size: t.CSizeT, + ty: LLVMType | t.CPtr, pool: memhub.MemBuddy | t.CPtr, + depth: t.CInt): + """带递归深度上限的 TypePrint 内部实现""" if ty is None or buf is None or size == 0: return + if depth >= TYPEPRINT_MAX_DEPTH: + viperlib.snprintf(buf, size, "...") + return buf[0] = '\0' match ty: case LLVMType.Int(bits): @@ -400,7 +416,10 @@ def TypePrint(buf: t.CChar | t.CPtr, size: t.CSizeT, match pointee: case LLVMType.Struct(sfields, sfcount, sname): if sname is not None: - viperlib.snprintf(buf, size, "%%\"%s\"*", sname) + # 悬空防护:sname 可能指向被 reset 回收/部分复用的 pool 内存, + # 用受限打印避免读越界崩溃;完整名在 vtable 生成后由 + # TypeStr 兜底(stdlib 深拷贝,跨 reset 存活) + viperlib.snprintf(buf, size, "%%\"%.40s\"*", sname) return case LLVMType.Void(): # Ptr(Void) → i8*(LLVM IR void* 非法) @@ -419,7 +438,7 @@ def TypePrint(buf: t.CChar | t.CPtr, size: t.CSizeT, string.strcpy(buf, "i8*") return # 通用路径: 递归打印 pointee 后追加 '*' - TypePrint(buf, size, pointee, pool) + _TypePrintDepth(buf, size, pointee, pool, depth + 1) pos: t.CSizeT = string.strlen(buf) if pos + 1 < size: buf[pos] = '*' @@ -431,7 +450,7 @@ def TypePrint(buf: t.CChar | t.CPtr, size: t.CSizeT, # 嵌套指针/数组更易超过 128,使用 512 字节避免截断 tmp: t.CChar | t.CPtr = pool.alloc(512) if tmp is not None: - TypePrint(tmp, 512, elem_ty, pool) + _TypePrintDepth(tmp, 512, elem_ty, pool, depth + 1) _strappend(buf, size, tmp) _strappend(buf, size, "]") case LLVMType.Struct(fields, fcount, name): @@ -440,20 +459,26 @@ def TypePrint(buf: t.CChar | t.CPtr, size: t.CSizeT, viperlib.snprintf(buf, size, "%%\"%s\"", name) else: # 匿名结构体: {ty1, ty2, ...} - _print_struct_body(buf, size, fields, pool) + _print_struct_body(buf, size, fields, pool, depth) case LLVMType.Func(ret, params, count): # ret (ty1, ty2, ...) - TypePrint(buf, size, ret, pool) + _TypePrintDepth(buf, size, ret, pool, depth + 1) _strappend(buf, size, " (") cur2: ParamNode | t.CPtr = params first2: t.CInt = 1 + _pc2: t.CInt = 0 # 函数参数类型可能为 SHA1 限定命名结构体指针,512 字节避免截断 tmp3: t.CChar | t.CPtr = pool.alloc(512) while cur2 is not None: + # 悬空保护:参数链若被 reset 回收后内容复用,可能成环无限循环 + _pc2 += 1 + if _pc2 > 200: + _strappend(buf, size, "...)") + break if first2 == 0: _strappend(buf, size, ", ") if tmp3 is not None: - TypePrint(tmp3, 512, cur2.Ty, pool) + _TypePrintDepth(tmp3, 512, cur2.Ty, pool, depth + 1) _strappend(buf, size, tmp3) cur2 = cur2.Next first2 = 0 @@ -502,7 +527,8 @@ def _strappend(dst: t.CChar | t.CPtr, dst_size: t.CSizeT, src: t.CChar | t.CPtr) # 供 TypePrint(匿名结构体)和 PrintStructDefinition(命名结构体定义行)复用 # ============================================================ def _print_struct_body(buf: t.CChar | t.CPtr, size: t.CSizeT, - fields: ParamNode | t.CPtr, pool: memhub.MemBuddy | t.CPtr): + fields: ParamNode | t.CPtr, pool: memhub.MemBuddy | t.CPtr, + depth: t.CInt = 0): """打印 {ty1, ty2, ...} 到 buf(追加模式,不覆盖已有内容) 直接在 buf 当前末尾写入字段类型,避免 pool.alloc 返回与 buf 重叠的内存 @@ -515,13 +541,18 @@ def _print_struct_body(buf: t.CChar | t.CPtr, size: t.CSizeT, first: t.CInt = 1 fidx: t.CInt = 0 while cur is not None: + # 悬空保护:ParamNode 链若被 reset 回收后内容复用,Next 指针可能成环或 + # 指向垃圾,无限循环。最多打印 200 个字段即停止,防止 OOM。 + if fidx >= 200: + _strappend(buf, size, "...}") + return if first == 0: _strappend(buf, size, ", ") # 直接在 buf 当前末尾位置写入字段类型 # TypePrint 首字节置 '\0' 是无害的(pos 处本来就是 '\0') pos: t.CSizeT = string.strlen(buf) if pos + 2 < size: - TypePrint(buf + pos, size - pos, cur.Ty, pool) + _TypePrintDepth(buf + pos, size - pos, cur.Ty, pool, depth + 1) cur = cur.Next first = 0 fidx += 1 @@ -574,4 +605,144 @@ def get_struct_name(ty: LLVMType | t.CPtr) -> t.CChar | t.CPtr: return None +def get_struct_fields(ty: LLVMType | t.CPtr) -> ParamNode | t.CPtr: + """获取结构体的字段链表(供跨模块重建 Struct 类型用)""" + if ty is None: + return None + match ty: + case LLVMType.Struct(fields, fcount, name): + return fields + case _: + return None + + +def get_struct_fcount(ty: LLVMType | t.CPtr) -> t.CInt: + """获取结构体的字段数量(供跨模块重建 Struct 类型用)""" + if ty is None: + return 0 + match ty: + case LLVMType.Struct(fields, fcount, name): + return fcount + case _: + return 0 + + +# ============================================================ +# DeepCopyType - 深拷贝 LLVMType 到 stdlib 区(跨文件 reset 存活) +# +# 背景: 1b 阶段(mark1 之后)新注册的结构体(泛型特化类等),其 +# struct_ty 是 pool 分配的 LLVMType,所在文件翻译完 reset_to(mark1) +# 后指针悬空。_struct_table 中的 entry.Ty 指向它,后续文件遍历 +# _struct_table(find_struct_by_type/lookup_field 等)时解引用悬空 +# 指针导致崩溃(0xC0000005)。 +# +# 本函数递归拷贝整棵 LLVMType 树到 stdlib(含 ParamNode 字段链和 +# 字符串名),保证 entry.Ty 跨文件永久存活。 +# +# 注意: 自引用类型(如 Value 含 Ptr(Value) 字段)会导致无限递归, +# 用深度上限防护(超过即返回浅拷贝副本,后续不再递归)。 +# ============================================================ +DEEPCOPY_MAX_DEPTH: t.CDefine = 64 + +def DeepCopyType(pool: memhub.MemBuddy | t.CPtr, + ty: LLVMType | t.CPtr) -> LLVMType | t.CPtr: + """深拷贝 LLVMType 到 stdlib 区(深度限制防自引用递归),失败返回 None""" + return _DeepCopyDepth(pool, ty, 0) + + +def _DeepCopyDepth(pool: memhub.MemBuddy | t.CPtr, + ty: LLVMType | t.CPtr, depth: t.CInt) -> LLVMType | t.CPtr: + """带深度上限的深拷贝实现""" + if ty is None: + return None + new_ty: LLVMType | t.CPtr = (LLVMType | t.CPtr)(stdlib.malloc(LLVMType.__sizeof__())) + if new_ty is None: + return None + string.memset(new_ty, 0, LLVMType.__sizeof__()) + if depth >= DEEPCOPY_MAX_DEPTH: + # 深度超限:浅拷贝 tag 后停止递归(复制当前变体但不深拷子类型) + match ty: + case LLVMType.Int(bits): + c.DerefAs(new_ty, LLVMType.Int(bits)) + case LLVMType.Float(bits): + c.DerefAs(new_ty, LLVMType.Float(bits)) + case LLVMType.Void(): + c.DerefAs(new_ty, LLVMType.Void()) + case LLVMType.Label(): + c.DerefAs(new_ty, LLVMType.Label()) + case LLVMType.Metadata(): + c.DerefAs(new_ty, LLVMType.Metadata()) + case _: + c.DerefAs(new_ty, LLVMType.Void()) + return new_ty + match ty: + case LLVMType.Int(bits): + c.DerefAs(new_ty, LLVMType.Int(bits)) + case LLVMType.Float(bits): + c.DerefAs(new_ty, LLVMType.Float(bits)) + case LLVMType.Void(): + c.DerefAs(new_ty, LLVMType.Void()) + case LLVMType.Label(): + c.DerefAs(new_ty, LLVMType.Label()) + case LLVMType.Metadata(): + c.DerefAs(new_ty, LLVMType.Metadata()) + case LLVMType.Ptr(pointee): + c.DerefAs(new_ty, LLVMType.Ptr(_DeepCopyDepth(pool, pointee, depth + 1))) + case LLVMType.Array(elem_ty, count): + c.DerefAs(new_ty, LLVMType.Array(_DeepCopyDepth(pool, elem_ty, depth + 1), count)) + case LLVMType.Func(ret, params, pcount): + c.DerefAs(new_ty, LLVMType.Func( + _DeepCopyDepth(pool, ret, depth + 1), + _DeepCopyParamChain(pool, params, depth + 1), pcount)) + case LLVMType.Struct(fields, fcount, name): + c.DerefAs(new_ty, LLVMType.Struct( + _DeepCopyParamChain(pool, fields, depth + 1), + fcount, _DeepCopyStr(pool, name))) + case _: + stdlib.free(new_ty) + return None + return new_ty + + +def _DeepCopyParamChain(pool: memhub.MemBuddy | t.CPtr, + head: ParamNode | t.CPtr, depth: t.CInt) -> ParamNode | t.CPtr: + """深拷贝 ParamNode 链表到 stdlib""" + if head is None: + return None + first: ParamNode | t.CPtr = None + prev: ParamNode | t.CPtr = None + cur: ParamNode | t.CPtr = head + guard: t.CInt = 0 + while cur is not None: + guard += 1 + if guard > 512: + break + node: ParamNode | t.CPtr = (ParamNode | t.CPtr)(stdlib.malloc(PNODE_SIZE)) + if node is None: + break + string.memset(node, 0, PNODE_SIZE) + node.Ty = _DeepCopyDepth(pool, paramnode_get_ty(cur), depth + 1) + node.Next = None + if first is None: + first = node + if prev is not None: + prev.Next = node + prev = node + cur = paramnode_get_next(cur) + return first + + +def _DeepCopyStr(pool: memhub.MemBuddy | t.CPtr, s: t.CChar | t.CPtr) -> t.CChar | t.CPtr: + """深拷贝字符串到 stdlib""" + if s is None: + return None + slen: t.CSizeT = string.strlen(s) + copy: t.CChar | t.CPtr = stdlib.malloc(slen + 1) + if copy is None: + return None + string.strcpy(copy, s) + return copy + + + diff --git a/includes/memhub.vp b/includes/memhub.vp index c5ed23b..271de20 100644 --- a/includes/memhub.vp +++ b/includes/memhub.vp @@ -4,7 +4,7 @@ import string import atom import viperio import stdio -import sys +import stdlib # ============================================================ # memhub - Unified memory management library @@ -26,7 +26,6 @@ MEMBUDDY_MIN_BLOCK: t.CDefine = 32 MEMBUDDY_MAX_ORDERS: t.CDefine = 32 MEMBUDDY_HEADER_SIZE: t.CDefine = 8 - def _align_up(val: t.CSizeT, align: t.CSizeT) -> t.CSizeT: if align == 0: return val return (val + align - 1) & ~(align - 1) @@ -134,7 +133,13 @@ class MemPool(MemManager): def alloc(self, size: t.CSizeT) -> t.CVoid | t.CPtr: if size == 0: return None aligned: t.CSizeT = _align_up(size, MEMHUB_ALIGN) - if self.offset + aligned > self.size: return None + if self.offset + aligned > self.size: + stdio.printf("\n[OOM] 内存不足 (Out of Memory)\n") + stdio.printf("[OOM] 尝试分配: %zu 字节,失败\n", size) + stdio.printf("[OOM] MemPool: total=%zu used=%zu (bump allocator, 无释放)\n", + self.size, self.offset) + stdio.printf("[OOM] 说明: 内存池已耗尽。可能原因: (1) 池大小不足,需增大 POOL_SIZE; (2) 存在内存泄漏。\n") + stdlib.exit(1) ptr: t.CVoid | t.CPtr = t.CVoid(t.CUInt64T(self.base) + self.offset, t.CPtr) self.offset += aligned if self.offset > self.high_water: @@ -211,8 +216,18 @@ class MemSlab(MemManager): def alloc(self, size: t.CSizeT) -> t.CVoid | t.CPtr: # Slab mode: allocate one block only if requested size <= block_size - if self.free_list is None: return None - if size > self.block_size: return None + if self.free_list is None: + stdio.printf("\n[OOM] 内存不足 (Out of Memory)\n") + stdio.printf("[OOM] 尝试分配: %zu 字节,失败(free_list 已空)\n", size) + stdio.printf("[OOM] MemSlab: block_size=%zu block_count=%zu used=%zu\n", + self.block_size, self.block_count, self.used_count) + stdio.printf("[OOM] 说明: 内存池已耗尽。可能原因: (1) 池大小不足,需增大 POOL_SIZE; (2) 存在内存泄漏。\n") + stdlib.exit(1) + if size > self.block_size: + stdio.printf("\n[OOM] 内存不足 (Out of Memory)\n") + stdio.printf("[OOM] 尝试分配: %zu 字节,失败(超过 block_size=%zu)\n", size, self.block_size) + stdio.printf("[OOM] 说明: 请求大小超过 MemSlab 块大小,应改用 MemBuddy/MemPool。\n") + stdlib.exit(1) block: t.CVoid | t.CPtr = self.free_list self.free_list = t.CVoid(c.Deref(t.CUInt64T(block, t.CPtr)), t.CPtr) self.used_count += 1 @@ -254,6 +269,11 @@ class MemSlab(MemManager): # MemBuddy - Buddy system allocator # Free list head array stored at arena start; subsequent memory managed in power-of-two sized blocks # Thread-safe (spinlock enabled), supports block coalescing +# +# Checkpoint 支持(供编译器等长任务回收阶段性分配): +# mark() → 返回当前分配水位(不分配内存) +# reset_to(m) → 释放水位 m 之后分配的所有块(回收到 free list) +# 记录栈从 usable 顶部预留 _CHK_RESERVE 字节,不参与 buddy 分配。 # ============================================================ class MemBuddy(MemManager): # Override parent __provides__: MemBuddy provides both __mbuddy__ and __memmgr__. @@ -265,6 +285,10 @@ class MemBuddy(MemManager): lock_val: t.CVolatile | t.CInt # Spinlock usable: t.CVoid | t.CPtr # Start of usable memory region (skips free_lists) usable_size: t.CSizeT # Size of usable memory (power of two) + chk_stack: t.CUInt64T | t.CPtr # Checkpoint 分配记录栈(存 block 地址) + chk_cap: t.CSizeT # 记录栈容量(条目数) + chk_depth: t.CSizeT # 当前记录深度 + chk_base: t.CVoid | t.CPtr # 记录栈起始地址(由 stdlib.malloc 分配,独立于 buddy 区) def __init__(self, base: t.CVoid | t.CPtr, size: t.CSizeT): self.base = base @@ -274,6 +298,10 @@ class MemBuddy(MemManager): self.lock_val = 0 self.usable = None self.usable_size = 0 + self.chk_stack = None + self.chk_cap = 0 + self.chk_depth = 0 + self.chk_base = None self.lock_val = 0 fl_bytes: t.CSizeT = (MEMBUDDY_MAX_ORDERS + 1) * 8 @@ -291,6 +319,12 @@ class MemBuddy(MemManager): return remaining: t.CSizeT = size - fl_bytes + + # 注意:不能在 __init__ 里预留 checkpoint 记录栈! + # buddy 区必须从 fl_bytes 后开始、大小必须是 2 的幂。 + # 若预留 512KB,remaining = 2^30 - 512KB 不是 2 的幂, + # _largest_pow2_le 会取到 2^29 = 512MB,1GB 池直接砍半。 + # 记录栈改为 mark() 时从 buddy 池懒分配(见 mark())。 usable: t.CSizeT = _largest_pow2_le(remaining) if usable < MEMBUDDY_MIN_BLOCK: @@ -312,6 +346,60 @@ class MemBuddy(MemManager): # Entire usable memory region as a max_order free block self._fl_push(self.max_order, self.usable) + # === Checkpoint support === + + def mark(self) -> t.CSizeT: + """返回当前分配水位(checkpoint) + + 记录栈用 stdlib.malloc 分配(64K 条目 × 8B = 512KB,独立于 buddy 区), + 首次调用时懒分配。这样不占用 buddy 池、不会把 1GB 池砍半、 + reset_to 也不会误释放栈自身。 + """ + if self.chk_stack is None: + # 记录栈用 stdlib.malloc 分配(独立于 buddy 区,避免占用 buddy 池、 + # 避免 reset_to 误释放栈自身,也避免栈内存与 buddy 块重叠)。 + cap: t.CSizeT = 64 * 1024 + base: t.CVoid | t.CPtr = t.CVoid(stdlib.malloc(cap * 8), t.CPtr) + if base is None: + return 0 + self.chk_base = base + self.chk_stack = (t.CUInt64T | t.CPtr)(t.CVoid(base, t.CPtr)) + self.chk_cap = cap + self.chk_depth = 0 + return self.chk_depth + + def reset_to(self, mark: t.CSizeT): + """释放水位 mark 之后分配的所有块,回收到 free list + + 栈中每个 block:若 header 仍标记为已分配(奇数),_coalesce 归还; + 若已被单独 free(header==0),跳过避免重复归还。 + """ + if self.chk_stack is None: + return + if mark >= self.chk_depth: + return + self._lock() + while self.chk_depth > mark: + self.chk_depth -= 1 + block: t.CVoid | t.CPtr = t.CVoid(self.chk_stack[self.chk_depth], t.CPtr) + if block is None: + continue + stored: t.CVoid | t.CPtr = t.CVoid(c.Deref(t.CUInt64T(block, t.CPtr)), t.CPtr) + stored_val: t.CUInt64T = t.CUInt64T(stored) + if (stored_val & 1) == 0: + continue # 已被单独 free,跳过 + order: t.CInt = t.CInt(stored_val >> 1) + if order < 0 or order > self.max_order: + continue + self._coalesce(block, order) + self._unlock() + + def reset_all(self): + """回收全部已分配块(等价 reset_to(0))""" + if self.chk_stack is None: + return + self.reset_to(0) + # === Free list operations === def _fl_push(self, order: t.CInt, block: t.CVoid | t.CPtr): @@ -405,6 +493,24 @@ class MemBuddy(MemManager): order: t.CInt = t.CInt(stored_val >> 1) if order < 0: return 0 if order > self.max_order: return 0 + # 记录栈一致性校验:分配时(alloc)每个 block 地址都会压入 chk_stack。 + # reset_to(mark) 会把 [mark, chk_depth) 的块弹栈并归还 free list, + # 之后这些地址会被重新分配。若一个 header 恰好是合法奇数(假阳性), + # 但地址不在当前 chk_stack[0..chk_depth) 存活区间内,说明已被回收, + # 不能当作有效指针(否则 _format_func_type_str/TypePrint 会沿垃圾链 + # 无限分配导致 OOM)。 + # 注意:chk_stack 容量满(64K)后 alloc 不再记录新块(chk_depth==chk_cap), + # 此时无法区分,跳过校验(退化到仅 header 校验,避免误判正常 free)。 + if self.chk_stack is not None and self.chk_depth < self.chk_cap: + alive: t.CInt = 0 + ci: t.CSizeT = 0 + while ci < self.chk_depth: + if self.chk_stack[ci] == t.CUInt64T(block): + alive = 1 + break + ci += 1 + if alive == 0: + return 0 return 1 # === Spinlock === @@ -430,6 +536,10 @@ class MemBuddy(MemManager): if block is not None: c.DerefAs(block, t.CVoid(t.CUInt64T((order << 1) | 1), t.CPtr)) result = t.CVoid(t.CUInt64T(block) + MEMBUDDY_HEADER_SIZE, t.CPtr) + # 记录到 checkpoint 栈(供 reset_to 回收) + if self.chk_stack is not None and self.chk_depth < self.chk_cap: + self.chk_stack[self.chk_depth] = t.CUInt64T(block) + self.chk_depth += 1 if result is None: # Allocation failure: print memory usage statistics and exit with OOM fb: t.CSizeT = self.free_bytes() @@ -439,7 +549,7 @@ class MemBuddy(MemManager): stdio.printf("[OOM] 内存池: total=%zu used=%zu free=%zu free_blocks=%zu\n", self.usable_size, ub, fb, self.free_count()) stdio.printf("[OOM] 说明: 内存池已耗尽。可能原因: (1) 池大小不足,需增大 POOL_SIZE; (2) 存在内存泄漏。\n") - sys.exit(1) + stdlib.exit(1) self._unlock() return result diff --git a/includes/os/__init__.vp b/includes/os/__init__.vp index a73046c..daf8635 100644 --- a/includes/os/__init__.vp +++ b/includes/os/__init__.vp @@ -7,106 +7,107 @@ import os._win32 import os._posix -# os 包入口 -# 根据 platmacro.IS_WINDOWS 分派到 _win32 或 _posix 后端 -# os.path 为跨平台纯字符串操作,直接可用 +# os package entry point +# Dispatches to _win32 or _posix backend based on platmacro.IS_WINDOWS +# os.path is for cross-platform pure string operations, can be used directly -# 模块级全局 MBuddy 指针(由用户在 main 中赋值初始化) +# Module-level global MBuddy pointer (initialized by the user in main) _mbuddy: memhub.MemBuddy | t.CPtr # ============================================================================= -# 文件/目录属性查询 +# File/Directory Attribute Query # ============================================================================= def exists(path: str) -> bool: - """检查文件/目录是否存在""" + """Check if the file/directory exists""" if platmacro.IS_WINDOWS: return os._win32.exists(path) return os._posix.exists(path) def isdir(path: str) -> bool: - """检查路径是否为目录""" + """Check if the path is a directory""" if platmacro.IS_WINDOWS: return os._win32.isdir(path) return os._posix.isdir(path) def isfile(path: str) -> bool: - """检查路径是否为普通文件""" + """Check if the path is a regular file""" if platmacro.IS_WINDOWS: return os._win32.isfile(path) return os._posix.isfile(path) def getsize(path: str) -> t.CInt64T: - """返回文件大小(字节)。失败返回 -1。""" + """Returns the file size (in bytes). Returns -1 on failure.""" if platmacro.IS_WINDOWS: return os._win32.getsize(path) return os._posix.getsize(path) # ============================================================================= -# 工作目录 +# Working Directory # ============================================================================= def getcwd() -> str: - """返回当前工作目录(通过 _mbuddy 分配内存)""" + """Return the current working directory (memory allocated via _mbuddy)""" if platmacro.IS_WINDOWS: return os._win32.getcwd() return os._posix.getcwd_impl() def chdir(path: str) -> int: - """切换当前工作目录。成功返回 0,失败返回 -1。""" + """Switch the current working directory. Returns 0 if successful, -1 if it fails.""" if platmacro.IS_WINDOWS: return os._win32.chdir(path) return os._posix.chdir_impl(path) # ============================================================================= -# 文件/目录操作 +# File/Directory Operations # ============================================================================= def mkdir(path: str) -> int: - """创建目录。成功返回 0,失败返回 -1。""" + """Create a directory. Returns 0 on success, -1 on failure.""" if platmacro.IS_WINDOWS: return os._win32.mkdir(path) return os._posix.mkdir_impl(path) def remove(path: str) -> int: - """删除文件。成功返回 0,失败返回 -1。""" + """Delete the file. Returns 0 if successful, -1 if it fails.""" if platmacro.IS_WINDOWS: return os._win32.remove(path) return os._posix.remove(path) def rmdir(path: str) -> int: - """删除空目录。成功返回 0,失败返回 -1。""" + """Delete empty directories. Returns 0 if successful, -1 if it fails.""" if platmacro.IS_WINDOWS: return os._win32.rmdir(path) return os._posix.rmdir_impl(path) def rename(old_path: str, new_path: str) -> int: - """重命名/移动文件或目录。成功返回 0,失败返回 -1。""" + """Rename/move a file or directory. Returns 0 on success, -1 on failure.""" if platmacro.IS_WINDOWS: return os._win32.rename(old_path, new_path) return os._posix.rename_impl(old_path, new_path) def chmod(path: str, mode: int) -> int: - """修改文件权限。成功返回 0,失败返回 -1。 - Windows 上只处理只读位(S_IWUSR);POSIX 上使用完整权限位。""" + """Modify file permissions. Returns 0 on success, -1 on failure. + On Windows, only the read-only bit (S_IWUSR) is handled; + On POSIX, full permission bits are used.""" if platmacro.IS_WINDOWS: return os._win32.chmod(path, mode) return os._posix.chmod_impl(path, mode) # ============================================================================= -# 目录列举 +# Table of Contents Listing # ============================================================================= def listdir(path: str, out_names: str, max_count: ULONG) -> ULONG: diff --git a/includes/shutil.vp b/includes/shutil.vp index 8b06553..ed7e578 100644 --- a/includes/shutil.vp +++ b/includes/shutil.vp @@ -193,7 +193,7 @@ def _rmtree_posix(path: str) -> int: path_len: t.CSizeT = len(path) result: int = 0 - entry: posix.Dirent = posix.readdir(dirp) + entry: posix.Dirent | t.CPtr = posix.readdir(dirp) while entry != None: name: str = entry.d_name # Skip . and .. diff --git a/includes/stdlib.vp b/includes/stdlib.vp index caffed2..a580043 100644 --- a/includes/stdlib.vp +++ b/includes/stdlib.vp @@ -6,4 +6,5 @@ def malloc(size: t.CSizeT) -> t.CVoid | t.CPtr | t.State: pass def calloc(nmemb: t.CSizeT, size: t.CSizeT) -> t.CVoid | t.CPtr | t.State: pass def realloc(p: t.CVoid | t.CPtr, size: t.CSizeT) -> t.CVoid | t.CPtr | t.State: pass def free(p: t.CVoid | t.CPtr) -> t.State: pass -def system(cmd: t.CConst | t.CChar | t.CPtr) -> INT | t.State: pass \ No newline at end of file +def system(cmd: t.CConst | t.CChar | t.CPtr) -> INT | t.State: pass +def exit(status: int) -> t.State: pass \ No newline at end of file diff --git a/includes/w32/fileio.vp b/includes/w32/fileio.vp index 8c84283..61b1ac9 100644 --- a/includes/w32/fileio.vp +++ b/includes/w32/fileio.vp @@ -385,5 +385,5 @@ class FileW: def open(filename: str, mode: ULONG, share: ULONG = SHARE_READ) -> File | t.CPtr: return File(filename, mode, share) -def openw(filename: LPCWSTR, mode: ULONG, share: ULONG = SHARE_READ) -> FileW | t.CPtr: +def openw(filename: w32.win32base.LPCWSTR, mode: ULONG, share: ULONG = SHARE_READ) -> FileW | t.CPtr: return FileW(filename, mode, share) diff --git a/includes/zlib/pyzlib.vp b/includes/zlib/pyzlib.vp index 538b5a7..98a7dfc 100644 --- a/includes/zlib/pyzlib.vp +++ b/includes/zlib/pyzlib.vp @@ -1,3 +1,5 @@ +# from string import memset, memcpy +# from stdio import malloc, free, calloc, realloc from stdint import * import zlib.zdeflate as zdeflate import zlib.zinflate as zinflate diff --git a/includes/zlib/zdef.vp b/includes/zlib/zdef.vp index 88d5006..b6022ba 100644 --- a/includes/zlib/zdef.vp +++ b/includes/zlib/zdef.vp @@ -1,5 +1,4 @@ from stdint import * -import stddef import string import stdlib import memhub diff --git a/lib/Projectrans/__init__.py b/lib/Projectrans/__init__.py index 8b7b8cf..727be8e 100644 --- a/lib/Projectrans/__init__.py +++ b/lib/Projectrans/__init__.py @@ -3,10 +3,9 @@ import lib._bootstrap # noqa: F401 设置 sys.path(项目根 + lib/includes from lib.core.VLogger import Logger, LogLevel, set_logger -# 创建全局日志实例 +# 创建全局日志实例(仅控制台输出,不落盘,避免生成 build.log) logger = Logger( name="TransPyC", - log_file="build.log", level=LogLevel.INFO, use_colors=True ) diff --git a/lib/core/Handles/HandlesAssign.py b/lib/core/Handles/HandlesAssign.py index 67c6195..43dde9b 100644 --- a/lib/core/Handles/HandlesAssign.py +++ b/lib/core/Handles/HandlesAssign.py @@ -1442,6 +1442,11 @@ class AssignHandle(BaseHandle): VarType: ir.Type = Gen._ctype_to_llvm(TypeInfo) if isinstance(VarType, ir.VoidType): VarType = ir.IntType(32) + # 记录模块级注解类型:供函数内 global 变量的 += (HandlesAugAssign)参考, + # 避免用 RHS 字面量类型(i32)误建 i32 全局导致 i64/i32 类型不匹配。 + if not hasattr(Gen, '_module_ann_types'): + Gen._module_ann_types = {} + Gen._module_ann_types[VarName] = VarType if VarName in Gen.variables or VarName in Gen.module.globals: # 时序修复:第一遍创建全局时类未处理(SymbolTable 无枚举成员), # initializer 回退为 0。第二遍类已处理,尝试用解析出的枚举值更新 initializer。 diff --git a/lib/core/Handles/HandlesAugAssign.py b/lib/core/Handles/HandlesAugAssign.py index 6b6adcd..9ed6030 100644 --- a/lib/core/Handles/HandlesAugAssign.py +++ b/lib/core/Handles/HandlesAugAssign.py @@ -19,8 +19,27 @@ class AugAssignHandle(BaseHandle): ast.Div: '__truediv__', ast.FloorDiv: '__floordiv__', ast.Mod: '__mod__', ast.Pow: '__pow__', } + def _resolve_global_var_type(self, Gen: "Translator.LlvmGen", VarName: str, fallback: ir.Type) -> ir.Type: + """解析 global 变量的 LLVM 类型:优先用模块级 AnnAssign 的注解类型。 + + 问题场景:函数内 `_g_alloc_count += 1`(global 声明),模块级注解为 + `_g_alloc_count: t.CSizeT`(i64)。若不查模块级注解类型,此处会用 RHS 字面量 + 类型(i32)自动建 i32 全局,与模块内其他读取/写入(i64)类型不匹配, + 产生 "Operands must be the same type, got (i64, i32)" 类错误。 + 模块级 AnnAssign 已通过 _EmitGlobalAnnAssignLlvm 创建 LLVM 全局, + 但注解无初始值(如 `_g_alloc_max: t.CSizeT = 0`)时 initializer 为空、 + Gen.module.globals 中无该符号,故需在此兜底解析注解类型。 + """ + module_ann: dict = getattr(Gen, '_module_ann_types', None) + if module_ann and VarName in module_ann: + ann_type: ir.Type = module_ann[VarName] + if ann_type is not None: + return ann_type + if isinstance(fallback, ir.IntType): + return fallback + return ir.IntType(64) + def _is_aug_unsigned(self, Node: ast.AugAssign, OldVal: ir.Value | None, Value: ir.Value) -> bool: - """判断增量赋值操作是否应使用无符号指令""" Gen: "Translator.LlvmGen" = self.Trans.LlvmGen if isinstance(Node.target, ast.Name): if Gen._check_node_unsigned(Node.target): @@ -92,7 +111,7 @@ class AugAssignHandle(BaseHandle): # (注解无初始值的全局变量),此处自动创建零初始化全局变量 GVar: ir.GlobalVariable if VarName not in Gen.module.globals: - _gv_type: ir.Type = Value.type if isinstance(Value.type, ir.IntType) else ir.IntType(64) + _gv_type: ir.Type = self._resolve_global_var_type(Gen, VarName, Value.type) GVar = ir.GlobalVariable(Gen.module, _gv_type, name=VarName) GVar.initializer = ir.Constant(_gv_type, 0) else: diff --git a/lib/core/Handles/HandlesClassDef.py b/lib/core/Handles/HandlesClassDef.py index 2d90c0a..a9a2031 100644 --- a/lib/core/Handles/HandlesClassDef.py +++ b/lib/core/Handles/HandlesClassDef.py @@ -631,8 +631,12 @@ class ClassHandle(BaseHandle): child_method: str = f"{ClassName}.{method_name}" new_methods.append(child_method) Gen.register_method(ClassName, child_method) + covered_names.add(method_name) # 添加子类新增方法(不在父类中的) - for m in Gen.class_methods[ClassName]: + # 用快照遍历:register_method 会原地修改 class_methods, + # 若遍历活列表会把父类独有方法(已由 register_method 追加)再次追加, + # 导致 vtable 槽数与跨模块调用方推断不一致(如 MemBuddy 36 槽 vs 28 槽)。 + for m in list(Gen.class_methods[ClassName]): method_name: str = m.split('.')[-1] if '.' in m else m if method_name not in covered_names: new_methods.append(m) diff --git a/lib/core/Handles/HandlesExprAttr.py b/lib/core/Handles/HandlesExprAttr.py index da8bee2..d4b154d 100644 --- a/lib/core/Handles/HandlesExprAttr.py +++ b/lib/core/Handles/HandlesExprAttr.py @@ -7,16 +7,8 @@ from lib.core.Handles.HandlesBase import BaseHandle, FuncMeta import ast import llvmlite.ir as ir -# [CDF-LOAD] 模块加载标记:用于确认修复后的代码被实际加载 -try: - with open('d:/Users/TermiNexus/Desktop/TransPyC/_attr_debug.log', 'a', encoding='utf-8') as _f: - _f.write('[CDF-LOAD] HandlesExprAttr.py loaded (with CDefine fix)\n') -except Exception: - pass - class ExprAttrHandle(BaseHandle): - # ========== 辅助方法 ========== def _apply_bswap_on_Load(self, val: ir.Value, ClassName: str, AttrName: str) -> ir.Value: @@ -205,20 +197,6 @@ class ExprAttrHandle(BaseHandle): for key in (f"{VarName}.{AttrName}", AttrName): if key in define_constants: return self._make_define_constant(Gen, define_constants[key]) - # [CDF-DBG] CDefine 查找失败时的诊断输出 - if AttrName in ('CONST_INT', 'CONST_FLOAT', 'CONST_STR', 'CONST_BOOL', 'CONST_NONE'): - _dbg_keys: list[str] = [] - for _k in PossibleKeys: - _si: Any = self.Trans.SymbolTable.lookup(_k) - _dbg_keys.append(f"{_k}=>si={_si is not None},isdef={getattr(_si, 'IsDefine', None)},dv={getattr(_si, 'DefineValue', None)}") - _dc_keys: list[str] = [f"{k}=>{define_constants.get(k, '')}" for k in (f"{VarName}.{AttrName}", AttrName)] - try: - with open('d:/Users/TermiNexus/Desktop/TransPyC/_attr_debug.log', 'a', encoding='utf-8') as _f: - _f.write(f"[CDF-DBG] miss VarName={VarName} AttrName={AttrName} imported_modules={imported_modules}\n") - _f.write(f"[CDF-DBG] sym_keys={_dbg_keys}\n") - _f.write(f"[CDF-DBG] dc_keys={_dc_keys}\n") - except Exception: - pass return None def _lookup_module_global(self, Gen: LlvmCodeGenerator, VarName: str, AttrName: str) -> ir.Value | None: @@ -420,18 +398,6 @@ class ExprAttrHandle(BaseHandle): Gen: LlvmCodeGenerator = self.Trans.LlvmGen AttrName: str = Node.attr - # [HAN-DBG] 入口诊断:标记 CONST_* 属性访问 - if AttrName in ('CONST_INT', 'CONST_FLOAT', 'CONST_STR', 'CONST_BOOL', 'CONST_NONE'): - _in_globals: bool = AttrName in Gen.module.globals - _gv_type: Any = None - if _in_globals: - _gv_type = str(Gen.module.globals[AttrName].type) - try: - with open('d:/Users/TermiNexus/Desktop/TransPyC/_attr_debug.log', 'a', encoding='utf-8') as _f: - _f.write(f"[HAN-DBG] enter VarName={VarName} AttrName={AttrName} in_globals={_in_globals} gv_type={_gv_type}\n") - except Exception: - pass - # __doc__ 魔法字符串:函数/结构体的 docstring if AttrName == '__doc__': doc_ptr: ir.Value | None = Gen._get_doc_ptr(VarName) @@ -462,12 +428,6 @@ class ExprAttrHandle(BaseHandle): # 尝试 import 模块全局变量 result = self._lookup_module_global(Gen, VarName, AttrName) if result is not None: - if AttrName in ('CONST_INT', 'CONST_FLOAT', 'CONST_STR', 'CONST_BOOL', 'CONST_NONE'): - try: - with open('d:/Users/TermiNexus/Desktop/TransPyC/_attr_debug.log', 'a', encoding='utf-8') as _f: - _f.write(f"[HAN-DBG] module_global HIT VarName={VarName} AttrName={AttrName} result_type={result.type}\n") - except Exception: - pass return result # FakeDuck: 检查是否有影子结构体 a__meta__ (str 变量的 per-instance 字段存储) @@ -488,12 +448,6 @@ class ExprAttrHandle(BaseHandle): # 尝试 attr 直接作为全局变量(仅当 VarName 不是结构体变量时) if not ClassName and AttrName in Gen.module.globals: gv: Any = Gen.module.globals[AttrName] - if AttrName in ('CONST_INT', 'CONST_FLOAT', 'CONST_STR', 'CONST_BOOL', 'CONST_NONE'): - try: - with open('d:/Users/TermiNexus/Desktop/TransPyC/_attr_debug.log', 'a', encoding='utf-8') as _f: - _f.write(f"[HAN-DBG] FALLBACK_TO_GLOBAL VarName={VarName} AttrName={AttrName} gv_type={gv.type}\n") - except Exception: - pass if AttrName in Gen.variables and Gen.variables[AttrName] is None: str_gv_name: str = AttrName + '_str' if str_gv_name in Gen.module.globals: @@ -899,20 +853,6 @@ class ExprAttrHandle(BaseHandle): def _HandleAttributeLlvm(self, Node: ast.Attribute) -> ir.Value | None: Gen: LlvmCodeGenerator = self.Trans.LlvmGen - # [ATTR-DBG] 入口诊断:标记 CONST_* 属性访问的派发路径 - if Node.attr in ('CONST_INT', 'CONST_FLOAT', 'CONST_STR', 'CONST_BOOL', 'CONST_NONE'): - _val_kind: str = type(Node.value).__name__ - _val_id: str = '' - if isinstance(Node.value, ast.Name): - _val_id = Node.value.id - elif isinstance(Node.value, ast.Attribute): - _val_id = f"" - try: - with open('d:/Users/TermiNexus/Desktop/TransPyC/_attr_debug.log', 'a', encoding='utf-8') as _f: - _f.write(f"[ATTR-DBG] dispatch Node.attr={Node.attr} value_kind={_val_kind} value_id={_val_id}\n") - except Exception: - pass - if isinstance(Node.value, ast.Name): VarName: str = Node.value.id # 处理 t/c import 的别名重定向 @@ -921,12 +861,6 @@ class ExprAttrHandle(BaseHandle): src_module: str src_name: str src_module, src_name = t_c_imported[VarName] - if Node.attr in ('CONST_INT', 'CONST_FLOAT', 'CONST_STR', 'CONST_BOOL', 'CONST_NONE'): - try: - with open('d:/Users/TermiNexus/Desktop/TransPyC/_attr_debug.log', 'a', encoding='utf-8') as _f: - _f.write(f"[ATTR-DBG] REDIRECT VarName={VarName} -> src_module={src_module} src_name={src_name}\n") - except Exception: - pass virtual_attr: ast.Attribute = ast.Attribute( value=ast.Name(id=src_module, ctx=ast.Load()), attr=src_name, ctx=ast.Load() diff --git a/lib/core/Handles/HandlesFunctions.py b/lib/core/Handles/HandlesFunctions.py index cc70ee6..b8cb184 100644 --- a/lib/core/Handles/HandlesFunctions.py +++ b/lib/core/Handles/HandlesFunctions.py @@ -1726,14 +1726,16 @@ class FunctionHandle(BaseHandle): triple = getattr(Gen, 'module_triple', '') or getattr(Gen.module, 'triple', '') is_windows = 'windows' in triple if triple else False ptr_size = getattr(Gen, 'ptr_size', 8) - # va_list 大小取决于 ABI:Windows x64 = 1个指针,Linux x64 = __va_list_tag[1](24字节) - # 32位平台:Windows = 4字节指针,Linux = 12字节 + # va_list 大小取决于 ABI:Windows x64 = __va_list_tag(24字节),Linux x64 = __va_list_tag[1](24字节) + # 注意:x86_64-pc-windows-gnu 的 llvm.va_start 写的是 24 字节的 struct __va_list_tag + # ({i32 gp_offset, i32 fp_offset, i8* overflow_arg_area, i8* reg_save_area}), + # 若只分配 8 字节会向调用者栈帧越界写 16 字节,导致随机栈破坏(历史崩溃根因)。 if ptr_size == 4: va_list_size = 4 if is_windows else 12 va_list_align = 4 else: - va_list_size = 8 if is_windows else 24 - va_list_align = 8 if is_windows else 16 + va_list_size = 24 + va_list_align = 16 va_list_type = ir.ArrayType(ir.IntType(8), va_list_size) va_list_alloc = Gen._allocaEntry(va_list_type, name=f"{vararg_name}_va_list", align=va_list_align) va_list_ptr = Gen.builder.bitcast(va_list_alloc, ir.IntType(8).as_pointer(), name=f"{vararg_name}_va_list_i8ptr") diff --git a/lib/core/LLVMCG/ExprGen.py b/lib/core/LLVMCG/ExprGen.py index e8eb6a1..4a7ca98 100644 --- a/lib/core/LLVMCG/ExprGen.py +++ b/lib/core/LLVMCG/ExprGen.py @@ -155,6 +155,24 @@ class ExprGenMixin: '|': self.builder.or_, '^': self.builder.xor, } + # 整数操作数宽度对齐:两个操作数都是整数但位宽不同时, + # 统一扩展到较大位宽(低位宽操作数 zext/sext)。 + # 触发场景:`_g_alloc_count: t.CSizeT = 0`(i64 全局)在函数内 + # `_g_alloc_count += 1`,RHS 整数字面量是 i32,不扩展会报 + # "Operands must be the same type, got (i64, i32)"。 + if (op in ops or op in shift_ops or op in bit_ops or op in cmp_ops): + if (isinstance(left.type, ir.IntType) and isinstance(right.type, ir.IntType) + and left.type != right.type and left.type.width != 1 and right.type.width != 1): + if left.type.width > right.type.width: + if is_unsigned: + right = self.builder.zext(right, left.type, name="zext_rhs_op") + else: + right = self.builder.sext(right, left.type, name="sext_rhs_op") + elif right.type.width > left.type.width: + if is_unsigned: + left = self.builder.zext(left, right.type, name="zext_lhs_op") + else: + left = self.builder.sext(left, right.type, name="sext_lhs_op") if op == '**' or op == 'Pow': if isinstance(left, ir.Constant) and isinstance(right, ir.Constant): try: diff --git a/run_err.txt b/run_err.txt deleted file mode 100644 index e69de29..0000000 diff --git a/run_out.txt b/run_out.txt deleted file mode 100644 index 77651ec..0000000 --- a/run_out.txt +++ /dev/null @@ -1,478 +0,0 @@ -===== TransPyV Test Suite ===== - -asm: nop ok -asm: nop2 ok -asm: multi-clobber ok -asm: input ok val=42 -asm: output result=123 -asm: in+out result2=11 (expect 11) -=== attr_test: c.Attribute 装饰器测试 === - ---- Test 1: c.Attribute(always_inline) --- -AlwaysInlineFunc(21)=42 (expect 42) -AlwaysInlineFunc OK ---- Test 2: c.Attribute(noinline) --- -NoInlineFunc(5)=105 (expect 105) -NoInlineFunc OK ---- Test 3: c.Attribute(noreturn) --- -NoReturnFunc declared with noreturn attr -NoReturnFunc OK (not called to avoid UB) ---- Test 4: normal function (no attr) --- -NormalFunc(7)=21 (expect 21) -NormalFunc OK ---- Test 5: c.Attribute(always_inline, pure) --- -MultiAttrFunc(10)=11 (expect 11) -MultiAttrFunc OK ---- Test 6: c.Attribute(packed) --- -PackedAttrFunc(10)=9 (expect 9) -PackedAttrFunc OK ---- Test 7: c.Attribute(llvm.nounwind) --- -NoUnwindFunc(10)=11 (expect 11) -NoUnwindFunc OK ---- Test 8: c.Attribute(llvm.noredzone) --- -NoRedZoneFunc(10)=12 (expect 12) -NoRedZoneFunc OK ---- Test 9: c.Attribute(llvm.willreturn) --- -WillReturnFunc(10)=13 (expect 13) -WillReturnFunc OK ---- Test 10: c.Attribute(llvm.mustprogress) --- -MustProgressFunc(10)=14 (expect 14) -MustProgressFunc OK ---- Test 11: c.Attribute(const) --- -ConstFunc(99)=42 (expect 42) -ConstFunc OK ---- Test 12: c.Attribute(always_inline, nounwind, noredzone) --- -TripleAttrFunc(10)=15 (expect 15) -TripleAttrFunc OK - -=== attr_test 完成 === -local +=: 15 -local -=: 12 -local *=: 24 -local /=: 6 -local %=: 6 -global +=: 1 -global +=: 11 -global -=: 8 -bit &=: 15 -bit |=: 63 -bit ^=: 192 -bit <<=: 16 -bit >>=: 4 -global: 9 -global: 10 -global: 11 -closure: 1 -closure: 1 -closure: 1 -=== deco_test: t/c 装饰器测试 === - ---- Test 1: t.CDefine --- -MAX_VALUE=256 (expect 256) -PI_APPROX=314 (expect 314) -MAX_VALUE OK -PI_APPROX OK ---- Test 2: t.CExport --- -ExportedAdd(3,4)=7 (expect 7) -ExportedAdd OK ---- Test 3: t.CInline --- -InlineSquare(5)=25 (expect 25) -InlineSquare OK ---- Test 4: normal function --- -NormalSub(10,3)=7 (expect 7) -NormalSub OK ---- Test 5: t.CExport | t.CInline --- -ExportedInlineCube(3)=27 (expect 27) -ExportedInlineCube OK ---- Test 6: t.CExport return ptr --- -ExportedFindChar found, char=108 (expect 108) -ExportedFindChar OK ---- Test 7: t.CExtern | t.CExport --- -ExternalDecl declared (not called) -ExternalDecl OK ---- Test 8: t.State --- -StateDecl declared (not called) -StateDecl OK ---- Test 9: t.State (void) --- -StateVoidDecl declared (not called) -StateVoidDecl OK ---- Test 10: t.CArray[elem, CDefine] --- -ARR_SIZE=8 (expect 8) -arr sum=280 (expect 280) -arr[0]=0 (expect 0) -arr[7]=70 (expect 70) -CArray CDefine count OK - -=== deco_test 完成 === -deref: 104 -ptr: len(hello)=5 -=== eq_test: ==、!=、is、None 比较测试 === - ---- Test 1: int == / != --- -int == int (same) OK -int != int (diff) OK -not (int == diff) OK ---- Test 2: int < > <= >= --- -int < OK -int > OK -int <= OK -int >= OK ---- Test 3: ptr is None / is not None --- -strchr found, is not None OK -strchr not found, is None OK ---- Test 4: assign None and compare --- -None assign, is None OK -None assign, is not None OK ---- Test 5: ptr == None / != None --- -strstr found, != None OK -strstr not found, == None OK ---- Test 6: bool and/or --- -1 and 0 = false OK -1 or 0 = true OK -not 0 = true OK - -=== eq_test 完成 === -float: f=3.140000 -double: d=3.141593 -float: f=2.500000 -union: u.f=3.140000 -union: u.i=42 (after f overwritten) -union: float overwrites int verified -arith: 1.50 + 2.50 = 4.00 -arith: 1.50 - 2.50 = -1.00 -arith: 1.50 * 2.50 = 3.75 -arith: 1.50 / 2.50 = 0.60 -arith: 10.0000 + 3.0000 = 13.0000 -arith: 10.0000 - 3.0000 = 7.0000 -arith: 10.0000 * 3.0000 = 30.0000 -arith: 10.0000 / 3.0000 = 3.3333 -arith: 10.0 % 3.0 = 1.0000 -arith: 3 + 1.50 = 4.50 -while: total=10 i=5 -break: k=0 -break: k=1 -break: k=2 -continue: m=0 -continue: m=1 -continue: m=3 -continue: m=4 -for: j=0 -for: j=1 -for: j=2 -for: j=3 -for: j=4 -add(3,4)=7 -mul(5,6)=30 -square(7)=49 -factorial(5)=120 -add(b=4,a=3)=7 -sub(b=3,a=10)=7 -Hello, World! -Hello, World! -greet mixed: returned=2 -Hi, TransPyC! -greet kwargs: returned=1 -=== llvmir_test: c.LLVMIR 内联 LLVM IR 测试 === - ---- Test 1: LLVMIR add --- -add(10, 20)=30 (expect 30) -LLVMIR add OK ---- Test 2: LLVMIR sub --- -sub(50, 20)=30 (expect 30) -LLVMIR sub OK ---- Test 3: LLVMIR mul --- -mul(6, 7)=42 (expect 42) -LLVMIR mul OK ---- Test 4: LLVMIR sdiv --- -sdiv(100, 4)=25 (expect 25) -LLVMIR sdiv OK ---- Test 5: LLVMIR and --- -and(255, 15)=15 (expect 15) -LLVMIR and OK ---- Test 6: LLVMIR or --- -or(240, 15)=255 (expect 255) -LLVMIR or OK ---- Test 7: LLVMIR xor --- -xor(255, 15)=240 (expect 240) -LLVMIR xor OK ---- Test 8: LLVMIR shl --- -shl(1, 4)=16 (expect 16) -LLVMIR shl OK ---- Test 9: LLVMIR LOut --- -LOut add(10, 20)=30 (expect 30) -LLVMIR LOut OK ---- Test 10: LLVMIR icmp eq --- -icmp eq(5, 5)=-1 (expect nonzero) -LLVMIR icmp eq OK ---- Test 11: LLVMIR icmp ne --- -icmp ne(5, 3)=-1 (expect nonzero) -LLVMIR icmp ne OK ---- Test 12: LLVMIR icmp slt --- -icmp slt(3, 5)=-1 (expect nonzero) -LLVMIR icmp slt OK ---- Test 13: LLVMIR srem --- -srem(17, 5)=2 (expect 2) -LLVMIR srem OK ---- Test 14: LLVMIR lshr --- -lshr(256, 2)=64 (expect 64) -LLVMIR lshr OK ---- Test 15: LLVMIR nested in expression --- -(LLVMIR add(10,20)) + 10 = 40 (expect 40) -LLVMIR nested OK - -=== llvmir_test 完成 === -oop: === Test 1: Basic Methods === -oop: p.x=10 p.y=20 -oop: after move p.x=100 p.y=200 -oop: === Test 2: Defaults + Methods === -oop: initial count=0 step=1 -oop: after 3 increments: 1 2 3 -oop: after reset+increment: 1 -oop: === Test 3: __init__ === -oop: rect 3x4 area=12 -oop: === All OOP Tests Passed === -ptr: len(hello)=5 -ptr: after DerefAs x=88 -ptr: sum(A,B,C)=198 -if: x is truthy -if: 1==1 is truthy -while: total=10 i=5 -for: j=0 -for: j=1 -for: j=2 -for: j=3 -for: j=4 -break: k=0 -break: k=1 -break: k=2 -continue: m=0 -continue: m=1 -continue: m=3 -continue: m=4 -bool: x>5 and x<100 is true -bool: x>100 or x>5 is true -ptr: len(hello)=5 -ptr: after DerefAs v=88 -ptr: sum(A,B,C)=198 -ptr: c.Load v2=42 (expected 42) -ptr: c.Load overwrite v3=200 (expected 200) -ptr: c.Load src unchanged v5=999 v6=999 (expected 999, 999) -hello -strlen(Hello)=5 -=== string_test: string.py 库函数测试 === - ---- Test 1: strlen --- -strlen(Hello)=5 (expect 5) -strlen()=0 (expect 0) -strlen(Hello, World!)=13 (expect 13) ---- Test 2: strcmp --- -strcmp(abc,abc)=0 (expect 0) -strcmp(abc,abd)=-1 (expect <0) -strcmp(abd,abc)=1 (expect >0) ---- Test 3: strncmp --- -strncmp(abcdef,abcXYZ,3)=0 (expect 0) -strncmp(abcdef,abcXYZ,4)=12 (expect <0) ---- Test 4: atoi --- -atoi(123)=123 (expect 123) -atoi(-456)=-456 (expect -456) -atoi( 789)=789 (expect 789) ---- Test 5: strchr --- -strchr(Hello,'l') found, char=108 (expect 108) -strchr(Hello,'z') not found OK ---- Test 6: strstr --- -strstr(Hello,World) found OK -strstr(Hello,xyz) not found OK - -=== string_test 完成 === -struct: p.x=10 p.y=20 -struct: modified p.x=100 p.y=200 -struct: sum=300 -struct: volume=60 -array: total=1500 -array: arr[2]=999 -ptr: len(hello)=5 -ptr: sum(A,B,C)=198 -ctor: z.x=0 z.y=0 -ctor: p3.x=7 p3.y=8 -ctor: bx.w=10 bx.h=20 bx.d=30 -kw: p4.x=10 p4.y=20 -kw: p5.x=5 p5.y=15 -kw: bx2.w=10 bx2.h=20 bx2.d=30 -def: sz.w=100 sz.h=200 -def: sz2.w=5 sz2.h=6 -def: sz3.w=888 sz3.h=999 -def: sz4.w=7 sz4.h=200 -enum: Idle=0 Run=1 Stop=2 -enum: Red=10 Green=11 Blue=20 Yellow=21 -enum: Small=0 Big=1 Medium=2 -enum: sum(Idle,Run,Stop)=3 -enum: Idle==0 true -enum: Red==10 true -enum: Run!=Stop true -union: u.i=42 -union: u.l=20015998343868 -union: shared memory verified -type: CInt=100 CInt32T=200 CUInt32T=300 -type: CLong=1000 CLongLong=2000 CInt64T=3000 CSizeT=4000 -bit: 240&15=0 -bit: 240|15=255 -bit: 240^15=255 -bit: 240<<2=960 -bit: 240>>2=60 -bit: 17%5=2 -vtable: === Test Start === -vtable: a.GetName()=42 (expected 42) -vtable: a.Speak()=0 (expected 0) -vtable: s.SetSides(4)=0 (expected 0) -vtable: s.GetSides()=4 (expected 4) -vtable: === All Tests Passed === -inherit: === Test 1: Base Class === -inherit: a.GetName()=42 (expected 42) -inherit: a.Speak()=0 (expected 0) -inherit: === Test 2: Dog (override Speak) === -inherit: d.GetName()=100 (expected 100) -inherit: d.Speak()=1 (expected 1) -inherit: d.GetBreed()=7 (expected 7) -inherit: === Test 3: Cat (inherit Speak) === -inherit: ct.GetName()=200 (expected 200) -inherit: ct.Speak()=0 (expected 0) -inherit: ct.GetColor()=3 (expected 3) -inherit: === All Tests Passed === -funcvt: === Test Start === -funcvt: A.VirtualMethod()=15 (expected 15) -funcvt: A.NormalMethod()=25 (expected 25) -funcvt: B.KeptMethod()=37 (expected 37) -funcvt: B.ExcludedMethod()=47 (expected 47) -funcvt: C.VirtualMethod()=59 (expected 59) -funcvt: C.NormalMethod()=69 (expected 69) -funcvt: === All Tests Passed === -vdispatch: === Test Start === -vdispatch: === Test 1: Direct Dispatch === -vdispatch: a.Speak()=0 (expected 0) -vdispatch: d.Speak()=1 (expected 1) -vdispatch: === Test 2: Virtual Dispatch === -vdispatch: a.Speak()=1 (expected 1 after vtable copy) -vdispatch: === Test 3: GetName After VTable Copy === -vdispatch: a.GetName()=42 (expected 42) -vdispatch: === All Tests Passed === -new: === Test Start === -new: === Test 1: __new__ returns self === -new: WithNew.__new__ called -new: WithNew.__init__ called -new: w.GetValue()=42 (expected 42) -new: === Test 2: __new__ no extra args === -new: WithNewNoArgs.__new__ called -new: n.GetValue()=99 (expected 99) -new: === Test 3: __new__ + vtable === -new: WithNewVTable.__new__ called -new: vt.GetValue()=10 (expected 10) -new: vt.Speak()=11 (expected 11) -new: === All Tests Passed === -nsisol: === Test Start === -nsisol: === Test 1: from-import bare constructor === -nsisol: w.GetId()=42 (expected 42) -nsisol: w.Render()=100 (expected 100) -nsisol: g.Render()=200 (expected 200) -nsisol: g.GetExtra()=9 (expected 9) -nsisol: === Test 2: module-qualified constructor === -nsisol: ps.Sum()=30 (expected 30) -nsisol: ps2.Sum()=11 (expected 11) -nsisol: === Test 3: type annotation with imported class === -nsisol: annot_w.GetId()=99 (expected 99) -nsisol: === Test 4: cross-module inheritance vtable === -nsisol: base.Render()=100 (expected 100) -nsisol: derived.Render()=200 (expected 200) -nsisol: derived.GetId()=2 (expected 2) -nsisol: === All Tests Passed === -=== testcheck_test === - ---- Arithmetic --- -PASS: 3+4=7 -PASS: 10-3=7 -PASS: 6*7=42 ---- String --- -PASS: strlen(hello)=5 -PASS: strcmp(abc,abc)=0 ---- Module Import --- -testcheck module imported and called successfully -PASS: import testcheck works - ---- Summary --- -PASS: 6, FAIL: 0 -=== Operator Overload Tests === - ---- Counter __add__ --- -PASS: cnt(10)+5=15 ---- Counter __sub__/__mul__/__div__/__mod__ --- -PASS: cnt-3=7 -PASS: cnt*3=30 -PASS: cnt/3=3 -PASS: cnt%3=1 ---- Counter compare overloads --- -PASS: cnt==10:1 -PASS: cnt!=10:0 -PASS: cnt<20:1 -PASS: cnt<=10:1 -PASS: cnt>5:1 -PASS: cnt>=10:1 ---- BitBox bitwise overloads --- -PASS: bb&0x0F=15 -PASS: bb|0x100=511 -PASS: bb^0x55=170 -PASS: bb<<4=4080 -PASS: bb>>4=15 ---- Native int binop --- -PASS: 7+8=15 -PASS: 10-3=7 -PASS: 4*5=20 ---- Native int compare --- -PASS: 3<5 -PASS: 10==10 ---- Vec2 struct overloads --- -PASS: a+b x=4 -PASS: a+b y=6 -PASS: a-b x=2 -PASS: a-b y=2 ---- Vec2 compare overloads --- -PASS: (5,5)==(5,5):1 -PASS: (5,5)!=(5,5):0 - ---- Summary --- -PASS: 27, FAIL: 0 -circ: === Test Start === -circ: === Test 1: A.MakeB() === -circ: a.GetValue()=10 (expected 10) -circ: b.GetValue()=10 (expected 10) -circ: === Test 2: B.MakeA() === -circ: a2.GetValue()=10 (expected 10) -circ: === Test 3: value chain A(20)->B->A === -circ: final=20 (expected 20) -circ: === All Tests Passed === -=== nested_match_test: 嵌套 match REnum 检测测试 === - -[DBG] _init_mbuddy: start -[DBG] _init_mbuddy: malloc arena=0 -[DBG] _init_mbuddy: malloc mb=0 -[DBG] _init_mbuddy: before_init -[DBG] _init_mbuddy: init -[DBG] _init_mbuddy: store -[DBG] _init_mbuddy: done ---- Test 1: 单层 match LLVMType --- -[DBG] Int32 done: 0 -Int(-693633024) OK -bits==-693633024 FAIL ---- Test 2: 嵌套 match(case 块内 match 另一值)--- -outer Int(-688782832), inner Int(0) OK -values FAIL ---- Test 3: 嵌套 match pointee --- ---- Test 4: 3 层嵌套 match --- ---- Test 5: if 块内嵌套 match --- -Float(-688782320) + Double(0) OK -float values FAIL ---- Test 6: 嵌套 match 不同变体(default 分支)--- -outer Int(-688782192), inner Float(0) OK -mismatch values FAIL - -=== nested_match_test: SOME FAIL === - -===== Test Suite Complete ===== diff --git a/run_output.txt b/run_output.txt deleted file mode 100644 index b898f7f..0000000 --- a/run_output.txt +++ /dev/null @@ -1 +0,0 @@ -===== Test Suite Complete =====