summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2009-10-14 14:48:33 -0700
committerAaron Patterson <aaron.patterson@gmail.com>2009-10-14 14:48:33 -0700
commit3854df000780465f6e78b084732d5ab324be941e (patch)
treece2a58678f43d625bdecf9d4155c791aff67c49e
parent5ffa4a8bdb7e541a6cfa0e26d634ca3a7adc1339 (diff)
downloadpsych-3854df000780465f6e78b084732d5ab324be941e.zip
speeding some stuff up
-rw-r--r--lib/psych/nodes/scalar.rb1
-rw-r--r--lib/psych/tree_builder.rb31
-rw-r--r--test/psych/test_tree_builder.rb1
3 files changed, 23 insertions, 10 deletions
diff --git a/lib/psych/nodes/scalar.rb b/lib/psych/nodes/scalar.rb
index fac4d69..3bf2a2e 100644
--- a/lib/psych/nodes/scalar.rb
+++ b/lib/psych/nodes/scalar.rb
@@ -30,7 +30,6 @@ module Psych
attr_accessor :style
def initialize value, anchor = nil, tag = nil, plain = true, quoted = false, style = ANY
- super()
@value = value
@anchor = anchor
@tag = tag
diff --git a/lib/psych/tree_builder.rb b/lib/psych/tree_builder.rb
index 089ee96..075163e 100644
--- a/lib/psych/tree_builder.rb
+++ b/lib/psych/tree_builder.rb
@@ -10,6 +10,7 @@ module Psych
class TreeBuilder < Psych::Handler
def initialize
@stack = []
+ @last = nil
end
def root
@@ -23,36 +24,48 @@ module Psych
class_eval %{
def start_#{node.downcase}(*args)
n = Nodes::#{node}.new(*args)
- @stack.last.children << n
- @stack.push n
+ @last.children << n
+ push n
end
def end_#{node.downcase}
- @stack.pop
+ pop
end
}
end
def start_document(*args)
n = Nodes::Document.new(*args)
- @stack.last.children << n
- @stack.push n
+ @last.children << n
+ push n
end
def end_document implicit_end
- @stack.pop.implicit_end = implicit_end
+ @last.implicit_end = implicit_end
+ pop
end
def start_stream encoding
- @stack.push Nodes::Stream.new(encoding)
+ push Nodes::Stream.new(encoding)
end
def scalar(*args)
- @stack.last.children << Nodes::Scalar.new(*args)
+ @last.children << Nodes::Scalar.new(*args)
end
def alias(*args)
- @stack.last.children << Nodes::Alias.new(*args)
+ @last.children << Nodes::Alias.new(*args)
+ end
+
+ private
+ def push value
+ @stack.push value
+ @last = value
+ end
+
+ def pop
+ @stack.pop
+ @last = @stack.last
end
end
end
diff --git a/test/psych/test_tree_builder.rb b/test/psych/test_tree_builder.rb
index e916f31..3025ef3 100644
--- a/test/psych/test_tree_builder.rb
+++ b/test/psych/test_tree_builder.rb
@@ -70,6 +70,7 @@ module Psych
def test_alias
doc = @tree.children.first
seq = doc.children.first
+ assert_equal 3, seq.children.length
al = seq.children[2]
assert_instance_of Nodes::Alias, al
assert_equal 'A', al.anchor