Class: Yadriggy::ASTree
Overview
Abstract syntax tree (AST).
Instance Attribute Summary collapse
-
#astrees ⇒ ASTreeTable
readonly
All the reified ASTs.
-
#context ⇒ Method|Proc
readonly
The Method or Proc object given for the reification.
-
#file_name ⇒ String
readonly
The source file name.
-
#tree ⇒ ASTnode
readonly
The AST.
Attributes inherited from ASTnode
Class Method Summary collapse
Instance Method Summary collapse
-
#accept(evaluator) ⇒ void
A method for Visitor pattern.
-
#initialize(ast_table, proc, file, sexp) ⇒ ASTree
constructor
A new instance of ASTree.
- #pretty_print(pp) ⇒ Object
-
#reify(proc) ⇒ ASTree|nil
Gets the abstract syntax tree of the given procedure.
Methods inherited from ASTnode
#add_child, #add_children, #const_value, #const_value_in_class, #get_context_class, #get_receiver_object, #is_proc?, #root, #source_location, #source_location_string, #value, #value_in_class
Constructor Details
#initialize(ast_table, proc, file, sexp) ⇒ ASTree
1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 |
# File 'lib/yadriggy/ast.rb', line 1781 def initialize(ast_table, proc, file, sexp) unless proc.is_a?(Proc) || proc.is_a?(Method) || proc.is_a?(UnboundMethod) raise "unknown context #{proc.class.name}" end @astrees = ast_table # ASTreeTable @context = proc # Proc or Method @file_name = file @tree = ASTree.to_node(sexp) add_child(@tree) @astrees[proc] = self end |
Instance Attribute Details
#astrees ⇒ ASTreeTable (readonly)
1769 1770 1771 |
# File 'lib/yadriggy/ast.rb', line 1769 def astrees @astrees end |
#context ⇒ Method|Proc (readonly)
1773 1774 1775 |
# File 'lib/yadriggy/ast.rb', line 1773 def context @context end |
#file_name ⇒ String (readonly)
1776 1777 1778 |
# File 'lib/yadriggy/ast.rb', line 1776 def file_name @file_name end |
#tree ⇒ ASTnode (readonly)
1779 1780 1781 |
# File 'lib/yadriggy/ast.rb', line 1779 def tree @tree end |
Class Method Details
.append_tags(clazz) ⇒ Object
1845 1846 1847 |
# File 'lib/yadriggy/ast.rb', line 1845 def self.(clazz) clazz..each {|t| [t] = clazz } end |
.to_node(sexp) ⇒ Object
1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 |
# File 'lib/yadriggy/ast.rb', line 1868 def self.to_node(sexp) if sexp.nil? nil elsif sexp[0] == :var_ref || sexp[0] == :var_field || sexp[0] == :const_ref to_node(sexp[1]) else klass = [sexp[0]] if klass.nil? sexp_name = if sexp.is_a?(Array) sexp[0].to_s else ':' + sexp.to_s end raise "unknown s-expression " + sexp_name else node = klass.new(sexp) StringLiteral.normalize(node) end end end |
Instance Method Details
#accept(evaluator) ⇒ void
This method returns an undefined value.
A method for Visitor pattern.
1817 1818 1819 |
# File 'lib/yadriggy/ast.rb', line 1817 def accept(evaluator) evaluator.astree(self) end |
#pretty_print(pp) ⇒ Object
1795 1796 1797 |
# File 'lib/yadriggy/ast.rb', line 1795 def pretty_print(pp) Yadriggy::simpler_pretty_print(pp, self, "@astrees") end |
#reify(proc) ⇒ ASTree|nil
Gets the abstract syntax tree of the given procedure.
1804 1805 1806 1807 1808 1809 1810 1811 1812 |
# File 'lib/yadriggy/ast.rb', line 1804 def reify(proc) ast_obj = @astrees[proc] unless ast_obj.nil? ast_obj else ast = SourceCode.get_sexp(proc) ast && ast[1] && ASTree.new(@astrees, proc, ast[0], ast[1]) end end |