class NScript::ValueNode

Constants

SOAK

Attributes

last[R]
source[R]

Public Class Methods

new(base, properties=[]) click to toggle source
# File lib/nscript/parser/nodes.rb, line 277
def initialize(base, properties=[])
  @base, @properties = base, [properties].flatten
end

Public Instance Methods

<<(other) click to toggle source
# File lib/nscript/parser/nodes.rb, line 281
def <<(other)
  @properties << other
  self
end
arguments?() click to toggle source
# File lib/nscript/parser/nodes.rb, line 302
def arguments?
  @base.to_s == 'arguments'
end
array?() click to toggle source
# File lib/nscript/parser/nodes.rb, line 290
def array?
  @base.is_a?(ArrayNode) && !properties?
end
compile_node(o) click to toggle source
# File lib/nscript/parser/nodes.rb, line 314
def compile_node(o)
  soaked    = false
  only      = o.delete(:only_first)
  props     = only ? @properties[0...-1] : @properties
  baseline  = @base.compile(o)
  parts     = [baseline.dup]
  props.each do |prop|
    if prop.is_a?(AccessorNode) && prop.soak
      soaked = true
      if @base.is_a?(CallNode) && prop == props.first
        temp = o[:scope].free_variable
        parts[-1] = "(#{temp} = #{baseline})#{SOAK}#{baseline = temp.to_s + prop.compile(o)}"
      else
        parts[-1] << "#{SOAK}#{baseline += prop.compile(o)}"
      end
    else
      part = prop.compile(o)
      baseline += part
      parts << part
    end
  end
  @last = parts.last
  @source = parts.length > 1 ? parts[0...-1].join('') : nil
  code = parts.join('').gsub(')())', '()))')
  write(soaked ? "(#{code})" : code)
end
object?() click to toggle source
# File lib/nscript/parser/nodes.rb, line 294
def object?
  @base.is_a?(ObjectNode) && !properties?
end
properties?() click to toggle source
# File lib/nscript/parser/nodes.rb, line 286
def properties?
  return !@properties.empty? || @base.is_a?(ThisNode)
end
splice?() click to toggle source
# File lib/nscript/parser/nodes.rb, line 298
def splice?
  properties? && @properties.last.is_a?(SliceNode)
end
statement?() click to toggle source
# File lib/nscript/parser/nodes.rb, line 310
def statement?
  @base.is_a?(Node) && @base.statement? && !properties?
end
unwrap() click to toggle source
# File lib/nscript/parser/nodes.rb, line 306
def unwrap
  @properties.empty? ? @base : self
end