Class: Rubber::C_GEnum
Instance Attribute Summary collapse
#child_names, #source_file, #source_line
Attributes inherited from C_Enum
#child_names
Instance Method Summary
collapse
#cname, #register_children
Methods inherited from C_Enum
#fullname, #same_prefix, #strip_prefixes
Instance Attribute Details
#define_on_self ⇒ Object
Returns the value of attribute define_on_self.
6
7
8
|
# File 'lib/rubber/codegen/genum.rb', line 6
def define_on_self
@define_on_self
end
|
Instance Method Details
#code(io) ⇒ Object
19
20
|
# File 'lib/rubber/codegen/genum.rb', line 19
def code(io)
end
|
#declare(io) ⇒ Object
21
22
23
|
# File 'lib/rubber/codegen/genum.rb', line 21
def declare(io)
io.puts " VALUE #{cname} = Qnil;"
end
|
#default_cname ⇒ Object
25
26
27
|
# File 'lib/rubber/codegen/genum.rb', line 25
def default_cname
"genum"+name
end
|
#doc_rd(io) ⇒ Object
32
33
34
35
|
# File 'lib/rubber/codegen/genum.rb', line 32
def doc_rd(io)
depth = (fullname.gsub(/[^:]/,'').size >> 1)
io.puts "=#{'=' * depth} enum #{fullname}"
end
|
#get_root ⇒ Object
28
|
# File 'lib/rubber/codegen/genum.rb', line 28
def get_root(); is_root? ? self : parent.get_root; end
|
#init ⇒ Object
8
9
10
11
12
13
14
15
16
17
18
|
# File 'lib/rubber/codegen/genum.rb', line 8
def init()
($custom_maps[name] ||= {})["VALUE"] = "GENUM2RVAL(%%, #{g_type})"
($custom_maps["VALUE"] ||= {})[name] = "RVAL2GENUM(%%, #{g_type})"
gt = g_type.dup
gt.sub!("#{$1}_TYPE","#{$1}") if gt =~ /\A([A-Z]+)_TYPE/ tc = gt.downcase.capitalize.gsub(/_[a-z]/){ |i| i[1..1].upcase}
($custom_maps["VALUE"] ||= {})[tc] = "RVAL2GFLAGS(%%, #{g_type})"
($custom_maps[tc] ||= {})["VALUE"] = "GFLAGS2RVAL(%%, #{g_type})"
end
|
#is_root? ⇒ Boolean
29
30
31
|
# File 'lib/rubber/codegen/genum.rb', line 29
def is_root?()
not parent.respond_to?(:fullname)
end
|
#register(io, already_defined = false) ⇒ Object
36
37
38
39
40
41
42
43
44
45
|
# File 'lib/rubber/codegen/genum.rb', line 36
def register(io, already_defined=false)
io.puts " #{cname} = G_DEF_CLASS(#{g_type}, #{name.inspect}, #{get_root.cname});"
if @define_on_self
io.puts " G_DEF_CONSTANTS(#{cname}, #{g_type}, #{prefix.inspect});"
else
io.puts " G_DEF_CONSTANTS(#{parent.cname}, #{g_type}, #{prefix.inspect});"
end
end
|