From 6ba69ecfef2c3a8c7454e0b7aa579c5fd806e0b9 Mon Sep 17 00:00:00 2001 From: Iban Eguia Moraza Date: Fri, 24 Dec 2021 11:07:12 +0100 Subject: [PATCH 1/4] First version of the interner --- Cargo.lock | 58 +++- Cargo.toml | 1 + boa/Cargo.toml | 3 +- boa/benches/full.rs | 14 +- boa/examples/classes.rs | 2 +- boa/examples/closures.rs | 2 +- boa/src/builtins/array/tests.rs | 94 +++--- boa/src/builtins/array_buffer/tests.rs | 4 +- boa/src/builtins/bigint/tests.rs | 54 +-- boa/src/builtins/boolean/tests.rs | 6 +- boa/src/builtins/console/tests.rs | 14 +- boa/src/builtins/date/tests.rs | 118 +++---- boa/src/builtins/error/tests.rs | 14 +- boa/src/builtins/function/tests.rs | 28 +- boa/src/builtins/json/tests.rs | 60 ++-- boa/src/builtins/map/tests.rs | 40 +-- boa/src/builtins/math/tests.rs | 66 ++-- boa/src/builtins/number/tests.rs | 78 ++--- boa/src/builtins/object/tests.rs | 26 +- boa/src/builtins/reflect/tests.rs | 26 +- boa/src/builtins/regexp/tests.rs | 16 +- boa/src/builtins/set/tests.rs | 26 +- boa/src/builtins/string/tests.rs | 110 +++--- boa/src/builtins/symbol/tests.rs | 4 +- boa/src/context.rs | 54 ++- boa/src/lib.rs | 51 +-- boa/src/object/mod.rs | 2 +- boa/src/syntax/ast/node/mod.rs | 10 +- boa/src/syntax/lexer/comment.rs | 22 +- boa/src/syntax/lexer/identifier.rs | 10 +- boa/src/syntax/lexer/mod.rs | 59 ++-- boa/src/syntax/lexer/number.rs | 9 +- boa/src/syntax/lexer/operator.rs | 8 +- boa/src/syntax/lexer/regex.rs | 10 +- boa/src/syntax/lexer/spread.rs | 8 +- boa/src/syntax/lexer/string.rs | 13 +- boa/src/syntax/lexer/template.rs | 45 ++- boa/src/syntax/lexer/tests.rs | 316 ++++++++++++------ boa/src/syntax/lexer/token.rs | 88 ++--- .../parser/cursor/buffered_lexer/mod.rs | 39 ++- .../parser/cursor/buffered_lexer/tests.rs | 136 ++++---- boa/src/syntax/parser/cursor/mod.rs | 94 ++++-- boa/src/syntax/parser/error.rs | 52 +-- .../expression/assignment/arrow_function.rs | 110 +++--- .../expression/assignment/conditional.rs | 15 +- .../expression/assignment/exponentiation.rs | 24 +- .../parser/expression/assignment/mod.rs | 46 +-- .../parser/expression/assignment/yield.rs | 26 +- .../syntax/parser/expression/await_expr.rs | 20 +- .../expression/left_hand_side/arguments.rs | 37 +- .../parser/expression/left_hand_side/call.rs | 49 +-- .../expression/left_hand_side/member.rs | 48 +-- .../parser/expression/left_hand_side/mod.rs | 13 +- .../expression/left_hand_side/template.rs | 31 +- boa/src/syntax/parser/expression/mod.rs | 66 ++-- .../primary/array_initializer/mod.rs | 25 +- .../primary/array_initializer/tests.rs | 26 +- .../primary/async_function_expression/mod.rs | 40 ++- .../async_function_expression/tests.rs | 17 +- .../primary/async_generator_expression/mod.rs | 49 ++- .../async_generator_expression/test.rs | 17 +- .../primary/function_expression/mod.rs | 28 +- .../primary/function_expression/tests.rs | 17 +- .../primary/generator_expression/mod.rs | 29 +- .../primary/generator_expression/tests.rs | 17 +- .../syntax/parser/expression/primary/mod.rs | 67 ++-- .../primary/object_initializer/mod.rs | 179 ++++++---- .../primary/object_initializer/tests.rs | 41 ++- .../parser/expression/primary/template/mod.rs | 25 +- .../syntax/parser/expression/primary/tests.rs | 15 +- boa/src/syntax/parser/expression/tests.rs | 136 +++++++- boa/src/syntax/parser/expression/unary.rs | 35 +- boa/src/syntax/parser/expression/update.rs | 32 +- boa/src/syntax/parser/function/mod.rs | 97 ++++-- boa/src/syntax/parser/function/tests.rs | 58 +++- boa/src/syntax/parser/mod.rs | 39 ++- boa/src/syntax/parser/statement/block/mod.rs | 20 +- .../syntax/parser/statement/block/tests.rs | 32 +- .../syntax/parser/statement/break_stm/mod.rs | 18 +- .../parser/statement/break_stm/tests.rs | 33 +- .../parser/statement/continue_stm/mod.rs | 18 +- .../parser/statement/continue_stm/tests.rs | 33 +- .../hoistable/async_function_decl/mod.rs | 27 +- .../hoistable/async_function_decl/tests.rs | 11 +- .../hoistable/async_generator_decl/mod.rs | 29 +- .../hoistable/async_generator_decl/tests.rs | 7 +- .../hoistable/function_decl/mod.rs | 23 +- .../hoistable/function_decl/tests.rs | 11 +- .../hoistable/generator_decl/mod.rs | 25 +- .../hoistable/generator_decl/tests.rs | 7 +- .../statement/declaration/hoistable/mod.rs | 49 +-- .../parser/statement/declaration/lexical.rs | 63 ++-- .../parser/statement/declaration/mod.rs | 14 +- .../parser/statement/declaration/tests.rs | 47 ++- .../syntax/parser/statement/expression/mod.rs | 15 +- boa/src/syntax/parser/statement/if_stm/mod.rs | 43 ++- .../syntax/parser/statement/if_stm/tests.rs | 17 +- .../statement/iteration/do_while_statement.rs | 34 +- .../statement/iteration/for_statement.rs | 81 +++-- .../parser/statement/iteration/tests.rs | 29 +- .../statement/iteration/while_statement.rs | 21 +- .../parser/statement/labelled_stm/mod.rs | 19 +- boa/src/syntax/parser/statement/mod.rs | 231 ++++++++----- .../syntax/parser/statement/return_stm/mod.rs | 18 +- boa/src/syntax/parser/statement/switch/mod.rs | 54 +-- .../syntax/parser/statement/switch/tests.rs | 19 +- boa/src/syntax/parser/statement/throw/mod.rs | 18 +- .../syntax/parser/statement/throw/tests.rs | 11 +- .../syntax/parser/statement/try_stm/catch.rs | 40 ++- .../parser/statement/try_stm/finally.rs | 12 +- .../syntax/parser/statement/try_stm/mod.rs | 32 +- .../syntax/parser/statement/try_stm/tests.rs | 35 +- .../syntax/parser/statement/variable/mod.rs | 56 ++-- boa/src/syntax/parser/tests.rs | 66 +++- boa/src/tests.rs | 36 +- boa/src/value/tests.rs | 198 +++++------ boa_cli/Cargo.toml | 2 +- boa_cli/src/main.rs | 36 +- boa_interner/Cargo.toml | 14 + boa_interner/src/lib.rs | 76 +++++ boa_tester/src/exec/js262.rs | 4 +- boa_tester/src/exec/mod.rs | 12 +- boa_unicode/src/lib.rs | 33 ++ boa_unicode/src/tables.rs | 8 +- boa_wasm/src/lib.rs | 35 +- 125 files changed, 3317 insertions(+), 1819 deletions(-) create mode 100644 boa_interner/Cargo.toml create mode 100644 boa_interner/src/lib.rs diff --git a/Cargo.lock b/Cargo.lock index 8ad637addfc..a01302290b6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7,6 +7,7 @@ name = "Boa" version = "0.13.0" dependencies = [ "bitflags", + "boa_interner", "boa_unicode", "chrono", "criterion", @@ -31,6 +32,17 @@ dependencies = [ "unicode-normalization", ] +[[package]] +name = "ahash" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" +dependencies = [ + "getrandom", + "once_cell", + "version_check", +] + [[package]] name = "aho-corasick" version = "0.7.18" @@ -96,6 +108,14 @@ dependencies = [ "structopt", ] +[[package]] +name = "boa_interner" +version = "0.13.0" +dependencies = [ + "serde", + "string-interner", +] + [[package]] name = "boa_tester" version = "0.13.0" @@ -493,6 +513,9 @@ name = "hashbrown" version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" +dependencies = [ + "ahash", +] [[package]] name = "heck" @@ -914,9 +937,9 @@ dependencies = [ [[package]] name = "ppv-lite86" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed0cfbc8191465bed66e1718596ee0b0b35d5ee1f41c5df2189d0fe8bde535ba" +checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" [[package]] name = "proc-macro-error" @@ -944,18 +967,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.34" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f84e92c0f7c9d58328b85a78557813e4bd845130db68d7184635344399423b1" +checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029" dependencies = [ "unicode-xid", ] [[package]] name = "quote" -version = "1.0.10" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38bc8cc6a5f2e3655e0899c1b848643b2562f853f114bfec7be120678e3ace05" +checksum = "47aa80447ce4daf1717500037052af176af5d38cc3e571d9ec1c7353fc10c87d" dependencies = [ "proc-macro2", ] @@ -1103,9 +1126,9 @@ dependencies = [ [[package]] name = "rustyline" -version = "9.1.1" +version = "9.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c38cfbd0a4d7df7aab7cf53732d5d43449d0300358fd15cd4e8c8468a956aca" +checksum = "db7826789c0e25614b03e5a54a0717a86f9ff6e6e5247f92b369472869320039" dependencies = [ "bitflags", "cfg-if", @@ -1233,6 +1256,17 @@ version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d44a3643b4ff9caf57abcee9c2c621d6c03d9135e0d8b589bd9afb5992cb176a" +[[package]] +name = "string-interner" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e2531d8525b29b514d25e275a43581320d587b86db302b9a7e464bac579648" +dependencies = [ + "cfg-if", + "hashbrown", + "serde", +] + [[package]] name = "strsim" version = "0.8.0" @@ -1265,9 +1299,9 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.83" +version = "1.0.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23a1dfb999630e338648c83e91c59a4e9fb7620f520c3194b6b89e276f2f1959" +checksum = "ecb2e6da8ee5eb9a61068762a32fa9619cc591ceb055b3687f4cd4051ec2e06b" dependencies = [ "proc-macro2", "quote", @@ -1402,9 +1436,9 @@ checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" [[package]] name = "version_check" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "walkdir" diff --git a/Cargo.toml b/Cargo.toml index 6dbd3e939c7..57dc631369c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,6 +5,7 @@ members = [ "boa_wasm", "boa_tester", "boa_unicode", + "boa_interner", ] # The release profile, used for `cargo build --release`. diff --git a/boa/Cargo.toml b/boa/Cargo.toml index a669d53fa01..04db7f57bda 100644 --- a/boa/Cargo.toml +++ b/boa/Cargo.toml @@ -13,13 +13,14 @@ rust-version = "1.57" [features] profiler = ["measureme"] -deser = [] +deser = ["boa_interner/serde"] # Enable Boa's WHATWG console object implementation. console = [] [dependencies] boa_unicode = { path = "../boa_unicode", version = "0.13.0" } +boa_interner = { path = "../boa_interner", version = "0.13.0" } gc = { version = "0.4.1", features = ["derive"] } serde = { version = "1.0.132", features = ["derive", "rc"] } serde_json = "1.0.75" diff --git a/boa/benches/full.rs b/boa/benches/full.rs index 1d67b0d826d..c2eedd22731 100644 --- a/boa/benches/full.rs +++ b/boa/benches/full.rs @@ -1,6 +1,7 @@ //! Benchmarks of the whole execution engine in Boa. -use boa::{parse, realm::Realm, Context}; +use boa::{realm::Realm, syntax::Parser, Context}; +use boa_interner::Interner; use criterion::{black_box, criterion_group, criterion_main, Criterion}; #[cfg(all(target_arch = "x86_64", target_os = "linux", target_env = "gnu"))] @@ -20,8 +21,9 @@ macro_rules! full_benchmarks { $( { static CODE: &str = include_str!(concat!("bench_scripts/", stringify!($name), ".js")); + let mut interner = Interner::new(); c.bench_function(concat!($id, " (Parser)"), move |b| { - b.iter(|| parse(black_box(CODE), false)) + b.iter(|| Parser::new(black_box(CODE.as_bytes()), false).parse_all(&mut interner)) }); } )* @@ -30,7 +32,8 @@ macro_rules! full_benchmarks { $( { static CODE: &str = include_str!(concat!("bench_scripts/", stringify!($name), ".js")); - let statement_list = parse(CODE, false).unwrap(); + let mut interner = Interner::new(); + let statement_list = Parser::new(CODE.as_bytes(), false).parse_all( &mut interner).expect("parsing failed"); c.bench_function(concat!($id, " (Compiler)"), move |b| { b.iter(|| { Context::compile(black_box(statement_list.clone())); @@ -43,9 +46,10 @@ macro_rules! full_benchmarks { $( { static CODE: &str = include_str!(concat!("bench_scripts/", stringify!($name), ".js")); - let statement_list = parse(CODE, false).unwrap(); + let mut interner = Interner::new(); + let statement_list = Parser::new(CODE.as_bytes(), false).parse_all( &mut interner).expect("parsing failed"); let code_block = Context::compile(statement_list); - let mut context = Context::new(); + let mut context = Context::default(); c.bench_function(concat!($id, " (Execution)"), move |b| { b.iter(|| { context.execute(black_box(code_block.clone())).unwrap(); diff --git a/boa/examples/classes.rs b/boa/examples/classes.rs index 1ff5d8364f2..4cbab44b8c6 100644 --- a/boa/examples/classes.rs +++ b/boa/examples/classes.rs @@ -125,7 +125,7 @@ impl Class for Person { fn main() { // First we need to create a Javascript context. - let mut context = Context::new(); + let mut context = Context::default(); // Then we need to register the global class `Person` inside `context`. context.register_global_class::().unwrap(); diff --git a/boa/examples/closures.rs b/boa/examples/closures.rs index c4d49eb2045..19f97e9d930 100644 --- a/boa/examples/closures.rs +++ b/boa/examples/closures.rs @@ -10,7 +10,7 @@ use boa::{ fn main() -> Result<(), JsValue> { // We create a new `Context` to create a new Javascript executor. - let mut context = Context::new(); + let mut context = Context::default(); // We make some operations in Rust that return a `Copy` value that we want // to pass to a Javascript function. diff --git a/boa/src/builtins/array/tests.rs b/boa/src/builtins/array/tests.rs index e8bf8508c9c..9d4d683ba0a 100644 --- a/boa/src/builtins/array/tests.rs +++ b/boa/src/builtins/array/tests.rs @@ -4,7 +4,7 @@ use crate::{forward, Context, JsValue}; #[test] fn is_array() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var empty = []; var new_arr = new Array(); @@ -70,7 +70,7 @@ fn is_array() { #[test] fn of() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!( context .eval("Array.of(1, 2, 3)") @@ -120,7 +120,7 @@ fn of() { #[ignore] #[test] fn concat() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var empty = []; var one = [1]; @@ -158,7 +158,7 @@ fn concat() { #[test] fn copy_within() { - let mut context = Context::new(); + let mut context = Context::default(); let target = forward(&mut context, "[1,2,3,4,5].copyWithin(-2).join('.')"); assert_eq!(target, String::from("\"1.2.3.1.2\"")); @@ -175,7 +175,7 @@ fn copy_within() { #[test] fn join() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var empty = [ ]; var one = ["a"]; @@ -195,7 +195,7 @@ fn join() { #[test] fn to_string() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var empty = [ ]; var one = ["a"]; @@ -215,7 +215,7 @@ fn to_string() { #[test] fn every() { - let mut context = Context::new(); + let mut context = Context::default(); // taken from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every let init = r#" var empty = []; @@ -259,7 +259,7 @@ fn every() { #[test] fn find() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" function comp(a) { return a == "a"; @@ -273,7 +273,7 @@ fn find() { #[test] fn find_index() { - let mut context = Context::new(); + let mut context = Context::default(); let code = r#" function comp(item) { @@ -298,7 +298,7 @@ fn find_index() { #[test] fn flat() { - let mut context = Context::new(); + let mut context = Context::default(); let code = r#" var depth1 = ['a', ['b', 'c']]; @@ -323,7 +323,7 @@ fn flat() { #[test] fn flat_empty() { - let mut context = Context::new(); + let mut context = Context::default(); let code = r#" var empty = [[]]; @@ -336,7 +336,7 @@ fn flat_empty() { #[test] fn flat_infinity() { - let mut context = Context::new(); + let mut context = Context::default(); let code = r#" var arr = [[[[[['a']]]]]]; @@ -350,7 +350,7 @@ fn flat_infinity() { #[test] fn flat_map() { - let mut context = Context::new(); + let mut context = Context::default(); let code = r#" var double = [1, 2, 3]; @@ -375,7 +375,7 @@ fn flat_map() { #[test] fn flat_map_with_hole() { - let mut context = Context::new(); + let mut context = Context::default(); let code = r#" var arr = [0, 1, 2]; @@ -391,7 +391,7 @@ fn flat_map_with_hole() { #[test] fn flat_map_not_callable() { - let mut context = Context::new(); + let mut context = Context::default(); let code = r#" try { @@ -407,7 +407,7 @@ fn flat_map_not_callable() { #[test] fn push() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var arr = [1, 2]; "#; @@ -421,7 +421,7 @@ fn push() { #[test] fn pop() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var empty = [ ]; var one = [1]; @@ -442,7 +442,7 @@ fn pop() { #[test] fn shift() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var empty = [ ]; var one = [1]; @@ -463,7 +463,7 @@ fn shift() { #[test] fn unshift() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var arr = [3, 4]; "#; @@ -477,7 +477,7 @@ fn unshift() { #[test] fn reverse() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var arr = [1, 2]; var reversed = arr.reverse(); @@ -491,7 +491,7 @@ fn reverse() { #[test] fn index_of() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var empty = [ ]; var one = ["a"]; @@ -554,7 +554,7 @@ fn index_of() { #[test] fn last_index_of() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var empty = [ ]; var one = ["a"]; @@ -617,7 +617,7 @@ fn last_index_of() { #[test] fn fill_obj_ref() { - let mut context = Context::new(); + let mut context = Context::default(); // test object reference forward(&mut context, "a = (new Array(3)).fill({});"); @@ -627,7 +627,7 @@ fn fill_obj_ref() { #[test] fn fill() { - let mut context = Context::new(); + let mut context = Context::default(); forward(&mut context, "var a = [1, 2, 3];"); assert_eq!( @@ -722,7 +722,7 @@ fn fill() { #[test] fn includes_value() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var empty = [ ]; var one = ["a"]; @@ -760,7 +760,7 @@ fn includes_value() { #[test] fn map() { - let mut context = Context::new(); + let mut context = Context::default(); let js = r#" var empty = []; @@ -824,7 +824,7 @@ fn map() { #[test] fn slice() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var empty = [ ].slice(); var one = ["a"].slice(); @@ -847,7 +847,7 @@ fn slice() { #[test] fn for_each() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var a = [2, 3, 4, 5]; var sum = 0; @@ -869,7 +869,7 @@ fn for_each() { #[test] fn for_each_push_value() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var a = [1, 2, 3, 4]; function callingCallback(item, index, list) { @@ -889,7 +889,7 @@ fn for_each_push_value() { #[test] fn filter() { - let mut context = Context::new(); + let mut context = Context::default(); let js = r#" var empty = []; @@ -958,7 +958,7 @@ fn filter() { #[test] fn some() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var empty = []; @@ -1006,7 +1006,7 @@ fn some() { #[test] fn reduce() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var arr = [1, 2, 3, 4]; @@ -1118,7 +1118,7 @@ fn reduce() { #[test] fn reduce_right() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var arr = [1, 2, 3, 4]; @@ -1243,7 +1243,7 @@ fn reduce_right() { #[test] fn call_array_constructor_with_one_argument() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var empty = new Array(0); @@ -1264,7 +1264,7 @@ fn call_array_constructor_with_one_argument() { #[test] fn array_values_simple() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var iterator = [1, 2, 3].values(); var next = iterator.next(); @@ -1285,7 +1285,7 @@ fn array_values_simple() { #[test] fn array_keys_simple() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var iterator = [1, 2, 3].keys(); var next = iterator.next(); @@ -1306,7 +1306,7 @@ fn array_keys_simple() { #[test] fn array_entries_simple() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var iterator = [1, 2, 3].entries(); var next = iterator.next(); @@ -1327,7 +1327,7 @@ fn array_entries_simple() { #[test] fn array_values_empty() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var iterator = [].values(); var next = iterator.next(); @@ -1339,7 +1339,7 @@ fn array_values_empty() { #[test] fn array_values_sparse() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var array = Array(); array[3] = 5; @@ -1365,7 +1365,7 @@ fn array_values_sparse() { #[test] fn array_symbol_iterator() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var iterator = [1, 2, 3][Symbol.iterator](); var next = iterator.next(); @@ -1386,7 +1386,7 @@ fn array_symbol_iterator() { #[test] fn array_values_symbol_iterator() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var iterator = [1, 2, 3].values(); iterator === iterator[Symbol.iterator](); @@ -1396,7 +1396,7 @@ fn array_values_symbol_iterator() { #[test] fn array_spread_arrays() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" const array1 = [2, 3]; const array2 = [1, ...array1]; @@ -1407,7 +1407,7 @@ fn array_spread_arrays() { #[test] fn array_spread_non_iterable() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" try { const array2 = [...5]; @@ -1420,7 +1420,7 @@ fn array_spread_non_iterable() { #[test] fn get_relative_start() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(Array::get_relative_start(&mut context, None, 10), Ok(0)); assert_eq!( @@ -1481,7 +1481,7 @@ fn get_relative_start() { #[test] fn get_relative_end() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(Array::get_relative_end(&mut context, None, 10), Ok(10)); assert_eq!( @@ -1542,7 +1542,7 @@ fn get_relative_end() { #[test] fn array_length_is_not_enumerable() { - let mut context = Context::new(); + let mut context = Context::default(); let array = Array::new_array(&mut context); let desc = array.get_property("length").unwrap(); @@ -1551,7 +1551,7 @@ fn array_length_is_not_enumerable() { #[test] fn array_sort() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" let arr = ['80', '9', '700', 40, 1, 5, 200]; diff --git a/boa/src/builtins/array_buffer/tests.rs b/boa/src/builtins/array_buffer/tests.rs index 4f50ca9b127..ac776e377b6 100644 --- a/boa/src/builtins/array_buffer/tests.rs +++ b/boa/src/builtins/array_buffer/tests.rs @@ -2,14 +2,14 @@ use super::*; #[test] fn ut_sunnyy_day_create_byte_data_block() { - let mut context = Context::new(); + let mut context = Context::default(); assert!(create_byte_data_block(100, &mut context).is_ok()) } #[test] fn ut_rainy_day_create_byte_data_block() { - let mut context = Context::new(); + let mut context = Context::default(); assert!(create_byte_data_block(usize::MAX, &mut context).is_err()) } diff --git a/boa/src/builtins/bigint/tests.rs b/boa/src/builtins/bigint/tests.rs index 15738818b37..86a1cb1e73f 100644 --- a/boa/src/builtins/bigint/tests.rs +++ b/boa/src/builtins/bigint/tests.rs @@ -2,7 +2,7 @@ use crate::{forward, Context}; #[test] fn equality() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(forward(&mut context, "0n == 0n"), "true"); assert_eq!(forward(&mut context, "1n == 0n"), "false"); @@ -55,7 +55,7 @@ fn equality() { #[test] fn bigint_function_conversion_from_integer() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(forward(&mut context, "BigInt(1000)"), "1000n"); assert_eq!( @@ -70,7 +70,7 @@ fn bigint_function_conversion_from_integer() { #[test] fn bigint_function_conversion_from_rational() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(forward(&mut context, "BigInt(0.0)"), "0n"); assert_eq!(forward(&mut context, "BigInt(1.0)"), "1n"); @@ -79,7 +79,7 @@ fn bigint_function_conversion_from_rational() { #[test] fn bigint_function_conversion_from_rational_with_fractional_part() { - let mut context = Context::new(); + let mut context = Context::default(); let scenario = r#" try { @@ -96,7 +96,7 @@ fn bigint_function_conversion_from_rational_with_fractional_part() { #[test] fn bigint_function_conversion_from_null() { - let mut context = Context::new(); + let mut context = Context::default(); let scenario = r#" try { @@ -113,7 +113,7 @@ fn bigint_function_conversion_from_null() { #[test] fn bigint_function_conversion_from_undefined() { - let mut context = Context::new(); + let mut context = Context::default(); let scenario = r#" try { @@ -130,7 +130,7 @@ fn bigint_function_conversion_from_undefined() { #[test] fn bigint_function_conversion_from_string() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(forward(&mut context, "BigInt('')"), "0n"); assert_eq!(forward(&mut context, "BigInt(' ')"), "0n"); @@ -149,21 +149,21 @@ fn bigint_function_conversion_from_string() { #[test] fn add() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(forward(&mut context, "10000n + 1000n"), "11000n"); } #[test] fn sub() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(forward(&mut context, "10000n - 1000n"), "9000n"); } #[test] fn mul() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!( forward(&mut context, "123456789n * 102030n"), @@ -173,28 +173,28 @@ fn mul() { #[test] fn div() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(forward(&mut context, "15000n / 50n"), "300n"); } #[test] fn div_with_truncation() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(forward(&mut context, "15001n / 50n"), "300n"); } #[test] fn r#mod() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(forward(&mut context, "15007n % 10n"), "7n"); } #[test] fn pow() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!( forward(&mut context, "100n ** 10n"), @@ -204,42 +204,42 @@ fn pow() { #[test] fn pow_negative_exponent() { - let mut context = Context::new(); + let mut context = Context::default(); assert_throws(&mut context, "10n ** (-10n)", "RangeError"); } #[test] fn shl() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(forward(&mut context, "8n << 2n"), "32n"); } #[test] fn shl_out_of_range() { - let mut context = Context::new(); + let mut context = Context::default(); assert_throws(&mut context, "1000n << 1000000000000000n", "RangeError"); } #[test] fn shr() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(forward(&mut context, "8n >> 2n"), "2n"); } #[test] fn shr_out_of_range() { - let mut context = Context::new(); + let mut context = Context::default(); assert_throws(&mut context, "1000n >> 1000000000000000n", "RangeError"); } #[test] fn to_string() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(forward(&mut context, "1000n.toString()"), "\"1000\""); assert_eq!(forward(&mut context, "1000n.toString(2)"), "\"1111101000\""); @@ -249,7 +249,7 @@ fn to_string() { #[test] fn to_string_invalid_radix() { - let mut context = Context::new(); + let mut context = Context::default(); assert_throws(&mut context, "10n.toString(null)", "RangeError"); assert_throws(&mut context, "10n.toString(-1)", "RangeError"); @@ -258,7 +258,7 @@ fn to_string_invalid_radix() { #[test] fn as_int_n() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(forward(&mut context, "BigInt.asIntN(0, 1n)"), "0n"); assert_eq!(forward(&mut context, "BigInt.asIntN(1, 1n)"), "-1n"); @@ -318,7 +318,7 @@ fn as_int_n() { #[test] fn as_int_n_errors() { - let mut context = Context::new(); + let mut context = Context::default(); assert_throws(&mut context, "BigInt.asIntN(-1, 0n)", "RangeError"); assert_throws(&mut context, "BigInt.asIntN(-2.5, 0n)", "RangeError"); @@ -332,7 +332,7 @@ fn as_int_n_errors() { #[test] fn as_uint_n() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(forward(&mut context, "BigInt.asUintN(0, -2n)"), "0n"); assert_eq!(forward(&mut context, "BigInt.asUintN(0, -1n)"), "0n"); @@ -383,7 +383,7 @@ fn as_uint_n() { #[test] fn as_uint_n_errors() { - let mut context = Context::new(); + let mut context = Context::default(); assert_throws(&mut context, "BigInt.asUintN(-1, 0n)", "RangeError"); assert_throws(&mut context, "BigInt.asUintN(-2.5, 0n)", "RangeError"); @@ -402,12 +402,12 @@ fn assert_throws(context: &mut Context, src: &str, error_type: &str) { #[test] fn division_by_zero() { - let mut context = Context::new(); + let mut context = Context::default(); assert_throws(&mut context, "1n/0n", "RangeError"); } #[test] fn remainder_by_zero() { - let mut context = Context::new(); + let mut context = Context::default(); assert_throws(&mut context, "1n % 0n", "RangeError"); } diff --git a/boa/src/builtins/boolean/tests.rs b/boa/src/builtins/boolean/tests.rs index 77db02ccf31..3d6ae4a3dec 100644 --- a/boa/src/builtins/boolean/tests.rs +++ b/boa/src/builtins/boolean/tests.rs @@ -4,7 +4,7 @@ use crate::{forward, forward_val, Context}; #[allow(clippy::unwrap_used)] #[test] fn construct_and_call() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var one = new Boolean(1); var zero = Boolean(0); @@ -19,7 +19,7 @@ fn construct_and_call() { #[test] fn constructor_gives_true_instance() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var trueVal = new Boolean(true); var trueNum = new Boolean(1); @@ -48,7 +48,7 @@ fn constructor_gives_true_instance() { #[test] fn instances_have_correct_proto_set() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var boolInstance = new Boolean(true); var boolProto = Boolean.prototype; diff --git a/boa/src/builtins/console/tests.rs b/boa/src/builtins/console/tests.rs index 3a2f9c49d43..11f03a3be6d 100644 --- a/boa/src/builtins/console/tests.rs +++ b/boa/src/builtins/console/tests.rs @@ -2,20 +2,20 @@ use crate::{builtins::console::formatter, Context, JsValue}; #[test] fn formatter_no_args_is_empty_string() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(formatter(&[], &mut context).unwrap(), ""); } #[test] fn formatter_empty_format_string_is_empty_string() { - let mut context = Context::new(); + let mut context = Context::default(); let val = JsValue::new(""); assert_eq!(formatter(&[val], &mut context).unwrap(), ""); } #[test] fn formatter_format_without_args_renders_verbatim() { - let mut context = Context::new(); + let mut context = Context::default(); let val = [JsValue::new("%d %s %% %f")]; let res = formatter(&val, &mut context).unwrap(); assert_eq!(res, "%d %s %% %f"); @@ -23,7 +23,7 @@ fn formatter_format_without_args_renders_verbatim() { #[test] fn formatter_empty_format_string_concatenates_rest_of_args() { - let mut context = Context::new(); + let mut context = Context::default(); let val = [ JsValue::new(""), @@ -36,7 +36,7 @@ fn formatter_empty_format_string_concatenates_rest_of_args() { #[test] fn formatter_utf_8_checks() { - let mut context = Context::new(); + let mut context = Context::default(); let val = [ JsValue::new("Są takie chwile %dą %są tu%sów %привет%ź".to_string()), @@ -50,7 +50,7 @@ fn formatter_utf_8_checks() { #[test] fn formatter_trailing_format_leader_renders() { - let mut context = Context::new(); + let mut context = Context::default(); let val = [JsValue::new("%%%%%"), JsValue::new("|")]; let res = formatter(&val, &mut context).unwrap(); @@ -60,7 +60,7 @@ fn formatter_trailing_format_leader_renders() { #[test] #[allow(clippy::approx_constant)] fn formatter_float_format_works() { - let mut context = Context::new(); + let mut context = Context::default(); let val = [JsValue::new("%f"), JsValue::new(3.1415)]; let res = formatter(&val, &mut context).unwrap(); diff --git a/boa/src/builtins/date/tests.rs b/boa/src/builtins/date/tests.rs index 1819f2a60bf..b9cde139603 100644 --- a/boa/src/builtins/date/tests.rs +++ b/boa/src/builtins/date/tests.rs @@ -53,7 +53,7 @@ fn date_display() { #[test] fn date_this_time_value() { - let mut context = Context::new(); + let mut context = Context::default(); let error = forward_val( &mut context, @@ -71,7 +71,7 @@ fn date_this_time_value() { #[test] fn date_call() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let dt1 = forward(&mut context, "Date()"); @@ -85,7 +85,7 @@ fn date_call() -> Result<(), Box> { #[test] fn date_ctor_call() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let dt1 = forward_dt_local(&mut context, "new Date()"); @@ -99,7 +99,7 @@ fn date_ctor_call() -> Result<(), Box> { #[test] fn date_ctor_call_string() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let date_time = forward_dt_utc(&mut context, "new Date('2020-06-08T09:16:15.779-06:30')"); @@ -113,7 +113,7 @@ fn date_ctor_call_string() -> Result<(), Box> { #[test] fn date_ctor_call_string_invalid() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let date_time = forward_dt_local(&mut context, "new Date('nope')"); assert_eq!(None, date_time); @@ -122,7 +122,7 @@ fn date_ctor_call_string_invalid() -> Result<(), Box> { #[test] fn date_ctor_call_number() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let date_time = forward_dt_utc(&mut context, "new Date(1594199775779)"); assert_eq!( @@ -134,7 +134,7 @@ fn date_ctor_call_number() -> Result<(), Box> { #[test] fn date_ctor_call_date() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let date_time = forward_dt_utc(&mut context, "new Date(new Date(1594199775779))"); @@ -147,7 +147,7 @@ fn date_ctor_call_date() -> Result<(), Box> { #[test] fn date_ctor_call_multiple() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let date_time = forward_dt_local(&mut context, "new Date(2020, 06, 08, 09, 16, 15, 779)"); @@ -160,7 +160,7 @@ fn date_ctor_call_multiple() -> Result<(), Box> { #[test] fn date_ctor_call_multiple_90s() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let date_time = forward_dt_local(&mut context, "new Date(99, 06, 08, 09, 16, 15, 779)"); @@ -174,7 +174,7 @@ fn date_ctor_call_multiple_90s() -> Result<(), Box> { #[test] fn date_ctor_call_multiple_nan() -> Result<(), Box> { fn check(src: &str) { - let mut context = Context::new(); + let mut context = Context::default(); let date_time = forward_dt_local(&mut context, src); assert_eq!(None, date_time); } @@ -192,7 +192,7 @@ fn date_ctor_call_multiple_nan() -> Result<(), Box> { #[test] fn date_ctor_now_call() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let date_time = forward(&mut context, "Date.now()"); let dt1 = date_time.parse::()?; @@ -208,7 +208,7 @@ fn date_ctor_now_call() -> Result<(), Box> { #[test] fn date_ctor_parse_call() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let date_time = forward_val(&mut context, "Date.parse('2020-06-08T09:16:15.779-07:30')"); @@ -218,7 +218,7 @@ fn date_ctor_parse_call() -> Result<(), Box> { #[test] fn date_ctor_utc_call() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let date_time = forward_val(&mut context, "Date.UTC(2020, 06, 08, 09, 16, 15, 779)"); @@ -229,7 +229,7 @@ fn date_ctor_utc_call() -> Result<(), Box> { #[test] fn date_ctor_utc_call_nan() -> Result<(), Box> { fn check(src: &str) { - let mut context = Context::new(); + let mut context = Context::default(); let date_time = forward_val(&mut context, src).expect("Expected Success"); assert_eq!(JsValue::nan(), date_time); } @@ -247,7 +247,7 @@ fn date_ctor_utc_call_nan() -> Result<(), Box> { #[test] fn date_proto_get_date_call() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward_val( &mut context, @@ -263,7 +263,7 @@ fn date_proto_get_date_call() -> Result<(), Box> { #[test] fn date_proto_get_day_call() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward_val( &mut context, @@ -278,7 +278,7 @@ fn date_proto_get_day_call() -> Result<(), Box> { #[test] fn date_proto_get_full_year_call() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward_val( &mut context, @@ -293,7 +293,7 @@ fn date_proto_get_full_year_call() -> Result<(), Box> { #[test] fn date_proto_get_hours_call() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward_val( &mut context, @@ -308,7 +308,7 @@ fn date_proto_get_hours_call() -> Result<(), Box> { #[test] fn date_proto_get_milliseconds_call() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward_val( &mut context, @@ -323,7 +323,7 @@ fn date_proto_get_milliseconds_call() -> Result<(), Box> #[test] fn date_proto_get_minutes_call() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward_val( &mut context, @@ -338,7 +338,7 @@ fn date_proto_get_minutes_call() -> Result<(), Box> { #[test] fn date_proto_get_month() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward_val( &mut context, @@ -354,7 +354,7 @@ fn date_proto_get_month() -> Result<(), Box> { #[test] fn date_proto_get_seconds() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward_val( &mut context, @@ -369,7 +369,7 @@ fn date_proto_get_seconds() -> Result<(), Box> { #[test] fn date_proto_get_time() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward_val( &mut context, @@ -389,7 +389,7 @@ fn date_proto_get_time() -> Result<(), Box> { #[test] fn date_proto_get_year() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward_val( &mut context, @@ -404,7 +404,7 @@ fn date_proto_get_year() -> Result<(), Box> { #[test] fn date_proto_get_timezone_offset() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward_val( &mut context, @@ -434,7 +434,7 @@ fn date_proto_get_timezone_offset() -> Result<(), Box> { #[test] fn date_proto_get_utc_date_call() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward_val( &mut context, @@ -450,7 +450,7 @@ fn date_proto_get_utc_date_call() -> Result<(), Box> { #[test] fn date_proto_get_utc_day_call() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward_val( &mut context, @@ -465,7 +465,7 @@ fn date_proto_get_utc_day_call() -> Result<(), Box> { #[test] fn date_proto_get_utc_full_year_call() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward_val( &mut context, @@ -480,7 +480,7 @@ fn date_proto_get_utc_full_year_call() -> Result<(), Box> #[test] fn date_proto_get_utc_hours_call() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward_val( &mut context, @@ -495,7 +495,7 @@ fn date_proto_get_utc_hours_call() -> Result<(), Box> { #[test] fn date_proto_get_utc_milliseconds_call() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward_val( &mut context, @@ -510,7 +510,7 @@ fn date_proto_get_utc_milliseconds_call() -> Result<(), Box Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward_val( &mut context, @@ -525,7 +525,7 @@ fn date_proto_get_utc_minutes_call() -> Result<(), Box> { #[test] fn date_proto_get_utc_month() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward_val( &mut context, @@ -541,7 +541,7 @@ fn date_proto_get_utc_month() -> Result<(), Box> { #[test] fn date_proto_get_utc_seconds() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward_val( &mut context, @@ -556,7 +556,7 @@ fn date_proto_get_utc_seconds() -> Result<(), Box> { #[test] fn date_proto_set_date() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward_dt_local( &mut context, @@ -588,7 +588,7 @@ fn date_proto_set_date() -> Result<(), Box> { #[test] fn date_proto_set_full_year() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward_dt_local( &mut context, @@ -660,7 +660,7 @@ fn date_proto_set_full_year() -> Result<(), Box> { #[test] fn date_proto_set_hours() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward_dt_local( &mut context, @@ -714,7 +714,7 @@ fn date_proto_set_hours() -> Result<(), Box> { #[test] fn date_proto_set_milliseconds() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward_dt_local( &mut context, @@ -742,7 +742,7 @@ fn date_proto_set_milliseconds() -> Result<(), Box> { #[test] fn date_proto_set_minutes() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward_dt_local( &mut context, @@ -788,7 +788,7 @@ fn date_proto_set_minutes() -> Result<(), Box> { #[test] fn date_proto_set_month() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward_dt_local( &mut context, @@ -825,7 +825,7 @@ fn date_proto_set_month() -> Result<(), Box> { #[test] fn date_proto_set_seconds() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward_dt_local( &mut context, @@ -862,7 +862,7 @@ fn date_proto_set_seconds() -> Result<(), Box> { #[test] fn set_year() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward_dt_local( &mut context, @@ -887,7 +887,7 @@ fn set_year() -> Result<(), Box> { #[test] fn date_proto_set_time() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward_dt_local( &mut context, @@ -903,7 +903,7 @@ fn date_proto_set_time() -> Result<(), Box> { #[test] fn date_proto_set_utc_date() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward_dt_utc( &mut context, @@ -935,7 +935,7 @@ fn date_proto_set_utc_date() -> Result<(), Box> { #[test] fn date_proto_set_utc_full_year() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward_dt_utc( &mut context, @@ -1007,7 +1007,7 @@ fn date_proto_set_utc_full_year() -> Result<(), Box> { #[test] fn date_proto_set_utc_hours() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward_dt_utc( &mut context, @@ -1061,7 +1061,7 @@ fn date_proto_set_utc_hours() -> Result<(), Box> { #[test] fn date_proto_set_utc_milliseconds() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward_dt_utc( &mut context, @@ -1089,7 +1089,7 @@ fn date_proto_set_utc_milliseconds() -> Result<(), Box> { #[test] fn date_proto_set_utc_minutes() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward_dt_utc( &mut context, @@ -1135,7 +1135,7 @@ fn date_proto_set_utc_minutes() -> Result<(), Box> { #[test] fn date_proto_set_utc_month() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward_dt_utc( &mut context, @@ -1172,7 +1172,7 @@ fn date_proto_set_utc_month() -> Result<(), Box> { #[test] fn date_proto_set_utc_seconds() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward_dt_utc( &mut context, @@ -1209,7 +1209,7 @@ fn date_proto_set_utc_seconds() -> Result<(), Box> { #[test] fn date_proto_to_date_string() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward_val( &mut context, @@ -1223,7 +1223,7 @@ fn date_proto_to_date_string() -> Result<(), Box> { #[test] fn date_proto_to_gmt_string() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward_val( &mut context, @@ -1237,7 +1237,7 @@ fn date_proto_to_gmt_string() -> Result<(), Box> { #[test] fn date_proto_to_iso_string() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward_val( &mut context, @@ -1251,7 +1251,7 @@ fn date_proto_to_iso_string() -> Result<(), Box> { #[test] fn date_proto_to_json() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward_val( &mut context, @@ -1265,7 +1265,7 @@ fn date_proto_to_json() -> Result<(), Box> { #[test] fn date_proto_to_string() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward_val( &mut context, @@ -1293,7 +1293,7 @@ fn date_proto_to_string() -> Result<(), Box> { #[test] fn date_proto_to_time_string() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward_val( &mut context, @@ -1321,7 +1321,7 @@ fn date_proto_to_time_string() -> Result<(), Box> { #[test] fn date_proto_to_utc_string() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward_val( &mut context, @@ -1335,7 +1335,7 @@ fn date_proto_to_utc_string() -> Result<(), Box> { #[test] fn date_proto_value_of() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward_val( &mut context, @@ -1349,7 +1349,7 @@ fn date_proto_value_of() -> Result<(), Box> { #[test] fn date_neg() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward_val( &mut context, @@ -1363,7 +1363,7 @@ fn date_neg() -> Result<(), Box> { #[test] fn date_json() -> Result<(), Box> { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward_val( &mut context, diff --git a/boa/src/builtins/error/tests.rs b/boa/src/builtins/error/tests.rs index 68c9813ca02..e082ba9666f 100644 --- a/boa/src/builtins/error/tests.rs +++ b/boa/src/builtins/error/tests.rs @@ -2,7 +2,7 @@ use crate::{forward, Context}; #[test] fn error_to_string() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" let e = new Error('1'); let name = new Error(); @@ -37,19 +37,19 @@ fn error_to_string() { #[test] fn eval_error_name() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(forward(&mut context, "EvalError.name"), "\"EvalError\""); } #[test] fn eval_error_length() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(forward(&mut context, "EvalError.length"), "1"); } #[test] fn eval_error_to_string() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!( forward(&mut context, "new EvalError('hello').toString()"), "\"EvalError: hello\"" @@ -62,19 +62,19 @@ fn eval_error_to_string() { #[test] fn uri_error_name() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(forward(&mut context, "URIError.name"), "\"URIError\""); } #[test] fn uri_error_length() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(forward(&mut context, "URIError.length"), "1"); } #[test] fn uri_error_to_string() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!( forward(&mut context, "new URIError('hello').toString()"), "\"URIError: hello\"" diff --git a/boa/src/builtins/function/tests.rs b/boa/src/builtins/function/tests.rs index 187d12b1296..505d6bb2785 100644 --- a/boa/src/builtins/function/tests.rs +++ b/boa/src/builtins/function/tests.rs @@ -8,7 +8,7 @@ use crate::{ #[allow(clippy::float_cmp)] #[test] fn arguments_object() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" function jason(a, b) { @@ -31,7 +31,7 @@ fn arguments_object() { #[test] fn self_mutating_function_when_calling() { - let mut context = Context::new(); + let mut context = Context::default(); let func = r#" function x() { x.y = 3; @@ -50,7 +50,7 @@ fn self_mutating_function_when_calling() { #[test] fn self_mutating_function_when_constructing() { - let mut context = Context::new(); + let mut context = Context::default(); let func = r#" function x() { x.y = 3; @@ -69,7 +69,7 @@ fn self_mutating_function_when_constructing() { #[test] fn call_function_prototype() { - let mut context = Context::new(); + let mut context = Context::default(); let func = r#" Function.prototype() "#; @@ -79,7 +79,7 @@ fn call_function_prototype() { #[test] fn call_function_prototype_with_arguments() { - let mut context = Context::new(); + let mut context = Context::default(); let func = r#" Function.prototype(1, "", new String("")) "#; @@ -89,7 +89,7 @@ fn call_function_prototype_with_arguments() { #[test] fn call_function_prototype_with_new() { - let mut context = Context::new(); + let mut context = Context::default(); let func = r#" new Function.prototype() "#; @@ -99,7 +99,7 @@ fn call_function_prototype_with_new() { #[test] fn function_prototype_name() { - let mut context = Context::new(); + let mut context = Context::default(); let func = r#" Function.prototype.name "#; @@ -111,7 +111,7 @@ fn function_prototype_name() { #[test] #[allow(clippy::float_cmp)] fn function_prototype_length() { - let mut context = Context::new(); + let mut context = Context::default(); let func = r#" Function.prototype.length "#; @@ -122,7 +122,7 @@ fn function_prototype_length() { #[test] fn function_prototype_call() { - let mut context = Context::new(); + let mut context = Context::default(); let func = r#" let e = new Error() Object.prototype.toString.call(e) @@ -134,7 +134,7 @@ fn function_prototype_call() { #[test] fn function_prototype_call_throw() { - let mut context = Context::new(); + let mut context = Context::default(); let throw = r#" let call = Function.prototype.call; call(call) @@ -147,7 +147,7 @@ fn function_prototype_call_throw() { #[test] fn function_prototype_call_multiple_args() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" function f(a, b) { this.a = a; @@ -171,7 +171,7 @@ fn function_prototype_call_multiple_args() { #[test] fn function_prototype_apply() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" const numbers = [6, 7, 3, 4, 2]; const max = Math.max.apply(null, numbers); @@ -194,7 +194,7 @@ fn function_prototype_apply() { #[test] fn function_prototype_apply_on_object() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" function f(a, b) { this.a = a; @@ -220,7 +220,7 @@ fn function_prototype_apply_on_object() { #[test] fn closure_capture_clone() { - let mut context = Context::new(); + let mut context = Context::default(); let string = JsString::from("Hello"); let object = context.construct_object(); diff --git a/boa/src/builtins/json/tests.rs b/boa/src/builtins/json/tests.rs index 1cc126580de..9d473ffb421 100644 --- a/boa/src/builtins/json/tests.rs +++ b/boa/src/builtins/json/tests.rs @@ -2,7 +2,7 @@ use crate::{forward, forward_val, Context}; #[test] fn json_sanity() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!( forward(&mut context, r#"JSON.parse('{"aaa":"bbb"}').aaa == 'bbb'"#), "true" @@ -18,7 +18,7 @@ fn json_sanity() { #[test] fn json_stringify_remove_undefined_values_from_objects() { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward( &mut context, @@ -31,7 +31,7 @@ fn json_stringify_remove_undefined_values_from_objects() { #[test] fn json_stringify_remove_function_values_from_objects() { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward( &mut context, @@ -44,7 +44,7 @@ fn json_stringify_remove_function_values_from_objects() { #[test] fn json_stringify_remove_symbols_from_objects() { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward( &mut context, @@ -57,7 +57,7 @@ fn json_stringify_remove_symbols_from_objects() { #[test] fn json_stringify_replacer_array_strings() { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward( &mut context, r#"JSON.stringify({aaa: 'bbb', bbb: 'ccc', ccc: 'ddd'}, ['aaa', 'bbb'])"#, @@ -68,7 +68,7 @@ fn json_stringify_replacer_array_strings() { #[test] fn json_stringify_replacer_array_numbers() { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward( &mut context, r#"JSON.stringify({ 0: 'aaa', 1: 'bbb', 2: 'ccc'}, [1, 2])"#, @@ -79,7 +79,7 @@ fn json_stringify_replacer_array_numbers() { #[test] fn json_stringify_replacer_function() { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward( &mut context, r#"JSON.stringify({ aaa: 1, bbb: 2}, (key, value) => { @@ -96,7 +96,7 @@ fn json_stringify_replacer_function() { #[test] fn json_stringify_arrays() { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward(&mut context, r#"JSON.stringify(['a', 'b'])"#); let expected = forward(&mut context, r#"'["a","b"]'"#); @@ -105,7 +105,7 @@ fn json_stringify_arrays() { #[test] fn json_stringify_object_array() { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward(&mut context, r#"JSON.stringify([{a: 'b'}, {b: 'c'}])"#); let expected = forward(&mut context, r#"'[{"a":"b"},{"b":"c"}]'"#); @@ -114,7 +114,7 @@ fn json_stringify_object_array() { #[test] fn json_stringify_array_converts_undefined_to_null() { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward(&mut context, r#"JSON.stringify([undefined])"#); let expected = forward(&mut context, r#"'[null]'"#); @@ -123,7 +123,7 @@ fn json_stringify_array_converts_undefined_to_null() { #[test] fn json_stringify_array_converts_function_to_null() { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward(&mut context, r#"JSON.stringify([() => {}])"#); let expected = forward(&mut context, r#"'[null]'"#); @@ -132,7 +132,7 @@ fn json_stringify_array_converts_function_to_null() { #[test] fn json_stringify_array_converts_symbol_to_null() { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward(&mut context, r#"JSON.stringify([Symbol()])"#); let expected = forward(&mut context, r#"'[null]'"#); @@ -140,7 +140,7 @@ fn json_stringify_array_converts_symbol_to_null() { } #[test] fn json_stringify_function_replacer_propogate_error() { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward( &mut context, @@ -161,7 +161,7 @@ fn json_stringify_function_replacer_propogate_error() { #[test] fn json_stringify_function() { - let mut context = Context::new(); + let mut context = Context::default(); let actual_function = forward(&mut context, r#"JSON.stringify(() => {})"#); let expected = forward(&mut context, r#"undefined"#); @@ -171,7 +171,7 @@ fn json_stringify_function() { #[test] fn json_stringify_undefined() { - let mut context = Context::new(); + let mut context = Context::default(); let actual_undefined = forward(&mut context, r#"JSON.stringify(undefined)"#); let expected = forward(&mut context, r#"undefined"#); @@ -180,7 +180,7 @@ fn json_stringify_undefined() { #[test] fn json_stringify_symbol() { - let mut context = Context::new(); + let mut context = Context::default(); let actual_symbol = forward(&mut context, r#"JSON.stringify(Symbol())"#); let expected = forward(&mut context, r#"undefined"#); @@ -190,7 +190,7 @@ fn json_stringify_symbol() { #[test] fn json_stringify_no_args() { - let mut context = Context::new(); + let mut context = Context::default(); let actual_no_args = forward(&mut context, r#"JSON.stringify()"#); let expected = forward(&mut context, r#"undefined"#); @@ -200,7 +200,7 @@ fn json_stringify_no_args() { #[test] fn json_stringify_fractional_numbers() { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward(&mut context, r#"JSON.stringify(Math.round(1.0))"#); let expected = forward(&mut context, r#""1""#); @@ -209,7 +209,7 @@ fn json_stringify_fractional_numbers() { #[test] fn json_stringify_pretty_print() { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward( &mut context, @@ -227,7 +227,7 @@ fn json_stringify_pretty_print() { #[test] fn json_stringify_pretty_print_four_spaces() { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward( &mut context, @@ -245,7 +245,7 @@ fn json_stringify_pretty_print_four_spaces() { #[test] fn json_stringify_pretty_print_twenty_spaces() { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward( &mut context, @@ -263,7 +263,7 @@ fn json_stringify_pretty_print_twenty_spaces() { #[test] fn json_stringify_pretty_print_with_number_object() { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward( &mut context, @@ -281,7 +281,7 @@ fn json_stringify_pretty_print_with_number_object() { #[test] fn json_stringify_pretty_print_bad_space_argument() { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward( &mut context, @@ -293,7 +293,7 @@ fn json_stringify_pretty_print_bad_space_argument() { #[test] fn json_stringify_pretty_print_with_too_long_string() { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward( &mut context, @@ -311,7 +311,7 @@ fn json_stringify_pretty_print_with_too_long_string() { #[test] fn json_stringify_pretty_print_with_string_object() { - let mut context = Context::new(); + let mut context = Context::default(); let actual = forward( &mut context, @@ -329,7 +329,7 @@ fn json_stringify_pretty_print_with_string_object() { #[test] fn json_parse_array_with_reviver() { - let mut context = Context::new(); + let mut context = Context::default(); let result = forward_val( &mut context, r#"JSON.parse('[1,2,3,4]', function(k, v){ @@ -377,7 +377,7 @@ fn json_parse_array_with_reviver() { #[test] fn json_parse_object_with_reviver() { - let mut context = Context::new(); + let mut context = Context::default(); let result = forward( &mut context, r#" @@ -403,7 +403,7 @@ fn json_parse_object_with_reviver() { #[test] fn json_parse_sets_prototypes() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" const jsonString = "{\"ob\":{\"ject\":1},\"arr\": [0,1]}"; const jsonObj = JSON.parse(jsonString); @@ -433,7 +433,7 @@ fn json_parse_sets_prototypes() { #[test] fn json_fields_should_be_enumerable() { - let mut context = Context::new(); + let mut context = Context::default(); let actual_object = forward( &mut context, r#" @@ -456,7 +456,7 @@ fn json_fields_should_be_enumerable() { #[test] fn json_parse_with_no_args_throws_syntax_error() { - let mut context = Context::new(); + let mut context = Context::default(); let result = forward(&mut context, "JSON.parse();"); assert!(result.contains("SyntaxError")); } diff --git a/boa/src/builtins/map/tests.rs b/boa/src/builtins/map/tests.rs index eba98d24ca6..23469e91310 100644 --- a/boa/src/builtins/map/tests.rs +++ b/boa/src/builtins/map/tests.rs @@ -2,7 +2,7 @@ use crate::{forward, Context}; #[test] fn construct_empty() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var empty = new Map(); "#; @@ -13,7 +13,7 @@ fn construct_empty() { #[test] fn construct_from_array() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" let map = new Map([["1", "one"], ["2", "two"]]); "#; @@ -24,7 +24,7 @@ fn construct_from_array() { #[test] fn clone() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" let original = new Map([["1", "one"], ["2", "two"]]); let clone = new Map(original); @@ -45,7 +45,7 @@ fn clone() { #[test] fn symbol_iterator() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" const map1 = new Map(); map1.set('0', 'foo'); @@ -81,7 +81,7 @@ fn symbol_iterator() { // Should behave the same as symbol_iterator #[test] fn entries() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" const map1 = new Map(); map1.set('0', 'foo'); @@ -116,7 +116,7 @@ fn entries() { #[test] fn merge() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" let first = new Map([["1", "one"], ["2", "two"]]); let second = new Map([["2", "second two"], ["3", "three"]]); @@ -135,7 +135,7 @@ fn merge() { #[test] fn get() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" let map = new Map([["1", "one"], ["2", "two"]]); "#; @@ -152,7 +152,7 @@ fn get() { #[test] fn set() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" let map = new Map(); "#; @@ -170,7 +170,7 @@ fn set() { #[test] fn clear() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" let map = new Map([["1", "one"], ["2", "two"]]); map.clear(); @@ -182,7 +182,7 @@ fn clear() { #[test] fn delete() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" let map = new Map([["1", "one"], ["2", "two"]]); "#; @@ -197,7 +197,7 @@ fn delete() { #[test] fn has() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" let map = new Map([["1", "one"]]); "#; @@ -212,7 +212,7 @@ fn has() { #[test] fn keys() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" const map1 = new Map(); map1.set('0', 'foo'); @@ -239,7 +239,7 @@ fn keys() { #[test] fn for_each() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" let map = new Map([[1, 5], [2, 10], [3, 15]]); let valueSum = 0; @@ -260,7 +260,7 @@ fn for_each() { #[test] fn values() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" const map1 = new Map(); map1.set('0', 'foo'); @@ -287,7 +287,7 @@ fn values() { #[test] fn modify_key() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" let obj = new Object(); let map = new Map([[obj, "one"]]); @@ -300,7 +300,7 @@ fn modify_key() { #[test] fn order() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" let map = new Map([[1, "one"]]); map.set(2, "two"); @@ -326,7 +326,7 @@ fn order() { #[test] fn recursive_display() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" let map = new Map(); let array = new Array([map]); @@ -341,7 +341,7 @@ fn recursive_display() { #[test] fn not_a_function() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r" try { let map = Map() @@ -357,7 +357,7 @@ fn not_a_function() { #[test] fn for_each_delete() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" let map = new Map([[0, "a"], [1, "b"], [2, "c"]]); let result = []; @@ -382,7 +382,7 @@ fn for_each_delete() { #[test] fn for_of_delete() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" let map = new Map([[0, "a"], [1, "b"], [2, "c"]]); let result = []; diff --git a/boa/src/builtins/math/tests.rs b/boa/src/builtins/math/tests.rs index 4a81b232d2b..d22e971d0e0 100644 --- a/boa/src/builtins/math/tests.rs +++ b/boa/src/builtins/math/tests.rs @@ -5,7 +5,7 @@ use std::f64; #[test] fn abs() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var a = Math.abs(3 - 5); var b = Math.abs(1.23456 - 7.89012); @@ -22,7 +22,7 @@ fn abs() { #[test] fn acos() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var a = Math.acos(8 / 10); var b = Math.acos(5 / 3); @@ -45,7 +45,7 @@ fn acos() { #[test] fn acosh() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var a = Math.acosh(2); var b = Math.acosh(-1); @@ -65,7 +65,7 @@ fn acosh() { #[test] fn asin() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var a = Math.asin(6 / 10); var b = Math.asin(5 / 3); @@ -82,7 +82,7 @@ fn asin() { #[test] fn asinh() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var a = Math.asinh(1); var b = Math.asinh(0); @@ -99,7 +99,7 @@ fn asinh() { #[test] fn atan() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var a = Math.atan(1); var b = Math.atan(0); @@ -119,7 +119,7 @@ fn atan() { #[test] fn atan2() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var a = Math.atan2(90, 15); var b = Math.atan2(15, 90); @@ -136,7 +136,7 @@ fn atan2() { #[test] fn cbrt() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var a = Math.cbrt(64); var b = Math.cbrt(-1); @@ -156,7 +156,7 @@ fn cbrt() { #[test] fn ceil() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var a = Math.ceil(1.95); var b = Math.ceil(4); @@ -177,7 +177,7 @@ fn ceil() { #[test] #[allow(clippy::many_single_char_names)] fn clz32() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var a = Math.clz32(); var b = Math.clz32({}); @@ -212,7 +212,7 @@ fn clz32() { #[test] fn cos() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var a = Math.cos(0); var b = Math.cos(1); @@ -229,7 +229,7 @@ fn cos() { #[test] fn cosh() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var a = Math.cosh(0); var b = Math.cosh(1); @@ -249,7 +249,7 @@ fn cosh() { #[test] fn exp() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var a = Math.exp(0); var b = Math.exp(-1); @@ -270,7 +270,7 @@ fn exp() { #[test] #[allow(clippy::many_single_char_names)] fn expm1() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var a = Math.expm1(); var b = Math.expm1({}); @@ -315,7 +315,7 @@ fn expm1() { #[test] fn floor() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var a = Math.floor(1.95); var b = Math.floor(-3.01); @@ -336,7 +336,7 @@ fn floor() { #[test] #[allow(clippy::many_single_char_names)] fn fround() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var a = Math.fround(NaN); var b = Math.fround(Infinity); @@ -369,7 +369,7 @@ fn fround() { #[test] #[allow(clippy::many_single_char_names)] fn hypot() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var a = Math.hypot(); var b = Math.hypot(3, 4); @@ -402,7 +402,7 @@ fn hypot() { #[test] #[allow(clippy::many_single_char_names)] fn imul() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var a = Math.imul(3, 4); var b = Math.imul(-5, 12); @@ -431,7 +431,7 @@ fn imul() { #[test] fn log() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var a = Math.log(1); var b = Math.log(10); @@ -452,7 +452,7 @@ fn log() { #[test] #[allow(clippy::many_single_char_names)] fn log1p() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var a = Math.log1p(1); var b = Math.log1p(0); @@ -484,7 +484,7 @@ fn log1p() { #[test] fn log10() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var a = Math.log10(2); var b = Math.log10(1); @@ -504,7 +504,7 @@ fn log10() { #[test] fn log2() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var a = Math.log2(3); var b = Math.log2(1); @@ -524,7 +524,7 @@ fn log2() { #[test] fn max() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var a = Math.max(10, 20); var b = Math.max(-10, -20); @@ -544,7 +544,7 @@ fn max() { #[test] fn min() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var a = Math.min(10, 20); var b = Math.min(-10, -20); @@ -564,7 +564,7 @@ fn min() { #[test] fn pow() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var a = Math.pow(2, 10); var b = Math.pow(-7, 2); @@ -587,7 +587,7 @@ fn pow() { #[test] fn round() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var a = Math.round(20.5); var b = Math.round(-20.3); @@ -604,7 +604,7 @@ fn round() { #[test] fn sign() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var a = Math.sign(3); var b = Math.sign(-3); @@ -624,7 +624,7 @@ fn sign() { #[test] fn sin() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var a = Math.sin(0); var b = Math.sin(1); @@ -641,7 +641,7 @@ fn sin() { #[test] fn sinh() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var a = Math.sinh(0); var b = Math.sinh(1); @@ -658,7 +658,7 @@ fn sinh() { #[test] fn sqrt() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var a = Math.sqrt(0); var b = Math.sqrt(2); @@ -678,7 +678,7 @@ fn sqrt() { #[test] fn tan() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var a = Math.tan(1.1); "#; @@ -696,7 +696,7 @@ fn tan() { #[test] fn tanh() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var a = Math.tanh(1); var b = Math.tanh(0); @@ -713,7 +713,7 @@ fn tanh() { #[test] fn trunc() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var a = Math.trunc(13.37); var b = Math.trunc(0.123); diff --git a/boa/src/builtins/number/tests.rs b/boa/src/builtins/number/tests.rs index 69ae509ff7f..d061c953687 100644 --- a/boa/src/builtins/number/tests.rs +++ b/boa/src/builtins/number/tests.rs @@ -4,7 +4,7 @@ use crate::{builtins::Number, forward, forward_val, value::AbstractRelation, Con #[test] fn integer_number_primitive_to_number_object() { - let mut context = Context::new(); + let mut context = Context::default(); let scenario = r#" (100).toString() === "100" @@ -15,7 +15,7 @@ fn integer_number_primitive_to_number_object() { #[test] fn call_number() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var default_zero = Number(); var int_one = Number(1); @@ -49,7 +49,7 @@ fn call_number() { #[test] fn to_exponential() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var default_exp = Number().toExponential(); var int_exp = Number(5).toExponential(); @@ -77,7 +77,7 @@ fn to_exponential() { #[test] fn to_fixed() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var default_fixed = Number().toFixed(); var pos_fixed = Number("3.456e+4").toFixed(); @@ -102,7 +102,7 @@ fn to_fixed() { #[test] fn to_locale_string() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var default_locale = Number().toLocaleString(); var small_locale = Number(5).toLocaleString(); @@ -127,7 +127,7 @@ fn to_locale_string() { #[test] fn to_precision() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var infinity = (1/0).toPrecision(3); var default_precision = Number().toPrecision(); @@ -185,7 +185,7 @@ fn to_precision() { #[test] fn to_string() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!("\"NaN\"", &forward(&mut context, "Number(NaN).toString()")); assert_eq!( @@ -369,7 +369,7 @@ fn to_string() { #[test] fn num_to_string_exponential() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!("\"0\"", forward(&mut context, "(0).toString()")); assert_eq!("\"0\"", forward(&mut context, "(-0).toString()")); @@ -407,7 +407,7 @@ fn num_to_string_exponential() { #[test] fn value_of() { - let mut context = Context::new(); + let mut context = Context::default(); // TODO: In addition to parsing numbers from strings, parse them bare As of October 2019 // the parser does not understand scientific e.g., Xe+Y or -Xe-Y notation. let init = r#" @@ -493,7 +493,7 @@ fn same_value_zero() { #[test] fn from_bigint() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(&forward(&mut context, "Number(0n)"), "0",); assert_eq!(&forward(&mut context, "Number(100000n)"), "100000",); @@ -503,7 +503,7 @@ fn from_bigint() { #[test] fn number_constants() { - let mut context = Context::new(); + let mut context = Context::default(); assert!(!forward_val(&mut context, "Number.EPSILON") .unwrap() @@ -530,42 +530,42 @@ fn number_constants() { #[test] fn parse_int_simple() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(&forward(&mut context, "parseInt(\"6\")"), "6"); } #[test] fn parse_int_negative() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(&forward(&mut context, "parseInt(\"-9\")"), "-9"); } #[test] fn parse_int_already_int() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(&forward(&mut context, "parseInt(100)"), "100"); } #[test] fn parse_int_float() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(&forward(&mut context, "parseInt(100.5)"), "100"); } #[test] fn parse_int_float_str() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(&forward(&mut context, "parseInt(\"100.5\")"), "100"); } #[test] fn parse_int_inferred_hex() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(&forward(&mut context, "parseInt(\"0xA\")"), "10"); } @@ -574,14 +574,14 @@ fn parse_int_inferred_hex() { /// a radix 10 if no radix is specified. Some alternative implementations default to a radix of 8. #[test] fn parse_int_zero_start() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(&forward(&mut context, "parseInt(\"018\")"), "18"); } #[test] fn parse_int_varying_radix() { - let mut context = Context::new(); + let mut context = Context::default(); let base_str = "1000"; @@ -600,7 +600,7 @@ fn parse_int_varying_radix() { #[test] fn parse_int_negative_varying_radix() { - let mut context = Context::new(); + let mut context = Context::default(); let base_str = "-1000"; @@ -619,14 +619,14 @@ fn parse_int_negative_varying_radix() { #[test] fn parse_int_malformed_str() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(&forward(&mut context, "parseInt(\"hello\")"), "NaN"); } #[test] fn parse_int_undefined() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(&forward(&mut context, "parseInt(undefined)"), "NaN"); } @@ -635,7 +635,7 @@ fn parse_int_undefined() { /// passed as the first argument. #[test] fn parse_int_no_args() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(&forward(&mut context, "parseInt()"), "NaN"); } @@ -643,56 +643,56 @@ fn parse_int_no_args() { /// Shows that extra arguments to parseInt are ignored. #[test] fn parse_int_too_many_args() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(&forward(&mut context, "parseInt(\"100\", 10, 10)"), "100"); } #[test] fn parse_float_simple() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(&forward(&mut context, "parseFloat(\"6.5\")"), "6.5"); } #[test] fn parse_float_int() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(&forward(&mut context, "parseFloat(10)"), "10"); } #[test] fn parse_float_int_str() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(&forward(&mut context, "parseFloat(\"8\")"), "8"); } #[test] fn parse_float_already_float() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(&forward(&mut context, "parseFloat(17.5)"), "17.5"); } #[test] fn parse_float_negative() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(&forward(&mut context, "parseFloat(\"-99.7\")"), "-99.7"); } #[test] fn parse_float_malformed_str() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(&forward(&mut context, "parseFloat(\"hello\")"), "NaN"); } #[test] fn parse_float_undefined() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(&forward(&mut context, "parseFloat(undefined)"), "NaN"); } @@ -700,7 +700,7 @@ fn parse_float_undefined() { /// No arguments to parseFloat is treated the same as passing undefined as the first argument. #[test] fn parse_float_no_args() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(&forward(&mut context, "parseFloat()"), "NaN"); } @@ -708,14 +708,14 @@ fn parse_float_no_args() { /// Shows that the parseFloat function ignores extra arguments. #[test] fn parse_float_too_many_args() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(&forward(&mut context, "parseFloat(\"100.5\", 10)"), "100.5"); } #[test] fn global_is_finite() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!("false", &forward(&mut context, "isFinite(Infinity)")); assert_eq!("false", &forward(&mut context, "isFinite(NaN)")); @@ -730,7 +730,7 @@ fn global_is_finite() { #[test] fn global_is_nan() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!("true", &forward(&mut context, "isNaN(NaN)")); assert_eq!("true", &forward(&mut context, "isNaN('NaN')")); @@ -751,7 +751,7 @@ fn global_is_nan() { #[test] fn number_is_finite() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!("false", &forward(&mut context, "Number.isFinite(Infinity)")); assert_eq!("false", &forward(&mut context, "Number.isFinite(NaN)")); @@ -783,7 +783,7 @@ fn number_is_finite() { #[test] fn number_is_integer() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!("true", &forward(&mut context, "Number.isInteger(0)")); assert_eq!("true", &forward(&mut context, "Number.isInteger(1)")); @@ -833,7 +833,7 @@ fn number_is_integer() { #[test] fn number_is_nan() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!("true", &forward(&mut context, "Number.isNaN(NaN)")); assert_eq!("true", &forward(&mut context, "Number.isNaN(Number.NaN)")); @@ -866,7 +866,7 @@ fn number_is_nan() { #[test] fn number_is_safe_integer() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!("true", &forward(&mut context, "Number.isSafeInteger(3)")); assert_eq!( diff --git a/boa/src/builtins/object/tests.rs b/boa/src/builtins/object/tests.rs index f359bebbf51..7b818930d02 100644 --- a/boa/src/builtins/object/tests.rs +++ b/boa/src/builtins/object/tests.rs @@ -2,7 +2,7 @@ use crate::{check_output, forward, Context, JsValue, TestAction}; #[test] fn object_create_with_regular_object() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" const foo = { a: 5 }; @@ -17,7 +17,7 @@ fn object_create_with_regular_object() { #[test] fn object_create_with_undefined() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" try { @@ -36,7 +36,7 @@ fn object_create_with_undefined() { #[test] fn object_create_with_number() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" try { @@ -57,7 +57,7 @@ fn object_create_with_number() { #[ignore] // TODO: to test on __proto__ somehow. __proto__ getter is not working as expected currently fn object_create_with_function() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" const x = function (){}; @@ -71,7 +71,7 @@ fn object_create_with_function() { #[test] fn object_is() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var foo = { a: 1}; @@ -152,7 +152,7 @@ fn object_has_own() { #[test] fn object_property_is_enumerable() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" let x = { enumerableProp: 'yes' }; "#; @@ -177,7 +177,7 @@ fn object_property_is_enumerable() { #[test] fn object_to_string() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" let u = undefined; let n = null; @@ -230,7 +230,7 @@ fn object_to_string() { #[test] fn define_symbol_property() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" let obj = {}; @@ -244,7 +244,7 @@ fn define_symbol_property() { #[test] fn get_own_property_descriptor_1_arg_returns_undefined() { - let mut context = Context::new(); + let mut context = Context::default(); let code = r#" let obj = {a: 2}; Object.getOwnPropertyDescriptor(obj) @@ -254,7 +254,7 @@ fn get_own_property_descriptor_1_arg_returns_undefined() { #[test] fn get_own_property_descriptor() { - let mut context = Context::new(); + let mut context = Context::default(); forward( &mut context, r#" @@ -271,7 +271,7 @@ fn get_own_property_descriptor() { #[test] fn get_own_property_descriptors() { - let mut context = Context::new(); + let mut context = Context::default(); forward( &mut context, r#" @@ -293,7 +293,7 @@ fn get_own_property_descriptors() { #[test] fn object_define_properties() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" const obj = {}; @@ -312,7 +312,7 @@ fn object_define_properties() { #[test] fn object_is_prototype_of() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" Object.prototype.isPrototypeOf(String.prototype) diff --git a/boa/src/builtins/reflect/tests.rs b/boa/src/builtins/reflect/tests.rs index a5b892efb7a..87ad4cc4282 100644 --- a/boa/src/builtins/reflect/tests.rs +++ b/boa/src/builtins/reflect/tests.rs @@ -2,7 +2,7 @@ use crate::{forward, Context}; #[test] fn apply() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var called = {}; @@ -17,7 +17,7 @@ fn apply() { #[test] fn construct() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var called = {}; @@ -32,7 +32,7 @@ fn construct() { #[test] fn define_property() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" let obj = {}; @@ -46,7 +46,7 @@ fn define_property() { #[test] fn delete_property() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" let obj = { p: 42 }; @@ -61,7 +61,7 @@ fn delete_property() { #[test] fn get() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" let obj = { p: 42 } @@ -75,7 +75,7 @@ fn get() { #[test] fn get_own_property_descriptor() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" let obj = { p: 42 }; @@ -89,7 +89,7 @@ fn get_own_property_descriptor() { #[test] fn get_prototype_of() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" function F() { this.p = 42 }; @@ -104,7 +104,7 @@ fn get_prototype_of() { #[test] fn has() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" let obj = { p: 42 }; @@ -120,7 +120,7 @@ fn has() { #[test] fn is_extensible() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" let obj = { p: 42 }; @@ -134,7 +134,7 @@ fn is_extensible() { #[test] fn own_keys() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" let obj = { p: 42 }; @@ -148,7 +148,7 @@ fn own_keys() { #[test] fn prevent_extensions() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" let obj = { p: 42 }; @@ -162,7 +162,7 @@ fn prevent_extensions() { #[test] fn set() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" let obj = {}; @@ -176,7 +176,7 @@ fn set() { #[test] fn set_prototype_of() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" function F() { this.p = 42 }; diff --git a/boa/src/builtins/regexp/tests.rs b/boa/src/builtins/regexp/tests.rs index 90e19a6e026..66c156bfc1b 100644 --- a/boa/src/builtins/regexp/tests.rs +++ b/boa/src/builtins/regexp/tests.rs @@ -2,7 +2,7 @@ use crate::{forward, Context}; #[test] fn constructors() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var constructed = new RegExp("[0-9]+(\\.[0-9]+)?"); var literal = /[0-9]+(\.[0-9]+)?/; @@ -17,7 +17,7 @@ fn constructors() { #[test] fn species() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var descriptor = Object.getOwnPropertyDescriptor(RegExp, Symbol.species); @@ -63,7 +63,7 @@ fn species() { // #[test] // fn flags() { -// let mut context = Context::new(); +// let mut context = Context::default(); // let init = r#" // var re_gi = /test/gi; // var re_sm = /test/sm; @@ -89,7 +89,7 @@ fn species() { #[test] fn last_index() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var regex = /[0-9]+(\.[0-9]+)?/g; "#; @@ -104,7 +104,7 @@ fn last_index() { #[test] fn exec() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var re = /quick\s(brown).+?(jumps)/ig; var result = re.exec('The Quick Brown Fox Jumps Over The Lazy Dog'); @@ -126,7 +126,7 @@ fn exec() { #[test] fn to_string() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!( forward(&mut context, "(new RegExp('a+b+c')).toString()"), @@ -145,7 +145,7 @@ fn to_string() { #[test] fn no_panic_on_invalid_character_escape() { - let mut context = Context::new(); + let mut context = Context::default(); // This used to panic, we now return an error // The line below should not cause Boa to panic @@ -154,7 +154,7 @@ fn no_panic_on_invalid_character_escape() { #[test] fn search() { - let mut context = Context::new(); + let mut context = Context::default(); // coerce-string assert_eq!( diff --git a/boa/src/builtins/set/tests.rs b/boa/src/builtins/set/tests.rs index 9b1555e9f74..1a29c07f82b 100644 --- a/boa/src/builtins/set/tests.rs +++ b/boa/src/builtins/set/tests.rs @@ -2,7 +2,7 @@ use crate::{forward, Context}; #[test] fn construct_empty() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var empty = new Set(); "#; @@ -13,7 +13,7 @@ fn construct_empty() { #[test] fn construct_from_array() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" let set = new Set(["one", "two"]); "#; @@ -24,7 +24,7 @@ fn construct_from_array() { #[test] fn clone() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" let original = new Set(["one", "two"]); let clone = new Set(original); @@ -45,7 +45,7 @@ fn clone() { #[test] fn symbol_iterator() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" const set1 = new Set(); set1.add('foo'); @@ -72,7 +72,7 @@ fn symbol_iterator() { #[test] fn entries() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" const set1 = new Set(); set1.add('foo'); @@ -107,7 +107,7 @@ fn entries() { #[test] fn merge() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" let first = new Set(["one", "two"]); let second = new Set(["three", "four"]); @@ -124,7 +124,7 @@ fn merge() { #[test] fn clear() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" let set = new Set(["one", "two"]); set.clear(); @@ -136,7 +136,7 @@ fn clear() { #[test] fn delete() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" let set = new Set(["one", "two"]); "#; @@ -151,7 +151,7 @@ fn delete() { #[test] fn has() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" let set = new Set(["one", "two"]); "#; @@ -168,7 +168,7 @@ fn has() { #[test] fn values_and_keys() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" const set1 = new Set(); set1.add('foo'); @@ -197,7 +197,7 @@ fn values_and_keys() { #[test] fn for_each() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" let set = new Set([5, 10, 15]); let value1Sum = 0; @@ -218,7 +218,7 @@ fn for_each() { #[test] fn recursive_display() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" let set = new Set(); let array = new Array([set]); @@ -233,7 +233,7 @@ fn recursive_display() { #[test] fn not_a_function() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r" try { let set = Set() diff --git a/boa/src/builtins/string/tests.rs b/boa/src/builtins/string/tests.rs index 5f00cd1a20f..0806aa342f1 100644 --- a/boa/src/builtins/string/tests.rs +++ b/boa/src/builtins/string/tests.rs @@ -3,7 +3,7 @@ use crate::{forward, forward_val, Context}; #[test] fn length() { //TEST262: https://github.com/tc39/test262/blob/master/test/built-ins/String/length.js - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" const a = new String(' '); const b = new String('\ud834\udf06'); @@ -26,7 +26,7 @@ fn length() { #[test] fn new_string_has_length() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" let a = new String("1234"); a @@ -38,7 +38,7 @@ fn new_string_has_length() { #[test] fn new_string_has_length_not_enumerable() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" let a = new String("1234"); "#; @@ -52,7 +52,7 @@ fn new_string_has_length_not_enumerable() { #[test] fn new_utf8_string_has_length() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" let a = new String("中文"); a @@ -64,7 +64,7 @@ fn new_utf8_string_has_length() { #[test] fn concat() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var hello = new String('Hello, '); var world = new String('world! '); @@ -81,7 +81,7 @@ fn concat() { #[test] fn generic_concat() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" Number.prototype.concat = String.prototype.concat; let number = new Number(100); @@ -96,7 +96,7 @@ fn generic_concat() { #[test] /// Test the correct type is returned from call and construct fn construct_and_call() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var hello = new String('Hello'); var world = String('world'); @@ -113,7 +113,7 @@ fn construct_and_call() { #[test] fn repeat() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var empty = new String(''); var en = new String('english'); @@ -134,7 +134,7 @@ fn repeat() { #[test] fn repeat_throws_when_count_is_negative() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!( forward( @@ -153,7 +153,7 @@ fn repeat_throws_when_count_is_negative() { #[test] fn repeat_throws_when_count_is_infinity() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!( forward( @@ -172,7 +172,7 @@ fn repeat_throws_when_count_is_infinity() { #[test] fn repeat_throws_when_count_overflows_max_length() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!( forward( @@ -191,7 +191,7 @@ fn repeat_throws_when_count_overflows_max_length() { #[test] fn repeat_generic() { - let mut context = Context::new(); + let mut context = Context::default(); let init = "Number.prototype.repeat = String.prototype.repeat;"; forward(&mut context, init); @@ -205,7 +205,7 @@ fn repeat_generic() { #[test] fn replace() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var a = "abc"; a = a.replace("a", "2"); @@ -219,7 +219,7 @@ fn replace() { #[test] fn replace_no_match() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var a = "abc"; a = a.replace(/d/, "$&$&"); @@ -232,7 +232,7 @@ fn replace_no_match() { #[test] fn replace_with_capture_groups() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var re = /(\w+)\s(\w+)/; var a = "John Smith"; @@ -247,7 +247,7 @@ fn replace_with_capture_groups() { #[test] fn replace_with_tenth_capture_group() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var re = /(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)/; var a = "0123456789"; @@ -261,7 +261,7 @@ fn replace_with_tenth_capture_group() { #[test] fn replace_substitutions() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var re = / two /; var a = "one two three"; @@ -283,7 +283,7 @@ fn replace_substitutions() { #[test] fn replace_with_function() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var a = "ecmascript is cool"; var p1, p2, p3, length; @@ -311,7 +311,7 @@ fn replace_with_function() { #[test] fn starts_with() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var empty = new String(''); var en = new String('english'); @@ -335,7 +335,7 @@ fn starts_with() { #[test] fn starts_with_with_regex_arg() { - let mut context = Context::new(); + let mut context = Context::default(); let scenario = r#" try { @@ -355,7 +355,7 @@ fn starts_with_with_regex_arg() { #[test] fn ends_with() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var empty = new String(''); var en = new String('english'); @@ -379,7 +379,7 @@ fn ends_with() { #[test] fn ends_with_with_regex_arg() { - let mut context = Context::new(); + let mut context = Context::default(); let scenario = r#" try { @@ -399,7 +399,7 @@ fn ends_with_with_regex_arg() { #[test] fn includes() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var empty = new String(''); var en = new String('english'); @@ -423,7 +423,7 @@ fn includes() { #[test] fn includes_with_regex_arg() { - let mut context = Context::new(); + let mut context = Context::default(); let scenario = r#" try { @@ -443,7 +443,7 @@ fn includes_with_regex_arg() { #[test] fn match_all() { - let mut context = Context::new(); + let mut context = Context::default(); forward( &mut context, @@ -518,7 +518,7 @@ fn match_all() { #[test] fn test_match() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var str = new String('The Quick Brown Fox Jumps Over The Lazy Dog'); var result1 = str.match(/quick\s(brown).+?(jumps)/i); @@ -562,7 +562,7 @@ fn test_match() { #[test] fn trim() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(forward(&mut context, r#"'Hello'.trim()"#), "\"Hello\""); assert_eq!(forward(&mut context, r#"' \nHello'.trim()"#), "\"Hello\""); assert_eq!(forward(&mut context, r#"'Hello \n\r'.trim()"#), "\"Hello\""); @@ -571,7 +571,7 @@ fn trim() { #[test] fn trim_start() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(forward(&mut context, r#"'Hello'.trimStart()"#), "\"Hello\""); assert_eq!( forward(&mut context, r#"' \nHello'.trimStart()"#), @@ -589,7 +589,7 @@ fn trim_start() { #[test] fn trim_end() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(forward(&mut context, r#"'Hello'.trimEnd()"#), "\"Hello\""); assert_eq!( forward(&mut context, r#"' \nHello'.trimEnd()"#), @@ -607,7 +607,7 @@ fn trim_end() { #[test] fn split() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!( forward(&mut context, "'Hello'.split()"), forward(&mut context, "['Hello']") @@ -689,7 +689,7 @@ fn split() { fn split_with_symbol_split_method() { assert_eq!( forward( - &mut Context::new(), + &mut Context::default(), r#" let sep = {}; sep[Symbol.split] = function(s, limit) { return s + limit.toString(); }; @@ -701,7 +701,7 @@ fn split_with_symbol_split_method() { assert_eq!( forward( - &mut Context::new(), + &mut Context::default(), r#" let sep = {}; sep[Symbol.split] = undefined; @@ -713,7 +713,7 @@ fn split_with_symbol_split_method() { assert_eq!( forward( - &mut Context::new(), + &mut Context::default(), r#" try { let sep = {}; @@ -730,7 +730,7 @@ fn split_with_symbol_split_method() { #[test] fn index_of_with_no_arguments() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(forward(&mut context, "''.indexOf()"), "-1"); assert_eq!(forward(&mut context, "'undefined'.indexOf()"), "0"); assert_eq!(forward(&mut context, "'a1undefined'.indexOf()"), "2"); @@ -741,7 +741,7 @@ fn index_of_with_no_arguments() { #[test] fn index_of_with_string_search_string_argument() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(forward(&mut context, "''.indexOf('hello')"), "-1"); assert_eq!( forward(&mut context, "'undefined'.indexOf('undefined')"), @@ -767,7 +767,7 @@ fn index_of_with_string_search_string_argument() { #[test] fn index_of_with_non_string_search_string_argument() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(forward(&mut context, "''.indexOf(1)"), "-1"); assert_eq!(forward(&mut context, "'1'.indexOf(1)"), "0"); assert_eq!(forward(&mut context, "'true'.indexOf(true)"), "0"); @@ -778,7 +778,7 @@ fn index_of_with_non_string_search_string_argument() { #[test] fn index_of_with_from_index_argument() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(forward(&mut context, "''.indexOf('x', 2)"), "-1"); assert_eq!(forward(&mut context, "'x'.indexOf('x', 2)"), "-1"); assert_eq!(forward(&mut context, "'abcx'.indexOf('x', 2)"), "3"); @@ -793,7 +793,7 @@ fn index_of_with_from_index_argument() { #[test] fn generic_index_of() { - let mut context = Context::new(); + let mut context = Context::default(); forward_val( &mut context, "Number.prototype.indexOf = String.prototype.indexOf", @@ -807,7 +807,7 @@ fn generic_index_of() { #[test] fn index_of_empty_search_string() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(forward(&mut context, "''.indexOf('')"), "0"); assert_eq!(forward(&mut context, "''.indexOf('', 10)"), "0"); @@ -818,7 +818,7 @@ fn index_of_empty_search_string() { #[test] fn last_index_of_with_no_arguments() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(forward(&mut context, "''.lastIndexOf()"), "-1"); assert_eq!(forward(&mut context, "'undefined'.lastIndexOf()"), "0"); assert_eq!(forward(&mut context, "'a1undefined'.lastIndexOf()"), "2"); @@ -838,7 +838,7 @@ fn last_index_of_with_no_arguments() { #[test] fn last_index_of_with_string_search_string_argument() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(forward(&mut context, "''.lastIndexOf('hello')"), "-1"); assert_eq!( forward(&mut context, "'undefined'.lastIndexOf('undefined')"), @@ -873,7 +873,7 @@ fn last_index_of_with_string_search_string_argument() { #[test] fn last_index_of_with_non_string_search_string_argument() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(forward(&mut context, "''.lastIndexOf(1)"), "-1"); assert_eq!(forward(&mut context, "'1'.lastIndexOf(1)"), "0"); assert_eq!(forward(&mut context, "'11'.lastIndexOf(1)"), "1"); @@ -888,7 +888,7 @@ fn last_index_of_with_non_string_search_string_argument() { #[test] fn last_index_of_with_from_index_argument() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(forward(&mut context, "''.lastIndexOf('x', 2)"), "-1"); assert_eq!(forward(&mut context, "'x'.lastIndexOf('x', 2)"), "-1"); assert_eq!(forward(&mut context, "'abcxx'.lastIndexOf('x', 2)"), "4"); @@ -903,7 +903,7 @@ fn last_index_of_with_from_index_argument() { #[test] fn last_index_with_empty_search_string() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(forward(&mut context, "''.lastIndexOf('')"), "0"); assert_eq!(forward(&mut context, "'x'.lastIndexOf('', 2)"), "1"); assert_eq!(forward(&mut context, "'abcxx'.lastIndexOf('', 4)"), "4"); @@ -917,7 +917,7 @@ fn last_index_with_empty_search_string() { #[test] fn generic_last_index_of() { - let mut context = Context::new(); + let mut context = Context::default(); forward_val( &mut context, "Number.prototype.lastIndexOf = String.prototype.lastIndexOf", @@ -931,7 +931,7 @@ fn generic_last_index_of() { #[test] fn last_index_non_integer_position_argument() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!( forward(&mut context, "''.lastIndexOf('x', new Number(4))"), "-1" @@ -953,7 +953,7 @@ fn last_index_non_integer_position_argument() { #[test] fn char_at() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(forward(&mut context, "'abc'.charAt(-1)"), "\"\""); assert_eq!(forward(&mut context, "'abc'.charAt(1)"), "\"b\""); assert_eq!(forward(&mut context, "'abc'.charAt(9)"), "\"\""); @@ -964,7 +964,7 @@ fn char_at() { #[test] fn char_code_at() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(forward(&mut context, "'abc'.charCodeAt(-1)"), "NaN"); assert_eq!(forward(&mut context, "'abc'.charCodeAt(1)"), "98"); assert_eq!(forward(&mut context, "'abc'.charCodeAt(9)"), "NaN"); @@ -975,7 +975,7 @@ fn char_code_at() { #[test] fn code_point_at() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(forward(&mut context, "'abc'.codePointAt(-1)"), "undefined"); assert_eq!(forward(&mut context, "'abc'.codePointAt(1)"), "98"); assert_eq!(forward(&mut context, "'abc'.codePointAt(9)"), "undefined"); @@ -1017,7 +1017,7 @@ fn code_point_at() { #[test] fn slice() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(forward(&mut context, "'abc'.slice()"), "\"abc\""); assert_eq!(forward(&mut context, "'abc'.slice(1)"), "\"bc\""); assert_eq!(forward(&mut context, "'abc'.slice(-1)"), "\"c\""); @@ -1027,7 +1027,7 @@ fn slice() { #[test] fn empty_iter() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" let iter = new String()[Symbol.iterator](); let next = iter.next(); @@ -1039,7 +1039,7 @@ fn empty_iter() { #[test] fn ascii_iter() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" let iter = new String("Hello World")[Symbol.iterator](); let next = iter.next(); @@ -1084,7 +1084,7 @@ fn ascii_iter() { #[test] fn unicode_iter() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" let iter = new String("C🙂🙂l W🙂rld")[Symbol.iterator](); let next = iter.next(); @@ -1126,7 +1126,7 @@ fn unicode_iter() { #[test] fn string_get_property() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(forward(&mut context, "'abc'[-1]"), "undefined"); assert_eq!(forward(&mut context, "'abc'[1]"), "\"b\""); assert_eq!(forward(&mut context, "'abc'[2]"), "\"c\""); @@ -1137,7 +1137,7 @@ fn string_get_property() { #[test] fn search() { - let mut context = Context::new(); + let mut context = Context::default(); assert_eq!(forward(&mut context, "'aa'.search(/b/)"), "-1"); assert_eq!(forward(&mut context, "'aa'.search(/a/)"), "0"); diff --git a/boa/src/builtins/symbol/tests.rs b/boa/src/builtins/symbol/tests.rs index e1a6c3f6939..6c68304200c 100644 --- a/boa/src/builtins/symbol/tests.rs +++ b/boa/src/builtins/symbol/tests.rs @@ -2,7 +2,7 @@ use crate::{check_output, forward, forward_val, Context, TestAction}; #[test] fn call_symbol_and_check_return_type() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var sym = Symbol(); "#; @@ -13,7 +13,7 @@ fn call_symbol_and_check_return_type() { #[test] fn print_symbol_expect_description() { - let mut context = Context::new(); + let mut context = Context::default(); let init = r#" var sym = Symbol("Hello"); "#; diff --git a/boa/src/context.rs b/boa/src/context.rs index 71e5b2ecc30..e940c5de138 100644 --- a/boa/src/context.rs +++ b/boa/src/context.rs @@ -10,9 +10,9 @@ use crate::{ object::{FunctionBuilder, JsObject, ObjectData}, property::{Attribute, PropertyDescriptor, PropertyKey}, realm::Realm, - syntax::{ast::node::StatementList, Parser}, + syntax::{ast::node::StatementList, parser::ParseError, Parser}, vm::{CallFrame, CodeBlock, FinallyReturn, Vm}, - BoaProfiler, JsResult, JsString, JsValue, + BoaProfiler, Interner, JsResult, JsString, JsValue, }; use gc::Gc; @@ -337,7 +337,7 @@ impl StandardObjects { /// } /// "#; /// -/// let mut context = Context::new(); +/// let mut context = Context::default(); /// /// // Populate the script definition to the context. /// context.eval(script).unwrap(); @@ -361,6 +361,9 @@ pub struct Context { /// realm holds both the global object and the environment pub(crate) realm: Realm, + /// String interner in the context. + interner: Interner, + /// console object state. #[cfg(feature = "console")] console: Console, @@ -385,9 +388,9 @@ pub struct Context { impl Default for Context { fn default() -> Self { - let realm = Realm::create(); let mut context = Self { - realm, + realm: Realm::create(), + interner: Interner::new(), #[cfg(feature = "console")] console: Console::default(), iterator_prototypes: IteratorPrototypes::default(), @@ -425,9 +428,25 @@ impl Default for Context { impl Context { /// Create a new `Context`. #[inline] - pub fn new() -> Self { - Default::default() + pub fn new(interner: Interner) -> Self { + Self { + interner, + ..Self::default() + } + } + + /// Gets the string interner. + #[inline] + pub fn interner(&self) -> &Interner { + &self.interner + } + + /// Gets a mutable reference to the string interner. + #[inline] + pub fn interner_mut(&mut self) -> &mut Interner { + &mut self.interner } + /// A helper function for getting an immutable reference to the `console` object. #[cfg(feature = "console")] pub(crate) fn console(&self) -> &Console { @@ -470,6 +489,13 @@ impl Context { ) } + pub fn parse(&mut self, src: S) -> Result + where + S: AsRef<[u8]>, + { + Parser::new(src.as_ref(), self.strict).parse_all(&mut self.interner) + } + /// #[inline] pub(crate) fn call( @@ -799,7 +825,7 @@ impl Context { /// ``` /// use boa::{Context, property::{Attribute, PropertyDescriptor}, object::ObjectInitializer}; /// - /// let mut context = Context::new(); + /// let mut context = Context::default(); /// /// context.register_global_property( /// "myPrimitiveProperty", @@ -846,7 +872,7 @@ impl Context { /// # Examples /// ``` ///# use boa::Context; - /// let mut context = Context::new(); + /// let mut context = Context::default(); /// /// let value = context.eval("1 + 3").unwrap(); /// @@ -854,12 +880,14 @@ impl Context { /// assert_eq!(value.as_number().unwrap(), 4.0); /// ``` #[allow(clippy::unit_arg, clippy::drop_copy)] - pub fn eval>(&mut self, src: T) -> JsResult { + pub fn eval(&mut self, src: S) -> JsResult + where + S: AsRef<[u8]>, + { let main_timer = BoaProfiler::global().start_event("Main", "Main"); - let src_bytes: &[u8] = src.as_ref(); - let parsing_result = Parser::new(src_bytes, false) - .parse_all() + let parsing_result = Parser::new(src.as_ref(), false) + .parse_all(&mut self.interner) .map_err(|e| e.to_string()); let statement_list = match parsing_result { diff --git a/boa/src/lib.rs b/boa/src/lib.rs index 2604b63b848..7113c8673e2 100644 --- a/boa/src/lib.rs +++ b/boa/src/lib.rs @@ -1,12 +1,10 @@ -/*! -This is an experimental Javascript lexer, parser and compiler written in Rust. Currently, it has support for some of the language. - -# Crate Features - - **serde** - Enables serialization and deserialization of the AST (Abstract Syntax Tree). - - **console** - Enables `boa`s WHATWG `console` object implementation. - - **profiler** - Enables profiling with measureme (this is mostly internal). - -**/ +//! This is an experimental Javascript lexer, parser and compiler written in Rust. Currently, it +//! has support for some of the language. +//! +//! # Crate Features +//! - **serde** - Enables serialization and deserialization of the AST (Abstract Syntax Tree). +//! - **console** - Enables `boa`s WHATWG `console` object implementation. +//! - **profiler** - Enables profiling with measureme (this is mostly internal). #![doc( html_logo_url = "https://raw.githubusercontent.com/boa-dev/boa/main/assets/logo.svg", @@ -66,9 +64,9 @@ pub mod prelude { pub use crate::{object::JsObject, Context, JsBigInt, JsResult, JsString, JsValue}; } -use std::result::Result as StdResult; - pub(crate) use crate::profiler::BoaProfiler; +pub use boa_interner::{Interner, Sym}; +use std::result::Result as StdResult; // Export things to root level #[doc(inline)] @@ -76,32 +74,19 @@ pub use crate::{ bigint::JsBigInt, context::Context, string::JsString, symbol::JsSymbol, value::JsValue, }; -use crate::syntax::{ - ast::node::StatementList, - parser::{ParseError, Parser}, -}; - /// The result of a Javascript expression is represented like this so it can succeed (`Ok`) or fail (`Err`) #[must_use] pub type JsResult = StdResult; -/// Parses the given source code. +/// Execute the code using an existing `Context`. /// -/// It will return either the statement list AST node for the code, or a parsing error if something -/// goes wrong. -#[inline] -pub fn parse>(src: T, strict_mode: bool) -> StdResult { - let src_bytes: &[u8] = src.as_ref(); - Parser::new(src_bytes, strict_mode).parse_all() -} - -/// Execute the code using an existing Context -/// The str is consumed and the state of the Context is changed +/// The state of the `Context` is changed, and a string representation of the result is returned. #[cfg(test)] -#[allow(clippy::let_and_return)] -pub(crate) fn forward>(context: &mut Context, src: T) -> String { - let src_bytes: &[u8] = src.as_ref(); - context.eval(src_bytes).map_or_else( +pub(crate) fn forward(context: &mut Context, src: S) -> String +where + S: AsRef<[u8]>, +{ + context.eval(src.as_ref()).map_or_else( |e| format!("Uncaught {}", e.display()), |v| v.display().to_string(), ) @@ -131,7 +116,7 @@ pub(crate) fn forward_val>(context: &mut Context, src: T) -> JsRe pub(crate) fn exec>(src: T) -> String { let src_bytes: &[u8] = src.as_ref(); - match Context::new().eval(src_bytes) { + match Context::default().eval(src_bytes) { Ok(value) => value.display().to_string(), Err(error) => error.display().to_string(), } @@ -150,7 +135,7 @@ pub(crate) enum TestAction { #[cfg(test)] #[track_caller] pub(crate) fn check_output(actions: &[TestAction]) { - let mut context = Context::new(); + let mut context = Context::default(); let mut i = 1; for action in actions { diff --git a/boa/src/object/mod.rs b/boa/src/object/mod.rs index f937dba2c6c..a0281b7c0c3 100644 --- a/boa/src/object/mod.rs +++ b/boa/src/object/mod.rs @@ -1387,7 +1387,7 @@ impl<'context> FunctionBuilder<'context> { /// /// ``` /// # use boa::{Context, JsValue, object::ObjectInitializer, property::Attribute}; -/// let mut context = Context::new(); +/// let mut context = Context::default(); /// let object = ObjectInitializer::new(&mut context) /// .property( /// "hello", diff --git a/boa/src/syntax/ast/node/mod.rs b/boa/src/syntax/ast/node/mod.rs index dfe1e890582..02139145ccb 100644 --- a/boa/src/syntax/ast/node/mod.rs +++ b/boa/src/syntax/ast/node/mod.rs @@ -667,6 +667,8 @@ unsafe impl Trace for PropertyName { /// level. #[cfg(test)] fn test_formatting(source: &'static str) { + use crate::{syntax::Parser, Interner}; + // Remove preceding newline. let source = &source[1..]; @@ -680,7 +682,13 @@ fn test_formatting(source: &'static str) { .map(|l| &l[characters_to_remove..]) // Remove preceding whitespace from each line .collect::>() .join("\n"); - let result = format!("{}", crate::parse(&scenario, false).unwrap()); + let mut interner = Interner::new(); + let result = format!( + "{}", + Parser::new(scenario.as_bytes(), false) + .parse_all(&mut interner) + .expect("parsing failed") + ); if scenario != result { eprint!("========= Expected:\n{}", scenario); eprint!("========= Got:\n{}", result); diff --git a/boa/src/syntax/lexer/comment.rs b/boa/src/syntax/lexer/comment.rs index 24c94c1903a..58e34a93add 100644 --- a/boa/src/syntax/lexer/comment.rs +++ b/boa/src/syntax/lexer/comment.rs @@ -7,6 +7,7 @@ use crate::{ ast::{Position, Span}, lexer::{Token, TokenKind}, }, + Interner, }; use core::convert::TryFrom; use std::io::Read; @@ -24,7 +25,12 @@ use std::io::Read; pub(super) struct SingleLineComment; impl Tokenizer for SingleLineComment { - fn lex(&mut self, cursor: &mut Cursor, start_pos: Position) -> Result + fn lex( + &mut self, + cursor: &mut Cursor, + start_pos: Position, + _interner: &mut Interner, + ) -> Result where R: Read, { @@ -59,7 +65,12 @@ impl Tokenizer for SingleLineComment { pub(super) struct MultiLineComment; impl Tokenizer for MultiLineComment { - fn lex(&mut self, cursor: &mut Cursor, start_pos: Position) -> Result + fn lex( + &mut self, + cursor: &mut Cursor, + start_pos: Position, + _interner: &mut Interner, + ) -> Result where R: Read, { @@ -103,7 +114,12 @@ impl Tokenizer for MultiLineComment { pub(super) struct HashbangComment; impl Tokenizer for HashbangComment { - fn lex(&mut self, cursor: &mut Cursor, start_pos: Position) -> Result + fn lex( + &mut self, + cursor: &mut Cursor, + start_pos: Position, + _interner: &mut Interner, + ) -> Result where R: Read, { diff --git a/boa/src/syntax/lexer/identifier.rs b/boa/src/syntax/lexer/identifier.rs index 5fef7bf7d13..48cf2d8e462 100644 --- a/boa/src/syntax/lexer/identifier.rs +++ b/boa/src/syntax/lexer/identifier.rs @@ -7,6 +7,7 @@ use crate::{ ast::{Keyword, Position, Span}, lexer::{StringLiteral, Token, TokenKind}, }, + Interner, }; use boa_unicode::UnicodeProperties; use core::convert::TryFrom; @@ -80,7 +81,12 @@ impl Identifier { } impl Tokenizer for Identifier { - fn lex(&mut self, cursor: &mut Cursor, start_pos: Position) -> Result + fn lex( + &mut self, + cursor: &mut Cursor, + start_pos: Position, + interner: &mut Interner, + ) -> Result where R: Read, { @@ -123,7 +129,7 @@ impl Tokenizer for Identifier { start_pos, )); } - TokenKind::identifier(identifier_name.into_boxed_str()) + TokenKind::identifier(interner.get_or_intern(identifier_name)) }; Ok(Token::new(token_kind, Span::new(start_pos, cursor.pos()))) diff --git a/boa/src/syntax/lexer/mod.rs b/boa/src/syntax/lexer/mod.rs index e2ed8227e65..496bd041a33 100644 --- a/boa/src/syntax/lexer/mod.rs +++ b/boa/src/syntax/lexer/mod.rs @@ -40,8 +40,11 @@ use self::{ string::StringLiteral, template::TemplateLiteral, }; -use crate::syntax::ast::{Punctuator, Span}; pub use crate::{profiler::BoaProfiler, syntax::ast::Position}; +use crate::{ + syntax::ast::{Punctuator, Span}, + Interner, +}; use core::convert::TryFrom; pub use error::Error; use std::io::Read; @@ -49,7 +52,12 @@ pub use token::{Token, TokenKind}; trait Tokenizer { /// Lexes the next token. - fn lex(&mut self, cursor: &mut Cursor, start_pos: Position) -> Result + fn lex( + &mut self, + cursor: &mut Cursor, + start_pos: Position, + interner: &mut Interner, + ) -> Result where R: Read; } @@ -120,7 +128,11 @@ impl Lexer { // that means it could be multiple different tokens depending on the input token. // // As per https://tc39.es/ecma262/#sec-ecmascript-language-lexical-grammar - pub(crate) fn lex_slash_token(&mut self, start: Position) -> Result + pub(crate) fn lex_slash_token( + &mut self, + start: Position, + interner: &mut Interner, + ) -> Result where R: Read, { @@ -130,11 +142,11 @@ impl Lexer { match c { b'/' => { self.cursor.next_byte()?.expect("/ token vanished"); // Consume the '/' - SingleLineComment.lex(&mut self.cursor, start) + SingleLineComment.lex(&mut self.cursor, start, interner) } b'*' => { self.cursor.next_byte()?.expect("* token vanished"); // Consume the '*' - MultiLineComment.lex(&mut self.cursor, start) + MultiLineComment.lex(&mut self.cursor, start, interner) } ch => { match self.get_goal() { @@ -157,7 +169,7 @@ impl Lexer { } InputElement::RegExp => { // Can be a regular expression. - RegexLiteral.lex(&mut self.cursor, start) + RegexLiteral.lex(&mut self.cursor, start, interner) } } } @@ -173,7 +185,7 @@ impl Lexer { /// Retrieves the next token from the lexer. // We intentionally don't implement Iterator trait as Result