The Trunk: Network-ul.159.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

The Trunk: Network-ul.159.mcz

commits-2
Levente Uzonyi uploaded a new version of Network to project The Trunk:
http://source.squeak.org/trunk/Network-ul.159.mcz

==================== Summary ====================

Name: Network-ul.159
Author: ul
Time: 1 April 2015, 11:44:21.852 pm
UUID: 22d0dece-43ac-4ce7-b81f-9516fccd1843
Ancestors: Network-ul.158

Use CharacterSet's #nonSeparators shared set instead of creating and storing another one in MailAddressTokenizer. Initialize other character sets lazily, and release them during cleanUp.

=============== Diff against Network-ul.158 ===============

Item was changed:
  Stream subclass: #MailAddressTokenizer
  instanceVariableNames: 'cachedToken text pos'
+ classVariableNames: 'CSNonAtom CSParens CSSpecials'
- classVariableNames: 'CSNonAtom CSNonSeparators CSParens CSSpecials'
  poolDictionaries: ''
  category: 'Network-RFC822'!
 
  !MailAddressTokenizer commentStamp: '<historical>' prior: 0!
  Divides an address into tokens, as specified in RFC 822.  Used by MailAddressParser.!

Item was added:
+ ----- Method: MailAddressTokenizer class>>cleanUp: (in category 'class initialization') -----
+ cleanUp: aggressive
+
+ CSParens := CSSpecials := CSNonAtom := nil!

Item was removed:
- ----- Method: MailAddressTokenizer class>>initialize (in category 'class initialization') -----
- initialize
- "Initalize class variables using   MailAddressTokenizer initialize"
-
- | atomChars |
-
- CSParens := CharacterSet empty.
- CSParens addAll: '()'.
-
- CSSpecials := CharacterSet empty.
- CSSpecials addAll: '()<>@,;:\".[]'.
-
- CSNonSeparators := CharacterSet separators complement.
-
-
- "(from RFC 2822)"
- atomChars := CharacterSet empty.
- atomChars addAll: ($A to: $Z).
- atomChars addAll: ($a to: $z).
- atomChars addAll: ($0 to: $9).
- atomChars addAll: '!!#$%^''*+-/=?^_`{|}~'.
-
- CSNonAtom :=  atomChars complement.!

Item was added:
+ ----- Method: MailAddressTokenizer class>>nonAtomSet (in category 'class initialization') -----
+ nonAtomSet
+ "(from RFC 2822)"
+
+ ^CSNonAtom ifNil: [
+ CSNonAtom := CharacterSet new
+ addAll: ($A to: $Z);
+ addAll: ($a to: $z);
+ addAll: ($0 to: $9);
+ addAll: '!!#$%^''*+-/=?^_`{|}~';
+ complement ]!

Item was added:
+ ----- Method: MailAddressTokenizer class>>parenthesesSet (in category 'class initialization') -----
+ parenthesesSet
+
+ ^CSParens ifNil: [ CSParens:= CharacterSet newFrom: '()' ]!

Item was added:
+ ----- Method: MailAddressTokenizer class>>specialsSet (in category 'class initialization') -----
+ specialsSet
+
+ ^CSSpecials ifNil: [ CSSpecials := CharacterSet newFrom: '()<>@,;:\".[]' ]!

Item was changed:
  ----- Method: MailAddressTokenizer>>nextAtom (in category 'tokenizing') -----
  nextAtom
  | start end |
  start := pos.
+ pos := text indexOfAnyOf: self class nonAtomSet startingAt: start ifAbsent: [ text size + 1].
- pos := text indexOfAnyOf: CSNonAtom startingAt: start ifAbsent: [ text size + 1].
  end := pos - 1.
  ^MailAddressToken
  type: #Atom
  text: (text copyFrom: start to: end)!

Item was changed:
  ----- Method: MailAddressTokenizer>>nextComment (in category 'tokenizing') -----
  nextComment
  | start nestLevel paren |
  start := pos.
  pos := pos + 1.
  nestLevel := 1.
 
  [ nestLevel > 0 ] whileTrue: [
+ pos := text indexOfAnyOf: self class parenthesesSet startingAt: pos  ifAbsent: [ 0 ].
- pos := text indexOfAnyOf: CSParens startingAt: pos  ifAbsent: [ 0 ].
  pos = 0 ifTrue: [
  self error: 'unterminated comment.  ie, more (''s than )''s' ].
 
  paren := self nextChar.
  paren = $( ifTrue: [ nestLevel := nestLevel + 1 ] ifFalse: [ nestLevel := nestLevel - 1 ]].
  ^ MailAddressToken type: #Comment
  text: (text copyFrom: start to: pos - 1)!

Item was changed:
  ----- Method: MailAddressTokenizer>>nextToken (in category 'tokenizing') -----
  nextToken
  | c |
  self skipSeparators.
  c := self peekChar.
  c ifNil: [ ^nil ].
  c = $( ifTrue: [ ^self nextComment ].
  c = $" ifTrue: [ ^self nextQuotedString ].
  c = $[ ifTrue: [ ^self nextDomainLiteral ].
+ (self class specialsSet includes: c) ifTrue: [ ^self nextSpecial ].
- (CSSpecials includes: c) ifTrue: [ ^self nextSpecial ].
  ^self nextAtom!

Item was changed:
  ----- Method: MailAddressTokenizer>>skipSeparators (in category 'tokenizing') -----
  skipSeparators
+ pos := text indexOfAnyOf: CharacterSet nonSeparators  startingAt: pos  ifAbsent: [ text size + 1 ].!
- pos := text indexOfAnyOf: CSNonSeparators  startingAt: pos  ifAbsent: [ text size + 1 ].!