     }
   }
 
-  func clone() -> CodeUnitStream {
+  public func clone() -> CodeUnitStream {
     var o = CodeUnitStream(codeUnits: _codeUnits, startIndex: startIndex,
         lineEndIndex: lineEndIndex)
     o.currentIndex = currentIndex
     return o
   }
 
-  mutating func eatString(string: String) -> Bool {
+  public mutating func eatString(string: String) -> Bool {
     return matchString(string, consume: true) >= 0
   }
 
-  mutating func matchString(string: String, consume: Bool = false) -> Int {
+  public mutating func matchString(string: String, consume: Bool = false)
+      -> Int {
     var r = -1
     let i = currentIndex
     let savei = i

    return r
  }

  mutating func eatWhileNeitherThree(c1: UInt8, c2: UInt8, c3: UInt8) -> Bool {
    return matchWhileNeitherThree(c1, c2: c2, c3: c3, consume: true) >= 0
  }

  mutating func matchWhileNeitherThree(c1: UInt8, c2: UInt8, c3: UInt8,
      consume: Bool = false) -> Int {
    var r = -1
    var i = currentIndex


  // String list matching

  public mutating func makeFirstCharTable(strings: [String]) -> FirstCharTable {
    let len = strings.count
    var a = FirstCharTable(count: 256, repeatedValue: nil)
    for i in 0..<len {
