fn read_symbol()

in z3tracer/src/lexer.rs [111:146]


    fn read_symbol(&mut self) -> RawResult<Symbol> {
        let mut bytes = Vec::new();
        if let Some(b'|') = self.peek_byte() {
            self.consume_byte();
            while let Some(c) = self.peek_byte() {
                if *c == b'|' {
                    self.consume_byte();
                    self.skip_spaces();
                    let s = String::from_utf8(bytes).map_err(RawError::InvalidUtf8String)?;
                    return Ok(Symbol(s));
                }
                if *c == b'\n' {
                    return Err(RawError::UnexpectedChar(Some(*c as char), vec!['|']));
                }
                bytes.push(*c);
                self.consume_byte();
            }
            return Err(RawError::UnexpectedChar(None, vec!['|']));
        }
        // Normal case
        while let Some(c) = self.peek_byte() {
            let c = *c;
            if c == b' ' {
                self.consume_byte();
                self.skip_spaces();
                break;
            }
            if c == b'\n' || c == b';' || c == b'(' || c == b')' {
                break;
            }
            bytes.push(c);
            self.consume_byte();
        }
        let s = String::from_utf8(bytes).map_err(RawError::InvalidUtf8String)?;
        Ok(Symbol(s))
    }