class Minjs::ECMA262::StFunc
Base
class of ECMA262
FunctionDeclaration / FunctionExpression element
@see www.ecma-international.org/ecma-262 ECMA262
13, 11.1.5
Attributes
args[R]
exe_context[RW]
name[R]
statements[R]
var_env[R]
Public Class Methods
new(var_env, name, args, statements, options = {})
click to toggle source
# File lib/minjs/ecma262/statement.rb, line 1539 def initialize(var_env, name, args, statements, options = {}) @var_env = var_env @name = name @args = args #=> array @statements = statements #=> Prog @decl = options[:decl] @getter = options[:getter] @setter = options[:setter] end
Public Instance Methods
==(obj)
click to toggle source
compare object
# File lib/minjs/ecma262/statement.rb, line 1574 def ==(obj) self.class == obj.class and @name == obj.name and @args == obj.args and @statements == obj.statements end
decl?()
click to toggle source
Returns true if this object is function declaration
# File lib/minjs/ecma262/statement.rb, line 1610 def decl? @decl end
deep_dup()
click to toggle source
duplicate object @see Base#deep_dup
# File lib/minjs/ecma262/statement.rb, line 1556 def deep_dup self.class.new(@var_env, @name ? @name.deep_dup : nil, @args.collect{|args|args.deep_dup}, @statements.deep_dup, {decl: @decl, getter: @getter, setter: @setter}) end
enter(outer_exe_context)
click to toggle source
# File lib/minjs/ecma262/statement.rb, line 1614 def enter(outer_exe_context) local_env = LexEnv.new_declarative_env(outer_exe_context.lex_env) var_env.record.binding.each do |k, v| local_env.record.create_mutable_binding(k, nil) val = v.delete(:value) local_env.record.set_mutable_binding(k, val, nil, v) end new_exe_context = ExeContext.new new_exe_context.lex_env = local_env new_exe_context.var_env = var_env new_exe_context end
getter?()
click to toggle source
Returns true if this object is setter in object
# File lib/minjs/ecma262/statement.rb, line 1600 def getter? @getter end
left_hand_side_exp?()
click to toggle source
@return [Boolean] true if expression is kind of LeftHandSideExpression.
# File lib/minjs/ecma262/statement.rb, line 1595 def left_hand_side_exp? true end
priority()
click to toggle source
@return [Fixnum] expression priority
# File lib/minjs/ecma262/statement.rb, line 1550 def priority PRIORITY_PRIMARY end
setter?()
click to toggle source
Returns true if this object is setter in object
# File lib/minjs/ecma262/statement.rb, line 1605 def setter? @setter 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 1583 def to_js(options = {}) _args = @args.collect{|x|x.to_js(options)}.join(",") if @getter concat options, :get, @name, "()", "{", @statements, "}" elsif @setter concat options, :set, @name, '(', _args, ")", "{", @statements, "}" else concat options, :function, @name, '(', _args, ")", "{", @statements, "}" end end
traverse(parent) { |parent, self| ... }
click to toggle source
Traverses this children and itself with given block.
# File lib/minjs/ecma262/statement.rb, line 1564 def traverse(parent, &block) @name.traverse(self, &block) if @name @args.each do |arg| arg.traverse(self, &block) end @statements.traverse(self, &block) yield parent, self end