Add floats

This commit is contained in:
Sofia 2026-03-17 22:10:40 +02:00
parent 8c0220c0c2
commit f55f9be345
3 changed files with 21 additions and 6 deletions

View File

@ -20,7 +20,7 @@ global sometable = {}
sometable["hello"] = {}
sometable["hello"].there = "my dude"
print(max(11, 9))
print(max(11.12345, 9))
print(add(10)(15))
print(add(10)(15))
print(b)

View File

@ -465,9 +465,24 @@ impl Parse for PrimaryExpression {
Expression::FunctionDefinition(function.kind.params, function.kind.block)
} else if let Some(Token::DecimalValue(value)) = peeked {
stream.next(); // Consume decimal value
Expression::Literal(Literal::Integer(LuaInteger(
i64::from_str_radix(&value, 10).unwrap(),
)))
let initial_value = i64::from_str_radix(&value, 10).unwrap();
if stream.peek() == Some(Token::Symbol('.')) {
stream.next(); // consume dot
if let Some(Token::DecimalValue(decimal_string)) = stream.next() {
let decimal_value = u64::from_str_radix(&decimal_string, 10).unwrap();
let log10 = decimal_value.ilog10();
let decimal_value = decimal_value as f64 / (10u64.pow(log10 + 1) as f64);
Expression::Literal(Literal::Float(LuaFloat(
initial_value as f64 + decimal_value,
)))
} else {
return Err(stream.expected_err("number"));
}
} else {
Expression::Literal(Literal::Integer(LuaInteger(initial_value)))
}
} else if let Some(Token::StringLit(value)) = peeked {
stream.next(); // Consume string-literal
Expression::Literal(Literal::String(value))

View File

@ -98,7 +98,7 @@ impl Debug for Constant {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::String(arg0) => f.debug_tuple("String").field(arg0).finish(),
Self::Float(arg0) => f.debug_tuple("Number").field(&arg0.lua_number()).finish(),
Self::Float(arg0) => f.debug_tuple("Float").field(&arg0.lua_number()).finish(),
Self::Integer(arg0) => f.debug_tuple("Integer").field(arg0).finish(),
Self::Bool(arg0) => f.debug_tuple("Boolean").field(arg0).finish(),
Self::Nil => f.debug_tuple("Nil").finish(),
@ -432,7 +432,7 @@ impl Value {
impl Debug for Value {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Value::Float(arg0) => f.debug_tuple("Number").field(&arg0.lua_number()).finish(),
Value::Float(arg0) => f.debug_tuple("Float").field(&arg0.lua_number()).finish(),
Value::Integer(arg0) => f.debug_tuple("Integer").field(arg0).finish(),
Value::Boolean(arg0) => f.debug_tuple("Boolean").field(arg0).finish(),
Value::String(value) => f.debug_tuple("String").field(value).finish(),