Class: C::Statement
- Defined in:
- lib/cast/to_s.rb,
lib/cast/parse.rb,
lib/cast/c_nodes.rb
Overview
Class declarations
Direct Known Subclasses
Block, Break, Continue, ExpressionStatement, For, Goto, If, Return, Switch, While
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
177 178 179 180 181 182 183 184 185 186 187 |
# File 'lib/cast/parse.rb', line 177 def self.parse(s, parser=nil) parser ||= C.default_parser ents = parser.parse("void f() {#{s}}").entities if ents.length == 1 && # } void f() { ents[0].def.stmts.length == 1 && # ;; ents[0].def.stmts[0].is_a?(self) # int i; return ents[0].def.stmts[0].detach else raise ParseError, "invalid #{self}" end end |
Instance Method Details
#label(str) ⇒ Object
75 76 77 |
# File 'lib/cast/to_s.rb', line 75 def label(str) labels.map{|s| "#{s}\n"}.join + indent(str) end |