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