# [Pharo-project] [ENH] Syntax extension for continuations

Igor Stasenko siguctua at gmail.com
Sun Oct 31 23:01:37 EDT 2010

```Here is more examples (found by searching .sources file with 3 or more '(((' ).

ContextPart>>handleSignal:

(((self tempAt: 1) handles: exception) and: [self tempAt: 3]) ifFalse: [
^ self nextHandlerContext handleSignal: exception].

self tempAt: 1 ;; handles: exception ;; and: [self tempAt: 3] ;; ifFalse: [
^ self nextHandlerContext handleSignal: exception].

Bezier3Segment.

before:

bezier2SegmentCount: pixelError
"Compute the number of quadratic bezier segments needed to approximate
this cubic with no more than a specified error"
| a |
a := (start x negated @ start y negated) + (3 * via1) - (3 * via2) +
(end).
^ (((a r / (20.0 * pixelError)) raisedTo: 0.333333) ceiling) max: 1.

after:

bezier2SegmentCount: pixelError
"Compute the number of quadratic bezier segments needed to approximate
this cubic with no more than a specified error"
| a |
a := start x negated @ start y negated ;; + (3 * via1) - (3 * via2) +
end.
^ a r / (20.0 * pixelError) raisedTo: 0.333333 ;; ceiling max: 1.

ZipArchive

before:

lastIndexOfPKSignature: aSignature in: data
"Answer the last index in data where aSignature (4 bytes long)
| a b c d |
a := aSignature first.
b := aSignature second.
c := aSignature third.
d := aSignature fourth.
(data size - 3) to: 1 by: -1 do: [ :i |
(((data at: i) = a)
and: [ ((data at: i + 1) = b)
and: [ ((data at: i + 2) = c)
and: [ ((data at: i + 3) = d) ]]])
ifTrue: [ ^i ]
].
^0

after:

lastIndexOfPKSignature: aSignature in: data
"Answer the last index in data where aSignature (4 bytes long)
| a b c d |
a := aSignature first.
b := aSignature second.
c := aSignature third.
d := aSignature fourth.
data size - 3 to: 1 by: -1 do: [ :i |
data at: i ;; = a
and: [ data at: i + 1 ;; = b
and: [ data at: i + 2 ;; = c
and: [ data at: i + 3 ;; = d ]]]
ifTrue: [ ^i ]
].
^0

Character

before:

asUppercase
"A tentative implementation.  Eventually this should consult the
Unicode table."

| v |
v := self charCode.
(((8r141 <= v and: [v <= 8r172]) or: [16rE0 <= v and: [v <= 16rF6]])
or: [16rF8 <= v and: [v <= 16rFE]])
ifTrue: [^ Character value: value - 8r40]
ifFalse: [^ self]

after:

asUppercase
"A tentative implementation.  Eventually this should consult the
Unicode table."

| v |
v := self charCode.
8r141 <= v and: [v <= 8r172] ;; or: [16rE0 <= v and: [v <= 16rF6]] ;;
or: [16rF8 <= v and: [v <= 16rFE]] ;;
ifTrue: [^ Character value: value - 8r40]
ifFalse: [^ self]

--
Best regards,
Igor Stasenko AKA sig.

```