[#118346] [Ruby master Bug#20586] Some filesystem calls in dir.c are missing error handling and can return incorrect results if interrupted — "ivoanjo (Ivo Anjo) via ruby-core" <ruby-core@...>
Issue #20586 has been reported by ivoanjo (Ivo Anjo).
13 messages
2024/06/19
[ruby-core:118202] [Ruby master Bug#20043] `defined?` checks for method existence but only sometimes
From:
"mame (Yusuke Endoh) via ruby-core" <ruby-core@...>
Date:
2024-06-06 09:30:15 UTC
List:
ruby-core #118202
Issue #20043 has been updated by mame (Yusuke Endoh).
Discussed at the dev meeting. @matz said `defined?([*a])`, `defined?(itself(*a))`, and `defined?({ a => a })` should all return nil.
Matz was not positive about restricting the expression of `defined?`. @ko1 said he will investigate the use case in public gem code base.
----------------------------------------
Bug #20043: `defined?` checks for method existence but only sometimes
https://bugs.ruby-lang.org/issues/20043#change-108689
* Author: tenderlovemaking (Aaron Patterson)
* Status: Open
* ruby -v: ruby 3.3.0dev (2023-12-05T21:25:34Z master 56eccb350b) [arm64-darwin23]
* Backport: 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN
----------------------------------------
When an expression is passed to `defined?`, it will _sometimes_ check if a method in a sub-expression is defined and sometimes it won't.
For example:
```
$ ./miniruby -e'p defined?(a)'
nil
$ ./miniruby -e'p defined?([a])'
nil
```
In the above case, Ruby will check whether or not the method `a` is defined, and it returns `nil`. However, if you use a splat, it will not check:
```
$ ./miniruby -e'p defined?([*a])'
"expression"
```
The same thing seems to happen with method parameters:
```
$ ./miniruby -e'p defined?(itself)'
"method"
$ ./miniruby -e'p defined?(itself(a))'
nil
$ ./miniruby -e'p defined?(itself(*a))'
"method"
```
Oddly, `defined?` will check contents of arrays, but _won't_ check contents of hashes:
```
$ ./miniruby -e'p defined?([[[[a]]]])'
nil
$ ./miniruby -e'p defined?({ a => a })'
"expression"
```
I think all of the cases that refer to `a` should check whether or not `a` is defined regardless of splats or hashes.
---Files--------------------------------
clipboard-202312191405-owvpy.png (27.3 KB)
general - ruby-lang - 4 new items - Slack 2023-12-19 16-10-39.png (100 KB)
--
https://bugs.ruby-lang.org/