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