From 1098b41d09ad30ec0e609a4e64fbe973d8bc7656 Mon Sep 17 00:00:00 2001 From: tofpie <75836434+tofpie@users.noreply.github.com> Date: Sat, 16 Jan 2021 18:52:41 +0100 Subject: [PATCH] Fix get/set as short method name in object (#1072) Co-authored-by: tofpie --- .../primary/object_initializer/mod.rs | 9 +++- .../primary/object_initializer/tests.rs | 42 +++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/boa/src/syntax/parser/expression/primary/object_initializer/mod.rs b/boa/src/syntax/parser/expression/primary/object_initializer/mod.rs index 5138be9251e..0ae11c5dada 100644 --- a/boa/src/syntax/parser/expression/primary/object_initializer/mod.rs +++ b/boa/src/syntax/parser/expression/primary/object_initializer/mod.rs @@ -205,7 +205,14 @@ where let _timer = BoaProfiler::global().start_event("MethodDefinition", "Parsing"); let (methodkind, prop_name, params) = match self.identifier.as_str() { - idn @ "get" | idn @ "set" => { + idn @ "get" | idn @ "set" + if matches!( + cursor.peek(0)?.map(|t| t.kind()), + Some(&TokenKind::Identifier(_)) | Some(&TokenKind::Keyword(_)) + | Some(&TokenKind::BooleanLiteral(_)) | Some(&TokenKind::NullLiteral) + | Some(&TokenKind::NumericLiteral(_)) + ) => + { let prop_name = cursor.next()?.ok_or(ParseError::AbruptEnd)?.to_string(); cursor.expect( TokenKind::Punctuator(Punctuator::OpenParen), diff --git a/boa/src/syntax/parser/expression/primary/object_initializer/tests.rs b/boa/src/syntax/parser/expression/primary/object_initializer/tests.rs index 60292bc920c..3d209f12d8c 100644 --- a/boa/src/syntax/parser/expression/primary/object_initializer/tests.rs +++ b/boa/src/syntax/parser/expression/primary/object_initializer/tests.rs @@ -140,3 +140,45 @@ fn check_object_setter() { .into()], ); } + +#[test] +fn check_object_short_function_get() { + let object_properties = vec![PropertyDefinition::method_definition( + MethodDefinitionKind::Ordinary, + "get", + FunctionExpr::new(None, vec![], vec![]), + )]; + + check_parser( + "const x = { + get() {} + }; + ", + vec![ConstDeclList::from(vec![ConstDecl::new( + "x", + Some(Object::from(object_properties)), + )]) + .into()], + ); +} + +#[test] +fn check_object_short_function_set() { + let object_properties = vec![PropertyDefinition::method_definition( + MethodDefinitionKind::Ordinary, + "set", + FunctionExpr::new(None, vec![], vec![]), + )]; + + check_parser( + "const x = { + set() {} + }; + ", + vec![ConstDeclList::from(vec![ConstDecl::new( + "x", + Some(Object::from(object_properties)), + )]) + .into()], + ); +}