Class: Duby::AST::ClassDefinition
- Defined in:
- lib/duby/compiler.rb,
lib/duby/ast/class.rb
Direct Known Subclasses
Instance Attribute Summary collapse
-
#body ⇒ Object
Returns the value of attribute body.
-
#interfaces ⇒ Object
Returns the value of attribute interfaces.
-
#superclass ⇒ Object
Returns the value of attribute superclass.
Attributes included from Named
Attributes inherited from Node
#children, #inferred_type, #newline, #parent, #position
Instance Method Summary collapse
- #compile(compiler, expression) ⇒ Object
- #implements(*types) ⇒ Object
- #infer(typer) ⇒ Object
-
#initialize(parent, line_number, name, &block) ⇒ ClassDefinition
constructor
A new instance of ClassDefinition.
Methods included from Named
Methods inherited from Node
#[], #each, #expr?, #inspect, #line_number, #log, #precompile, #resolve_if, #resolved!, #resolved?, #simple_name, #temp, #to_s
Constructor Details
#initialize(parent, line_number, name, &block) ⇒ ClassDefinition
Returns a new instance of ClassDefinition.
7 8 9 10 11 12 13 14 15 |
# File 'lib/duby/ast/class.rb', line 7 def initialize(parent, line_number, name, &block) @interfaces = [] @name = name if Duby::AST.type_factory.respond_to? :declare_type Duby::AST.type_factory.declare_type(self) end super(parent, line_number, &block) @superclass, @body = children end |
Instance Attribute Details
#body ⇒ Object
Returns the value of attribute body.
5 6 7 |
# File 'lib/duby/ast/class.rb', line 5 def body @body end |
#interfaces ⇒ Object
Returns the value of attribute interfaces.
5 6 7 |
# File 'lib/duby/ast/class.rb', line 5 def interfaces @interfaces end |
#superclass ⇒ Object
Returns the value of attribute superclass.
5 6 7 |
# File 'lib/duby/ast/class.rb', line 5 def superclass @superclass end |
Instance Method Details
#compile(compiler, expression) ⇒ Object
167 168 169 |
# File 'lib/duby/compiler.rb', line 167 def compile(compiler, expression) compiler.define_class(self, expression) end |
#implements(*types) ⇒ Object
32 33 34 35 |
# File 'lib/duby/ast/class.rb', line 32 def implements(*types) raise ArgumentError if types.any? {|x| x.nil?} @interfaces.concat types end |
#infer(typer) ⇒ Object
17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/duby/ast/class.rb', line 17 def infer(typer) unless resolved? @inferred_type ||= typer.define_type(name, superclass, @interfaces) do if body typer.infer(body) else typer.no_type end end @inferred_type ? resolved! : typer.defer(self) end @inferred_type end |