class Atomy::Code::StringLiteral

Constants

ESCAPES

Public Class Methods

new(value, raw = false) click to toggle source
# File lib/atomy/code/string_literal.rb, line 9
def initialize(value, raw = false)
  @value = value
  @raw = raw
end

Public Instance Methods

bytecode(gen, mod) click to toggle source
# File lib/atomy/code/string_literal.rb, line 14
def bytecode(gen, mod)
  if @raw
    gen.push_literal(@value)
  else
    gen.push_literal(process_escapes(@value))
  end

  gen.string_dup
end

Private Instance Methods

process_escapes(str) click to toggle source
# File lib/atomy/code/string_literal.rb, line 26
def process_escapes(str)
  processed = str.dup

  processed.gsub!(/\\[xX]([0-9a-fA-F]{1,5})/) do
    [$1.to_i(16)].pack("U")
  end

  processed.gsub!(/\\(\d{1,6})/) do
    [$1.to_i].pack("U")
  end

  processed.gsub!(/\\[oO]([0-7]{1,7})/) do
    [$1.to_i(8)].pack("U")
  end

  processed.gsub!(/\\[uU]([0-9a-fA-F]{4})/) do
    [$1.to_i(16)].pack("U")
  end

  processed.gsub!(/\\(.)/) do
    ESCAPES[$1] || "\\#$1"
  end

  processed
end