From f0e1959603bc0c2a37b1bf1c2c11054d0914857c Mon Sep 17 00:00:00 2001 From: SpookyDervish Date: Tue, 5 May 2026 20:05:45 +1000 Subject: [PATCH] added not eq and fixed some bugs with if statement codegen --- run_tests.py | 13 +++++++++++-- src/compiler.c | 12 ++++++++++-- src/lexer.c | 23 +++++++++++++++++++++++ src/parser.c | 2 ++ src/token.c | 4 ++++ src/token.h | 3 ++- test_objs/helloWorld | Bin 0 -> 15952 bytes test_objs/ifStatements | Bin 0 -> 15768 bytes test_objs/inlineFunctions | Bin 0 -> 15984 bytes test_objs/structs | Bin 0 -> 16000 bytes test_objs/variables | Bin 0 -> 15768 bytes tests/ifStatements.comet | 9 +++++++++ tests/structs.comet | 3 ++- 13 files changed, 63 insertions(+), 6 deletions(-) create mode 100755 test_objs/helloWorld create mode 100755 test_objs/ifStatements create mode 100755 test_objs/inlineFunctions create mode 100755 test_objs/structs create mode 100755 test_objs/variables create mode 100644 tests/ifStatements.comet diff --git a/run_tests.py b/run_tests.py index 37862cd..c6f8065 100644 --- a/run_tests.py +++ b/run_tests.py @@ -23,8 +23,17 @@ class CometTester(unittest.TestCase): for case in cases: with self.subTest(): - result = subprocess.run(["./cometc", f"{TESTS_FOLDER_NAME}/{case}", "-o", f"{TESTS_OBJ_FOLDER_NAME}/{case}.obj"]) - self.assertEqual(result.returncode, 0, f"{case} did not compile successfully!") + obj_name = f"{TESTS_OBJ_FOLDER_NAME}/{case}.obj" + program_name = f"{TESTS_OBJ_FOLDER_NAME}/{case.rstrip(".comet")}" + + result = subprocess.run(["./cometc", f"{TESTS_FOLDER_NAME}/{case}", "-o", obj_name]) + self.assertEqual(result.returncode, 0, f"{case} did not compile successfully (comet)!") + + gcc_result = subprocess.run(["gcc", obj_name, "-o", program_name, "-no-pie"]) + self.assertEqual(gcc_result.returncode, 0, f"{case} did not link successfully (gcc)!") + + program_result = subprocess.run([program_name]) + self.assertEqual(program_result.returncode, 0, f"{case} did not run successfully!") if __name__ == "__main__": diff --git a/src/compiler.c b/src/compiler.c index c342a71..203dffb 100644 --- a/src/compiler.c +++ b/src/compiler.c @@ -720,7 +720,8 @@ ResultType(int, charptr) visitIfStatement(CometCompiler* compiler, CometASTNode* ResultType(int, charptr) bodyResult = compileBlock(compiler, consequence); if (bodyResult.error) return Error(int, charptr, bodyResult.as.error); - LLVMBuildBr(compiler->builder, mergeBB); + if (!bodyResult.as.success) + LLVMBuildBr(compiler->builder, mergeBB); // build else block bool elseReturns = false; @@ -730,7 +731,8 @@ ResultType(int, charptr) visitIfStatement(CometCompiler* compiler, CometASTNode* ResultType(int, charptr) elseResult = compileBlock(compiler, otherwise); if (elseResult.error) return Error(int, charptr, elseResult.as.error); - LLVMBuildBr(compiler->builder, mergeBB); + if (!elseResult.as.success) + LLVMBuildBr(compiler->builder, mergeBB); elseReturns = elseResult.as.success; } @@ -1123,6 +1125,11 @@ ResultType(CometValue, charptr) visitInfixExpression(CometCompiler* compiler, Co value = LLVMBuildICmp(compiler->builder, LLVMIntEQ, left.as.success.value, right.as.success.value, ""); break; } + case CT_NOT_EQ: { + type = getType(compiler, "bool"); + value = LLVMBuildICmp(compiler->builder, LLVMIntNE, left.as.success.value, right.as.success.value, ""); + break; + } case CT_LT: { type = getType(compiler, "bool"); value = LLVMBuildICmp(compiler->builder, LLVMIntSLT, left.as.success.value, right.as.success.value, ""); @@ -1327,6 +1334,7 @@ ResultType(Nothing, charptr) compileAST(CometCompiler* compiler, CometASTNode* r // verify IR if (LLVMVerifyModule(compiler->module, LLVMReturnStatusAction, &error) != 0) { + printf("Module:\n%s\n", LLVMPrintModuleToString(compiler->module)); return Error(Nothing, charptr, error); } diff --git a/src/lexer.c b/src/lexer.c index 9eb62c5..5169364 100644 --- a/src/lexer.c +++ b/src/lexer.c @@ -278,6 +278,29 @@ ResultType(tokenList, charptr) lex(CometLexer* lexer) { case '\n': case '\r': break; + case '!': { + ResultType(char, charptr) next = lexerPeek(lexer); + + if (next.error) { + append(tokens, TOKEN_LITERAL(CT_NOT, "!")); + break; + } + lexerConsume(lexer); + + if (next.as.success == '=') { + + append(tokens, TOKEN_LITERAL(CT_NOT_EQ, "!=")); + } else { + if (isspace(next.as.success)) { + append(tokens, TOKEN_LITERAL(CT_NOT, "!")) + break; + } + + return Error(tokenList, charptr, "Expected '=' after '!'."); + } + + break; + } case '=': { ResultType(char, charptr) next = lexerPeek(lexer); diff --git a/src/parser.c b/src/parser.c index 6b18a34..ed7d663 100644 --- a/src/parser.c +++ b/src/parser.c @@ -24,6 +24,7 @@ const CometTokenPrecedencePair PRECEDENCES[] = { {CT_LTE, PRECEDENCE_LESSGREATER}, {CT_GTE, PRECEDENCE_LESSGREATER}, {CT_EQ_EQ, PRECEDENCE_EQUALS}, + {CT_NOT_EQ, PRECEDENCE_EQUALS}, {CT_DOT, PRECEDENCE_INDEX}, {CT_EQ, PRECEDENCE_SET} }; @@ -61,6 +62,7 @@ const CometInfixParseFn INFIX_PARSE_FUNCTIONS[] = { {CT_LTE, parseInfixExpression}, {CT_GTE, parseInfixExpression}, {CT_EQ_EQ, parseInfixExpression}, + {CT_NOT_EQ, parseInfixExpression}, {CT_DOT, parseInfixExpression}, {CT_EQ, parseInfixExpression} }; diff --git a/src/token.c b/src/token.c index fb7f0ca..2845fc5 100644 --- a/src/token.c +++ b/src/token.c @@ -62,6 +62,10 @@ char* tokenTypeToCStr(CometTokenType tokType) { return "CT_INLINE_FUNC_ARROW"; case CT_COMMA: return "CT_COMMA"; + case CT_NOT: + return "CT_NOT"; + case CT_NOT_EQ: + return "CT_NOT_EQ"; default: return "FIXME"; diff --git a/src/token.h b/src/token.h index cd58131..7442b8a 100644 --- a/src/token.h +++ b/src/token.h @@ -16,10 +16,11 @@ typedef enum { // symbols CT_EQ_EQ, CT_LT, CT_GT, CT_LTE, CT_GTE, CT_COLON, - CT_EQ, + CT_EQ, CT_NOT_EQ, CT_PLUS, CT_MINUS, CT_DIVIDE, CT_TIMES, CT_MOD, CT_POW, CT_DOT, CT_DOT_DOT, CT_ARROW, CT_INLINE_FUNC_ARROW, CT_OPEN_CURLY, CT_CLOSE_CURLY, CT_OPEN_PAREN, CT_CLOSE_PAREN, CT_COMMA, + CT_NOT, // other CT_COMMENT, CT_END_LABEL, CT_EOF diff --git a/test_objs/helloWorld b/test_objs/helloWorld new file mode 100755 index 0000000000000000000000000000000000000000..241f512d62c9ac299ae886a9ae0a005c9428dd9a GIT binary patch literal 15952 zcmeHOU2Ggz6~4P`J4=4-jh%pMebdxb*d|i}yUW}N;G4Ik2%_#-Sx}2EuHMgHRrsgJUXih26f3qjJi-H4% zJ}B&+ecwslkG)fZ+a(q5lK6ujP;LT+y-C5X3T{$;kX^{HKALb5qo!P z_f~0d(2y8le|OQv&3EGDIQqzUlc^uJ-#Sv-_3N*lKA1^Q_4OXiq&hR{ z+`?k#Vt-#}UvIpakN4okC4o$A#WjBE&V6%pg(g5xw0&JnrW-( zBnys}O{Q~dzL3s2Gm6FhOnvIa*y!MKt0&$QKU~Ql>Q&b0Z-ful}^i3|f?vcx8HvlE_yygY+D*za zKgVT%x?V1q8Q=Za(M#`qE^+C-#DzbspPC%*Ug>^2@zz^iJ4t=_G^yX5i8r-BtLtO^ zt5tUSN3Ar_O&sOB(?U)>M(XUume*NSzJ8UB&Qt+E*7{%iK$A=Bi8nqtmUv?$k_f$- zc;~j$Mm21e8g@txGfnM7N>M!}c7W}djy^~_YN6%v#HIJwo}s6Bvwj;%LQh{^_S<9q zKR;i!f9mx*!&KcXYd3C}%iSwaa+Fv{$FLGLwiKiw0zm|V2m}!bA`nC%h(Hj5AOb-I zf(Qf=2qN(R69HcLO4yl9{($jBzK}`n-%9h~y^$jilZ(7gwSB!@&JaC7l%~<@DWabt z`oM?f@;8X`nkA>uGiOw2F&5gpeM@wi7Q}cRjo0q4|E*kph!uvm#8}4bXSYa(wXO~> zqU#FD45F$rHqzMo>85R;kCxQ2Jx3ln)bVi^vmN%MMD};GV4yKJ(TLSrrQUltQXf$p z+Gk!fWB)msbUj9Ob7K3vcIo9G^zhnG;-32V`Xjv*f9)cF#V79(Ir=xTIwj~HqMg0GUw{+ZXHw^PEA&@gNVhN0#dh(&K>iiV zgy_Ez=>L#^hcdPN|K1(suj+bYYQ-=qw>j0S=O?5RQXf_R_WQYpHYx0XM@{c){Z@td z0P>rZ;aL0AP6~+O7ZN|ALo`N!}dZq42$c{85&J@z8Op$6xU)RE4i?!rt{hPjP2N| zcvo!=YbKpbTggHpxn$Wnr?8}E3dyW(r53W;C4zW3i!_~0s(Rl(IcDcl+SidY1LMQi z@W~;I_TCRYd2(QU^f=W)pAl;~VY#J=p)<-lF*Y$cFlJ4RjGP^wv?d1z$A$^vKN4W# z1i;;P{oARelT`XqV+ADYzx)?Lsk~&uwBXDkH~} z43OM>#^D;%ba(7Ux^v@GSzgC4ZqG?`&!q?pjvUpUK*cNW%@^|XcEMQ^(ZJwnCwEa@ zwcA15s*xuTlG*e$xtAxSbc<_GT&omD6{mihrS4bh{`Z^VaS8vHhou6Xf5N$_4qwIi zUO*hD484*SJkF!xoEpY8&}Ut5;$w3Epx=Jj$9QK|1}MP8F2)(C!=z00zsS|`(3;?v zMUlT-Y#VrtOZfMWRbe0Ft3@$bqB3vt`+tfGc`O4w#xEO!$2bxGLl5+6!t>Y&JjO>+ z`Osqc;P)Rs@&EX_Zs0K<>lgevQG|W}^Pd;|py*+IcSZ1s6XQAW$CpUPF=?PnCw!M< zE{k!mlxkm*XUgLTFWwNmA$Wt8JW0fQZGgpJrpt@R?~y5ro}-$&7T`5Qx63{}evgOb z2MXhQ=p&Bczb<&hAHS>0a5Y+>DAbStCdt`<;4wbIxxE8-!N26gn}(?orlE;?)+LoY z+7E&sQ0Atm|KXe;&i~yF{~F=F-;e5fNY{ellFHq0|Cdza#bdmCalZ>ODo8iukKgY} zOrx2~nJ^%@G-)(4E|#r z*D83wKKtrTyT!h!SBil5e?NftQoK7AFlG9s!gJyn&ySkvf9CEY2 XgCQyLv3eX^3tu?w0`~a;K34q;BKqte literal 0 HcmV?d00001 diff --git a/test_objs/ifStatements b/test_objs/ifStatements new file mode 100755 index 0000000000000000000000000000000000000000..ca5120f93204e4deb7642d5eb55672ebe1d990ce GIT binary patch literal 15768 zcmeHOU2Ggz6~4RcB&JE~wUd&Bq+}3LWsp3v9mk4F+l>F>wd5pjvPD6njMv_=y|6#l z?zq^c0z-;O-~sc(Ly-^?RY9T;JoJGlNHA(rfhy0W8(+;i^v&N*}Lo!L7(_kLw${9H1TP$)_DgksJ~ds<}9N?qyKtjNx&Hsz^@ z)iJf3BrSA!x`nB!fo4*s0kl>0Sj@PWrTyiUr&~aeX-<&`QxG9j#%&i*s)k3c`M@cA#laI#pK>hC*Q%y$(F z<%Pwr#WVd~{e5n&;`Zu$mTkeF@$&v>*6(Pd)=4s_iG27z^2_&;E8nN6r~O)(tA>6l zS12pyIp}^hIzBcy$_(rv< zBE^uDm=lzV15`)9yz-szQgR!X zxA**M?E0P0Wv;)Kx%#`!iR?(vjh@#sw{E4|Jyn0`DxtP!+_vM-H}qGx*_EHAJx^sG z=W}>~oP1WC?D++Y>Tj;L9rx7CHsI%4|Euq4a(y#%^PRJqn|D*0#H*P*_rfD&;ge!v zzgU=QJ5DbpWM`QJ;CPoGKTSGn;lNXw>u+y7Td&t&-Su&jB%WSfiTh*yKYVlBf6t9o zZA0gzkp;GFi_L(|fX#r-fX#r-fX#r-fX#r-fX#r-fX%@FZw3-9WQ{x-=a@$4m)SWG95?%UJK-=O*X8h@i-|8u?m2rCTlNwch* zjxCbO=XkA0uj%RsWHK5VfWuoFIZS+#aX5ySKl)?-ak# z|BJ%c-J;&D$5l9w3DvIR>%#dxznT8SBu~=Y{iKW|*gG!rm6*I&{->#G`-j!xnEn?@ z-jRGjO~^RG|4$yvsec`jKO(NbEp{+Y5E1t;>+>QPF8I&td!)~C#`S+haz|_KJl!OD zN0Oc%;*f6MXTS-B-~yH?}sISnpeWtNHbsYXN#4oT+z>m zm1@n;Ei9_(N@>0rghAfzZm!|a6v_oZSFPrj{Gc3Gm()x(R|@?6LaDSwkO=3KX1GID zuh*x*f^uHRdhXJ|`4NBQ!mv-v@P|KhVc`7O5ZR!|g+G$1WOlJZB#FAffj`xnoh zyF8NhvjcVa{CaBg5mGTb8 zr#1>a#{jld2$dTKi*)AxrM8MrksHiOkIv-@0gl4c{jA(ZQ1jKwd{7OSL^Los*2SYx zn>J&>m`0ua=1PTW3aUa*>EzBAsbaiR@{~(Mu|y-RF~a|&3eOMtH#sR*u#XA*n@+^6 zAix31g;l1`dMnQzeS;6#t!$(YOLdp~yePKc>o7r2nyBZrL#!*e?hDIR2;95WRn~ zpAh>D#SGw$@ejdj43GIE_8Z3W@$0`s_y_5b+pRHw!@j(Dyx>89OW3vu9`nU+ey~u1 zp5eB6$bU}_Ja*w9^EmA5#QsgpPk_TX{0m{Z|A5DSwc962NX60T?Gx~zf2XD>9`nKt z!Q(jt3&4RgIErt~aJ5diy&mc8O%)EiB}$M1jOqZIc} y15A}}F_@9S*bd*LhzEJ$_dUc;)kax7WvaK}NLpen%~_k{&z?4bgE2siRsRHlhm(l_ literal 0 HcmV?d00001 diff --git a/test_objs/inlineFunctions b/test_objs/inlineFunctions new file mode 100755 index 0000000000000000000000000000000000000000..a223bc635251e33d79b35bbb4b51743f9effb9b9 GIT binary patch literal 15984 zcmeHOYit}>6~4P`Crcjo#!0|V+IWiGQXbyej$2sQN@q^ijXLhRrLoHDRD4LQXWzweh>*1Srt`{pv6@JvQU-foIB^+ z9gj9@RD}35*P1!^oO`}=&YZb3d&l?QZww3%1_J?w5>$^V=FEtxMb25Ng)YsCtXtJ9 zQ#GqSY6D4X=rDB)Q>O+R3pov-VbNnT<6e{Y*FvUl0ewJoN`WFmri`l;Q>qSKsC8IS z6>)gR=_cWoTp#G1H~@9yv_HeKqYTrj2wfB$s2j(*S!s3DR}MNj(6*o>?-mLivy594 z+?wD(uZurWiw2+H-=x3H~!5&rbtFV4U70m-AGpfk9ldPKlllRaczlU5|7G2Gl zRj}iE+sedKSv8eUW$kgrV!oy>b$EEFx6kT`c0~7=>-##DH8gU>N+k2iiB!Q(=0}e7 zrE}TjNPIM%B&!pdTvn`Fj%rm!rT9k3!$P$H@wv;Agjy&XIIm(}AV1MQ3LZ^f=&HMf!a&M{KIGajvPeqP&S z{iO;!|MNx~=*AB6+1^e;e3{fah>e$6R9aqQr{fjCMXmqM_cfVYja`2KQ0($rC>FR9 zyK&cUA`6?u!d9^`Ufw`eXgS zeW&7o?o7*vb9T$x_iDbVRgYioZ>iyd`_-D3AdyR4zsR+f8)W!WjbW;bEPIn>bC=r} zSAKD~RBB&*YDveUb6?IjsrbdufS&)MlCcjiJkLg->1v*222oWP8LVsk zO8w@qhl}dat^=Rj*Yar=Gd4}f48^g91ytB~kq(<=Ja4Ib>LRms&P?vxw?efcwWjB| zc`ofyZl_|>(L%nsuuY!Rbn_3ocpW$K{i4q?bDsE%o@VF5H8KMj3X3GNAw=`L5&8>- zH;2gl=8Cqbt%h3IKilMa-(XQKvJ7*IXlI_=xv-26zxWyOGvH^y&w!r+KLdUS{0#UR z@H60NpjrkDnvCVLD(jx{eZgxUx!_w0>!G(gVs%DvO~PaS@^0a=UKVy%WxX=iZKM64 zcS|{jTnm{RiSNFd8i(JYr8H|Q?fiYkrKr!&7Zg_;h2JR@1ZyN$WId(xC05bL_bGn^ za`}`))VW$y*C6i}9&w)%Jz5N^3;fd@uD+hI=+kGU=8;$W6xIBiT%W-IZv^Ydy#aJd zfAGo=_w{|rc$B_4KWnsiMcbq8Mn_vmS6k=4Hm~M-p0B?~eNb92Rf_W&P}`MveK>!2 zSJUV3?;!Qcq9?v)kuP}U9U@2nCRUdioddM8m)8q$!TlN0^_>d+RX5V4OE2mkm>Ime>@&6Lu-w~nyV0iRjCV4|} zi<**th4<5wET`)=MgE9*xgd7XuSBf4KWKf)kN$rY$zCUYj?=4uk>m!zE_##X4MBPf zir;e6Sl(`r=4hdNd^Ba*@d-tOQCbS0C1GVzyk%#sFqH<7q2l=kf(B zK0Twxa+#@g(oQC#ZPhib@l-Zt#q;_2td-2#`B^odk7trrVmgzVC5Vf&NYh@Ys@L;V zV99Jk$2xeT=g5FHaJ1i|HTnHd9qlPGqN}qthwc0+LFoDD9U>=BJdFPR0w9Dw>$hk_Cs_ zd8g&sWWJEfW!EtlwNc=421soxZL`G`o$cfdow);0TTbUMnw*qdKA9jaI0{sE1QjiZ zHdq{ z9=GsseNc>Ge-!pjwRnumCWjBnNi zkKY5t4?WPQ3D09E@EAXZ<%Nskg*Sf0l%@*X1|H+JZo!`tMfmq#|FeSc6+Mjq&IulQ zVm#Nq_#(+TCmZO{1@GsG!(v=4tvXiJnezC;jW+~u2;N{NR}rzEBVh5j>2TxmyJU*u z0nZHs9wxu*!DD=XW}BmdaX<8tNARx*9{I=bt1=vo1}F;k;$I~>hX_2zFWA@D`4RY^ zcMlFQzo?g+fcL&XfOk_oJ7q9cy2ap(1jgS_{463K lyw~_U7O_*cTo(2@)mv~REgqJ})Yb7X?{@%uJOB@?{sZ`<4mJP) literal 0 HcmV?d00001 diff --git a/test_objs/structs b/test_objs/structs new file mode 100755 index 0000000000000000000000000000000000000000..28b47892bf09491caa512ccc9efc15b916e25599 GIT binary patch literal 16000 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 literal 0 HcmV?d00001 diff --git a/test_objs/variables b/test_objs/variables new file mode 100755 index 0000000000000000000000000000000000000000..8ebf0a8e3ca606fc5cc274984a7eb710663e7688 GIT binary patch literal 15768 zcmeHOU2Ggz6~4RcB&PZC+G$BjQaq?uWh!}MJFXSdpNwNW9!pN*CT^8VwBxmRY_GIG z?(VqQZ6yo|B8CUd3qnFdeL%D-eL$j>`a~04C8>}q=K;w=qErz9BT8{0fW^V_!|~nofxbWf1oYO6j1mZ5!}4s<^>0ON^qdKzQ+m2{qRW(hSeGI zcc*?|Nf?Wu!s%V-r&edFYA~6$y_Dy%OfXy^QEFck{QeUWMZ;VDvAlu zsBWo9F(f7C1Z83`)zL4nfA@RTok@CTnR4xzqbuCUwK-d^k;4`%uGGlo7Ss6mYvdSn zx*NGbOlmx5$<***Vu z{gRHB+dKX|xN!X$cj1P6{&#D`BmEthI^J=wUQIVTs(R0PLfx9M8=5bK`b!(^;+tv5 zQSPIB4)&6hFN>2MZ?UNQ{!&A;qb4>0KiB$S`%sgGHTUv|$K1>7DK~M&y?#5mmn=Le z7Iuq;iH2r+DIq)a9012V|L8-cqh|I#;V#@5W&3u0FYE&~e{<r)oPX~f1Bizc>at^%%&3ucI~L=Z_xaGjla>a{H0obfED_7q*>NZ z$1Re{=XkA0uj%R~vU`*$%8mC@+fr&>f45`*_!enV{Q}{+XuHJ!NO-n+7aivNT&liK zzTlchuy(y2LVk<3l_1+|Gq%e8eTrK%9X%191l848$3TGZ1GW&On@j zI0JD8CxOo5uSTud(E^%Mg0`a&&FC@I!*TS9q*{J|H~S+kQ^?c3JPt@0487 z{`cF}67$zm4imGMo9Jkr!>nF2&2&}T`TdYf!4S1m=zgL12nE?8m36TPzoR1mj8Ncj zS4})CqED}>IzHruUUN17uCxpMQzKYE{&4{e^!6ULTItRBi&jUs-C=iFo$a07?OliY zh5kPjzV15pQ8lWID)-qkuOH%og&A$guY9agxXKT z(a|FG%ZQfmRTyWwkxnnr!G1B$A^#>-67;VG#x3MOrpi|F|Ktwx*R`EJ>P5?;+UByA zonMejg8p@h_S-KtbhpB~cUXE)>wi|Q%6eqTZ&8JF9W9NN5GyJq{t+$Tr=LbQ&y3}~ATy~*Fh;B2izM7w2k!+1Z=6@cS4cBk@+R}8u}t2} z2BmVv%goHG@ls(r?+1R?Zr@tNo5&S&UZz~m%z1t>D9@>ha;D&W*_lFNjvzIhN1DMV zRlQ!H0`rSm9qWlRJtzCU{!@J(EyM47>Qv9k!CtaKj|;Eg^-QbVcSd;wL#L1T40)$d zoH*M*;*IniAL=JWbSr@KNjCua*-Vg8`cn8Ri7~qYh}pa~z{^%j-c+WT6FcTWj|jU&jdc32y)}zbdI+ej8!V3P1=2ci{xzyTkbW`$x_O$%oT#n z7}20?=oD(jQsCQ@#Tk2SCP#ZVa#>~PinO<3T50K2rZT1M>|Bv77#fsK%X5CYk}DNA zF&?#1;28$6om`;oz@Mcv_b;`Tbc$?$N_uoEO9*fjp6+L5he1u3OVfTim=jUY@xeA8 zh1#?k1I9G!pDH{*;NRq=SiwFf>~Cs` zSjTe#V%|PQw_b?HzB24L!~6pJtXo@nyW2nLHyr*k@3_W)Qd0pQelcG#t@QY$3eP!! z$Gl`!@Ux=G&nNZ`Jmwet`^BojW1cfA4l%DG6wk{g+3t4H3!k6-=ROt89}Q=G zq0aP0I%@HjJbx|0KNv}vh(i-!kKpn9Hq>ZTFuw%=*8%>b;F}<@98=gf^9yS3Vz5ju) zrMP!OFjd;cpeuo~9ll2q5AwqAdx)K?VVON_s#oDiS|TjXS+~X?d&mIpjsPO8`Zv*z Btx5m@ literal 0 HcmV?d00001 diff --git a/tests/ifStatements.comet b/tests/ifStatements.comet new file mode 100644 index 0000000..8ef9bd9 --- /dev/null +++ b/tests/ifStatements.comet @@ -0,0 +1,9 @@ +func main() -> int { + if 1+1 == 2 { + return 0 + } else { + return 1 + } + + return 0 +} \ No newline at end of file diff --git a/tests/structs.comet b/tests/structs.comet index 807117d..9da78f5 100644 --- a/tests/structs.comet +++ b/tests/structs.comet @@ -13,5 +13,6 @@ struct Vector { func main() -> int { Vector myVector = new Vector(1, 2, 3) print("myVector.x = %d, myVector.y = %d, myVector.z = %d\n", myVector.x, myVector.y, myVector.z) - return 0 + print("%d\n", myVector.y != 2) + return myVector.y != 2 } \ No newline at end of file