From 2830a1befdad3d65b70b6d64070a49d17fddb933 Mon Sep 17 00:00:00 2001 From: Araozu Date: Sat, 16 Dec 2023 20:51:12 -0500 Subject: [PATCH] Refactor Binding --- src/codegen/binding.rs | 23 ++++++----------------- src/codegen/module_ast.rs | 10 ++++------ src/syntax/ast/var_binding.rs | 16 ++-------------- src/syntax/binding.rs | 21 +++++++-------------- 4 files changed, 19 insertions(+), 51 deletions(-) diff --git a/src/codegen/binding.rs b/src/codegen/binding.rs index 391f2e2..be1e131 100644 --- a/src/codegen/binding.rs +++ b/src/codegen/binding.rs @@ -4,38 +4,27 @@ use crate::syntax::ast::var_binding::Binding; impl Transpilable for Binding { /// Transpiles val and var bindings into PHP. fn transpile(&self) -> String { - match self { - Binding::Val(val_binding) => { - let expression_str = val_binding.expression.transpile(); + let expression_str = self.expression.transpile(); - format!("${} = {};", val_binding.identifier, expression_str) - } - Binding::Var(var_binding) => { - let expression_str = var_binding.expression.transpile(); - - format!("${} = {};", var_binding.identifier, expression_str) - } - } + format!("${} = {};", self.identifier, expression_str) } } #[cfg(test)] mod tests { use super::*; - use crate::syntax::ast::{ - var_binding::{Binding, ValBinding}, - Expression, - }; + use crate::syntax::ast::{var_binding::Binding, Expression}; #[test] fn binding_should_transpile() { let id = String::from("identifier"); let value = String::from("322"); - let binding = Binding::Val(ValBinding { + let binding = Binding { datatype: None, identifier: Box::new(id), expression: Expression::Number(Box::new(value)), - }); + is_mutable: false, + }; let result = binding.transpile(); diff --git a/src/codegen/module_ast.rs b/src/codegen/module_ast.rs index eaf691b..b606b30 100644 --- a/src/codegen/module_ast.rs +++ b/src/codegen/module_ast.rs @@ -18,20 +18,18 @@ impl Transpilable for ModuleAST { #[cfg(test)] mod tests { use super::*; - use crate::syntax::ast::{ - var_binding::{Binding, ValBinding}, - Expression, TopLevelDeclaration, - }; + use crate::syntax::ast::{var_binding::Binding, Expression, TopLevelDeclaration}; #[test] fn module_ast_should_transpile() { let id = String::from("identifier"); let value = String::from("322"); - let binding = Binding::Val(ValBinding { + let binding = Binding { datatype: None, identifier: Box::new(id), expression: Expression::Number(Box::new(value)), - }); + is_mutable: false, + }; let module = ModuleAST { declarations: vec![TopLevelDeclaration::Binding(binding)], diff --git a/src/syntax/ast/var_binding.rs b/src/syntax/ast/var_binding.rs index 939eb01..eef1fc6 100644 --- a/src/syntax/ast/var_binding.rs +++ b/src/syntax/ast/var_binding.rs @@ -1,21 +1,9 @@ use super::Expression; #[derive(Debug)] -pub enum Binding { - Val(ValBinding), - Var(VarBinding), -} - -#[derive(Debug)] -pub struct ValBinding { - pub datatype: Option, - pub identifier: Box, - pub expression: Expression, -} - -#[derive(Debug)] -pub struct VarBinding { +pub struct Binding { pub datatype: Option, pub identifier: Box, pub expression: Expression, + pub is_mutable: bool, } diff --git a/src/syntax/binding.rs b/src/syntax/binding.rs index f9367ed..5f76c42 100644 --- a/src/syntax/binding.rs +++ b/src/syntax/binding.rs @@ -1,4 +1,4 @@ -use super::ast::var_binding::{Binding, ValBinding, VarBinding}; +use super::ast::var_binding::Binding; use super::utils::{parse_token_type, try_operator}; use super::{expression, ParseResult}; use crate::error_handling::SyntaxError; @@ -95,18 +95,11 @@ pub fn try_parse<'a>(tokens: &'a Vec, pos: usize) -> ParseResult