class Minjs::ECMA262::StForInVar

Base class of ECMA262 ‘for(var in)’ IterationStatement element.

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

Attributes

exp2[R]
statement[R]
var_decl[R]
var_env[R]

Public Class Methods

new(var_env, var_decl, exp2, statement) click to toggle source
# File lib/minjs/ecma262/statement.rb, line 918
def initialize(var_env, var_decl, exp2, statement)
  @var_env = var_env
  @var_decl = var_decl
  @exp2 = exp2
  @statement = statement
end

Public Instance Methods

==(obj) click to toggle source

compare object

# File lib/minjs/ecma262/statement.rb, line 962
def ==(obj)
  self.class == obj.class and
    @var_decl == obj.var_decl and
    @exp2 == obj.exp2 and
    @statement == obj.statement
end
add_paren() click to toggle source

add parenthesis if need

# File lib/minjs/ecma262/statement.rb, line 999
def add_paren
  self
end
deep_dup() click to toggle source

duplicate object @see Base#deep_dup

# File lib/minjs/ecma262/statement.rb, line 927
def deep_dup
  self.class.new(@var_env,
                 [@var_decl[0].deep_dup, @var_decl[1] ? @var_decl[1].deep_dup : nil],
                 @exp2.deep_dup,
                 @statement.deep_dup)
end
remove_paren() click to toggle source

remove parenthesis if possible

# File lib/minjs/ecma262/statement.rb, line 988
def remove_paren
  if @var_decl[1] and @var_decl[1].kind_of? ExpParen
    @var_decl[1] = @var_decl[1].val
  end
  if @exp2.kind_of? ExpParen
    @exp2 = @exp2.val
  end
  self
end
replace(from, to) click to toggle source

Replaces children object. @see Base#replace

# File lib/minjs/ecma262/statement.rb, line 945
def replace(from, to)
  if from .eql? @statement
    @statement = to
  end
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 971
def to_js(options = {})
  if @statement.kind_of? StBlock and @statement.statement_list.length == 1
    statement = @statement.statement_list.statement_list[0]
  else
    statement = @statement
  end

  if @var_decl[1] #with initialiser
    _var_decl = concat(options, @var_decl[0], '=', @var_decl[1])
  else
    _var_decl = concat(options, @var_decl[0])
  end

  concat options, :for, "(", :var, _var_decl, :in, @exp2, ")", statement
end
to_st_for_in() click to toggle source

converts for-in-var-statement to for-var-statement

# File lib/minjs/ecma262/statement.rb, line 952
def to_st_for_in
  if @var_decl[1]
    t = ExpAssign.new(@var_decl[0], @var_decl[1])
  else
    t = @var_decl[0]
  end
  StForIn.new(t, @exp2, @statement)
end
traverse(parent) { |parent, self| ... } click to toggle source

Traverses this children and itself with given block.

# File lib/minjs/ecma262/statement.rb, line 935
def traverse(parent, &block)
  @var_decl[0].traverse(self, &block)
  @var_decl[1].traverse(self, &block) if @var_decl[1]
  @exp2.traverse(self, &block)
  @statement.traverse(self, &block)
  yield parent, self
end