class Minjs::ECMA262::StBlock

Base class of ECMA262 Block element.

@see www.ecma-international.org/ecma-262 ECMA262 12.1

Attributes

statement_list[R]

Public Class Methods

new(statement_list) click to toggle source

@param statement_list [StatementList] statement list

# File lib/minjs/ecma262/statement.rb, line 35
def initialize(statement_list)
  if statement_list.kind_of? Array
    @statement_list = StatementList.new(statement_list)
  else
    @statement_list = statement_list
  end
end

Public Instance Methods

==(obj) click to toggle source

compare object

# File lib/minjs/ecma262/statement.rb, line 66
def ==(obj)
  self.class == obj.class and
    @statement_list == obj.statement_list
end
[](i) click to toggle source

Returns the statement at index @param i index @return [Statement] statement

# File lib/minjs/ecma262/statement.rb, line 133
def [](i)
  @statement_list[i]
end
deep_dup() click to toggle source

duplicate object @see Base#deep_dup

# File lib/minjs/ecma262/statement.rb, line 45
def deep_dup
  self.class.new(@statement_list.deep_dup)
end
empty?() click to toggle source

@return true if block is empty

# File lib/minjs/ecma262/statement.rb, line 124
def empty?
  @statement_list.statement_list.select{|s|
    s.class != StEmpty
  }.length == 0
end
remove_empty_statement() click to toggle source

Removes empty statement in this block.

# File lib/minjs/ecma262/statement.rb, line 138
def remove_empty_statement
  statement_list.remove_empty_statement
end
replace(from, to) click to toggle source

Replaces children object. @see Base#replace

# File lib/minjs/ecma262/statement.rb, line 51
def replace(from, to)
  if from == @statement_list
    @statement_list = to
  end
end
to_exp(options = {}) click to toggle source

Converts block to expression and returns it.

# File lib/minjs/ecma262/statement.rb, line 86
def to_exp(options = {})
  @statement_list.statement_list.select{|s|
    s.class != StEmpty
  }[0].to_exp.deep_dup
end
to_exp?() click to toggle source

true if block can convert to expression

# File lib/minjs/ecma262/statement.rb, line 78
def to_exp?
  t = @statement_list.statement_list.select{|s|
    s.class != StEmpty
  }
  t.length == 1 and t[0].to_exp?
end
to_js(options = {}) click to toggle source

Returns a ECMAScript string containg the representation of element. @see Base#to_js

# File lib/minjs/ecma262/statement.rb, line 73
def to_js(options = {})
  concat(options, "{", @statement_list, "}")
end
to_return() click to toggle source

Converts block to ‘return statement’ and returns it

# File lib/minjs/ecma262/statement.rb, line 119
def to_return
  to_statement.to_return
end
to_return?() click to toggle source

@return true if block can convert to ‘return statement’

# File lib/minjs/ecma262/statement.rb, line 114
def to_return?
  to_statement? and to_statement.to_return?
end
to_statement() click to toggle source

Converts block to single statement and return it.

# File lib/minjs/ecma262/statement.rb, line 101
def to_statement
  t = @statement_list.statement_list.select{|s|
    s.class != StEmpty
  }

  if t[0]
    t[0].deep_dup
  else
    StEmpty.new
  end
end
to_statement?() click to toggle source

@return true if block can convert to single statement.

# File lib/minjs/ecma262/statement.rb, line 93
def to_statement?
  t = @statement_list.statement_list.select{|s|
    s.class != StEmpty
  }
  t.length == 1 || t.length == 0
end
traverse(parent) { |parent, self| ... } click to toggle source

Traverses this children and itself with given block.

@see Base#traverse

# File lib/minjs/ecma262/statement.rb, line 60
def traverse(parent, &block)
  @statement_list.traverse(self, &block)
  yield parent, self
end