From 637aa8e2291c53c3cd46480c4f94db27586c677b Mon Sep 17 00:00:00 2001 From: Edgar Luque Date: Tue, 7 May 2024 08:27:27 +0200 Subject: [PATCH] feat: function call checks --- Cargo.lock | 44 +++++++++++++++--------------- lib/edlang_check/src/lib.rs | 16 +++++++++++ lib/edlang_lowering/src/errors.rs | 7 +++++ lib/edlang_lowering/src/lib.rs | 23 ++++++++++++++-- program | Bin 15808 -> 0 bytes 5 files changed, 65 insertions(+), 25 deletions(-) delete mode 100755 program diff --git a/Cargo.lock b/Cargo.lock index f16d577e3..b17e9b739 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -62,9 +62,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.82" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f538837af36e6f6a9be0faa67f9a314f8119e4e4b5867c6ab40ed60360142519" +checksum = "25bdb32cbbdce2b519a9cd7df3a678443100e265d5e25ca763b7572a5104f5f3" [[package]] name = "ariadne" @@ -127,9 +127,9 @@ checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" [[package]] name = "cc" -version = "1.0.96" +version = "1.0.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "065a29261d53ba54260972629f9ca6bffa69bac13cd1fed61420f7fa68b9f8bd" +checksum = "099a5357d84c4c61eb35fc8eafa9a79a902c2f76911e5747ced4e032edd8d9b4" dependencies = [ "jobserver", "libc", @@ -370,9 +370,9 @@ checksum = "a47c1c47d2f5964e29c61246e81db715514cd532db6b5116a25ea3c03d6780a2" [[package]] name = "ena" -version = "0.14.2" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c533630cf40e9caa44bd91aadc88a75d75a4c3a12b4cfde353cbed41daa1e1f1" +checksum = "3d248bdd43ce613d87415282f69b9bb99d947d290b10962dd6c56233312c2ad5" dependencies = [ "log", ] @@ -442,9 +442,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94b22e06ecb0110981051723910cbf0b5f5e09a2062dd7663334ee79a9d1286c" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", "libc", @@ -874,9 +874,9 @@ checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" [[package]] name = "proc-macro2" -version = "1.0.81" +version = "1.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d1597b0c024618f09a9c3b8655b7e430397a36d23fdafec26d6965e9eec3eba" +checksum = "8ad3d49ab951a01fbaafe34f2ec74122942fe18a3f9814c3268f1bb72042131b" dependencies = [ "unicode-ident", ] @@ -975,9 +975,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.15" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80af6f9131f277a45a3fba6ce8e2258037bb0477a67e610d3c1fe046ab31de47" +checksum = "092474d1a01ea8278f69e6a358998405fae5b8b963ddaeb2b0b04a128bf1dfb0" [[package]] name = "same-file" @@ -996,9 +996,9 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "semver" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" [[package]] name = "serde" @@ -1071,9 +1071,9 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "syn" -version = "2.0.60" +version = "2.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "909518bc7b1c9b779f1bbf07f2929d35af9f0f37e47c6e9ef7f9dddc1e1821f3" +checksum = "c993ed8ccba56ae856363b1845da7266a7cb78e1d146c8a32d54b45a8b831fc9" dependencies = [ "proc-macro2", "quote", @@ -1138,18 +1138,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.59" +version = "1.0.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0126ad08bff79f29fc3ae6a55cc72352056dfff61e3ff8bb7129476d44b23aa" +checksum = "579e9083ca58dd9dcf91a9923bb9054071b9ebbd800b342194c9feb0ee89fc18" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.59" +version = "1.0.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1cd413b5d558b4c5bf3680e324a6fa5014e7b7c067a51e69dbdf47eb7148b66" +checksum = "e2470041c06ec3ac1ab38d0356a6119054dedaea53e12fbefc0de730a1c08524" dependencies = [ "proc-macro2", "quote", @@ -1535,9 +1535,9 @@ checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" [[package]] name = "winnow" -version = "0.6.7" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14b9415ee827af173ebb3f15f9083df5a122eb93572ec28741fb153356ea2578" +checksum = "c3c52e9c97a68071b23e836c9380edae937f17b9c4667bd021973efc689f618d" dependencies = [ "memchr", ] diff --git a/lib/edlang_check/src/lib.rs b/lib/edlang_check/src/lib.rs index 8e6b3223c..4a580b3db 100644 --- a/lib/edlang_check/src/lib.rs +++ b/lib/edlang_check/src/lib.rs @@ -182,5 +182,21 @@ pub fn lowering_error_to_report( ) .finish() } + LoweringError::ParamCountMismatch { + span, + has_args, + needs, + file_id, + } => { + let path = session.file_paths[file_id].display().to_string(); + Report::build(ReportKind::Error, path.clone(), span.lo) + .with_code("ParamCountMismatch") + .with_label( + Label::new((path, span.into())) + .with_message(format!("function call parameter count mismatch: has {}, needs {}.", has_args, needs)) + .with_color(colors.next()), + ) + .finish() + }, } } diff --git a/lib/edlang_lowering/src/errors.rs b/lib/edlang_lowering/src/errors.rs index d0498cf1c..321262788 100644 --- a/lib/edlang_lowering/src/errors.rs +++ b/lib/edlang_lowering/src/errors.rs @@ -63,4 +63,11 @@ pub enum LoweringError { name: String, file_id: usize, }, + #[error("parameter count mismatch to function call")] + ParamCountMismatch { + span: Span, + has_args: usize, + needs: usize, + file_id: usize, + }, } diff --git a/lib/edlang_lowering/src/lib.rs b/lib/edlang_lowering/src/lib.rs index c29daf99e..18ccc3af9 100644 --- a/lib/edlang_lowering/src/lib.rs +++ b/lib/edlang_lowering/src/lib.rs @@ -1000,12 +1000,29 @@ fn lower_fn_call( } }; + if args_ty.len() != info.params.len() { + return Err(LoweringError::ParamCountMismatch { + span: info.span, + has_args: info.params.len(), + needs: args_ty.len(), + file_id: builder.file_id, + }); + } + let mut args = Vec::new(); - assert_eq!(args_ty.len(), info.params.len(), "param length mismatch"); - for (arg, arg_ty) in info.params.iter().zip(args_ty) { - let (rvalue, _rvalue_ty, _span) = lower_expr(builder, arg, Some(&arg_ty))?; + let (rvalue, rvalue_ty, arg_span) = lower_expr(builder, arg, Some(&arg_ty))?; + + if rvalue_ty != arg_ty.kind { + return Err(LoweringError::UnexpectedType { + span: arg_span, + found: rvalue_ty, + expected: arg_ty, + file_id: builder.file_id, + }); + } + args.push(rvalue); } diff --git a/program b/program deleted file mode 100755 index bac4636d753e71464b8d031c205e5612d7e78fee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15808 zcmeHOTWlOx89uW&uf5KCZKuK|X*+@~3J;$6RyS=SSvz*T1~&<*OM^h2tg~Z#>3Vmy zJFeEHQlT*jlU8a~smc>iydWWwhl;mCP%0sikcbc>4?I+;NO=gV5f>pEb@~1||G%9~ zoKhhK5<0&$^PT^8F5jM+J-c(}h54luG0RdSadlLYX6Lk}z>dN+7XSryMD4@*es!Np zK~DrW?JsD6SIhO-?U-hJ97uU1RM-O#YO@lQ9uiXC-K4=zLB->syd)*D9>q7gLP7C& z+p{?!g4=8s4CfIyZAS;RkKT?i@qh#+kLdcaymOoklG-5;tziL-)ZkO=Oyf*8WqL7HY-7C?+eHyUOuYG$9#s{yW8jRZRS&uRdu*p zS(%rDMLG>+S}iOs&K`FsoXIJKt!>n6 z9OhC*G47wGhM@_cZ@l_CK86^sd@a|HX{67F`X=&r$Sz|RpFzWbVZbn87%&VN1`Gp+ z0mFb{;D5uwp9k*$NAbeVbn#;H+F_-N-@M|-I=?Djcq@H1=n(nG|G2nw?djsq?~51S z**(2HKYnHW=f#&lJC1<@%g^U?Kc-(yH{R@YIxr>RN&x$T{lNXe{pi%l)oy>g zJq(&PC&PeYz%XDKFbo(53GHFkl!k3>XGJgaM15^BsskW+R54PafRubUp)I z0xkoqz;)n$93<9rXOz{>SqJ)i(y!owAKB>{{q=V{oljA~Tu<<*kWN!Lc43!ig%n%F zaSOHrP|aoSuVv*)G#QK-1`Gp+0mFb{z%XDKFbo(538Rw8k-m&vm4`6pJuBqMm36h^tRsLqC|V#8_oJ!v$UZmQC|0|)w9J>9FEKEj~NxFOO90)m%_b;-^~cU!cG=1!6+X*g>9Du@Uj07gM*XJ$GiKFT*OH&19%DrF!#Fj%G3__T|(fT~HMq3H1r; zpJlz5-A6#I z$hVTYRN6`QrM8pt)Qg$V#geGmD_2XkwQ#lCGTJIXBUU{l@?-gjcy4S?PUyMORxPi( zs%9`-=x?MC<`mI8qlkNo{g*<+OQ=6}_6pp~PWKxNyV|4Ig}yIjyYD4PeTRbhA$5cI zwTqo5On4TH{i`V0v~#{77L8v9?^Pj#roA{o{%~kmlDTE>)C|emY@)BqdbVW zbHpjPo7Z5ccGHDWFp4!CLn_mK-zWGF54KA<_Uh;NI6iz;!KA)V_E=x{{!O+(_`X2X z&7J$w$(hF&kK<(nyb|Hg7u^$QW*(n+i*sj`yRdX>c4o;vb>hSm^ULn?%b1*-%cc?t9K!ZPUTf8eY@iV$;m*;;3I*Q-N>2)LK_gd8>x{H2O{L zdDd&TD)riJiVI)UtClE1IYCbx-)sBI2?pmh>%mYRZ{1zRP1bYQ%g7KdsK2yPIgdK) z$ic~JR8i1L=j$6AxVJ;~RyNn%#^y>5RkTE})K=?KF0HIIy=O(kn=hV}L4p)ffxp#2 z1^)>-fJ*4v)ffJq?}O1zAuJRdmQO;VZxYEr!r%Xbb~qSi`Cb<@z19}aKg;=owgfWD z^(5vw6#jj$`=oZgY>$VY#iRTC)hCAwdjK63;qsfDThNJ=6u>@8