Project

General

Profile

« Previous | Next » 

Revision 7cf523c7

Added by ko1 (Koichi Sasada) over 8 years ago

  • vm_opts.h, iseq.c, iseq.h: add compile option to force frozen
    string literals.
    [Feature #11473]
    This addition is not specification change, but to try frozen
    string literal world discussed on [Feature #11473].
    You can try frozen string literal world using this magical line:
    RubyVM::InstructionSequence.compile_option =
    {frozen_string_literal: true}
    Note that this is a global compilation option, so that you need to
    compile another script like that:
    p 'foo'.frozen? #=> false
    RubyVM::InstructionSequence.compile_option =
    {frozen_string_literal: true}
    p 'foo'.frozen? #=> false, because this line is already compiled.
    p eval("'foo'.frozen?") #=> true
    Details:
    • String literals are deduped by rb_fstring().
    • Dynamic string literals ("...#{xyz}...") is now only frozen,
      not deduped. Maybe you have other ideas.
      Now, please do not use this option on your productions :)
      Of course, current specification can be changed.
  • compile.c: ditto.
  • test/ruby/test_iseq.rb: add a test.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51659 b2dd03c8-39d4-4d8f-98ff-823fe69b080e