67 |
67 |
68 /* stack operations */ |
68 /* stack operations */ |
69 |
69 |
70 var stack: List[((String, XML.Attributes), List[XML.Tree])] = null |
70 var stack: List[((String, XML.Attributes), List[XML.Tree])] = null |
71 |
71 |
72 def add(x: XML.Tree) = stack match { |
72 def add(x: XML.Tree) = (stack: @unchecked) match { |
73 case ((elem, body) :: pending) => stack = (elem, x :: body) :: pending |
73 case ((elem, body) :: pending) => stack = (elem, x :: body) :: pending |
74 } |
74 } |
75 |
75 |
76 def push(name: String, atts: XML.Attributes) = |
76 def push(name: String, atts: XML.Attributes) = |
77 if (name == "") err_element() |
77 if (name == "") err_element() |
78 else stack = ((name, atts), Nil) :: stack |
78 else stack = ((name, atts), Nil) :: stack |
79 |
79 |
80 def pop() = stack match { |
80 def pop() = (stack: @unchecked) match { |
81 case ((("", _), _) :: _) => err_unbalanced("") |
81 case ((("", _), _) :: _) => err_unbalanced("") |
82 case (((name, atts), body) :: pending) => |
82 case (((name, atts), body) :: pending) => |
83 stack = pending; add(XML.Elem(name, atts, body.reverse)) |
83 stack = pending; add(XML.Elem(name, atts, body.reverse)) |
84 } |
84 } |
85 |
85 |