Add floats
This commit is contained in:
parent
8c0220c0c2
commit
f55f9be345
@ -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)
|
||||
|
||||
21
src/ast.rs
21
src/ast.rs
@ -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))
|
||||
|
||||
@ -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(),
|
||||
|
||||
Loading…
Reference in New Issue
Block a user