Project

General

Profile

Feature #16294

Make MatchData frozen and forbid MatchData.allocate

Added by Eregon (Benoit Daloze) 11 months ago. Updated 10 months ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-core:95699]

Description

Currently, MatchData.allocate is allowed, but almost every MatchData method called on it raise TypeError, 'uninitialized Match'.

I think MatchData should be frozen, none of its internal fields are mutable and I don't see any use case for storing instance variables on it.
Once frozen, we can implement MatchData#dup and #clone as just return self, and we don't need to check for the uninitialized case.
And Marshal can have special treatment to create an initialized MatchData directly.

My main motivation is looking at the code in TruffleRuby required to implement MatchData.allocate and check if it's initialized in so many places:
https://github.com/oracle/truffleruby/pull/1792/files

Thoughts? Anyone against?
cc alanwu (Alan Wu)

#1

Updated by nobu (Nobuyoshi Nakada) 11 months ago

  • Subject changed from Make MatchData frozen and forbid MatchData#allocate to Make MatchData frozen and forbid MatchData.allocate
#2

Updated by nobu (Nobuyoshi Nakada) 11 months ago

  • Status changed from Open to Closed

Applied in changeset git|aa94245a09887f95bc0cd353b3462108d76d13ed.


Undefine MatchData.allocate [Feature #16294]

Updated by nobu (Nobuyoshi Nakada) 11 months ago

It would be OK to remove MatchData.allocate, I think.
And Regexp.allocate too, but rubyspec has a couple of code using Regexp.allocate.

Updated by mame (Yusuke Endoh) 11 months ago

I'm not against the proposal itself, but is it okay to introduce an incompatibility at this time? cc: naruse (Yui NARUSE)

Updated by Eregon (Benoit Daloze) 10 months ago

nobu (Nobuyoshi Nakada) Thanks for the change! I'll adapt the specs.

Also available in: Atom PDF