Class: Furnace::AVM2::ABC::File
- Inherits:
-
Record
show all
- Defined in:
- lib/furnace-avm2/abc/metadata/file.rb
Instance Method Summary
collapse
Methods inherited from Record
abc_array_of, flag, pool_array, pool_array_of, pool_ref, subset, xlat_direct, xlat_field, xlat_inverse
#byte_length, codegen, codegen_each, inherited, #inspect, method_missing, register, #to_hash, trace, trace_scope, trace_value
Instance Method Details
#fix_name!(name_idx, options = {}) ⇒ Object
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
# File 'lib/furnace-avm2/abc/metadata/file.rb', line 47
def fix_name!(name_idx, options={})
old_name = constant_pool.strings[name_idx - 1]
return if ["", "*"].include? old_name
fixed_name = sanitize_name(old_name, options)
if old_name != fixed_name
index = 0
indexed_name = fixed_name
while @name_set.include? indexed_name
indexed_name = "#{fixed_name}_i#{index}"
index += 1
end
@name_set.add indexed_name
constant_pool.strings[name_idx - 1] = indexed_name
end
end
|
#fix_names! ⇒ Object
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
# File 'lib/furnace-avm2/abc/metadata/file.rb', line 31
def fix_names!
@name_set = Set.new(constant_pool.strings)
constant_pool.namespaces.each do |ns|
fix_name!(ns.name_idx, ns: true)
end
constant_pool.multinames.each do |multiname|
if [:QName, :QNameA,
:Multiname, :MultinameA,
:RTQName, :RTQMameA].include? multiname.kind
fix_name!(multiname.data.name_idx)
end
end
end
|
#method_body_at(index) ⇒ Object
27
28
29
|
# File 'lib/furnace-avm2/abc/metadata/file.rb', line 27
def method_body_at(index)
@method_body_indexes[index]
end
|
#root ⇒ Object
23
24
25
|
# File 'lib/furnace-avm2/abc/metadata/file.rb', line 23
def root
self
end
|
#sanitize_name(name, options = {}) ⇒ Object
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
# File 'lib/furnace-avm2/abc/metadata/file.rb', line 67
def sanitize_name(name, options={})
if options[:ns]
return name if name.start_with? "http://"
name.split('.').map do |part|
part.gsub(/^[^a-zA-Z_$]+/, '').
gsub(/[^a-zA-Z_$0-9:]+/, '')
end.reject do |part|
part.empty?
end.join('.')
else
name.gsub(/^[^a-zA-Z_$]+/, '').
gsub(/[^a-zA-Z_$0-9:]+/, '')
end
end
|