Class: C::MemberInit
- Defined in:
- lib/cast/to_s.rb,
lib/cast/parse.rb,
lib/cast/c_nodes.rb,
lib/cast/c_nodes.rb
Constant Summary
Constants inherited from Node
Instance Attribute Summary
Attributes inherited from Node
Class Method Summary collapse
Instance Method Summary collapse
Methods inherited from Node
#==, #=~, abstract, add_field, #assert_invariants, #attached?, child, #clone, #depth_first, #detach, #detached?, #dup, #each, #eql?, field, #fields, fields, #hash, inherited, initializer, #insert_next, #insert_prev, #inspect, inspect1, #list_next, #list_prev, #match?, #method_missing, new_at, #next, #node_after, #node_before, #postorder, #preorder, #prev, #remove_node, #replace_node, #replace_with, #reverse_depth_first, #reverse_each, #reverse_postorder, #reverse_preorder, subclasses_recursive, #swap_with
Dynamic Method Handling
This class handles dynamic methods through the method_missing method in the class C::Node
Class Method Details
.parse(s, parser = nil) ⇒ Object
144 145 146 147 148 149 150 151 152 153 154 155 |
# File 'lib/cast/parse.rb', line 144 def self.parse(s, parser=nil) parser ||= C.default_parser ents = parser.parse("int f() {struct s x = {#{s}};}").entities if ents.length == 1 && # } int f() { ents[0].def.stmts.length == 1 && # }} f() {{ ents[0].def.stmts[0].declarators.length == 1 && # 1}, y ents[0].def.stmts[0].declarators[0].init.member_inits.length == 1 # 1, 2 return ents[0].def.stmts[0].declarators[0].init.member_inits[0].detach else raise ParseError, "invalid MemberInit" end end |
Instance Method Details
#to_s ⇒ Object
508 509 510 511 512 513 514 515 516 517 518 519 520 521 |
# File 'lib/cast/to_s.rb', line 508 def to_s str = '' if member memberstr = member.map do |m| if m.is_a? Expression "[#{m}]" else ".#{m}" end end str << memberstr.join(' ') << ' = ' end return str << init.to_s end |