[ruby-core:117366] [Ruby master Bug#20400] Nested BEGIN{} execution order

Issue #20400 has been reported by kddnewton (Kevin Newton). ---------------------------------------- Bug #20400: Nested BEGIN{} execution order https://bugs.ruby-lang.org/issues/20400 * Author: kddnewton (Kevin Newton) * Status: Open * Backport: 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN ---------------------------------------- Right now there are specs for the order in which `BEGIN{}` should be executed, which is the order they appear in the file. For example: ```ruby BEGIN { print "1" } print "4" BEGIN { print "2" } print "5" BEGIN { print "3" } ``` should output "12345". However, I couldn't find any tests/specs on what happens when `BEGIN{}` is nested. The order appears to be somewhat confusing, so I wanted to clarify if it was intentional or a bug. For example: ```ruby BEGIN { print "1" BEGIN { print "2" } } ``` prints "21", and: ```ruby BEGIN { print "1" BEGIN { print "2" } BEGIN { print "3" } } ``` prints "231", and finally: ```ruby BEGIN { print "1" BEGIN { print "2" BEGIN { print "3" } } BEGIN { print "4" } } ``` prints "3241". Is this intentional? -- https://bugs.ruby-lang.org/

Issue #20400 has been updated by nobu (Nobuyoshi Nakada). `BEGIN` blocks are: a. executed in the order they appeared in the same nesting level. b. executed in prior to outside the block.
```ruby BEGIN { print "1" BEGIN { print "2" } } ```
"2" is first because it is in the inner `BEGIN` in the block for "1".
```ruby BEGIN { print "1" BEGIN { print "2" } BEGIN { print "3" } } ```
Ditto, just there are multiple `BEGIN` blocks inside the same `BEGIN`.
```ruby BEGIN { print "1" BEGIN { print "2" BEGIN { print "3" } } BEGIN { print "4" } } ```
"3" is executed prior to "2", because it is inside the block for "2", and the rest are same as the previous example.
Is this intentional?
This explanation makes sense? Anyway, tests should be improved. ---------------------------------------- Bug #20400: Nested BEGIN{} execution order https://bugs.ruby-lang.org/issues/20400#change-107532 * Author: kddnewton (Kevin Newton) * Status: Open * Backport: 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN ---------------------------------------- Right now there are specs for the order in which `BEGIN{}` should be executed, which is the order they appear in the file. For example: ```ruby BEGIN { print "1" } print "4" BEGIN { print "2" } print "5" BEGIN { print "3" } ``` should output "12345". However, I couldn't find any tests/specs on what happens when `BEGIN{}` is nested. The order appears to be somewhat confusing, so I wanted to clarify if it was intentional or a bug. For example: ```ruby BEGIN { print "1" BEGIN { print "2" } } ``` prints "21", and: ```ruby BEGIN { print "1" BEGIN { print "2" } BEGIN { print "3" } } ``` prints "231", and finally: ```ruby BEGIN { print "1" BEGIN { print "2" BEGIN { print "3" } } BEGIN { print "4" } } ``` prints "3241". Is this intentional? -- https://bugs.ruby-lang.org/

Issue #20400 has been updated by kddnewton (Kevin Newton). Status changed from Open to Closed Thank you for the clarification! ---------------------------------------- Bug #20400: Nested BEGIN{} execution order https://bugs.ruby-lang.org/issues/20400#change-107534 * Author: kddnewton (Kevin Newton) * Status: Closed * Backport: 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN ---------------------------------------- Right now there are specs for the order in which `BEGIN{}` should be executed, which is the order they appear in the file. For example: ```ruby BEGIN { print "1" } print "4" BEGIN { print "2" } print "5" BEGIN { print "3" } ``` should output "12345". However, I couldn't find any tests/specs on what happens when `BEGIN{}` is nested. The order appears to be somewhat confusing, so I wanted to clarify if it was intentional or a bug. For example: ```ruby BEGIN { print "1" BEGIN { print "2" } } ``` prints "21", and: ```ruby BEGIN { print "1" BEGIN { print "2" } BEGIN { print "3" } } ``` prints "231", and finally: ```ruby BEGIN { print "1" BEGIN { print "2" BEGIN { print "3" } } BEGIN { print "4" } } ``` prints "3241". Is this intentional? -- https://bugs.ruby-lang.org/
participants (2)
-
kddnewton (Kevin Newton)
-
nobu (Nobuyoshi Nakada)