Add floats
This commit is contained in:
parent
8c0220c0c2
commit
f55f9be345
@ -20,7 +20,7 @@ global sometable = {}
|
|||||||
sometable["hello"] = {}
|
sometable["hello"] = {}
|
||||||
sometable["hello"].there = "my dude"
|
sometable["hello"].there = "my dude"
|
||||||
|
|
||||||
print(max(11, 9))
|
print(max(11.12345, 9))
|
||||||
print(add(10)(15))
|
print(add(10)(15))
|
||||||
print(add(10)(15))
|
print(add(10)(15))
|
||||||
print(b)
|
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)
|
Expression::FunctionDefinition(function.kind.params, function.kind.block)
|
||||||
} else if let Some(Token::DecimalValue(value)) = peeked {
|
} else if let Some(Token::DecimalValue(value)) = peeked {
|
||||||
stream.next(); // Consume decimal value
|
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 {
|
} else if let Some(Token::StringLit(value)) = peeked {
|
||||||
stream.next(); // Consume string-literal
|
stream.next(); // Consume string-literal
|
||||||
Expression::Literal(Literal::String(value))
|
Expression::Literal(Literal::String(value))
|
||||||
|
|||||||
@ -98,7 +98,7 @@ impl Debug for Constant {
|
|||||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
match self {
|
match self {
|
||||||
Self::String(arg0) => f.debug_tuple("String").field(arg0).finish(),
|
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::Integer(arg0) => f.debug_tuple("Integer").field(arg0).finish(),
|
||||||
Self::Bool(arg0) => f.debug_tuple("Boolean").field(arg0).finish(),
|
Self::Bool(arg0) => f.debug_tuple("Boolean").field(arg0).finish(),
|
||||||
Self::Nil => f.debug_tuple("Nil").finish(),
|
Self::Nil => f.debug_tuple("Nil").finish(),
|
||||||
@ -432,7 +432,7 @@ impl Value {
|
|||||||
impl Debug for Value {
|
impl Debug for Value {
|
||||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
match self {
|
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::Integer(arg0) => f.debug_tuple("Integer").field(arg0).finish(),
|
||||||
Value::Boolean(arg0) => f.debug_tuple("Boolean").field(arg0).finish(),
|
Value::Boolean(arg0) => f.debug_tuple("Boolean").field(arg0).finish(),
|
||||||
Value::String(value) => f.debug_tuple("String").field(value).finish(),
|
Value::String(value) => f.debug_tuple("String").field(value).finish(),
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user