From 192960ce5de2f017f729453b0c3bc04927eb0041 Mon Sep 17 00:00:00 2001 From: ydah Date: Wed, 8 Jan 2025 00:40:04 +0900 Subject: [PATCH] [Bug #21010] Reject endless method definition of `[]=` Fixes: https://bugs.ruby-lang.org/issues/20785 --- src/prism.c | 3 ++- test/prism/errors/defs_endless_method.txt | 12 ++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 test/prism/errors/defs_endless_method.txt diff --git a/src/prism.c b/src/prism.c index d5158d1394..ca92d0b03c 100644 --- a/src/prism.c +++ b/src/prism.c @@ -1740,7 +1740,8 @@ char_is_global_name_punctuation(const uint8_t b) { static inline bool token_is_setter_name(pm_token_t *token) { return ( - (token->type == PM_TOKEN_IDENTIFIER) && + ((token->type == PM_TOKEN_IDENTIFIER) || + (token->type == PM_TOKEN_BRACKET_LEFT_RIGHT_EQUAL)) && (token->end - token->start >= 2) && (token->end[-1] == '=') ); diff --git a/test/prism/errors/defs_endless_method.txt b/test/prism/errors/defs_endless_method.txt new file mode 100644 index 0000000000..80db648e62 --- /dev/null +++ b/test/prism/errors/defs_endless_method.txt @@ -0,0 +1,12 @@ +def f=(k,v)=1 + ^~ invalid method name; a setter method cannot be defined in an endless method definition + +def obj.f=(k,v)=1 + ^~ invalid method name; a setter method cannot be defined in an endless method definition + +def []=(k,v)=1 + ^~~ invalid method name; a setter method cannot be defined in an endless method definition + +def obj.[]=(k,v)=1 + ^~~ invalid method name; a setter method cannot be defined in an endless method definition +