aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornic-gaffney <gaffney_nic@protonmail.com>2023-07-27 23:03:20 -0500
committernic-gaffney <gaffney_nic@protonmail.com>2023-07-27 23:03:20 -0500
commitad85abc2db9ed35a2e3cf6ab18573de135ee9a5c (patch)
treee251dd8bdf7f5122489c379d8198569f3b45f01b
parent1219f5ed8aed0bcb6a416a194fce70f0a290309d (diff)
downloadsloth-ad85abc2db9ed35a2e3cf6ab18573de135ee9a5c.tar.gz
Made error messages less terrible
-rwxr-xr-xbuild.sh2
-rw-r--r--sloth/src/analysis/setup.rs41
-rw-r--r--sloth/src/codegen/mod.rs9
-rw-r--r--sloth/src/parser/graph.rs2
4 files changed, 32 insertions, 22 deletions
diff --git a/build.sh b/build.sh
index 812a732..653604d 100755
--- a/build.sh
+++ b/build.sh
@@ -2,7 +2,7 @@
cargo build
FILENAME="$1"
# Compile standard library
-./target/release/sloth std/stdio.sloth std/stdlib.sloth std/stdmath.sloth $FILENAME
+./target/debug/sloth std/extern.sloth std/stdmath.sloth std/stdio.sloth $FILENAME
# Generate binary
clang -lm output.o std/stdio.c std/stdlib.c std/stdmath.c -o "${FILENAME%.sloth}"
diff --git a/sloth/src/analysis/setup.rs b/sloth/src/analysis/setup.rs
index 165051a..9ce518e 100644
--- a/sloth/src/analysis/setup.rs
+++ b/sloth/src/analysis/setup.rs
@@ -112,12 +112,18 @@ impl Populator {
.iter()
.map(|it| table.get_type(&it.typ))
.collect::<Option<Vec<_>>>()
- .ok_or(AnalysisError::UnknownIdentifier(line, "0xOwO".to_owned()))?;
+ .ok_or(AnalysisError::UnknownIdentifier(
+ line,
+ "Error creating function inputs".to_owned(),
+ ))?;
let output = output
.map(|it| table.get_type(it))
.unwrap_or(Some(Type::Void))
- .ok_or(AnalysisError::UnknownIdentifier(line, "0xUwU".to_owned()))?;
+ .ok_or(AnalysisError::UnknownIdentifier(
+ line,
+ "Error creating function output".to_owned(),
+ ))?;
Ok(Symbol::Value(ValueSymbol {
typ: Type::Function {
@@ -185,7 +191,7 @@ pub(super) fn propagate_types(node: &mut Expr) -> Result<(), AnalysisError> {
child
.typ
.clone()
- .ok_or(AnalysisError::Unknown(node.line, "owo choco"))?
+ .ok_or(AnalysisError::Unknown(node.line, "Error at grouping"))?
}
ExprKind::Literal(lit) => match lit {
Literal::Integer(_) => Type::Integer,
@@ -203,7 +209,7 @@ pub(super) fn propagate_types(node: &mut Expr) -> Result<(), AnalysisError> {
last = Some(member.typ.clone().unwrap());
}
- last.expect("need 1 element in literal im sozzy")
+ last.expect("Literal requires 1 element")
}
Literal::String(_) => Type::String,
_ => todo!(),
@@ -232,7 +238,7 @@ pub(super) fn propagate_types(node: &mut Expr) -> Result<(), AnalysisError> {
| BinaryOp::Mod => lhs
.typ
.clone()
- .ok_or(AnalysisError::Unknown(node.line, "owo?? choco???"))?,
+ .ok_or(AnalysisError::Unknown(node.line, "Error propagating type"))?,
BinaryOp::Lt
| BinaryOp::Gt
| BinaryOp::LtEq
@@ -242,23 +248,24 @@ pub(super) fn propagate_types(node: &mut Expr) -> Result<(), AnalysisError> {
BinaryOp::LogicalAnd | BinaryOp::LogicalOr => lhs
.typ
.clone()
- .ok_or(AnalysisError::Unknown(node.line, "owo?? choco???"))?,
- BinaryOp::Range => Type::Iterator {
- typ: Box::new(
- lhs.typ
- .clone()
- .ok_or(AnalysisError::Unknown(node.line, "skill issue"))?,
- ),
- },
+ .ok_or(AnalysisError::Unknown(node.line, "Error popagating type"))?,
+ BinaryOp::Range => {
+ Type::Iterator {
+ typ: Box::new(lhs.typ.clone().ok_or(AnalysisError::Unknown(
+ node.line,
+ "Error popagating type",
+ ))?),
+ }
+ }
}
}
ExprKind::UnaryOp { value, .. } => {
propagate_types(value)?;
- value.typ.clone().ok_or(AnalysisError::Unknown(
- node.line,
- "YOU'RE WRONG... SULFURIC ACID!",
- ))?
+ value
+ .typ
+ .clone()
+ .ok_or(AnalysisError::Unknown(node.line, "Error propagating type"))?
}
ExprKind::Call { callee, args } => {
propagate_types(callee)?;
diff --git a/sloth/src/codegen/mod.rs b/sloth/src/codegen/mod.rs
index 0452b03..3e34227 100644
--- a/sloth/src/codegen/mod.rs
+++ b/sloth/src/codegen/mod.rs
@@ -177,7 +177,7 @@ impl<'ctx> Codegen<'ctx> {
let current_ptr = self
.builder
.build_struct_gep(range_type, range_ptr, 0, "current")
- .expect("Butter corn salt!");
+ .expect("Error creating current_ptr at for loop.");
let table = body.symtable.clone();
let symbol = table.get_value(identifier).unwrap();
@@ -186,7 +186,7 @@ impl<'ctx> Codegen<'ctx> {
let end_ptr = self
.builder
.build_struct_gep(range_type, range_ptr, 1, "end")
- .expect("❌🧢");
+ .expect("Error creating end_ptr at for loop.");
self.builder.build_unconditional_branch(loop_bb);
@@ -464,7 +464,10 @@ impl<'ctx> Codegen<'ctx> {
// extracting an identifier to it. Change this
// so you can do for example `fn(){}()`.
let ExprKind::Identifier(ident) = &callee.kind else { panic!() };
- let function = self.module.get_function(ident).expect("oh nooos");
+ let function = self
+ .module
+ .get_function(ident)
+ .unwrap_or_else(|| panic!("Function not found: {}", ident));
let args = args
.iter()
diff --git a/sloth/src/parser/graph.rs b/sloth/src/parser/graph.rs
index 3d0dca5..29dd66c 100644
--- a/sloth/src/parser/graph.rs
+++ b/sloth/src/parser/graph.rs
@@ -1,4 +1,4 @@
-use std::fmt::{Error, Write};
+us estd::fmt::{Error, Write};
use super::ast::{Expr, ExprKind, Function, FunctionKind, Stmt, StmtKind};