Skip to content

Commit

Permalink
Made serde an optional dependency.
Browse files Browse the repository at this point in the history
- Serde serialization and deserialization can be switched on by using the feature flag "serde-ast".
  • Loading branch information
HalidOdat committed Mar 18, 2020
1 parent 84d4105 commit 8a34176
Show file tree
Hide file tree
Showing 10 changed files with 53 additions and 25 deletions.
3 changes: 2 additions & 1 deletion boa/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,18 +11,19 @@ exclude = ["../.vscode/*", "../Dockerfile", "../Makefile", "../.editorConfig"]
edition = "2018"

[features]
serde-ast = ["serde"]
default = ["wasm-bindgen"]

[dependencies]
gc = "0.3.3"
gc_derive = "0.3.2"
serde_json = "1.0.46"
serde = { version = "1.0", features = ["derive"] }
rand = "0.7.3"
regex = "1.3.4"

# Optional Dependencies
wasm-bindgen = { version = "0.2.58", optional = true }
serde = { version = "1.0", features = ["derive"], optional = true }

[dev-dependencies]
criterion = "0.3.1"
Expand Down
1 change: 1 addition & 0 deletions boa/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ use crate::{
syntax::{ast::expr::Expr, lexer::Lexer, parser::Parser},
};

#[cfg(feature = "serde-ast")]
pub use serde_json;

fn parser_expr(src: &str) -> Result<Expr, String> {
Expand Down
7 changes: 5 additions & 2 deletions boa/src/syntax/ast/constant.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
use gc_derive::{Finalize, Trace};
use serde::{Deserialize, Serialize};
use std::fmt::{Display, Formatter, Result};

#[derive(Clone, Debug, Trace, Finalize, PartialEq, Serialize, Deserialize)]
#[cfg(feature = "serde-ast")]
use serde::{Deserialize, Serialize};

#[cfg_attr(feature = "serde-ast", derive(Serialize, Deserialize))]
#[derive(Clone, Debug, Trace, Finalize, PartialEq)]
/// A Javascript Constant
pub enum Const {
/// A UTF-8 string, such as `"Hello, world"`
Expand Down
10 changes: 7 additions & 3 deletions boa/src/syntax/ast/expr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,16 @@ use crate::syntax::ast::{
op::{BinOp, Operator, UnaryOp},
};
use gc_derive::{Finalize, Trace};
use serde::{Deserialize, Serialize};
use std::{
collections::btree_map::BTreeMap,
fmt::{Display, Formatter, Result},
};

#[derive(Clone, Trace, Finalize, Debug, PartialEq, Serialize, Deserialize)]
#[cfg(feature = "serde-ast")]
use serde::{Deserialize, Serialize};

#[cfg_attr(feature = "serde-ast", derive(Serialize, Deserialize))]
#[derive(Clone, Trace, Finalize, Debug, PartialEq)]
pub struct Expr {
/// The expression definition
pub def: ExprDef,
Expand All @@ -28,7 +31,8 @@ impl Display for Expr {
}
}

#[derive(Clone, Debug, Trace, Finalize, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "serde-ast", derive(Serialize, Deserialize))]
#[derive(Clone, Debug, Trace, Finalize, PartialEq)]
/// A Javascript Expression
pub enum ExprDef {
/// Run a operation between 2 expressions
Expand Down
7 changes: 5 additions & 2 deletions boa/src/syntax/ast/keyword.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
use serde::{Deserialize, Serialize};
use std::{
error,
fmt::{Display, Error, Formatter},
str::FromStr,
};

#[derive(Clone, Copy, PartialEq, Debug, Serialize, Deserialize)]
#[cfg(feature = "serde-ast")]
use serde::{Deserialize, Serialize};

#[cfg_attr(feature = "serde-ast", derive(Serialize, Deserialize))]
#[derive(Clone, Copy, PartialEq, Debug)]
/// A Javascript Keyword
/// As specificed by <https://www.ecma-international.org/ecma-262/#sec-keywords>
pub enum Keyword {
Expand Down
25 changes: 17 additions & 8 deletions boa/src/syntax/ast/op.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
use gc_derive::{Finalize, Trace};
use serde::{Deserialize, Serialize};
use std::fmt::{Display, Formatter, Result};

#[cfg(feature = "serde-ast")]
use serde::{Deserialize, Serialize};

/// Represents an operator
pub trait Operator {
/// Get the associativity as a boolean that is true if it goes rightwards
Expand All @@ -14,7 +16,8 @@ pub trait Operator {
}
}

#[derive(Clone, Debug, Trace, Finalize, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "serde-ast", derive(Serialize, Deserialize))]
#[derive(Clone, Debug, Trace, Finalize, PartialEq)]
/// A numeric operation between 2 values
pub enum NumOp {
/// `a + b` - Addition
Expand Down Expand Up @@ -48,7 +51,8 @@ impl Display for NumOp {
}
}

#[derive(Clone, Debug, Trace, Finalize, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "serde-ast", derive(Serialize, Deserialize))]
#[derive(Clone, Debug, Trace, Finalize, PartialEq)]
/// A unary operation on a single value
pub enum UnaryOp {
/// `a++` - increment the value
Expand Down Expand Up @@ -89,7 +93,8 @@ impl Display for UnaryOp {
}
}

#[derive(Clone, Debug, Trace, Finalize, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "serde-ast", derive(Serialize, Deserialize))]
#[derive(Clone, Debug, Trace, Finalize, PartialEq)]
/// A bitwise operation between 2 values
pub enum BitOp {
/// `a & b` - Bitwise and
Expand Down Expand Up @@ -120,7 +125,8 @@ impl Display for BitOp {
}
}

#[derive(Clone, Debug, Trace, Finalize, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "serde-ast", derive(Serialize, Deserialize))]
#[derive(Clone, Debug, Trace, Finalize, PartialEq)]
/// A comparitive operation between 2 values
pub enum CompOp {
/// `a == b` - Equality
Expand Down Expand Up @@ -160,7 +166,8 @@ impl Display for CompOp {
}
}

#[derive(Clone, Debug, Trace, Finalize, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "serde-ast", derive(Serialize, Deserialize))]
#[derive(Clone, Debug, Trace, Finalize, PartialEq)]
/// A logical operation between 2 boolean values
pub enum LogOp {
/// `a && b` - Logical and
Expand All @@ -182,7 +189,8 @@ impl Display for LogOp {
}
}

#[derive(Clone, Debug, Trace, Finalize, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "serde-ast", derive(Serialize, Deserialize))]
#[derive(Clone, Debug, Trace, Finalize, PartialEq)]
/// A binary operation between 2 values
pub enum BinOp {
/// Numeric operation
Expand Down Expand Up @@ -241,7 +249,8 @@ impl Display for BinOp {
}
}

#[derive(Clone, Debug, Trace, Finalize, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "serde-ast", derive(Serialize, Deserialize))]
#[derive(Clone, Debug, Trace, Finalize, PartialEq)]
/// A binary operation between 2 values
pub enum AssignOp {
/// `a += b` - Add assign
Expand Down
4 changes: 3 additions & 1 deletion boa/src/syntax/ast/pos.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
#[cfg(feature = "serde-ast")]
use serde::{Deserialize, Serialize};

#[derive(Clone, Copy, PartialEq, Debug, Serialize, Deserialize)]
#[cfg_attr(feature = "serde-ast", derive(Serialize, Deserialize))]
#[derive(Clone, Copy, PartialEq, Debug)]
/// A position in the Javascript source code
/// Stores both the column number and the line number
///
Expand Down
7 changes: 5 additions & 2 deletions boa/src/syntax/ast/punc.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
use serde::{Deserialize, Serialize};
use std::fmt::{Display, Error, Formatter};

#[derive(PartialEq, Clone, Copy, Debug, Serialize, Deserialize)]
#[cfg(feature = "serde-ast")]
use serde::{Deserialize, Serialize};

#[cfg_attr(feature = "serde-ast", derive(Serialize, Deserialize))]
#[derive(PartialEq, Clone, Copy, Debug)]
/// Punctuation
pub enum Punctuator {
/// `+`
Expand Down
12 changes: 7 additions & 5 deletions boa/src/syntax/ast/token.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
use crate::syntax::ast::{keyword::Keyword, pos::Position, punc::Punctuator};
use serde::{Deserialize, Serialize};
use std::fmt::{Debug, Display, Formatter, Result};

#[derive(Clone, PartialEq)]
#[cfg(feature = "serde-ast")]
use serde::{Deserialize, Serialize};

/// Represents a token
#[derive(Debug, Serialize, Deserialize)]
#[cfg_attr(feature = "serde-ast", derive(Serialize, Deserialize))]
#[derive(Debug, Clone, PartialEq)]
pub struct Token {
/// The token Data
pub data: TokenData,
Expand Down Expand Up @@ -39,8 +41,8 @@ impl Debug for VecToken {
write!(f, "{}", buffer)
}
}

#[derive(Clone, PartialEq, Debug, Serialize, Deserialize)]
#[cfg_attr(feature = "serde-ast", derive(Serialize, Deserialize))]
#[derive(Clone, PartialEq, Debug)]
/// Represents the type of Token
pub enum TokenData {
/// A boolean literal, which is either `true` or `false`
Expand Down
2 changes: 1 addition & 1 deletion boa_cli/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,5 @@ exclude = ["../.vscode/*", "../Dockerfile", "../Makefile", "../.editorConfig"]
edition = "2018"

[dependencies]
Boa = { path = "../boa", default-features = false }
Boa = { path = "../boa", features = ["serde-ast"], default-features = false }
structopt = "0.3.9"

0 comments on commit 8a34176

Please sign in to comment.