1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
hack for speed


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@1019 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
shugo 2000-10-27 07:20:02 +00:00
parent cac38b30e5
commit 24053a65d0

View file

@ -1500,49 +1500,80 @@ module Net
end end
end end
ADDRESS_REGEXP = /\G\
(?# 1: NAME )(?:NIL|"((?:[^\x80-\xff\x00\r\n"\\]|\\["\\])*)") \
(?# 2: ROUTE )(?:NIL|"((?:[^\x80-\xff\x00\r\n"\\]|\\["\\])*)") \
(?# 3: MAILBOX )(?:NIL|"((?:[^\x80-\xff\x00\r\n"\\]|\\["\\])*)") \
(?# 4: HOST )(?:NIL|"((?:[^\x80-\xff\x00\r\n"\\]|\\["\\])*)")\
\)/ni
def address def address
match(T_LPAR) match(T_LPAR)
name = nstring if @str.index(ADDRESS_REGEXP, @pos)
match(T_SPACE) # address does not include literal.
route = nstring @pos = $~.end(0)
match(T_SPACE) name = $1 ? $1.gsub(/\\(["\\])/n, "\\1") : nil
mailbox = nstring route = $2 ? $2.gsub(/\\(["\\])/n, "\\1") : nil
match(T_SPACE) mailbox = $3 ? $3.gsub(/\\(["\\])/n, "\\1") : nil
host = nstring host = $4 ? $4.gsub(/\\(["\\])/n, "\\1") : nil
match(T_RPAR) else
name = nstring
match(T_SPACE)
route = nstring
match(T_SPACE)
mailbox = nstring
match(T_SPACE)
host = nstring
match(T_RPAR)
end
return Address.new(name, route, mailbox, host) return Address.new(name, route, mailbox, host)
end end
def flag_list # def flag_list
result = [] # result = []
match(T_LPAR) # match(T_LPAR)
while true # while true
token = lookahead # token = lookahead
case token.symbol # case token.symbol
when T_RPAR # when T_RPAR
shift_token # shift_token
break # break
when T_SPACE # when T_SPACE
shift_token # shift_token
end # end
result.push(flag) # result.push(flag)
end # end
return result # return result
end # end
def flag # def flag
token = lookahead # token = lookahead
if token.symbol == T_BSLASH # if token.symbol == T_BSLASH
shift_token # shift_token
token = lookahead # token = lookahead
if token.symbol == T_STAR # if token.symbol == T_STAR
shift_token # shift_token
return token.value.intern # return token.value.intern
else # else
return atom.intern # return atom.intern
end # end
# else
# return atom
# end
# end
FLAG_REGEXP = /\
(?# FLAG )\\([^\x80-\xff(){ \x00-\x1f\x7f%"\\]+)|\
(?# ATOM )([^\x80-\xff(){ \x00-\x1f\x7f%*"\\]+)/n
def flag_list
if @str.index(/\(([^)]*)\)/ni, @pos)
@pos = $~.end(0)
return $1.scan(FLAG_REGEXP).collect { |flag, atom|
atom || flag.intern
}
else else
return atom parse_error("invalid flag list")
end end
end end