class Rucc::FileIO
Constants
- EOF
Attributes
column[R]
line[RW]
name[RW]
ntok[R]
Public Class Methods
new(io, name)
click to toggle source
@param [IO] io @param [String] name
# File lib/rucc/file_io.rb, line 7 def initialize(io, name) @io = io @name = name @line = 1 @column = 1 @ntok = 0 # Token counter @buflen = 0 @buf = Array.new(3) @last = Object.new # NOTE: Not use nil because nil means EOF. Set dummy data at first. # TODO(south37) Set @mtime # struct stat st; # if (fstat(fileno(file), &st) == -1) # error("fstat failed: %s", strerror(errno)); # r->mtime = st.st_mtime; end
Public Instance Methods
close()
click to toggle source
# File lib/rucc/file_io.rb, line 63 def close @io.close end
incr_ntok!()
click to toggle source
# File lib/rucc/file_io.rb, line 59 def incr_ntok! @ntok += 1 end
mtime()
click to toggle source
# File lib/rucc/file_io.rb, line 67 def mtime Util.assert!{ @io.is_a?(File) } File.mtime(@io) end
readc()
click to toggle source
@return [Char, NilClass] nil at EOF
# File lib/rucc/file_io.rb, line 27 def readc while true do c = get if c == EOF return c end if (c != "\\") return c end c2 = get if c2 == "\n" next end unreadc(c2) return c end end
unreadc(c)
click to toggle source
@param [Char] c
# File lib/rucc/file_io.rb, line 46 def unreadc(c) return if c == EOF Util.assert!{ @buflen < @buf.size } @buf[@buflen] = c @buflen += 1 if c == "\n" @column = 1 @line -= 1 else @column -= 1 end end
Private Instance Methods
get()
click to toggle source
@return [Char, NilClass] nil at EOF
# File lib/rucc/file_io.rb, line 75 def get if @buflen > 0 @buflen -= 1 c = @buf[@buflen] else c = readc_file end if c == "\n" @line += 1 @column = 1 elsif c != EOF @column += 1 end c end
readc_file()
click to toggle source
@return [Char, NilClass] nil at EOF
# File lib/rucc/file_io.rb, line 93 def readc_file c = @io.getc if c == EOF c = (@last == "\n" || @last == EOF) ? nil : "\n" elsif c == "\r" c2 = @io.getc if c2 != "\n" @io.ungetc(c2) end c = "\n" end @last = c c end