From 7ea0132a30cbcee1ff43fe42c616da064d60978e Mon Sep 17 00:00:00 2001 From: Jonas Wanke Date: Thu, 15 Aug 2024 15:21:14 +0200 Subject: [PATCH] Add panic builtin function --- compiler_v4/src/hir.rs | 6 ++++++ compiler_v4/src/hir_to_c.rs | 8 ++++++++ 2 files changed, 14 insertions(+) diff --git a/compiler_v4/src/hir.rs b/compiler_v4/src/hir.rs index ba39a6e54..d67f746ac 100644 --- a/compiler_v4/src/hir.rs +++ b/compiler_v4/src/hir.rs @@ -274,6 +274,7 @@ pub enum BuiltinFunction { IntCompareTo, IntSubtract, IntToText, + Panic, Print, TextConcat, } @@ -306,6 +307,11 @@ impl BuiltinFunction { parameters: [("int".into(), Type::int())].into(), return_type: Type::text(), }, + Self::Panic => BuiltinFunctionSignature { + name: "panic".into(), + parameters: [("message".into(), Type::text())].into(), + return_type: Type::never(), + }, Self::Print => BuiltinFunctionSignature { name: "print".into(), parameters: [("message".into(), Type::text())].into(), diff --git a/compiler_v4/src/hir_to_c.rs b/compiler_v4/src/hir_to_c.rs index bee0f10c7..470e8a17d 100644 --- a/compiler_v4/src/hir_to_c.rs +++ b/compiler_v4/src/hir_to_c.rs @@ -238,6 +238,14 @@ impl<'h> Context<'h> { return result_pointer;", int = parameters[0].id, )), + BuiltinFunction::Panic => { + self.push(format!( + "\ + fputs({}->value); + exit(1);", + parameters[0].id, + )); + } BuiltinFunction::Print => { self.push(format!("puts({}->value);\n", parameters[0].id)); let nothing_id = Id::from_usize(1);