From c8efbd7de8baa190e1f50ed5c2a886427abbd253 Mon Sep 17 00:00:00 2001 From: FIRST_NAME LAST_NAME Date: Sun, 9 Jul 2023 12:40:26 -0500 Subject: [PATCH] 1.6.6.3 --- README.md | 10 + setup.cfg | 8 +- src/{ => compiler}/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 212 bytes .../__pycache__/binopdesc.cpython-311.pyc | Bin 0 -> 1451 bytes .../__pycache__/boolopdesc.cpython-311.pyc | Bin 0 -> 729 bytes .../__pycache__/cmpopdesc.cpython-311.pyc | Bin 0 -> 853 bytes .../__pycache__/colortext.cpython-311.pyc | Bin 0 -> 1810 bytes .../__pycache__/config.cpython-311.pyc | Bin 0 -> 1866 bytes .../__pycache__/context.cpython-311.pyc | Bin 0 -> 2036 bytes .../__pycache__/cpAST.cpython-311.pyc | Bin 0 -> 1182 bytes .../__pycache__/ctranslator.cpython-311.pyc | Bin 0 -> 1142 bytes .../__pycache__/header.cpython-311.pyc | Bin 0 -> 862 bytes .../__pycache__/loopcounter.cpython-311.pyc | Bin 0 -> 889 bytes .../__pycache__/luainit.cpython-311.pyc | Bin 0 -> 21375 bytes .../__pycache__/nameconstdesc.cpython-311.pyc | Bin 0 -> 527 bytes .../__pycache__/nodevisitor.cpython-311.pyc | Bin 0 -> 48485 bytes .../__pycache__/pytranslator.cpython-311.pyc | Bin 0 -> 3710 bytes .../__pycache__/symbolsstack.cpython-311.pyc | Bin 0 -> 1649 bytes .../__pycache__/tokenendmode.cpython-311.pyc | Bin 0 -> 591 bytes .../__pycache__/unaryopdesc.cpython-311.pyc | Bin 0 -> 833 bytes src/{ => compiler}/binopdesc.py | 0 src/{ => compiler}/boolopdesc.py | 0 src/{ => compiler}/cmpopdesc.py | 0 src/{ => compiler}/colortext.py | 0 src/{ => compiler}/config.py | 0 src/{ => compiler}/context.py | 0 src/{ => compiler}/cpAST.py | 0 src/{ => compiler}/ctranslator.py | 0 src/compiler/header.py | 18 ++ src/{ => compiler}/loopcounter.py | 0 src/{ => compiler}/luainit.py | 266 ++++++------------ src/{ => compiler}/nameconstdesc.py | 0 src/{ => compiler}/nodevisitor.py | 0 src/{ => compiler}/pytranslator.py | 23 +- src/{ => compiler}/symbolsstack.py | 0 src/{ => compiler}/tokenendmode.py | 0 src/{ => compiler}/unaryopdesc.py | 0 src/header.py | 8 - src/robloxpy.py | 26 +- test/python/ann.lua | 7 +- test/python/asyncdef.lua | 10 +- test/python/asyncdef.py | 3 +- test/python/asyncwith.lua | 11 +- test/python/bytes.lua | 7 +- test/python/class.lua | 10 +- test/python/continue.lua | 9 +- test/python/dict.lua | 10 +- test/python/helloworld.lua | 9 +- test/python/import.lua | 6 +- test/python/in.lua | 11 +- test/python/lambda.lua | 7 +- test/python/list.lua | 8 +- test/python/luaxpy.lua | 9 +- test/python/match.lua | 10 +- test/python/matrix.lua | 10 +- test/python/memoryaddress.lua | 10 +- test/python/multiassign.lua | 7 +- test/python/slice.lua | 9 +- test/python/staticmethod.lua | 12 +- test/python/string.lua | 9 +- test/python/try.lua | 9 +- test/python/typehints.lua | 10 +- test/python/with.lua | 10 +- test/python/xl.lua | 21 +- 65 files changed, 320 insertions(+), 273 deletions(-) rename src/{ => compiler}/__init__.py (100%) create mode 100644 src/compiler/__pycache__/__init__.cpython-311.pyc create mode 100644 src/compiler/__pycache__/binopdesc.cpython-311.pyc create mode 100644 src/compiler/__pycache__/boolopdesc.cpython-311.pyc create mode 100644 src/compiler/__pycache__/cmpopdesc.cpython-311.pyc create mode 100644 src/compiler/__pycache__/colortext.cpython-311.pyc create mode 100644 src/compiler/__pycache__/config.cpython-311.pyc create mode 100644 src/compiler/__pycache__/context.cpython-311.pyc create mode 100644 src/compiler/__pycache__/cpAST.cpython-311.pyc create mode 100644 src/compiler/__pycache__/ctranslator.cpython-311.pyc create mode 100644 src/compiler/__pycache__/header.cpython-311.pyc create mode 100644 src/compiler/__pycache__/loopcounter.cpython-311.pyc create mode 100644 src/compiler/__pycache__/luainit.cpython-311.pyc create mode 100644 src/compiler/__pycache__/nameconstdesc.cpython-311.pyc create mode 100644 src/compiler/__pycache__/nodevisitor.cpython-311.pyc create mode 100644 src/compiler/__pycache__/pytranslator.cpython-311.pyc create mode 100644 src/compiler/__pycache__/symbolsstack.cpython-311.pyc create mode 100644 src/compiler/__pycache__/tokenendmode.cpython-311.pyc create mode 100644 src/compiler/__pycache__/unaryopdesc.cpython-311.pyc rename src/{ => compiler}/binopdesc.py (100%) rename src/{ => compiler}/boolopdesc.py (100%) rename src/{ => compiler}/cmpopdesc.py (100%) rename src/{ => compiler}/colortext.py (100%) rename src/{ => compiler}/config.py (100%) rename src/{ => compiler}/context.py (100%) rename src/{ => compiler}/cpAST.py (100%) rename src/{ => compiler}/ctranslator.py (100%) create mode 100644 src/compiler/header.py rename src/{ => compiler}/loopcounter.py (100%) rename src/{ => compiler}/luainit.py (82%) rename src/{ => compiler}/nameconstdesc.py (100%) rename src/{ => compiler}/nodevisitor.py (100%) rename src/{ => compiler}/pytranslator.py (72%) rename src/{ => compiler}/symbolsstack.py (100%) rename src/{ => compiler}/tokenendmode.py (100%) rename src/{ => compiler}/unaryopdesc.py (100%) delete mode 100644 src/header.py diff --git a/README.md b/README.md index 91cc72d..5bdedd6 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,16 @@ Python, C, C++ Compiler for Roblox. Python 3.13 (dev), C23, C++20 -> Lua(u) +## Changelog: +- Added C, C++ AST (abstract syntax tree), use the cli and it will output AST +- Added automatic variable checking, check which builtin variables are needed +- Added automatic function checking, check which builtin functions are needed +- Reorganized code +- Added more tests +- Cleaned up code +- Did this changelog + + ## Why did the name get changed to roblox.pyc? 2 reasons: - It's a python compiler, so it should be named .py**c** diff --git a/setup.cfg b/setup.cfg index fc50fbf..159a6db 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = roblox-pyc -version = 1.5.6.3 +version = 1.6.6.3 [options] packages = src @@ -8,6 +8,6 @@ packages = src [options.entry_points] console_scripts = - roblox-py = src.robloxpy:typerapp - roblox-c = src.robloxpy:typerapp2 - roblox-cpp = src.robloxpy:typerapp3 + roblox-py = src.robloxpy:w + roblox-c = src.robloxpy:cw + roblox-cpp = src.robloxpy:cpw diff --git a/src/__init__.py b/src/compiler/__init__.py similarity index 100% rename from src/__init__.py rename to src/compiler/__init__.py diff --git a/src/compiler/__pycache__/__init__.cpython-311.pyc b/src/compiler/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7e18f33285f3c536b724c8579d6ddcaf6ad73352 GIT binary patch literal 212 zcmZ3^%ge<81k%kbQq+L-V-N=h7@>^MASKfoQW&BbQW%37G?}X811d{0^79l*@)dGQ z6BSB|67!045=-)n6ms)ZN^?^EG#PKP$H%ASC&$OHWcUm+=a-d!XmM&$v3_D=QDRxK zzDsIxc1eDLeo=l>PJV@6L8Y#tesNKBk$!x9W?p7Vd^}L<7l#eRT)QGR bpiv-q6$=8156p~=j5iomFThX{3s4jQR_r^Rge$9n${fQW5xB3e$-Ra}L&4G~5m-22a=;=13k571FePAaPB_P59P#4~1%6>1^;tY%3Xb_K5wI{G z^4V}7i~B6u#}Ymp>0`q_8|`CB&dhjm439vDM_J0taG{srHJ)Eyh_3K3E3(j$ZZ!<1 zR0yr=PFI*?!h^1$GSp1N{BXWfCHTHqfJeQoXPdWNTb&$VHO+dNX)LB`@b3+a z>v2tc+t4lF64o?K%77)^c9@jIm?gEf^^M%Y*1on;*v;qmnY7m^F*)C`z+ufiVp5)9 zChd@87TMsr;Y``u<3G=oU2hDnnofZ-1%_M=yWMA8Ai=52YPv;g@o0iowsn$))plZpikve}^V59sYxPsqwdjZ}` zE9h-`_ClWRC@32L5N?m(Y){o=hz)r0UmSO1 zuK=Fpu|c@8V{VWqfX6uoaUG5ZTi)Q_Ao{$Q2M6iLFNMWXrM1aBo$jSDD^va+DSv=8 z)uS}SHP>kdv~J{?cac`;U6?|`k(~$8kpw|#qnQgd(?+qD+adKSwUz8Bj|HWJu8QBB K{TX0zxBClV(SXwc literal 0 HcmV?d00001 diff --git a/src/compiler/__pycache__/boolopdesc.cpython-311.pyc b/src/compiler/__pycache__/boolopdesc.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fce560f6d9de4aa13f52c1474dc7f4886d9fe935 GIT binary patch literal 729 zcmZuvzi-n(6n;KCjuR3^{ShPzNRcWkWdN7Gs+6iNibNAs(#6Z^n!8ei<8#kWMN<_; zf|0!oGe5*X)6u$>iOncXow!S!Ec8A3^Y^~@bpHJ8Z`EoUR6P9noqjL?e(7Q!R!%0H zid+K)52!&=V0Z>KJ%r!|Q0o)W!dC?FQ(d$0Op0DZ(;hwE;XGg@Z19K)lK4DqP!{)v zA8GzuPj^OZmjOFTt{Rt%A;pFN<}|tL=Lb%2c3w=j6}bim$^>|b8lK6lw}tsAMa-t= z7o@b}LbGO?k35GKv^BY!TkFo9?J8rVM>~E<#KqlyrAb2CM6z&Bf+3Uk2^RyBNW?{_ zS&|OMAsH}?Wf|iEr^7(=3dUzc66BpC#+3J!Y?3&UW-Fw!hIjY&TSqT@c)xpi(CSIl z6|&TQwRhO+wY!}kFwrk@yX79mOvElBf}F>$GW#y!kt_Idz~4WME}lMjW6^i}d=U8o z6YjBEJdgCURa5BiI0Z+MxUFEk$kf`nu{JUrN|n#Ww7!6X49cn#crLg*>1K)U6tyGgZMx}W*UZ(!uk!Y dr%)bGQ+Zl($F) zF4Ein13&Oz_zQY0xq9*zsi&TNCryK3=Oyp^JkLAB@XVVpm5PpFUHkBr{=f+R6lA^R z3@mm4oFR%#L@^~pY+{1Ch)N$3l|K`NzQea#CZXghY7~|?9c`wWcp08FqWYMH*$Zvn(QllKRm&RNBiFKG-LgiE z9t{O9Th`%`J=^GoA-74-DJp_M5-}m#;(S8=SouvbVSWcem~s0e1`shU*PoZa5>K`C_op z<6=l@5+Lv(P4bw_+cSAPQIJ+XRi^S>EuCu9T~U;&Bua5w+rZ}K+U(+PB9W@TI;*A1 zT~KOza-mXHCOr}S^7`(E#KjnSWi9Ya0;T;cfR<`=^@eSJ6)61kD0l=Zkub({v^7Ip YbEHqwNR;zfNzni4x6uAWb;vL<%rya+z?le4r`KG(j&x~b?vz{wWln5>GoWHU@+}aBW>8(xfzR4AmEHS zf;C^H#H8$=*nVnV04wOHdbZS6q8meHHTgqL?n%iS=;-vvNq`qBF;D=4{nH3=U!JCf z<*~PAPR8$sC~>;fwC#rN%?ODA+W&|{!0C-hLDUjscH=rZ_; z1o~aG%@Yd{^}jxVH=zo5k2?cfH&uon;ylU_I)gUmBVU@bEwdmDX8g!}&Lq^D$&rF^ zFXM+OS%7{3lVMmh?3_V#i-75aOhJfG_&8gT;uCkWDeQ}mOH(rCS;+H03;}$Z_ZJ^K z4$~5B@FJz$gaIp4=L5hBszlpYMk`up6@}#(ha#@1(UP*3DP}6sbEW62Pm7~PFljH{ z{I2!xX}xu7YHhMOS*O)o{;8-PrTeRoK6h@6e~f*KmDT<)Ps-}`Evc;D+Im@5hxVi) z-Y>>dVcySpE8&IB3yo(z&qAIQ{3zRp9fqInAp9_EoAVZVOmD!s*c&+C0IDL!xN@PV riZJf4gZ-X(ox-R4v5O7mZn&NXPU5`{n0wPcE literal 0 HcmV?d00001 diff --git a/src/compiler/__pycache__/config.cpython-311.pyc b/src/compiler/__pycache__/config.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..61e7e76e08ad41ad292e01369be5a4fa31f1f714 GIT binary patch literal 1866 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 I%O)-J7hbINm;e9( literal 0 HcmV?d00001 diff --git a/src/compiler/__pycache__/header.cpython-311.pyc b/src/compiler/__pycache__/header.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..caf73c652008275e422778cc38253653f5c660cb GIT binary patch literal 862 zcma)4F>ljA6uxtuD6yN8LRE>0Qw1SLI0q5~17(0LRZs@nE`<(P`x>k|wmF{>4T%(_ z3>g?;qGKm0@Mj1@BC^DQ5G#t5Efdd4S}GXYPk!IM_x$|s`MZ0c&ua)!`2ErTff4$d z1V?~)f>8mMx5!4D$i`i?iEU*K87X!N3N+KCl-&0lf#Y(UM4{u=iSV~w|G63LS>&;4 zYPnqUm}daFx3T(QovhZ#DaD%WTg)ZF-gUAaIj(d(vO*#+VAgI)@TZX@c&W}By!?;{ zu46ID?KSBOR_BkFr_+^Ty5%jS6k5UwqyeF!X)oGm8uOIl{=U|%BMlQFRj?G;s0##o z;x=xf3fj8RR$8EGOKC#hP9;3^)x>Y+5o+UCi}FOT7JdiOr{fGpQi0ML4o>(-Iq3P% zH*kjOT8x^Rsg_M0B%Fy^9%Ic&#pyseo{Z<8aAtEMc_VN^$vCs)iw2WWklTqoOFF(6 z#;WDpJjPC#{2?J^e4B2BT!fS{!JdV*!oywZ2lQBd^Ck_2MXl-85p=o7o8j|_Vwadz4%!zj-W598H&ijI@#_65}-B`I?yHV%6o39m;x-9}D(XNPEHz6isKrE(C`&;dC_yT8v5-!#@1QA;ot_;Of{-%g ze<&jhL6CnYMUjX+Au)AJ6<9j)&W@Av@vQsZyZ7~b_s*Y+#brQwT>3(=wCDO9#pmZ3@y`sf>o=vb^QRgo`dfz^67|-x9=(n7yU-L?I-)SXAk$HEKajwho508_%F81 z{ebbnv~6y`4$KEEcoq6hllup*-`;G#xpmtNxMMngqgi(uH^m#w-UYpp_L7A}wA3kG zn&M_^%^^i#B6Q(b7M4mwZEd8jy+1zHj6@ylH@@lXU-k8mk4EJ?r+RgySBF}ai~p%s z$we9=;$DPA%Y-z1+H!?nAmq4ZyE9LY5b8UGaKRQ8g3u1@PJ@MqKIH{8@g)JGBF_sD z^N2wxK^37p|HkU-P+c8g(Yrg}GuI}vlDRtpgmVS5E4}9nLu^foiZZo|%&(?(|02B5 o?j@by=PMW@o+#Ktm?)AYjbUR58xvKNkmz4H7q*}Oam3WW0ap&p;Q#;t literal 0 HcmV?d00001 diff --git a/src/compiler/__pycache__/luainit.cpython-311.pyc b/src/compiler/__pycache__/luainit.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e6c6cade846c9f1228833eafe787874ae76702f3 GIT binary patch literal 21375 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 OAF_Kta(IHZ!v6)q7H*#a literal 0 HcmV?d00001 diff --git a/src/compiler/__pycache__/pytranslator.cpython-311.pyc b/src/compiler/__pycache__/pytranslator.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..62664b1a22699e7433fb46b445b97f65fa124b29 GIT binary patch literal 3710 zcmb_fUu@gv5&tNW5@pGg|HzIV)e)Vzk+mW+oUCcRI>xeiDbS)uhqyzbZr~V^w&hBs z@{x9Gfi672z|}lAe7zl_!Ab^1(4|$pjuR!3Z-H{Sy zIqtBBeWFg^pW}UZ_uc*O)1SM$y9l(!fBi+y@r3*n2d&07JG)EJ*&;H@5SfvEc_za+ zzrKu5_RDPEUtlvVL!i&)xk4ZlaQcCKun^1yoqjOS7ebj(p)1qH5FdG)$owXeL-%}y zJcO^?GGW%HblOvp za;j^|KGWtdW?L$tFmwuzci#uHMNH;*K9fF0d2)7t{5r5&FV^ifp!BM{SgoyWe9?>H#6~pu26kK zlBl$*Ps}R%$A(s%pxWiU_DQ<9c4~4$r`d_DRw(B33Y{pfwNDV1ZC(`dKt!?B-*!^E zHHrJ_<3Kh@T{u}4PG4WRzVO$;H~hDJnY|XS4+-$oy)!t3qcVJUftO@Gb72sKuj9PS zFuO(eJ8ik`B<3FUA9~|;pTVIdx0z(wbJx{mzo*q)RH0B-o5sLk!UlT zY$wNh&8kax_AeO&0+6rVvfM`eTLbz!G81_?)lSz9_SE|SMW1?|Ii9#M>(6y5c zW@%0}Y*t<=6m4!5(Tqlc#pVD{78To{S5!M_XrhB>oLKXy(lu&N@k@LYgw() zv^R@Es1HF}ZIEY!!#8r<0c$W>8%&nN&-zBT=l}FkwQthuo2>OsmV-Ot=(TeV!h}*! zBfU3I+!(LCW%VU%eMu`aUW<%ZBjY=K^o#D#yRUz2@yBcY@hX3OXK>_(in+fN8!U&O z_72|ED?hnAeS7-W%$=Dh@rlRriASszf4vre-8yo%cI2$p`$nzzjRxUD6Ame#|2{xQ zQVrtkh6y0o`Fel6V%#-vo3}o_^XZesna7DUk7ljJR4p;}^=K_IUG2x`Z$s5zW~%4$ zsmDg1#Ks=S#zC zMUz!NNzp?T@u~yy@z@;DdIx;>d!L8-kUYz<|1~myveWoG38ALQfv*9&I2n# zOwRDYiIC0`OB0YL`*>S&vEZ0~lj}@`&JiTe*#rA{@bl6>X-J@baN6F-(v7gi*Cfj+Wk3@n+)85n00VIREm9EpRuz4fGK_`z)T6uH~kJJO`Kp$qvvH=$f>fT z8WP??5Ft>F#oVf*3i+I>JjYG<7{Lh;xW)Jj(kCg-W^v8#-S?_^H76TOol|;I$|`o) zoe&C%%?$?j^xD#*%3yo zk&(J^0_d}&Bb9}1=~ntqy8P}=|5!Eorq%!E*Kb+<7yl8n`roTY-gAQ=BamW+N(EhT z>jIopbwg4?eZOu{itvm^Lx05SE^9dzxE)ku@eJuC3PCMw4xOXZQ`qPAmCFt`>R3?) z;kRhCW3wZu)OU!Tz^MNn2%2*wUOkd58)f7E{8t~9*#;X7%`pw~1GJCy_LsSOYzUDh z>5%g5)97$z>`T8D9jish8iegm)_VrFB7cZf#EN)--WoYw8#!(DoT>GksXEWo-gss9 z%Q34rS?dKMK6oLXKuEjK-d}ih<-xKQpQ^>D0H>OAKD2sH)_P7>drrRCiS~c7_W4?6 zz=|en(L|L`I4<4`!_66QS!wv~2x<&n^#3lp5-vwTTkR5|cnN?~g}#H};}_rpr%DAy z$G2QJ+TlgT5S!9VgZtdMZ~hm+u7`kZ5CGerp>ovGD&?EI2;XLG)1TrlA-oUb9-?S> ziDE&MSMu18h~kwMDc@WPilVG#MUnQwJ2Z*JiHisXjgiY16ezkfJqPm-h#O;AtSJ7s zaR^?3^eaF%yic7yRb@{#d@MH%htxqL!`yg-c;xH=Cp1VWNs~Zd!{_7R2B4>e7D0YM0B$(yEg)aH#^vLvvVF!m3J+=fMT37f>!SF z)2`QM=-V*FqtgEfq~T{6rcTDHWUNlQHk?nLgf^Vd4mn!wd|Xao_MXFdUaOKro(6l4 R0Z+V4zQehHAF|-6{~rzQPlo^i literal 0 HcmV?d00001 diff --git a/src/compiler/__pycache__/symbolsstack.cpython-311.pyc b/src/compiler/__pycache__/symbolsstack.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..904feca72d6e48d7ca9e0d1d02bc6796f0a63000 GIT binary patch literal 1649 zcma)5y>Ams5Z}EIdlMW251g17@F56#76LyygaC=}&O(IOSPz|!+avLd<2!cGJg^)o z0ty!?Tp)##DiGzLaiU0Au8^qcj7*j0F>_zRBn5l7znh)eo1Ndx?1zboaRMX%`Xhg( z5b^~V@z5e+cn*X$!bycF?341d8f=5PvNjm(pI+9D>%;otPn$>#MH_c}D=RhyT z>J*$JCjnMSFE`Wi+uCZT4bKqcvy;5S0$Bu1?t!pITI65&hJ(`+u}I$k%s$b!=sM^( z6B~uf0duu^?k4AkWz?Pjq8b^#8&u402&e9c1^fCxjPiye(%`V4vOLeJ^P(cgaH-X; zB}ZbUh9R(t`r{VoW|)ZP^a$%c1O6({0<4hFEVG*FJltWqPpq)b3h%WoHoL=SyYVYB zuP4J<^Zv z2`o-g4QPs^Aoum4t`f^&#B5WckLIxvrlE2IHp+_tz%qN{?LPyejGYXieYZDxtkY;O zx0id<`HtW52P!#o>ht9Bb|d7Q)Czvb191+o0*vxKxZd+*U%ep@MWs3QpdlCbU&*q- z9uy29Z2Yj2ng_d^M@N{U>NxH@4G>lD6U%S2{JUFQtgyoh-T2*4B)N`P;OE~VvJU$; zVTL0tC(y_~aJ>UqKu-oOs(P;XD;a@zqRC3!ax5Z|5*i1Km10v<( z7+z;=chl^To92?s8#RL3e8Whv ssC&`vvTGs98=?RPY)N??V4zY;d*n=)oEfC1C^+8_-%$7c07KyZ2LT9eM*si- literal 0 HcmV?d00001 diff --git a/src/compiler/__pycache__/tokenendmode.cpython-311.pyc b/src/compiler/__pycache__/tokenendmode.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7c26ab998db27bc7dd68bfaf593e0ec631e654ea GIT binary patch literal 591 zcmZuuJxc>Y5S_id#3)HrNGud2V3i^silwA6rv&swjLkL6nO!h=A8|JkwF>ADuuEm@ z2mYCq$F){=kyu$ddx=8O*}d5}JG*aY-#z7WbAYyT`^+A2eN(}Yr6ypsiJ%V*9AJcL z9`Q9tBcQ<^F#Qgg!L>&n;1$2IIXX)nLpgnuZ-nPODDi-m{E+c?l`fOmu!64NoE%OT zG6_b@2>QUmAy`gh1gSK~V7ilH22!TtY(i-T>;MUG)*5FmiTqu^BzRkJ$%Bq8b*8Ec z4LRRc1-qP%Gn59d&nb=PD8;6_p2As5FS@Qb$;?p7!X|Fd?$>RL?pjtY&Lwc?&~DW2 z6YB*=s^hP!c_O)xrt1p#Qkpd`&pTn;6yd2CUahyUD;uU1O|u#L?Uu)dnRJG7C^axG zl*EZsK(3*aS7v+s r$f{VxP^ln~&<%A$NCbre6e1`NrspuNlcgd2b@y8zYWMS>R8sOA;;#&s zC<7yV7iLh!Khx2=m5I$LOqqD++Ft0L{Pp)f_wMe!yB{kn27*=?UXvFxLchcyZE9lX zdtj~*K^7tskzL7>h+@eydV`4i1(Do$Sossa+h!?5K0$SDvDF>f?7T`nhuOh^j;h4* z`)uF||69birlpH)_VQw4yJP3FpKKHV;^e^1PeHDbgWzan$waagM}415Ly7EYMENEI z%V$i@n4Ym5N#hC`%M)F!9jKN;3Xr(LOL5}uH1BGQPQ8wAgv?e+jaPH??dU*bB(BYWsz%ngi(l#E^BmoYvY+io(G$C%JQ zV8!+Wu69qxJzm872ZxRB+YUZ#A0IV3fE$Exr9}g-HAfSN1-#IHcW~V3G~2CfG#B+P zUYT9rVZLeG%%1orRPrI9p2=v>rJr`a^PQ)r&-!Mc4!wcvFmo(kjC$gsV3vssjz!#{ z{}E)C^-!(dsI^E#h2^h$SlI~IYEe!p8xazsCwTo1oDVCT;o3upE{SN6INFFec>=g1 zFv!;Gsy1ti&Nk9a>MAP=e@{p$rEFceIOqYmh5qvPYG1QW7)tQ@M<9_RNm7WmZ_sv# cj9J{Fg7TwTG1Bf!T7>?WKZ5 maxValue then @@ -468,7 +473,7 @@ end, -- Minimum value in a table - function(tbl) --min() + min = function(tbl) --min() local minValue = math.huge for _, v in ipairs(tbl) do if v < minValue then @@ -479,7 +484,7 @@ end, -- Reversed version of a table or string - function(seq) -- reversed() + reversed = function(seq) -- reversed() local reversedSeq = {} local length = #seq for i = length, 1, -1 do @@ -489,7 +494,7 @@ end, -- Splitting a string into a table of substrings - function(str, sep) -- split + split = function(str, sep) -- split local substrings = {} local pattern = string.format("([^%s]+)",sep or "%s") for substring in string.gmatch(str, pattern) do @@ -498,32 +503,31 @@ return substrings end, - math.round, -- round() + round = math.round, -- round() - function (iter) -- all() + all = function (iter) -- all() for i, v in iter do if not v then return false end end return true end, - function (iter) -- any() + any = function (iter) -- any() for i, v in iter do if v then return true end end return false end, - string.byte, -- ord - string.char, -- chr + ord = string.byte, -- ord + chr = string.char, -- chr - function(fun) -- callable() + callable = function(fun) -- callable() if rawget(fun) ~= fun then warn("At the momement Roblox.py's function callable() does not fully support metatables.") end return typeof(rawget(fun)) == "function" end, - - tonumber, + float = tonumber, -- float() - function(format, ...) -- format + format = function(format, ...) -- format local args = {...} local num_args = select("#", ...) @@ -539,14 +543,14 @@ return formatted_string end, - function (value) -- hex + hex = function (value) -- hex return string.format("%x", value) end, - function (obj) -- id + id = function (obj) -- id return print(tostring({obj}):gsub("table: ", ""):split(" ")[1]) end, - function (func, ...) --map + map = function (func, ...) --map local args = {...} local result = {} local num_args = select("#", ...) @@ -571,7 +575,7 @@ return result end, - function(x) -- bool + bool = function(x) -- bool if x == false or x == nil or x == 0 then return false end @@ -584,12 +588,12 @@ return true end, - function(a, b) -- divmod + divmod = function(a, b) -- divmod local res = { math.floor(a / b), math.fmod(a, b) } return unpack(res) end, - slicefun, - function (item, items) -- operator_in() + slice = slicefun, + operator_in = function (item, items) -- operator_in() if type(items) == "table" then for v in items do if v == item then @@ -602,7 +606,7 @@ return false end, - function(func) -- asynchronousfunction + asynchronousfunction = function(func) -- asynchronousfunction return function(...) local all = {...} coroutine.wrap(function() @@ -610,7 +614,7 @@ end)() end end, - function(value, values) -- match + match = function(value, values) -- match if values[value] then return values[value]() elseif values["default"] then @@ -618,45 +622,45 @@ end end, - function (iterator) -- anext + anext = function (iterator) -- anext local status, value = pcall(iterator) if status then return value end end, - function (obj) -- ascii + ascii = function (obj) -- ascii return string.format("%q", tostring(obj)) end, - function (obj) -- dir + dir = function (obj) -- dir local result = {} for key, _ in pairs(obj) do table.insert(result, key) end return result end, - function (obj, name, default) -- getattr + getattr = function (obj, name, default) -- getattr local value = obj[name] if value == nil then return default end return value end, - function () -- globals + globals = function () -- globals return _G end, - function (obj, name) --hasattr + hasattr = function (obj, name) --hasattr return obj[name] ~= nil end, - function (prompt) -- input + input = function (prompt) -- input if not io then error("io is not enabled") end io.write(prompt) return io.read() end, - function (obj, class) -- isinstance + isinstance = function (obj, class) -- isinstance return type(obj) == class end, - function (cls, classinfo) -- issubclass + issubclass = function (cls, classinfo) -- issubclass local mt = getmetatable(cls) while mt do if mt.__index == classinfo then @@ -666,33 +670,33 @@ end return false end, - function (obj) -- iter + iter = function (obj) -- iter if type(obj) == "table" and obj.__iter__ ~= nil then return obj.__iter__ end return nil end, - function () -- locals + locals = function () -- locals return _G end, -- oct() - function (num) --oct + oct = function (num) --oct return string.format("%o", num) end, -- open() - function (filename, mode) --open + open = function (filename, mode) --open if not io then error("io is not enabled") end return io.open(filename, mode) end, -- ord() - function (c) --ord + ord = function (c) --ord return string.byte(c) end, -- pow() - function (base, exponent, modulo) --pow + pow = function (base, exponent, modulo) --pow if modulo ~= nil then return math.pow(base, exponent) % modulo else @@ -701,17 +705,17 @@ end, -- eval() - function (expr, env) + eval = function (expr, env) return loadstring(expr)() end, -- exec() - function (code, env) + exec = function (code, env) return loadstring(expr)() end, -- filter() - function (predicate, iterable) + filter = function (predicate, iterable) local result = {} for _, value in ipairs(iterable) do if predicate(value) then @@ -722,7 +726,7 @@ end, -- frozenset() - function (...) + frozenset = function (...) local elements = {...} local frozenSet = {} for _, element in ipairs(elements) do @@ -731,26 +735,26 @@ return frozenSet end, -- aiter() - function (iterable) -- aiter + aiter = function (iterable) -- aiter return pairs(iterable) end, -- bin() - function (number) -- bin + bin = function (number) -- bin return string.format("%b", number) end, -- complex() - function (real, imag) -- complex + complex = function (real, imag) -- complex return { real = real, imag = imag } end, -- delattr() - function (object, attribute) -- delattr + deltaattr = function (object, attribute) -- delattr object[attribute] = nil end, -- enumerate() - function (iterable) -- enumerate + enumerate = function (iterable) -- enumerate local i = 0 return function() i = i + 1 @@ -762,17 +766,17 @@ end, -- breakpoint() - function () -- breakpoint + breakpoint = function () -- breakpoint -- This function can be left empty or you can add a debug hook to pause execution. -- Here's an example using the debug library to pause execution: debug.sethook(function() - io.write("Breakpoint hit! Press Enter to continue...") - io.read() -- Wait for user input to continue + print("Breakpoint hit!") + --io.read() -- Wait for user input to continue end, "c") end, -- bytearray() - function (arg) -- bytearray + bytearray = function (arg) -- bytearray if type(arg) == "string" then local bytes = {} for i = 1, #arg do @@ -794,7 +798,7 @@ end, -- bytes() - function (arg) -- bytes + bytes = function (arg) -- bytes if type(arg) == "string" then local bytes = {} for i = 1, #arg do @@ -809,7 +813,7 @@ end, -- compile() - function (source, filename, mode) -- compile + compile = function (source, filename, mode) -- compile -- This is a placeholder implementation and might not cover all possible use cases. -- You would need to provide your own implementation based on your specific requirements. -- Here's an example of a simple compilation to execute Lua code directly: @@ -819,7 +823,7 @@ -- help() - function (object) -- help + help = function (object) -- help -- This is a placeholder implementation and might not cover all possible use cases. -- You would need to provide your own implementation based on your specific requirements. -- Here's an example of displaying a help message for an object: @@ -829,7 +833,7 @@ end, -- memoryview() - function (object) -- memoryview + memoryview = function (object) -- memoryview -- This is a placeholder implementation and might not cover all possible use cases. -- You would need to provide your own implementation based on your specific requirements. -- Here's an example of creating a memory view object: @@ -841,7 +845,7 @@ end end, -- repr() - function (object) -- repr + repr = function (object) -- repr -- This is a placeholder implementation and might not cover all possible use cases. -- You would need to provide your own implementation based on your specific requirements. -- Here's an example of generating a representation of an object: @@ -849,7 +853,7 @@ end, -- sorted() - function (iterable, cmp, key, reverse) -- sorted + sorted = function (iterable, cmp, key, reverse) -- sorted -- This is a placeholder implementation and might not cover all possible use cases. -- You would need to provide your own implementation based on your specific requirements. -- Here's an example of sorting an iterable table: @@ -872,7 +876,7 @@ end, -- vars() - function (object) -- vars + vars = function (object) -- vars -- This is a placeholder implementation and might not cover all possible use cases. -- You would need to provide your own implementation based on your specific requirements. -- Here's an example of getting the attributes of an object: @@ -883,124 +887,18 @@ return attributes end, - require, + __import__ = require, + } - ([[object - type - int - float - complex - bool - str - bytes - bytearray - memoryview - list - tuple - range - set - frozenset - dict - slice - property - bool - ellipsis - NotImplemented - super - file - IOError - OSError - EnvironmentError - EOFError - ImportError - IndexError - KeyError - StopIteration - GeneratorExit - KeyboardInterrupt - SystemExit - Exception - BaseException - ArithmeticError - AssertionError - AttributeError - BufferError - EOFError - ImportError - LookupError - MemoryError - NameError - OSError - OverflowError - ReferenceError - RuntimeError - SyntaxError - IndentationError - TabError - SystemError - TypeError - ValueError - UnicodeError - UnicodeDecodeError - UnicodeEncodeError - UnicodeTranslateError - Warning - UserWarning - DeprecationWarning - PendingDeprecationWarning - SyntaxWarning - RuntimeWarning - FutureWarning - ImportWarning - UnicodeWarning - BytesWarning - ResourceWarning - Generator - AsyncGenerator - Iterator - Coroutine - AsyncIterator - ContextManager - AsyncContextManager - CallableIterator - CallableGenerator - Reversible - Sized - Container - Collection - MutableSequence - Sequence - MutableSet - Set - MutableMapping - Mapping - MutableSequence - ByteString - MutableByteString - SupportsAbs - SupportsFloat - SupportsInt - SupportsRound - SupportsComplex - SupportsBytes - SupportsComplex - SupportsBytes - SupportsComplex - SupportsRound - CoroutineWrapperType - ContextManagerWrapperType - AbstractEventLoop - GeneratorWrapperType - AsyncGeneratorWrapperType - AsyncContextManagerWrapperType]]):split("\t"), - - { -- PY library, built in - services = game, - } + } } end return module -""" \ No newline at end of file +""" + +allfunctions = "stringmeta, list, dict, staticmethod, classsmethod, class, range, __name__, len, abs, str, int, sum, max, min, reversed, split, round, all, any, ord, char, callable, zip, float, format, hex, id, map, bool, divmod, slice, operator_in, asynchronousfunction, match, anext, ascii, dir, getattr, globals, hasattr, input, isinstance, issubclass, iter, locals, oct, open, ord, pow, eval, exec, filter, frozenset, aiter, bin, complex, delattr, enumerate, breakpoint, bytearray, bytes, compile, help, memoryview, repr, sorted, vars, __import__" + +allfunctions = allfunctions.split(", ") \ No newline at end of file diff --git a/src/nameconstdesc.py b/src/compiler/nameconstdesc.py similarity index 100% rename from src/nameconstdesc.py rename to src/compiler/nameconstdesc.py diff --git a/src/nodevisitor.py b/src/compiler/nodevisitor.py similarity index 100% rename from src/nodevisitor.py rename to src/compiler/nodevisitor.py diff --git a/src/pytranslator.py b/src/compiler/pytranslator.py similarity index 72% rename from src/pytranslator.py rename to src/compiler/pytranslator.py index 66f3c39..a02c769 100644 --- a/src/pytranslator.py +++ b/src/compiler/pytranslator.py @@ -6,7 +6,7 @@ from .nodevisitor import NodeVisitor from .header import header -from .luainit import initcode +from .luainit import initcode, allfunctions class Translator: """Python to lua main class translator""" @@ -28,8 +28,20 @@ def translate(self, pycode): visitor.visit(py_ast_tree) self.output = visitor.output - - return self.to_code() + # check every single line for function calls + functions = [] + for i in range(len(self.to_code().split("\n"))): + # check if a function is being called, like print() + + for function in allfunctions: + if function in self.to_code().split("\n")[i] and function not in functions: + functions.append(function) + + + # create header for function calls + newheader = header(functions) + + return newheader+self.to_code() def to_code(self, code=None, indent=0): """Create a lua code from the compiler output""" @@ -58,8 +70,3 @@ def add_indentation(line): def get_luainit(filename="luainit.lua"): return initcode - - @staticmethod - def get_luahead(filename="header.txt"): - - return header diff --git a/src/symbolsstack.py b/src/compiler/symbolsstack.py similarity index 100% rename from src/symbolsstack.py rename to src/compiler/symbolsstack.py diff --git a/src/tokenendmode.py b/src/compiler/tokenendmode.py similarity index 100% rename from src/tokenendmode.py rename to src/compiler/tokenendmode.py diff --git a/src/unaryopdesc.py b/src/compiler/unaryopdesc.py similarity index 100% rename from src/unaryopdesc.py rename to src/compiler/unaryopdesc.py diff --git a/src/header.py b/src/header.py deleted file mode 100644 index 1491334..0000000 --- a/src/header.py +++ /dev/null @@ -1,8 +0,0 @@ -header = """ ---// Compiled using roblox-pyc \\-- - - ------------------------------------- BUILT IN ------------------------------- -local stringmeta, list, dict, staticmethod, classsmethod, class, range, __name__, len, abs, str, int, sum, max, min, reversed, split, round, all, any, ord, char, callable, zip, float, format, hex, id, map, bool, divmod, slice, operator_in, asynchronousfunction, match, anext, ascii, dir, getattr, globals, hasattr, input, isinstance, issubclass, iter, locals, oct, open, ord, pow, eval, exec, filter, frozenset, aiter, bin, complex, delattr, enumerate, breakpoint, bytearray, bytes, compile, help, memoryview, repr, sorted, vars, __import__, classlist, py = unpack(require(game.ReplicatedStorage["Roblox.py"])(script)) ------------------------------------------------------------------------------ -""" diff --git a/src/robloxpy.py b/src/robloxpy.py index ad2e1a0..a166380 100644 --- a/src/robloxpy.py +++ b/src/robloxpy.py @@ -6,7 +6,9 @@ import typer -from . import colortext, pytranslator, ctranslator +import compiler.colortext as colortext +import compiler.pytranslator as pytranslator +import compiler.ctranslator as ctranslator class Reporter: """ @@ -85,21 +87,13 @@ def backwordreplace(s, old, new, occurrence): li = s.rsplit(old, occurrence) return new.join(li) -@typerapp.command("p", help="Starts a server on port 5555 for the plugin (decreapted).") def p(): print("The plugin is decreapted. Please use the CLI alongside a Studio+VSCode sync plugin.") @app.route('/', methods=["GET", "POST"]) def base_page(): code = (request.data).decode() - script_name = os.path.realpath(__file__) - folder = os.path.dirname(script_name) - luainit_path = os.path.join(folder, "src/header.lua") - header = "" - with open(luainit_path) as file: - header = file.read() - try: - lua_code = header+translator.translate(code) + lua_code = translator.translate(code) except Exception as e: return "CompileError!:"+str(e) @@ -121,7 +115,6 @@ def library(): port=5555 ) -@typerapp.command("w", help="Whenever enter is clicked in the terminal, compile all files, if exit is typed, exit the program.") def w(): print(colortext.magenta("roblox-py: Ready to compile ", os.path.join(os.path.dirname(os.path.realpath(__file__)), "test")+" ...\n Type 'exit' to exit, Press enter to compile.")) def incli(): @@ -135,7 +128,6 @@ def incli(): if '.py' in file: # compile the file to a file with the same name and path but .lua contents = "" - header = translator.get_luahead() try: with open(os.path.join(r, file)) as rf: @@ -146,7 +138,7 @@ def incli(): continue try: - lua_code = header+translator.translate(contents) + lua_code = translator.translate(contents) print(colortext.green("roblox-py: Compiled "+os.path.join(r, file))) # get the relative path of the file and replace .py with .lua relative_path = backwordreplace(os.path.join(r, file),".py", ".lua", 1) @@ -165,7 +157,6 @@ def incli(): incli() incli() -@typerapp2.command("cw", help="Whenever enter is clicked in the terminal, compile all files, if exit is typed, exit the program.") def cw(): print(colortext.magenta("roblox-c: Ready to compile ", os.path.join(os.path.dirname(os.path.realpath(__file__)), "test")+" ...\n Type 'exit' to exit, Press enter to compile.")) def incli(): @@ -192,7 +183,6 @@ def incli(): incli() incli() -@typerapp3.command("cpw", help="Whenever enter is clicked in the terminal, compile all files, if exit is typed, exit the program.") def cpw(): print(colortext.magenta("roblox-cpp: Ready to compile ", os.path.join(os.path.dirname(os.path.realpath(__file__)), "test")+" ...\n Type 'exit' to exit, Press enter to compile.")) def incli(): @@ -225,8 +215,8 @@ def incli(): mode = input("Select which app to run (1, 2, 3): ") if mode == "1": - typerapp() + w() elif mode == "2": - typerapp2() + cw() elif mode == "3": - typerapp3() \ No newline at end of file + cpw() \ No newline at end of file diff --git a/test/python/ann.lua b/test/python/ann.lua index fcf0d43..95f2216 100644 --- a/test/python/ann.lua +++ b/test/python/ann.lua @@ -1,9 +1,12 @@ ---// Compiled using Roblox.py \-- +--// Compiled using roblox-pyc \-- ------------------------------------ BUILT IN ------------------------------- -local stringmeta, list, dict, staticmethod, classsmethod, class, range, __name__, len, abs, str, int, sum, max, min, reversed, split, round, all, any, ord, char, callable, zip, float, format, hex, id, map, bool, divmod, slice, operator_in, asynchronousfunction, match, anext, ascii, dir, getattr, globals, hasattr, input, isinstance, issubclass, iter, locals, oct, open, ord, pow, eval, exec, filter, frozenset, aiter, bin, complex, delattr, enumerate, breakpoint, bytearray, bytes, compile, help, memoryview, repr, sorted, vars, __import__, classlist, py = unpack(require(game.ReplicatedStorage["Roblox.py"])(script)) +local py, builtin = unpack(require(game.ReplicatedStorage["roblox.pyc"])(script).py) + +local int = builtin.int + ----------------------------------------------------------------------------- local x: int = 10 local y: int = 20 \ No newline at end of file diff --git a/test/python/asyncdef.lua b/test/python/asyncdef.lua index f5563b3..4d3ef48 100644 --- a/test/python/asyncdef.lua +++ b/test/python/asyncdef.lua @@ -1,9 +1,15 @@ ---// Compiled using Roblox.py \-- +--// Compiled using roblox-pyc \-- ------------------------------------ BUILT IN ------------------------------- -local stringmeta, list, dict, staticmethod, classsmethod, class, range, __name__, len, abs, str, int, sum, max, min, reversed, split, round, all, any, ord, char, callable, zip, float, format, hex, id, map, bool, divmod, slice, operator_in, asynchronousfunction, match, anext, ascii, dir, getattr, globals, hasattr, input, isinstance, issubclass, iter, locals, oct, open, ord, pow, eval, exec, filter, frozenset, aiter, bin, complex, delattr, enumerate, breakpoint, bytearray, bytes, compile, help, memoryview, repr, sorted, vars, __import__, classlist, py = unpack(require(game.ReplicatedStorage["Roblox.py"])(script)) +local py, builtin = unpack(require(game.ReplicatedStorage["roblox.pyc"])(script).py) + +local asynchronousfunction = builtin.asynchronousfunction +local stringmeta = builtin.stringmeta +local str = builtin.str +local int = builtin.int + ----------------------------------------------------------------------------- local hello = asynchronousfunction(function() print(stringmeta "Hello, world!") diff --git a/test/python/asyncdef.py b/test/python/asyncdef.py index 94cbea1..3d4533f 100644 --- a/test/python/asyncdef.py +++ b/test/python/asyncdef.py @@ -1,2 +1,3 @@ async def hello(): - print("Hello, world!") \ No newline at end of file + print("Hello, world!") + diff --git a/test/python/asyncwith.lua b/test/python/asyncwith.lua index fc03d15..c2e6933 100644 --- a/test/python/asyncwith.lua +++ b/test/python/asyncwith.lua @@ -1,9 +1,16 @@ ---// Compiled using Roblox.py \-- +--// Compiled using roblox-pyc \-- ------------------------------------ BUILT IN ------------------------------- -local stringmeta, list, dict, staticmethod, classsmethod, class, range, __name__, len, abs, str, int, sum, max, min, reversed, split, round, all, any, ord, char, callable, zip, float, format, hex, id, map, bool, divmod, slice, operator_in, asynchronousfunction, match, anext, ascii, dir, getattr, globals, hasattr, input, isinstance, issubclass, iter, locals, oct, open, ord, pow, eval, exec, filter, frozenset, aiter, bin, complex, delattr, enumerate, breakpoint, bytearray, bytes, compile, help, memoryview, repr, sorted, vars, __import__, classlist, py = unpack(require(game.ReplicatedStorage["Roblox.py"])(script)) +local py, builtin = unpack(require(game.ReplicatedStorage["roblox.pyc"])(script).py) + +local asynchronousfunction = builtin.asynchronousfunction +local stringmeta = builtin.stringmeta +local str = builtin.str +local open = builtin.open +local int = builtin.int + ----------------------------------------------------------------------------- local async_with = asynchronousfunction(function() do diff --git a/test/python/bytes.lua b/test/python/bytes.lua index 02b57f2..412f0c4 100644 --- a/test/python/bytes.lua +++ b/test/python/bytes.lua @@ -1,9 +1,12 @@ ---// Compiled using Roblox.py \-- +--// Compiled using roblox-pyc \-- ------------------------------------ BUILT IN ------------------------------- -local stringmeta, list, dict, staticmethod, classsmethod, class, range, __name__, len, abs, str, int, sum, max, min, reversed, split, round, all, any, ord, char, callable, zip, float, format, hex, id, map, bool, divmod, slice, operator_in, asynchronousfunction, match, anext, ascii, dir, getattr, globals, hasattr, input, isinstance, issubclass, iter, locals, oct, open, ord, pow, eval, exec, filter, frozenset, aiter, bin, complex, delattr, enumerate, breakpoint, bytearray, bytes, compile, help, memoryview, repr, sorted, vars, __import__, classlist, py = unpack(require(game.ReplicatedStorage["Roblox.py"])(script)) +local py, builtin = unpack(require(game.ReplicatedStorage["roblox.pyc"])(script).py) + +local int = builtin.int + ----------------------------------------------------------------------------- local byte = 'Hello World' print(byte) \ No newline at end of file diff --git a/test/python/class.lua b/test/python/class.lua index 37fea3d..5259e75 100644 --- a/test/python/class.lua +++ b/test/python/class.lua @@ -1,9 +1,15 @@ ---// Compiled using Roblox.py \-- +--// Compiled using roblox-pyc \-- ------------------------------------ BUILT IN ------------------------------- -local stringmeta, list, dict, staticmethod, classsmethod, class, range, __name__, len, abs, str, int, sum, max, min, reversed, split, round, all, any, ord, char, callable, zip, float, format, hex, id, map, bool, divmod, slice, operator_in, asynchronousfunction, match, anext, ascii, dir, getattr, globals, hasattr, input, isinstance, issubclass, iter, locals, oct, open, ord, pow, eval, exec, filter, frozenset, aiter, bin, complex, delattr, enumerate, breakpoint, bytearray, bytes, compile, help, memoryview, repr, sorted, vars, __import__, classlist, py = unpack(require(game.ReplicatedStorage["Roblox.py"])(script)) +local py, builtin = unpack(require(game.ReplicatedStorage["roblox.pyc"])(script).py) + +local class = builtin.class +local int = builtin.int +local stringmeta = builtin.stringmeta +local str = builtin.str + ----------------------------------------------------------------------------- local Example = class(function(Example) function Example.__init__(self, name) diff --git a/test/python/continue.lua b/test/python/continue.lua index 4be3e5a..bd49744 100644 --- a/test/python/continue.lua +++ b/test/python/continue.lua @@ -1,12 +1,15 @@ ---// Compiled using Roblox.py \-- +--// Compiled using roblox-pyc \-- ------------------------------------ BUILT IN ------------------------------- -local stringmeta, list, dict, staticmethod, classsmethod, class, range, __name__, len, abs, str, int, sum, max, min, reversed, split, round, all, any, ord, char, callable, zip, float, format, hex, id, map, bool, divmod, slice, operator_in, asynchronousfunction, match, anext, ascii, dir, getattr, globals, hasattr, input, isinstance, issubclass, iter, locals, oct, open, ord, pow, eval, exec, filter, frozenset, aiter, bin, complex, delattr, enumerate, breakpoint, bytearray, bytes, compile, help, memoryview, repr, sorted, vars, __import__, classlist, py = unpack(require(game.ReplicatedStorage["Roblox.py"])(script)) +local py, builtin = unpack(require(game.ReplicatedStorage["roblox.pyc"])(script).py) + +local range = builtin.range + ----------------------------------------------------------------------------- for i in range(10) do if (i == 5) then - continue 17 + continue 8 end end \ No newline at end of file diff --git a/test/python/dict.lua b/test/python/dict.lua index 9f897bd..79872ae 100644 --- a/test/python/dict.lua +++ b/test/python/dict.lua @@ -1,9 +1,15 @@ ---// Compiled using Roblox.py \-- +--// Compiled using roblox-pyc \-- ------------------------------------ BUILT IN ------------------------------- -local stringmeta, list, dict, staticmethod, classsmethod, class, range, __name__, len, abs, str, int, sum, max, min, reversed, split, round, all, any, ord, char, callable, zip, float, format, hex, id, map, bool, divmod, slice, operator_in, asynchronousfunction, match, anext, ascii, dir, getattr, globals, hasattr, input, isinstance, issubclass, iter, locals, oct, open, ord, pow, eval, exec, filter, frozenset, aiter, bin, complex, delattr, enumerate, breakpoint, bytearray, bytes, compile, help, memoryview, repr, sorted, vars, __import__, classlist, py = unpack(require(game.ReplicatedStorage["Roblox.py"])(script)) +local py, builtin = unpack(require(game.ReplicatedStorage["roblox.pyc"])(script).py) + +local dict = builtin.dict +local stringmeta = builtin.stringmeta +local str = builtin.str +local int = builtin.int + ----------------------------------------------------------------------------- local newdict = dict {} newdict[stringmeta "one"] = 1 diff --git a/test/python/helloworld.lua b/test/python/helloworld.lua index 5802b67..11ad542 100644 --- a/test/python/helloworld.lua +++ b/test/python/helloworld.lua @@ -1,8 +1,13 @@ ---// Compiled using Roblox.py \-- +--// Compiled using roblox-pyc \-- ------------------------------------ BUILT IN ------------------------------- -local stringmeta, list, dict, staticmethod, classsmethod, class, range, __name__, len, abs, str, int, sum, max, min, reversed, split, round, all, any, ord, char, callable, zip, float, format, hex, id, map, bool, divmod, slice, operator_in, asynchronousfunction, match, anext, ascii, dir, getattr, globals, hasattr, input, isinstance, issubclass, iter, locals, oct, open, ord, pow, eval, exec, filter, frozenset, aiter, bin, complex, delattr, enumerate, breakpoint, bytearray, bytes, compile, help, memoryview, repr, sorted, vars, __import__, classlist, py = unpack(require(game.ReplicatedStorage["Roblox.py"])(script)) +local py, builtin = unpack(require(game.ReplicatedStorage["roblox.pyc"])(script).py) + +local stringmeta = builtin.stringmeta +local str = builtin.str +local int = builtin.int + ----------------------------------------------------------------------------- print(stringmeta "Hello World!") \ No newline at end of file diff --git a/test/python/import.lua b/test/python/import.lua index 24bf798..e11d157 100644 --- a/test/python/import.lua +++ b/test/python/import.lua @@ -1,9 +1,11 @@ ---// Compiled using Roblox.py \-- +--// Compiled using roblox-pyc \-- ------------------------------------ BUILT IN ------------------------------- -local stringmeta, list, dict, staticmethod, classsmethod, class, range, __name__, len, abs, str, int, sum, max, min, reversed, split, round, all, any, ord, char, callable, zip, float, format, hex, id, map, bool, divmod, slice, operator_in, asynchronousfunction, match, anext, ascii, dir, getattr, globals, hasattr, input, isinstance, issubclass, iter, locals, oct, open, ord, pow, eval, exec, filter, frozenset, aiter, bin, complex, delattr, enumerate, breakpoint, bytearray, bytes, compile, help, memoryview, repr, sorted, vars, __import__, classlist, py = unpack(require(game.ReplicatedStorage["Roblox.py"])(script)) +local py, builtin = unpack(require(game.ReplicatedStorage["roblox.pyc"])(script).py) + + ----------------------------------------------------------------------------- local examplelib = require "examplelib" local submodule = require "examplelib.submodule" diff --git a/test/python/in.lua b/test/python/in.lua index ce3586e..24654a6 100644 --- a/test/python/in.lua +++ b/test/python/in.lua @@ -1,9 +1,16 @@ ---// Compiled using Roblox.py \-- +--// Compiled using roblox-pyc \-- ------------------------------------ BUILT IN ------------------------------- -local stringmeta, list, dict, staticmethod, classsmethod, class, range, __name__, len, abs, str, int, sum, max, min, reversed, split, round, all, any, ord, char, callable, zip, float, format, hex, id, map, bool, divmod, slice, operator_in, asynchronousfunction, match, anext, ascii, dir, getattr, globals, hasattr, input, isinstance, issubclass, iter, locals, oct, open, ord, pow, eval, exec, filter, frozenset, aiter, bin, complex, delattr, enumerate, breakpoint, bytearray, bytes, compile, help, memoryview, repr, sorted, vars, __import__, classlist, py = unpack(require(game.ReplicatedStorage["Roblox.py"])(script)) +local py, builtin = unpack(require(game.ReplicatedStorage["roblox.pyc"])(script).py) + +local stringmeta = builtin.stringmeta +local dict = builtin.dict +local str = builtin.str +local operator_in = builtin.operator_in +local int = builtin.int + ----------------------------------------------------------------------------- local table = dict {[stringmeta "a"] = stringmeta "b", [stringmeta "c"] = stringmeta "d"} if (operator_in(stringmeta "a", table)) then diff --git a/test/python/lambda.lua b/test/python/lambda.lua index 756327e..306a4f4 100644 --- a/test/python/lambda.lua +++ b/test/python/lambda.lua @@ -1,9 +1,12 @@ ---// Compiled using Roblox.py \-- +--// Compiled using roblox-pyc \-- ------------------------------------ BUILT IN ------------------------------- -local stringmeta, list, dict, staticmethod, classsmethod, class, range, __name__, len, abs, str, int, sum, max, min, reversed, split, round, all, any, ord, char, callable, zip, float, format, hex, id, map, bool, divmod, slice, operator_in, asynchronousfunction, match, anext, ascii, dir, getattr, globals, hasattr, input, isinstance, issubclass, iter, locals, oct, open, ord, pow, eval, exec, filter, frozenset, aiter, bin, complex, delattr, enumerate, breakpoint, bytearray, bytes, compile, help, memoryview, repr, sorted, vars, __import__, classlist, py = unpack(require(game.ReplicatedStorage["Roblox.py"])(script)) +local py, builtin = unpack(require(game.ReplicatedStorage["roblox.pyc"])(script).py) + +local int = builtin.int + ----------------------------------------------------------------------------- local x = function(a) return (bit32.bxor((bit32.bxor((a + 10), 2)), a)) end print(x(5)) \ No newline at end of file diff --git a/test/python/list.lua b/test/python/list.lua index aec159e..0e5a2ff 100644 --- a/test/python/list.lua +++ b/test/python/list.lua @@ -1,9 +1,13 @@ ---// Compiled using Roblox.py \-- +--// Compiled using roblox-pyc \-- ------------------------------------ BUILT IN ------------------------------- -local stringmeta, list, dict, staticmethod, classsmethod, class, range, __name__, len, abs, str, int, sum, max, min, reversed, split, round, all, any, ord, char, callable, zip, float, format, hex, id, map, bool, divmod, slice, operator_in, asynchronousfunction, match, anext, ascii, dir, getattr, globals, hasattr, input, isinstance, issubclass, iter, locals, oct, open, ord, pow, eval, exec, filter, frozenset, aiter, bin, complex, delattr, enumerate, breakpoint, bytearray, bytes, compile, help, memoryview, repr, sorted, vars, __import__, classlist, py = unpack(require(game.ReplicatedStorage["Roblox.py"])(script)) +local py, builtin = unpack(require(game.ReplicatedStorage["roblox.pyc"])(script).py) + +local list = builtin.list +local int = builtin.int + ----------------------------------------------------------------------------- local newlist = list {1, 2, 3, 4, 5} newlist.append(6) diff --git a/test/python/luaxpy.lua b/test/python/luaxpy.lua index 98ee1b5..4c24fb5 100644 --- a/test/python/luaxpy.lua +++ b/test/python/luaxpy.lua @@ -1,9 +1,14 @@ ---// Compiled using Roblox.py \-- +--// Compiled using roblox-pyc \-- ------------------------------------ BUILT IN ------------------------------- -local stringmeta, list, dict, staticmethod, classsmethod, class, range, __name__, len, abs, str, int, sum, max, min, reversed, split, round, all, any, ord, char, callable, zip, float, format, hex, id, map, bool, divmod, slice, operator_in, asynchronousfunction, match, anext, ascii, dir, getattr, globals, hasattr, input, isinstance, issubclass, iter, locals, oct, open, ord, pow, eval, exec, filter, frozenset, aiter, bin, complex, delattr, enumerate, breakpoint, bytearray, bytes, compile, help, memoryview, repr, sorted, vars, __import__, classlist, py = unpack(require(game.ReplicatedStorage["Roblox.py"])(script)) +local py, builtin = unpack(require(game.ReplicatedStorage["roblox.pyc"])(script).py) + +local stringmeta = builtin.stringmeta +local str = builtin.str +local int = builtin.int + ----------------------------------------------------------------------------- print(stringmeta "This is from python!") diff --git a/test/python/match.lua b/test/python/match.lua index 1c563e2..0b84a3e 100644 --- a/test/python/match.lua +++ b/test/python/match.lua @@ -1,9 +1,15 @@ ---// Compiled using Roblox.py \-- +--// Compiled using roblox-pyc \-- ------------------------------------ BUILT IN ------------------------------- -local stringmeta, list, dict, staticmethod, classsmethod, class, range, __name__, len, abs, str, int, sum, max, min, reversed, split, round, all, any, ord, char, callable, zip, float, format, hex, id, map, bool, divmod, slice, operator_in, asynchronousfunction, match, anext, ascii, dir, getattr, globals, hasattr, input, isinstance, issubclass, iter, locals, oct, open, ord, pow, eval, exec, filter, frozenset, aiter, bin, complex, delattr, enumerate, breakpoint, bytearray, bytes, compile, help, memoryview, repr, sorted, vars, __import__, classlist, py = unpack(require(game.ReplicatedStorage["Roblox.py"])(script)) +local py, builtin = unpack(require(game.ReplicatedStorage["roblox.pyc"])(script).py) + +local stringmeta = builtin.stringmeta +local str = builtin.str +local match = builtin.match +local int = builtin.int + ----------------------------------------------------------------------------- local x = stringmeta "10" match(x, { diff --git a/test/python/matrix.lua b/test/python/matrix.lua index bd6e9ba..69f22a0 100644 --- a/test/python/matrix.lua +++ b/test/python/matrix.lua @@ -1,9 +1,15 @@ ---// Compiled using Roblox.py \-- +--// Compiled using roblox-pyc \-- ------------------------------------ BUILT IN ------------------------------- -local stringmeta, list, dict, staticmethod, classsmethod, class, range, __name__, len, abs, str, int, sum, max, min, reversed, split, round, all, any, ord, char, callable, zip, float, format, hex, id, map, bool, divmod, slice, operator_in, asynchronousfunction, match, anext, ascii, dir, getattr, globals, hasattr, input, isinstance, issubclass, iter, locals, oct, open, ord, pow, eval, exec, filter, frozenset, aiter, bin, complex, delattr, enumerate, breakpoint, bytearray, bytes, compile, help, memoryview, repr, sorted, vars, __import__, classlist, py = unpack(require(game.ReplicatedStorage["Roblox.py"])(script)) +local py, builtin = unpack(require(game.ReplicatedStorage["roblox.pyc"])(script).py) + +local list = builtin.list +local range = builtin.range +local len = builtin.len +local int = builtin.int + ----------------------------------------------------------------------------- local X = list {list {12, 7}, list {4, 5}, list {3, 8}} local result = list {list {0, 0, 0}, list {0, 0, 0}} diff --git a/test/python/memoryaddress.lua b/test/python/memoryaddress.lua index 8356ffb..640dd97 100644 --- a/test/python/memoryaddress.lua +++ b/test/python/memoryaddress.lua @@ -1,9 +1,15 @@ ---// Compiled using Roblox.py \-- +--// Compiled using roblox-pyc \-- ------------------------------------ BUILT IN ------------------------------- -local stringmeta, list, dict, staticmethod, classsmethod, class, range, __name__, len, abs, str, int, sum, max, min, reversed, split, round, all, any, ord, char, callable, zip, float, format, hex, id, map, bool, divmod, slice, operator_in, asynchronousfunction, match, anext, ascii, dir, getattr, globals, hasattr, input, isinstance, issubclass, iter, locals, oct, open, ord, pow, eval, exec, filter, frozenset, aiter, bin, complex, delattr, enumerate, breakpoint, bytearray, bytes, compile, help, memoryview, repr, sorted, vars, __import__, classlist, py = unpack(require(game.ReplicatedStorage["Roblox.py"])(script)) +local py, builtin = unpack(require(game.ReplicatedStorage["roblox.pyc"])(script).py) + +local stringmeta = builtin.stringmeta +local str = builtin.str +local id = builtin.id +local int = builtin.int + ----------------------------------------------------------------------------- local item = stringmeta "Hello!" local location = id(item) diff --git a/test/python/multiassign.lua b/test/python/multiassign.lua index 9df2077..d577234 100644 --- a/test/python/multiassign.lua +++ b/test/python/multiassign.lua @@ -1,9 +1,12 @@ ---// Compiled using Roblox.py \-- +--// Compiled using roblox-pyc \-- ------------------------------------ BUILT IN ------------------------------- -local stringmeta, list, dict, staticmethod, classsmethod, class, range, __name__, len, abs, str, int, sum, max, min, reversed, split, round, all, any, ord, char, callable, zip, float, format, hex, id, map, bool, divmod, slice, operator_in, asynchronousfunction, match, anext, ascii, dir, getattr, globals, hasattr, input, isinstance, issubclass, iter, locals, oct, open, ord, pow, eval, exec, filter, frozenset, aiter, bin, complex, delattr, enumerate, breakpoint, bytearray, bytes, compile, help, memoryview, repr, sorted, vars, __import__, classlist, py = unpack(require(game.ReplicatedStorage["Roblox.py"])(script)) +local py, builtin = unpack(require(game.ReplicatedStorage["roblox.pyc"])(script).py) + +local int = builtin.int + ----------------------------------------------------------------------------- local a, b, c = 1, 2, 3 print(a, b, c) \ No newline at end of file diff --git a/test/python/slice.lua b/test/python/slice.lua index b165160..80bc325 100644 --- a/test/python/slice.lua +++ b/test/python/slice.lua @@ -1,9 +1,14 @@ ---// Compiled using Roblox.py \-- +--// Compiled using roblox-pyc \-- ------------------------------------ BUILT IN ------------------------------- -local stringmeta, list, dict, staticmethod, classsmethod, class, range, __name__, len, abs, str, int, sum, max, min, reversed, split, round, all, any, ord, char, callable, zip, float, format, hex, id, map, bool, divmod, slice, operator_in, asynchronousfunction, match, anext, ascii, dir, getattr, globals, hasattr, input, isinstance, issubclass, iter, locals, oct, open, ord, pow, eval, exec, filter, frozenset, aiter, bin, complex, delattr, enumerate, breakpoint, bytearray, bytes, compile, help, memoryview, repr, sorted, vars, __import__, classlist, py = unpack(require(game.ReplicatedStorage["Roblox.py"])(script)) +local py, builtin = unpack(require(game.ReplicatedStorage["roblox.pyc"])(script).py) + +local stringmeta = builtin.stringmeta +local str = builtin.str +local int = builtin.int + ----------------------------------------------------------------------------- local string = stringmeta "Hello World" print(string["SLICE!(0, 5)"]) \ No newline at end of file diff --git a/test/python/staticmethod.lua b/test/python/staticmethod.lua index 23b15bf..b1dc89d 100644 --- a/test/python/staticmethod.lua +++ b/test/python/staticmethod.lua @@ -1,9 +1,17 @@ ---// Compiled using Roblox.py \-- +--// Compiled using roblox-pyc \-- ------------------------------------ BUILT IN ------------------------------- -local stringmeta, list, dict, staticmethod, classsmethod, class, range, __name__, len, abs, str, int, sum, max, min, reversed, split, round, all, any, ord, char, callable, zip, float, format, hex, id, map, bool, divmod, slice, operator_in, asynchronousfunction, match, anext, ascii, dir, getattr, globals, hasattr, input, isinstance, issubclass, iter, locals, oct, open, ord, pow, eval, exec, filter, frozenset, aiter, bin, complex, delattr, enumerate, breakpoint, bytearray, bytes, compile, help, memoryview, repr, sorted, vars, __import__, classlist, py = unpack(require(game.ReplicatedStorage["Roblox.py"])(script)) +local py, builtin = unpack(require(game.ReplicatedStorage["roblox.pyc"])(script).py) + +local stringmeta = builtin.stringmeta +local str = builtin.str +local int = builtin.int +local exec = builtin.exec +local staticmethod = builtin.staticmethod +local class = builtin.class + ----------------------------------------------------------------------------- local function foo(x) print((math.fmod(stringmeta "executing foo(%s)", x))) diff --git a/test/python/string.lua b/test/python/string.lua index 762d7c4..a608bea 100644 --- a/test/python/string.lua +++ b/test/python/string.lua @@ -1,9 +1,14 @@ ---// Compiled using Roblox.py \-- +--// Compiled using roblox-pyc \-- ------------------------------------ BUILT IN ------------------------------- -local stringmeta, list, dict, staticmethod, classsmethod, class, range, __name__, len, abs, str, int, sum, max, min, reversed, split, round, all, any, ord, char, callable, zip, float, format, hex, id, map, bool, divmod, slice, operator_in, asynchronousfunction, match, anext, ascii, dir, getattr, globals, hasattr, input, isinstance, issubclass, iter, locals, oct, open, ord, pow, eval, exec, filter, frozenset, aiter, bin, complex, delattr, enumerate, breakpoint, bytearray, bytes, compile, help, memoryview, repr, sorted, vars, __import__, classlist, py = unpack(require(game.ReplicatedStorage["Roblox.py"])(script)) +local py, builtin = unpack(require(game.ReplicatedStorage["roblox.pyc"])(script).py) + +local stringmeta = builtin.stringmeta +local str = builtin.str +local int = builtin.int + ----------------------------------------------------------------------------- local newstring = stringmeta "Hello World" print(newstring) \ No newline at end of file diff --git a/test/python/try.lua b/test/python/try.lua index 05daa1d..56af3e6 100644 --- a/test/python/try.lua +++ b/test/python/try.lua @@ -1,9 +1,14 @@ ---// Compiled using Roblox.py \-- +--// Compiled using roblox-pyc \-- ------------------------------------ BUILT IN ------------------------------- -local stringmeta, list, dict, staticmethod, classsmethod, class, range, __name__, len, abs, str, int, sum, max, min, reversed, split, round, all, any, ord, char, callable, zip, float, format, hex, id, map, bool, divmod, slice, operator_in, asynchronousfunction, match, anext, ascii, dir, getattr, globals, hasattr, input, isinstance, issubclass, iter, locals, oct, open, ord, pow, eval, exec, filter, frozenset, aiter, bin, complex, delattr, enumerate, breakpoint, bytearray, bytes, compile, help, memoryview, repr, sorted, vars, __import__, classlist, py = unpack(require(game.ReplicatedStorage["Roblox.py"])(script)) +local py, builtin = unpack(require(game.ReplicatedStorage["roblox.pyc"])(script).py) + +local all = builtin.all +local stringmeta = builtin.stringmeta +local str = builtin.str + ----------------------------------------------------------------------------- local success, result = pcall(function() error(stringmeta "Some error") diff --git a/test/python/typehints.lua b/test/python/typehints.lua index 7149363..56fac82 100644 --- a/test/python/typehints.lua +++ b/test/python/typehints.lua @@ -1,9 +1,15 @@ ---// Compiled using Roblox.py \-- +--// Compiled using roblox-pyc \-- ------------------------------------ BUILT IN ------------------------------- -local stringmeta, list, dict, staticmethod, classsmethod, class, range, __name__, len, abs, str, int, sum, max, min, reversed, split, round, all, any, ord, char, callable, zip, float, format, hex, id, map, bool, divmod, slice, operator_in, asynchronousfunction, match, anext, ascii, dir, getattr, globals, hasattr, input, isinstance, issubclass, iter, locals, oct, open, ord, pow, eval, exec, filter, frozenset, aiter, bin, complex, delattr, enumerate, breakpoint, bytearray, bytes, compile, help, memoryview, repr, sorted, vars, __import__, classlist, py = unpack(require(game.ReplicatedStorage["Roblox.py"])(script)) +local py, builtin = unpack(require(game.ReplicatedStorage["roblox.pyc"])(script).py) + +local sum = builtin.sum +local int = builtin.int +local stringmeta = builtin.stringmeta +local str = builtin.str + ----------------------------------------------------------------------------- local function sum_numbers(a, b) return (a + b) diff --git a/test/python/with.lua b/test/python/with.lua index 10d1295..4bd5f5b 100644 --- a/test/python/with.lua +++ b/test/python/with.lua @@ -1,9 +1,15 @@ ---// Compiled using Roblox.py \-- +--// Compiled using roblox-pyc \-- ------------------------------------ BUILT IN ------------------------------- -local stringmeta, list, dict, staticmethod, classsmethod, class, range, __name__, len, abs, str, int, sum, max, min, reversed, split, round, all, any, ord, char, callable, zip, float, format, hex, id, map, bool, divmod, slice, operator_in, asynchronousfunction, match, anext, ascii, dir, getattr, globals, hasattr, input, isinstance, issubclass, iter, locals, oct, open, ord, pow, eval, exec, filter, frozenset, aiter, bin, complex, delattr, enumerate, breakpoint, bytearray, bytes, compile, help, memoryview, repr, sorted, vars, __import__, classlist, py = unpack(require(game.ReplicatedStorage["Roblox.py"])(script)) +local py, builtin = unpack(require(game.ReplicatedStorage["roblox.pyc"])(script).py) + +local stringmeta = builtin.stringmeta +local str = builtin.str +local id = builtin.id +local int = builtin.int + ----------------------------------------------------------------------------- do local id = id(stringmeta "Text") diff --git a/test/python/xl.lua b/test/python/xl.lua index 9eb2ec9..bd6eaa5 100644 --- a/test/python/xl.lua +++ b/test/python/xl.lua @@ -1,14 +1,29 @@ ---// Compiled using Roblox.py \-- +--// Compiled using roblox-pyc \-- ------------------------------------ BUILT IN ------------------------------- -local stringmeta, list, dict, staticmethod, classsmethod, class, range, __name__, len, abs, str, int, sum, max, min, reversed, split, round, all, any, ord, char, callable, zip, float, format, hex, id, map, bool, divmod, slice, operator_in, asynchronousfunction, match, anext, ascii, dir, getattr, globals, hasattr, input, isinstance, issubclass, iter, locals, oct, open, ord, pow, eval, exec, filter, frozenset, aiter, bin, complex, delattr, enumerate, breakpoint, bytearray, bytes, compile, help, memoryview, repr, sorted, vars, __import__, classlist, py = unpack(require(game.ReplicatedStorage["Roblox.py"])(script)) +local py, builtin = unpack(require(game.ReplicatedStorage["roblox.pyc"])(script).py) + +local all = builtin.all +local compile = builtin.compile +local range = builtin.range +local int = builtin.int +local stringmeta = builtin.stringmeta +local str = builtin.str +local open = builtin.open +local id = builtin.id +local asynchronousfunction = builtin.asynchronousfunction +local dict = builtin.dict +local class = builtin.class +local staticmethod = builtin.staticmethod +local operator_in = builtin.operator_in + ----------------------------------------------------------------------------- --[[ XL.py (Stands for Extralarge) -A test script for the Roblox.py compiler that uses all of the python 3.13 features. +A test script for the roblox-pyc compiler that uses all of the python 3.13 features. ]] local y = require "x" local SSS = py.services.ServerScriptService