Pharo-dev
By thread
pharo-dev@lists.pharo.org
By month
Messages by month
- ----- 2026 -----
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
March 2017
- 718 messages
Re: [Pharo-dev] [Vm-dev] BUG? A problem with callbacks that shows up in 64bits (but is on 32bits too)
by phil@highoctane.be
There is more that Cairo callbacks in userland. I am using libstrophe for
Xmpp and there are tons of callbacks and not being able to use them is
putting Pharo out of the equation b/c the main loop is basically invoking
callbacks for each evenr type.
Phil
Le 16 mars 2017 00:44, "Eliot Miranda" <eliot.miranda(a)gmail.com> a écrit :
>
> Hi Igor,
>
> On Wed, Mar 15, 2017 at 2:53 AM, Igor Stasenko <siguctua(a)gmail.com> wrote:
>
>>
>> Here's my d)
>> implement callback functions in C, or in native form => no need for
>> entering the smalltalk execution => no risk of GC => nothing to worry about.
>>
>> I guess nobody will like it (and will be right, of course ;) , but it is
>> how it was originally done. I used NativeBoost to implement those callback
>> functions and they're won't cause any GC problems.
>>
>
> yes, I like this. I was wondering why the callbacks solution was used at
> all yesterday. All they do is redirect to the cairo library. What are the
> reasons? Tedious to write and maintain the necessary simple plugin?
>
> Clément pointed out a really ugly problem with the current
> implementation. If one calls back into Pharo from the BitBlt primitives
> and then reinvokes BitBlt, say by innocently putting a halt in those
> callbacks, then the original BitBlt's state will get overwritten by the
> BitBlt invocations in the callback's dynamic exert. At least with my
> changes the BitBlt primitive will abort, rather than continue with the
> invalid state.
>
>
>> That, of course, gave me solution in this concrete case, but not in
>> general.. i.e. : if you have another callback that cannot be implemented
>> na(t)ively, then
>> you facing similar problems, mainly: how to work around the problem, that
>> primitive(s) that using callbacks may capture state, that are subject of GC
>> activity.
>>
>> In general , then, i think such primitive should be (re)written in such
>> way , that it won't get puzzled by GC.. and addGCRoot(s), IMO then best
>> way, from general interfacing/implementation standpoint.
>> I would just add extra interface for using it especially in primitives,
>> so that it
>> 1) won't punish primitive writer with too much coding
>> 2) automatically handle primitive/callback nesting e.g.
>> primitive1 -> adds roots1 -> calls fn -> callback -> st code ->
>> primitive2 -> adds roots2 -> calls fn2 -> callback2 ...
>>
>>
>> something like this:
>>
>> static initialized once myprimooptable = [ a,b,c].
>> vm pushPrimRoots: myooptable.
>> self do things primitive does.
>> vm popPrimRoots
>>
>> or, since we have green threading, then maybe better will be in this
>> form:
>>
>> rootsId := static initialized once myprimooptable = [ a,b,c].
>> vm pushPrimRoots: myooptable.
>> self do things primitive does.
>> vm popPrimRoots: rootsId.
>>
>
> We kind of have this with the addGCRoot: interface. But I think it's much
> better to design the system so that the primitive fails and can be
> retried. The problem there is having to have the primitive failure code
> check and roll back. For example in the copyBits primitive one sees
>
> ((sourceForm isForm) and: [sourceForm unhibernate])
> ifTrue: [^ self copyBits].
> ((destForm isForm) and: [destForm unhibernate])
> ifTrue: [^ self copyBits].
> ((halftoneForm isForm) and: [halftoneForm unhibernate])
> ifTrue: [^ self copyBits].
>
> This is really scruffy because...GrafPort implements copyBits, so this
> ends up not just retrying the primitive but running a lot more besides.
> One way to write it is
>
>
> ((sourceForm isForm) and: [sourceForm unhibernate])
> ifTrue: [^ self perform: #copyBits withArguments: #() inSuperclass:
> BitBlt].
> ((destForm isForm) and: [destForm unhibernate])
> ifTrue: [^ self perform: #copyBits withArguments: #() inSuperclass:
> thisContext method methodClass].
> ((halftoneForm isForm) and: [halftoneForm unhibernate])
> ifTrue: [^ self perform: #copyBits withArguments: #() inSuperclass:
> thisContext methodClass].
>
> but that's ugly.
>
> A mechanism that was in the VM would be nice. The state for the
> invocation is saved on the stack. So there could be a special failure path
> for this kind of recursive invocation problem; another send-back such as
> doesNotUnderstand: attemptToReturn:through:. Note (I'm sure you know this
> Igor) that there are primitives such as the ThreadedFFIPlugin's call-out
> primitive that very much expect to be invoked recursively and have no
> problem with it.
>
>
>>
>>
>> On 14 March 2017 at 18:33, Eliot Miranda <eliot.miranda(a)gmail.com> wrote:
>>
>>>
>>>
>>>
>>> On Tue, Mar 14, 2017 at 8:56 AM, Nicolai Hess <nicolaihess(a)gmail.com>
>>> wrote:
>>>
>>>>
>>>>
>>>>
>>>> 2017-03-14 16:46 GMT+01:00 Eliot Miranda <eliot.miranda(a)gmail.com>:
>>>>
>>>>>
>>>>> Hi Esteban, Hi Igor, Hi All,
>>>>>
>>>>> On Fri, Mar 10, 2017 at 7:35 AM, Esteban Lorenzano <
>>>>> estebanlm(a)gmail.com> wrote:
>>>>>
>>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> Iâm tumbling into an error in Pharo, because we use callbacks
>>>>>> intensively, in Athens(cairo)-to-World conversion in particular, and people
>>>>>> is sending always their crash reports⦠we made the whole conversion a lot
>>>>>> more robust since problems started to arise, but now I hit a wall I cannot
>>>>>> solve: I think problem is in something in callbacks.
>>>>>>
>>>>>> And problem is showing very easy on 64bits (while in 32bits it takes
>>>>>> time and is more random).
>>>>>>
>>>>>
>>>>> I responded in the "image not opening" thread, but it's the same
>>>>> problem. I really want to hear what y'all think because I'll happily
>>>>> implement a fix, but I want to know which one y'all think is a good idea.
>>>>> Here's my reply (edits between [ & ] to add information):
>>>>>
>>>>>
>>>>> On Mon, Mar 13, 2017 at 9:11 PM, Eliot Miranda <eliot.miranda(a)gmail.c
>>>>> om> wrote:
>>>>>
>>>>> I'm pretty confident [I know] this is to do with bugs in the Athens
>>>>> surface code which assumes that callbacks can be made in the existing
>>>>> copyBits and warpBits primitive. They can't do this safely because a GC
>>>>> (scavenge) can happen during a callback, which then causes chaos when the
>>>>> copyBits primitive tries to access objects that have been moved under its
>>>>> feet.
>>>>>
>>>>> I've done work to fix callbacks so that when there is a failure it is
>>>>> the copyBits primitive that fails, instead of apparently the callback
>>>>> return primitive. One of the apparent effects of this fix is to stop the
>>>>> screen opening up too small; another is getting the background colour
>>>>> right, and yet another is eliminating bogus pixels in the VGTigerDemo
>>>>> demo. But more work is required to fix the copyBits and warpBits
>>>>> primitives. There are a few approaches one might take:
>>>>>
>>>>> a) fixing the primitive so that it saves and restores oops around the
>>>>> callbacks using the external oop table [InterpreterProxy>>addGCRoot: &
>>>>> removeGCRoot:]. That's a pain but possible. [It's a pain because all the
>>>>> derived pointers (the start of the destForm, sourceForm, halftoneForm and
>>>>> colorMapTable) must be recomputed also, and of course most of the time the
>>>>> objects don't move; we only scavenge about once every 2 seconds in normal
>>>>> running]
>>>>>
>>>>> b) fixing the primitive so that it pins the objects it needs before
>>>>> ever invoking a callback [this is a pain because pinning an object causes
>>>>> it to be tenured to old space if it is in new space; objects can't be
>>>>> pinned in new space, so instead the pin operation forwards the new space
>>>>> object to an old space copy if required and answers its location in old
>>>>> space, so a putative withPinnedObjectsDo: operation for the copyBits
>>>>> primitive looks like
>>>>> withPinnedFormsDo: aBlock
>>>>> <inline: #always>
>>>>> self cppIf: SPURVM & false
>>>>> ifTrue:
>>>>> [| bitBltOopWasPinned destWasPinned sourceWasPinned halftoneWasPinned |
>>>>> (bitBltOopWasPinned := interpreterProxy isPinned: bitBltOop) ifFalse:
>>>>> [bitBltOop := interpreterProxy pinObject: bitBltOop].
>>>>> (destWasPinned := interpreterProxy isPinned: destForm) ifFalse:
>>>>> [destForm := interpreterProxy pinObject: destForm].
>>>>> (sourceWasPinned := interpreterProxy isPinned: sourceForm) ifFalse:
>>>>> [sourceForm := interpreterProxy pinObject: sourceForm].
>>>>> (halftoneWasPinned := interpreterProxy isPinned: halftoneForm) ifFalse:
>>>>> [halftoneForm := interpreterProxy pinObject: halftoneForm].
>>>>> aBlock value.
>>>>> bitBltOopWasPinned ifFalse: [interpreterProxy unpinObject: bitBltOop].
>>>>> destWasPinned ifFalse: [interpreterProxy unpinObject: destForm].
>>>>> sourceWasPinned ifFalse: [interpreterProxy unpinObject: sourceForm].
>>>>> halftoneWasPinned ifFalse: [interpreterProxy unpinObject:
>>>>> halftoneForm]]
>>>>> ifFalse: [aBlock value]
>>>>> and tenuring objects to old space is not ideal because they are
>>>>> only collected by a full GC, so doing this would at least tenure the
>>>>> bitBltOop which is very likely to be in new space]
>>>>>
>>>>> c) fixing the primitive so that it uses the scavenge and fullGC
>>>>> counters in the VM to detect if a GC occurred during one of the callbacks
>>>>> and would fail the primitive [if it detected that a GC had occurred in any
>>>>> of the surface functions]. The primitive would then simply be retried.
>>>>>
>>>>> d) ?
>>>>>
>>>>
>>>> Wouldn't it be possible to just pause the GC (scavange) when entering a
>>>> primitive ?
>>>>
>>>
>>> I don't think so. There is a callback occurring. If the computation
>>> executed by the callback requires a GC the application will abort if a GC
>>> cannot be done. Right? This is the case here.
>>>
>>>
>>> I like c) as it's very lightweight, but it has issues. It is fine to
>>>>> use for callbacks *before* cop[yBits and warpBits move any bits (the
>>>>> lockSurface and querySurface functions). But it's potentially erroneous
>>>>> after the unlockSurface primitive. For example, a primitive which does an
>>>>> xor with the screen can't simply be retried as the first, falling pass,
>>>>> would have updated the destination bits but not displayed them via
>>>>> unlockSurface. But I think it could be arranged that no objects are
>>>>> accessed after unlockSurface, which should naturally be the last call in
>>>>> the primitive (or do I mean showSurface?). So the approach would be to
>>>>> check for GCs occurring during querySurface and lockSurface, failing if so,
>>>>> and then caching any and all state needed by unlockSurface and showSurface
>>>>> in local variables. This way no object state is accessed to make the
>>>>> unlockSurface and showSurface calls, and no bits are moved before the
>>>>> queryDurface and lockSurface calls.
>>>>>
>>>>> If we used a failure code such as #'object may move' then the
>>>>> primitives could answer this when a GC during callbacks is detected and
>>>>> then the primitive could be retried only when required.
>>>>>
>>>>>
>>>>> [Come on folks, please comment. I want to know which idea you like
>>>>> best. We could fix this quickly. But right now it feels like I'm talking
>>>>> to myself.]
>>>>>
>>>>>
>>>>>> Here is the easiest way to reproduce it (in mac):
>>>>>>
>>>>>> wget files.pharo.org/get-files/60/pharo64-mac-latest.zip
>>>>>> wget files.pharo.org/get-files/60/pharo64.zip
>>>>>> wget files.pharo.org/get-files/60/sources.zip
>>>>>> unzip pharo64-mac-latest.zip
>>>>>> unzip pharo64.zip
>>>>>> unzip sources.zip
>>>>>> ./Pharo.app/Contents/MacOS/Pharo ./Pharo64-60438.image eval
>>>>>> "VGTigerDemo runDemo"
>>>>>>
>>>>>> eventually (like 5-6 seconds after, if not immediately), you will
>>>>>> have a stack like this:
>>>>>>
>>>>>> SmallInteger(Object)>>primitiveFailed:
>>>>>> SmallInteger(Object)>>primitiveFailed
>>>>>> SmallInteger(VMCallbackContext64)>>primSignal:andReturnAs:fr
>>>>>> omContext:
>>>>>> GrafPort>>copyBits
>>>>>> GrafPort>>image:at:sourceRect:rule:
>>>>>> FormCanvas>>image:at:sourceRect:rule:
>>>>>> FormCanvas(Canvas)>>drawImage:at:sourceRect:
>>>>>> FormCanvas(Canvas)>>drawImage:at:
>>>>>> VGTigerDemo>>runDemo
>>>>>> VGTigerDemo class>>runDemo
>>>>>> UndefinedObject>>DoIt
>>>>>> OpalCompiler>>evaluate
>>>>>> OpalCompiler(AbstractCompiler)>>evaluate:
>>>>>> [ result := Smalltalk compiler evaluate: aStream.
>>>>>> self hasSessionChanged
>>>>>> ifFalse: [ self stdout
>>>>>> print: result;
>>>>>> lf ] ] in EvaluateCommandLineHandler>>evaluate:
>>>>>> in Block: [ result := Smalltalk compiler evaluate: aStream....
>>>>>> BlockClosure>>on:do:
>>>>>> EvaluateCommandLineHandler>>evaluate:
>>>>>> EvaluateCommandLineHandler>>evaluateArguments
>>>>>> EvaluateCommandLineHandler>>activate
>>>>>> EvaluateCommandLineHandler class(CommandLineHandler
>>>>>> class)>>activateWith:
>>>>>> [ aCommandLinehandler activateWith: commandLine ] in
>>>>>> PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand:
>>>>>> in Block: [ aCommandLinehandler activateWith: commandLine ]
>>>>>> BlockClosure>>on:do:
>>>>>> PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand:
>>>>>> PharoCommandLineHandler(BasicCommandLineHandler)>>handleSubcommand
>>>>>> PharoCommandLineHandler(BasicCommandLineHandler)>>handleArgument:
>>>>>> [ self
>>>>>> handleArgument:
>>>>>> (self arguments
>>>>>> ifEmpty: [ '' ]
>>>>>> ifNotEmpty: [ :arguments | arguments first ])
>>>>>> ] in PharoCommandLineHandler(BasicCommandLineHandler)>>activate in
>>>>>> Block: [ self...
>>>>>> BlockClosure>>on:do:
>>>>>> PharoCommandLineHandler(BasicCommandLineHandler)>>activate
>>>>>> PharoCommandLineHandler>>activate
>>>>>> PharoCommandLineHandler class(CommandLineHandler class)>>activateWith:
>>>>>> [ super activateWith: aCommandLine ] in PharoCommandLineHandler
>>>>>> class>>activateWith: in Block: [ super activateWith: aCommandLine ]
>>>>>>
>>>>>> Any idea?
>>>>>>
>>>>>> thanks!
>>>>>> Esteban
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> _,,,^..^,,,_
>>>>> best, Eliot
>>>>>
>>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>> _,,,^..^,,,_
>>> best, Eliot
>>>
>>>
>>
>>
>> --
>> Best regards,
>> Igor Stasenko.
>>
>>
>
>
> --
> _,,,^..^,,,_
> best, Eliot
>
>
March 16, 2017
[pharo-project/pharo-core] 5e4428: 60444
by GitHub
Branch: refs/heads/6.0
Home: https://github.com/pharo-project/pharo-core
Commit: 5e442855aa140606b9c4d5b3a300dc3eb2759000
https://github.com/pharo-project/pharo-core/commit/5e442855aa140606b9c4d5b3…
Author: Jenkins Build Server <board(a)pharo-project.org>
Date: 2017-03-16 (Thu, 16 Mar 2017)
Changed paths:
M ConfigurationOfUnifiedFFI.package/ConfigurationOfUnifiedFFI.class/instance/symbolic versions/stable_.st
A ConfigurationOfUnifiedFFI.package/ConfigurationOfUnifiedFFI.class/instance/versions/v0%5F26%5F6_.st
R ScriptLoader60.package/ScriptLoader.class/instance/pharo - scripts/script60443.st
A ScriptLoader60.package/ScriptLoader.class/instance/pharo - scripts/script60444.st
R ScriptLoader60.package/ScriptLoader.class/instance/pharo - updates/update60443.st
A ScriptLoader60.package/ScriptLoader.class/instance/pharo - updates/update60444.st
M ScriptLoader60.package/ScriptLoader.class/instance/public/commentForCurrentUpdate.st
A UnifiedFFI.package/extension/ByteArray/instance/signedByteAt_.st
A UnifiedFFI.package/extension/ByteArray/instance/signedByteAt_put_.st
Log Message:
-----------
60444
19839 add support for signedByteAt:signedByteAt:put:
https://pharo.fogbugz.com/f/cases/19839
http://files.pharo.org/image/60/60444.zip
March 16, 2017
[pharo-project/pharo-core]
by GitHub
Branch: refs/tags/60444
Home: https://github.com/pharo-project/pharo-core
March 16, 2017
Re: [Pharo-dev] [pharo-project/pharo-core] 4a89b0: 60443
by denker
> On 16 Mar 2017, at 07:45, GitHub <noreply(a)github.com> wrote:
>
>
>
> Log Message:
> -----------
> 60443
> 19837 Epicea: integrate release 8.1.3
> https://pharo.fogbugz.com/f/cases/19837
>
> http://files.pharo.org/image/60/60443.zip
>
>
CHANGE LOG:
- Log browser:
* Display changes in a FastTableModel instead of a TreeModel, much faster for many changes.
* Remove "x filtered entries" display as well as "See 50 more" and "See all" buttons, to make the list of changes look more as a standard list (to the user eyes). Also, implementation was not nice.
* Big code clean up.
* Show number of active filters in tab (small visual improvement).
* Increase initial width.
- Fix case 19737: class removal annoucement now comes after class is renamed to AnObsolete (workaround).
- Fix case 19263: Catch all errors on redo and undo.
- Merge with fix to case 19819 by Denis. Thanks!
- Multiple code clean-ups
* Code Critic runs.
* Reduce direct explicit references to EpMonitor.
* Others.
- Add tests of apply and revert changes.
- Split EpLog into a new superclass to conform a hierarchy, which has now EpSorterLog.
- Ombu:
* Shutdown flush should be performed by all OmDeferrers, not only by all OmSessionStores.
* Workaround needed because can''t get real file stream position from ZnBufferedWriteStream (+ would need special care of WideStrings).
* Remove OmDirectoryStore and OmCompositeStore since they are not used anymore (continuous-style EpPriorView was the user).
* The Ston''s OmEntryReader should not receive the stream as parameter and then store it in the Ston reader. This produced was confussing and produced concurrency issues.
March 16, 2017
[pharo-project/pharo-core]
by GitHub
Branch: refs/tags/60443
Home: https://github.com/pharo-project/pharo-core
March 16, 2017
[pharo-project/pharo-core] 4a89b0: 60443
by GitHub
Branch: refs/heads/6.0
Home: https://github.com/pharo-project/pharo-core
Commit: 4a89b0d02956526e1ec2bdda718645845e776137
https://github.com/pharo-project/pharo-core/commit/4a89b0d02956526e1ec2bdda…
Author: Jenkins Build Server <board(a)pharo-project.org>
Date: 2017-03-16 (Thu, 16 Mar 2017)
Changed paths:
M ConfigurationOfEpicea.package/ConfigurationOfEpicea.class/instance/tags/stable_.st
A ConfigurationOfEpicea.package/ConfigurationOfEpicea.class/instance/versions/version812_.st
A ConfigurationOfEpicea.package/ConfigurationOfEpicea.class/instance/versions/version813_.st
A Epicea.package/EpAbstractLog.class/README.md
A Epicea.package/EpAbstractLog.class/class/tag keys/authorKey.st
A Epicea.package/EpAbstractLog.class/class/tag keys/priorReferenceKey.st
A Epicea.package/EpAbstractLog.class/class/tag keys/timeKey.st
A Epicea.package/EpAbstractLog.class/class/tag keys/triggererReferenceKey.st
A Epicea.package/EpAbstractLog.class/definition.st
A Epicea.package/EpAbstractLog.class/instance/accessing/announcer.st
A Epicea.package/EpAbstractLog.class/instance/accessing/authorAt_.st
A Epicea.package/EpAbstractLog.class/instance/accessing/authorAt_ifAbsent_.st
A Epicea.package/EpAbstractLog.class/instance/accessing/commentAt_ifAbsent_.st
A Epicea.package/EpAbstractLog.class/instance/accessing/commentAt_ifPresent_.st
A Epicea.package/EpAbstractLog.class/instance/accessing/entries.st
A Epicea.package/EpAbstractLog.class/instance/accessing/entriesCount.st
A Epicea.package/EpAbstractLog.class/instance/accessing/entriesForAll_.st
A Epicea.package/EpAbstractLog.class/instance/accessing/entryFor_.st
A Epicea.package/EpAbstractLog.class/instance/accessing/entryFor_ifPresent_ifAbsent_.st
A Epicea.package/EpAbstractLog.class/instance/accessing/entryReferences.st
A Epicea.package/EpAbstractLog.class/instance/accessing/events.st
A Epicea.package/EpAbstractLog.class/instance/accessing/firstEntryIfAbsent_.st
A Epicea.package/EpAbstractLog.class/instance/accessing/head.st
A Epicea.package/EpAbstractLog.class/instance/accessing/headReference.st
A Epicea.package/EpAbstractLog.class/instance/accessing/nullReference.st
A Epicea.package/EpAbstractLog.class/instance/accessing/priorReferenceAt_.st
A Epicea.package/EpAbstractLog.class/instance/accessing/referenceTo_.st
A Epicea.package/EpAbstractLog.class/instance/accessing/referencesToAll_.st
A Epicea.package/EpAbstractLog.class/instance/accessing/timeAt_.st
A Epicea.package/EpAbstractLog.class/instance/accessing/timeAt_ifAbsent_.st
A Epicea.package/EpAbstractLog.class/instance/accessing/triggererReferenceOf_ifPresent_ifAbsent_.st
A Epicea.package/EpAbstractLog.class/instance/enumerating/entriesDo_.st
A Epicea.package/EpAbstractLog.class/instance/enumerating/fromHeadDetect_.st
A Epicea.package/EpAbstractLog.class/instance/enumerating/fromHeadDetect_ifNotFound_.st
A Epicea.package/EpAbstractLog.class/instance/enumerating/from_detect_.st
A Epicea.package/EpAbstractLog.class/instance/enumerating/from_detect_ifNotFound_.st
A Epicea.package/EpAbstractLog.class/instance/enumerating/priorEntriesFromHead.st
A Epicea.package/EpAbstractLog.class/instance/enumerating/priorEntriesFromHeadDo_.st
A Epicea.package/EpAbstractLog.class/instance/enumerating/priorEntriesFrom_.st
A Epicea.package/EpAbstractLog.class/instance/enumerating/priorEntriesFrom_do_.st
A Epicea.package/EpAbstractLog.class/instance/enumerating/priorEntriesFrom_upTo_.st
A Epicea.package/EpAbstractLog.class/instance/printing/printOn_.st
A Epicea.package/EpAbstractLog.class/instance/private/announceAdded_.st
A Epicea.package/EpAbstractLog.class/instance/refreshing/refresh.st
A Epicea.package/EpAbstractLog.class/instance/testing/hasAuthor_.st
A Epicea.package/EpAbstractLog.class/instance/testing/hasTime_.st
A Epicea.package/EpAbstractLog.class/instance/testing/isEmpty.st
M Epicea.package/EpClassAddition.class/instance/accessing/behaviorAffectedName.st
R Epicea.package/EpClassAddition.class/instance/accessing/categoryOfClassAffected.st
R Epicea.package/EpClassAddition.class/instance/accessing/classAffectedName.st
R Epicea.package/EpClassAddition.class/instance/accessing/classVariableNamesOfClassAffected.st
R Epicea.package/EpClassAddition.class/instance/accessing/instanceVariableNamesOfClassAffected.st
R Epicea.package/EpClassAddition.class/instance/accessing/poolDictionaryNamesOfClassAffected.st
R Epicea.package/EpClassAddition.class/instance/accessing/superclassOfClassAffected.st
R Epicea.package/EpClassModification.class/instance/accessing/newCategoryOfClassAffected.st
R Epicea.package/EpClassModification.class/instance/accessing/newClassVariableNamesOfClassAffected.st
R Epicea.package/EpClassModification.class/instance/accessing/newInstanceVariableNamesOfClassAffected.st
R Epicea.package/EpClassModification.class/instance/accessing/oldClassAffectedName.st
R Epicea.package/EpClassModification.class/instance/accessing/oldClassVariableNamesOfClassAffected.st
R Epicea.package/EpClassModification.class/instance/accessing/oldInstanceVariableNamesOfClassAffected.st
R Epicea.package/EpClassModification.class/instance/accessing/oldSharedPoolsOfClassAffected.st
M Epicea.package/EpClassModification.class/instance/testing/hasMetaclassChanges.st
M Epicea.package/EpClassModification.class/instance/testing/hasNonMetaclassChanges.st
M Epicea.package/EpClassRemoval.class/instance/accessing/behaviorAffectedName.st
R Epicea.package/EpClassRemoval.class/instance/accessing/categoryOfClassAffected.st
R Epicea.package/EpClassRemoval.class/instance/accessing/classAffectedName.st
R Epicea.package/EpClassRemoval.class/instance/accessing/classInstanceVariableNamesOfClassAffected.st
R Epicea.package/EpClassRemoval.class/instance/accessing/classMethodChanges.st
R Epicea.package/EpClassRemoval.class/instance/accessing/classVariableNamesOfClassAffected.st
R Epicea.package/EpClassRemoval.class/instance/accessing/instanceMethodChanges.st
R Epicea.package/EpClassRemoval.class/instance/accessing/instanceVariableNamesOfClassAffected.st
R Epicea.package/EpClassRemoval.class/instance/accessing/poolDictionaryNamesOfClassAffected.st
R Epicea.package/EpClassRemoval.class/instance/accessing/superclassOfClassAffected.st
M Epicea.package/EpClassRemoval.class/instance/initialization/initializeClassRemoved_.st
R Epicea.package/EpLog.class/class/tag keys/authorKey.st
R Epicea.package/EpLog.class/class/tag keys/priorReferenceKey.st
R Epicea.package/EpLog.class/class/tag keys/timeKey.st
R Epicea.package/EpLog.class/class/tag keys/triggererReferenceKey.st
M Epicea.package/EpLog.class/definition.st
M Epicea.package/EpLog.class/instance/accessing/addEntryWith_tags_.st
R Epicea.package/EpLog.class/instance/accessing/announcer.st
R Epicea.package/EpLog.class/instance/accessing/authorAt_.st
R Epicea.package/EpLog.class/instance/accessing/authorAt_ifAbsent_.st
A Epicea.package/EpLog.class/instance/accessing/entriesCount.st
R Epicea.package/EpLog.class/instance/accessing/entriesForAll_.st
A Epicea.package/EpLog.class/instance/accessing/entryReferences.st
R Epicea.package/EpLog.class/instance/accessing/events.st
R Epicea.package/EpLog.class/instance/accessing/head.st
R Epicea.package/EpLog.class/instance/accessing/nullReference.st
R Epicea.package/EpLog.class/instance/accessing/priorReferenceAt_.st
R Epicea.package/EpLog.class/instance/accessing/referencesToAll_.st
R Epicea.package/EpLog.class/instance/accessing/timeAt_.st
R Epicea.package/EpLog.class/instance/accessing/timeAt_ifAbsent_.st
R Epicea.package/EpLog.class/instance/accessing/triggererReferenceOf_ifPresent_ifAbsent_.st
R Epicea.package/EpLog.class/instance/copying/copyFromHead.st
R Epicea.package/EpLog.class/instance/enumerating/fromHeadDetect_.st
R Epicea.package/EpLog.class/instance/enumerating/fromHeadDetect_ifNotFound_.st
R Epicea.package/EpLog.class/instance/enumerating/from_detect_.st
R Epicea.package/EpLog.class/instance/enumerating/from_detect_ifNotFound_.st
R Epicea.package/EpLog.class/instance/enumerating/priorEntriesFromHead.st
R Epicea.package/EpLog.class/instance/enumerating/priorEntriesFromHeadDo_.st
R Epicea.package/EpLog.class/instance/enumerating/priorEntriesFrom_.st
R Epicea.package/EpLog.class/instance/enumerating/priorEntriesFrom_do_.st
M Epicea.package/EpLog.class/instance/initialization/initializeWith_.st
R Epicea.package/EpLog.class/instance/printing/printOn_.st
R Epicea.package/EpLog.class/instance/private/announceAdded_.st
R Epicea.package/EpLog.class/instance/testing/hasAuthor_.st
R Epicea.package/EpLog.class/instance/testing/hasTime_.st
R Epicea.package/EpLog.class/instance/testing/includesCodeChanges.st
R Epicea.package/EpLog.class/instance/testing/isBelongsToCurrentImage.st
R Epicea.package/EpLog.class/instance/testing/isEmpty.st
M Epicea.package/EpLogBrowserOperation.class/instance/triggering/doInJob_.st
R Epicea.package/EpMethodModification.class/instance/accessing/newSelector.st
R Epicea.package/EpMonitor.class/class/accessing/logFilesIn_.st
M Epicea.package/EpMonitor.class/class/accessing/logsDirectory.st
R Epicea.package/EpMonitor.class/instance/private-deprecated/addEvent_triggerReference_.st
M Epicea.package/EpMonitor.class/instance/private/subscribeToSystemAnnouncer.st
R Epicea.package/EpPluggableFilter.class/class/accessing/allFiltersBySelector.st
M Epicea.package/EpPluggableFilter.class/class/special filters/isMethod_.st
A Epicea.package/EpSorterLog.class/README.md
A Epicea.package/EpSorterLog.class/definition.st
A Epicea.package/EpSorterLog.class/instance/accessing/commentAt_ifAbsent_.st
A Epicea.package/EpSorterLog.class/instance/accessing/entries.st
A Epicea.package/EpSorterLog.class/instance/accessing/entries_.st
A Epicea.package/EpSorterLog.class/instance/accessing/entryFor_.st
A Epicea.package/EpSorterLog.class/instance/accessing/entryFor_ifPresent_ifAbsent_.st
A Epicea.package/EpSorterLog.class/instance/accessing/headReference.st
A Epicea.package/EpSorterLog.class/instance/accessing/referenceTo_.st
R Epicea.package/EpTraitAddition.class/instance/accessing/nameOfTraitAdded.st
R Epicea.package/EpTraitModification.class/instance/accessing/newCategoryOfTraitAffected.st
R Epicea.package/EpTraitModification.class/instance/accessing/newTraitAffectedName.st
R Epicea.package/EpTraitModification.class/instance/accessing/oldCategoryOfTraitAffected.st
R Epicea.package/EpTraitModification.class/instance/accessing/oldTraitAffectedName.st
R Epicea.package/EpTraitRemoval.class/instance/accessing/categoryOfRemovedTrait.st
R Epicea.package/EpTraitRemoval.class/instance/accessing/traitAffectedName.st
R EpiceaBrowsers.package/EpAbsentItem.class/README.md
R EpiceaBrowsers.package/EpAbsentItem.class/definition.st
R EpiceaBrowsers.package/EpAbsentItem.class/instance/accessing/container.st
R EpiceaBrowsers.package/EpAbsentItem.class/instance/accessing/container_.st
R EpiceaBrowsers.package/EpAbsentItem.class/instance/accessing/entries.st
R EpiceaBrowsers.package/EpAbsentItem.class/instance/accessing/entryReference.st
R EpiceaBrowsers.package/EpAbsentItem.class/instance/accessing/entryReference_.st
R EpiceaBrowsers.package/EpAbsentItem.class/instance/accessing/priorEntryReference.st
R EpiceaBrowsers.package/EpAbsentItem.class/instance/converting/asMorph.st
R EpiceaBrowsers.package/EpAbsentItem.class/instance/populating browser/icon.st
M EpiceaBrowsers.package/EpApplyVisitor.class/definition.st
M EpiceaBrowsers.package/EpApplyVisitor.class/instance/visitor/visitTraitRemoved_.st
M EpiceaBrowsers.package/EpBrowseVisitor.class/definition.st
M EpiceaBrowsers.package/EpContentStringVisitor.class/definition.st
M EpiceaBrowsers.package/EpEntryContentVisitor.class/definition.st
M EpiceaBrowsers.package/EpEntryItem.class/definition.st
A EpiceaBrowsers.package/EpEntryItem.class/instance/accessing/browser.st
A EpiceaBrowsers.package/EpEntryItem.class/instance/accessing/browser_.st
R EpiceaBrowsers.package/EpEntryItem.class/instance/accessing/entries.st
R EpiceaBrowsers.package/EpEntryItem.class/instance/accessing/entryReference.st
A EpiceaBrowsers.package/EpEntryItem.class/instance/accessing/log.st
R EpiceaBrowsers.package/EpEntryItem.class/instance/accessing/priorEntryReference.st
R EpiceaBrowsers.package/EpEntryItem.class/instance/accessing/timeIfAbsent_.st
M EpiceaBrowsers.package/EpEntryItem.class/instance/converting/asMorph.st
M EpiceaBrowsers.package/EpEntryItem.class/instance/operations/browseItem.st
R EpiceaBrowsers.package/EpEntryItem.class/instance/populating browser/defaultMenuActions.st
R EpiceaBrowsers.package/EpEntryItem.class/instance/populating browser/icon.st
R EpiceaBrowsers.package/EpEntryItem.class/instance/populating browser/menuActions.st
R EpiceaBrowsers.package/EpEntryItem.class/instance/populating browser/newStateString.st
R EpiceaBrowsers.package/EpEntryItem.class/instance/populating browser/oldStateString.st
R EpiceaBrowsers.package/EpEntryItem.class/instance/populating browser/triggerMarkWidgets.st
A EpiceaBrowsers.package/EpEntryItem.class/instance/private/commentMorphs.st
A EpiceaBrowsers.package/EpEntryItem.class/instance/private/defaultMenuActions.st
A EpiceaBrowsers.package/EpEntryItem.class/instance/private/eventAccept_.st
A EpiceaBrowsers.package/EpEntryItem.class/instance/private/eventMorphs.st
A EpiceaBrowsers.package/EpEntryItem.class/instance/private/icon.st
A EpiceaBrowsers.package/EpEntryItem.class/instance/private/menuActions.st
A EpiceaBrowsers.package/EpEntryItem.class/instance/private/morphFactory.st
A EpiceaBrowsers.package/EpEntryItem.class/instance/private/newStateString.st
A EpiceaBrowsers.package/EpEntryItem.class/instance/private/oldStateString.st
A EpiceaBrowsers.package/EpEntryItem.class/instance/private/timeMorphs.st
A EpiceaBrowsers.package/EpEntryItem.class/instance/private/triggerMarkMorphs.st
R EpiceaBrowsers.package/EpEntryItem.class/instance/testing/isEntryItem.st
R EpiceaBrowsers.package/EpFetchMoreItem.class/README.md
R EpiceaBrowsers.package/EpFetchMoreItem.class/definition.st
R EpiceaBrowsers.package/EpFetchMoreItem.class/instance/accessing/container.st
R EpiceaBrowsers.package/EpFetchMoreItem.class/instance/accessing/container_.st
R EpiceaBrowsers.package/EpFetchMoreItem.class/instance/accessing/entries.st
R EpiceaBrowsers.package/EpFetchMoreItem.class/instance/accessing/entryReference.st
R EpiceaBrowsers.package/EpFetchMoreItem.class/instance/accessing/entryReference_.st
R EpiceaBrowsers.package/EpFetchMoreItem.class/instance/accessing/priorEntryReference.st
R EpiceaBrowsers.package/EpFetchMoreItem.class/instance/converting/asMorph.st
R EpiceaBrowsers.package/EpFetchMoreItem.class/instance/operations/fetchAll.st
R EpiceaBrowsers.package/EpFetchMoreItem.class/instance/operations/fetchMore.st
R EpiceaBrowsers.package/EpFetchMoreItem.class/instance/populating browser/icon.st
M EpiceaBrowsers.package/EpFileLogNode.class/class/convenience/fromAllLogsIn_.st
M EpiceaBrowsers.package/EpFileLogNode.class/definition.st
M EpiceaBrowsers.package/EpFileLogNode.class/instance/converting/asMorph.st
R EpiceaBrowsers.package/EpFilteredEntriesItem.class/README.md
R EpiceaBrowsers.package/EpFilteredEntriesItem.class/definition.st
R EpiceaBrowsers.package/EpFilteredEntriesItem.class/instance/accessing/entries.st
R EpiceaBrowsers.package/EpFilteredEntriesItem.class/instance/accessing/filteredEntriesCount.st
R EpiceaBrowsers.package/EpFilteredEntriesItem.class/instance/accessing/filteredEntriesCount_.st
R EpiceaBrowsers.package/EpFilteredEntriesItem.class/instance/accessing/olderFilteredEntry.st
R EpiceaBrowsers.package/EpFilteredEntriesItem.class/instance/accessing/olderFilteredEntry_.st
R EpiceaBrowsers.package/EpFilteredEntriesItem.class/instance/accessing/priorEntryReference.st
R EpiceaBrowsers.package/EpFilteredEntriesItem.class/instance/converting/asMorph.st
R EpiceaBrowsers.package/EpFilteredEntriesItem.class/instance/initialization/initialize.st
R EpiceaBrowsers.package/EpFilteredEntriesItem.class/instance/populating browser/icon.st
R EpiceaBrowsers.package/EpFilteredEntriesItem.class/instance/testing/isCombinableWith_ifTrue_ifFalse_.st
M EpiceaBrowsers.package/EpIconVisitor.class/definition.st
R EpiceaBrowsers.package/EpIconVisitor.class/instance/private/iconNamed_.st
R EpiceaBrowsers.package/EpLogBrowser.class/README.md
R EpiceaBrowsers.package/EpLogBrowser.class/class/accessing/defaultIcon.st
R EpiceaBrowsers.package/EpLogBrowser.class/class/accessing/defaultLog.st
R EpiceaBrowsers.package/EpLogBrowser.class/class/accessing/defaultViewClass.st
R EpiceaBrowsers.package/EpLogBrowser.class/class/accessing/viewClasses.st
R EpiceaBrowsers.package/EpLogBrowser.class/class/instance creation/newWithItems_.st
R EpiceaBrowsers.package/EpLogBrowser.class/class/instance creation/newWithLog_.st
R EpiceaBrowsers.package/EpLogBrowser.class/class/instance creation/newWithLog_withViewClass_.st
R EpiceaBrowsers.package/EpLogBrowser.class/class/instance creation/newWithViewClass_.st
R EpiceaBrowsers.package/EpLogBrowser.class/class/instance creation/open.st
R EpiceaBrowsers.package/EpLogBrowser.class/class/instance creation/openWithItems_.st
R EpiceaBrowsers.package/EpLogBrowser.class/class/instance creation/openWithLog_.st
R EpiceaBrowsers.package/EpLogBrowser.class/class/specs/spec.st
R EpiceaBrowsers.package/EpLogBrowser.class/definition.st
R EpiceaBrowsers.package/EpLogBrowser.class/instance/accessing filters/addFilter_.st
R EpiceaBrowsers.package/EpLogBrowser.class/instance/accessing filters/andFilter.st
R EpiceaBrowsers.package/EpLogBrowser.class/instance/accessing filters/removeAllFilters.st
R EpiceaBrowsers.package/EpLogBrowser.class/instance/accessing filters/removeFilter_.st
R EpiceaBrowsers.package/EpLogBrowser.class/instance/accessing widgets/entryContentModel.st
R EpiceaBrowsers.package/EpLogBrowser.class/instance/accessing widgets/entryContentTabModel.st
R EpiceaBrowsers.package/EpLogBrowser.class/instance/accessing widgets/filtersModel.st
R EpiceaBrowsers.package/EpLogBrowser.class/instance/accessing widgets/itemsModel.st
R EpiceaBrowsers.package/EpLogBrowser.class/instance/accessing widgets/tabManagerModel.st
R EpiceaBrowsers.package/EpLogBrowser.class/instance/accessing/commentsLog.st
R EpiceaBrowsers.package/EpLogBrowser.class/instance/accessing/commentsLog_.st
R EpiceaBrowsers.package/EpLogBrowser.class/instance/accessing/commitLog.st
R EpiceaBrowsers.package/EpLogBrowser.class/instance/accessing/commitLog_.st
R EpiceaBrowsers.package/EpLogBrowser.class/instance/accessing/log.st
R EpiceaBrowsers.package/EpLogBrowser.class/instance/accessing/selectedItems.st
R EpiceaBrowsers.package/EpLogBrowser.class/instance/accessing/selection.st
R EpiceaBrowsers.package/EpLogBrowser.class/instance/accessing/view.st
R EpiceaBrowsers.package/EpLogBrowser.class/instance/accessing/viewEntryItems.st
R EpiceaBrowsers.package/EpLogBrowser.class/instance/accessing/viewItems.st
R EpiceaBrowsers.package/EpLogBrowser.class/instance/api/initialExtent.st
R EpiceaBrowsers.package/EpLogBrowser.class/instance/initialization/initialize.st
R EpiceaBrowsers.package/EpLogBrowser.class/instance/initialization/initializeFiltersModel.st
R EpiceaBrowsers.package/EpLogBrowser.class/instance/initialization/initializeItemsModel.st
R EpiceaBrowsers.package/EpLogBrowser.class/instance/initialization/initializePresenter.st
R EpiceaBrowsers.package/EpLogBrowser.class/instance/initialization/initializeTabs.st
R EpiceaBrowsers.package/EpLogBrowser.class/instance/initialization/initializeWidgets.st
R EpiceaBrowsers.package/EpLogBrowser.class/instance/initialization/log_.st
R EpiceaBrowsers.package/EpLogBrowser.class/instance/initialization/viewClass_.st
R EpiceaBrowsers.package/EpLogBrowser.class/instance/instance creation/open.st
R EpiceaBrowsers.package/EpLogBrowser.class/instance/private/childrenItemsOf_.st
R EpiceaBrowsers.package/EpLogBrowser.class/instance/refreshing/cleanEntryContentModel.st
R EpiceaBrowsers.package/EpLogBrowser.class/instance/refreshing/refresh.st
R EpiceaBrowsers.package/EpLogBrowser.class/instance/refreshing/refreshEntryContentModelWith_.st
R EpiceaBrowsers.package/EpLogBrowserItem.class/README.md
R EpiceaBrowsers.package/EpLogBrowserItem.class/definition.st
R EpiceaBrowsers.package/EpLogBrowserItem.class/instance/accessing/browser.st
R EpiceaBrowsers.package/EpLogBrowserItem.class/instance/accessing/browser_.st
R EpiceaBrowsers.package/EpLogBrowserItem.class/instance/accessing/entries.st
R EpiceaBrowsers.package/EpLogBrowserItem.class/instance/accessing/log.st
R EpiceaBrowsers.package/EpLogBrowserItem.class/instance/accessing/priorEntryReference.st
R EpiceaBrowsers.package/EpLogBrowserItem.class/instance/accessing/triggerItems.st
R EpiceaBrowsers.package/EpLogBrowserItem.class/instance/converting/asMorph.st
R EpiceaBrowsers.package/EpLogBrowserItem.class/instance/populating browser/icon.st
R EpiceaBrowsers.package/EpLogBrowserItem.class/instance/populating browser/menuActions.st
R EpiceaBrowsers.package/EpLogBrowserItem.class/instance/populating browser/newStateString.st
R EpiceaBrowsers.package/EpLogBrowserItem.class/instance/populating browser/oldStateString.st
R EpiceaBrowsers.package/EpLogBrowserItem.class/instance/testing/isCombinableWith_ifTrue_ifFalse_.st
R EpiceaBrowsers.package/EpLogBrowserItem.class/instance/testing/isEntryItem.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/README.md
A EpiceaBrowsers.package/EpLogBrowserModel.class/class/accessing/defaultLog.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/class/instance creation/newWithLog_.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/class/instance creation/open.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/class/instance creation/openWithLog_.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/class/specs/spec.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/class/specs/title.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/definition.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/accessing widgets/entryContentModel.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/accessing widgets/entryContentTabModel.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/accessing widgets/filtersModel.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/accessing widgets/itemsModel.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/accessing widgets/tabManagerModel.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/accessing/andFilter.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/accessing/cachedLogEntries.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/accessing/commentsLog.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/accessing/commentsLog_.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/accessing/entryItems.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/accessing/filteredEntries.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/accessing/filteredEntryReferences.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/accessing/log.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/accessing/monitor.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/accessing/theLog.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/accessing/theLog_.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/api/initialExtent.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/initialization/initialize.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/initialization/initializeFiltersModel.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/initialization/initializeItemsModel.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/initialization/initializeItemsModelPerformFilterWorkaround_.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/initialization/initializePresenter.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/initialization/initializeTabs.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/initialization/initializeWidgets.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/menu - accessing/selectedCodeChanges.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/menu - accessing/selectedEntryItems.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/menu - accessing/selectedEntryReferences.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/menu - operations/addFilter_.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/menu - operations/applyChangesInSelection.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/menu - operations/applyCompleteRefactoringInSelection.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/menu - operations/applyPropagateRefactoringInSelection.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/menu - operations/browseSelection.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/menu - operations/commentSelection.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/menu - operations/fileOutSelection.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/menu - operations/filterAfter.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/menu - operations/filterAllChangesToSelection.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/menu - operations/filterAllChangesToSelectionPackage.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/menu - operations/filterBefore.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/menu - operations/filterToday.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/menu - operations/inspectSelection.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/menu - operations/logOffEvent_.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/menu - operations/operationsErrorHandlerBlock.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/menu - operations/removeAllFilters.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/menu - operations/removeFilter_.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/menu - operations/revertChangesInSelection.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/menu/filtersSubMenu.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/menu/menuActions.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/menu/selectedItemsContextMenuMorph.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/private/activeFiltersLabel.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/private/cachedItems.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/private/itemForEntryReference_.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/private/newItemForEntryReference_.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/private/triggerItemsFor_.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/refreshing/cleanEntryContentModel.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/refreshing/refresh.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/refreshing/refreshEntryContentModel.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/refreshing/refreshEntryContentModelDeferrer.st
A EpiceaBrowsers.package/EpLogBrowserModel.class/instance/refreshing/refreshEntryContentModelWith_.st
A EpiceaBrowsers.package/EpLogBrowserOperationFactory.class/README.md
A EpiceaBrowsers.package/EpLogBrowserOperationFactory.class/definition.st
A EpiceaBrowsers.package/EpLogBrowserOperationFactory.class/instance/accessing/entries.st
A EpiceaBrowsers.package/EpLogBrowserOperationFactory.class/instance/accessing/entries_.st
A EpiceaBrowsers.package/EpLogBrowserOperationFactory.class/instance/accessing/errorHandlerBlock.st
A EpiceaBrowsers.package/EpLogBrowserOperationFactory.class/instance/accessing/errorHandlerBlock_.st
A EpiceaBrowsers.package/EpLogBrowserOperationFactory.class/instance/accessing/theLog.st
A EpiceaBrowsers.package/EpLogBrowserOperationFactory.class/instance/accessing/theLog_.st
A EpiceaBrowsers.package/EpLogBrowserOperationFactory.class/instance/private/applyEvent.st
A EpiceaBrowsers.package/EpLogBrowserOperationFactory.class/instance/private/applyRBRefactoring_.st
A EpiceaBrowsers.package/EpLogBrowserOperationFactory.class/instance/private/handleErrorDuring_.st
A EpiceaBrowsers.package/EpLogBrowserOperationFactory.class/instance/private/revertEvent.st
A EpiceaBrowsers.package/EpLogBrowserOperationFactory.class/instance/private/trigger_with_.st
A EpiceaBrowsers.package/EpLogBrowserOperationFactory.class/instance/public/apply.st
A EpiceaBrowsers.package/EpLogBrowserOperationFactory.class/instance/public/applyCompleteRefactoring.st
A EpiceaBrowsers.package/EpLogBrowserOperationFactory.class/instance/public/applyPropagateRefactoring.st
A EpiceaBrowsers.package/EpLogBrowserOperationFactory.class/instance/public/revert.st
M EpiceaBrowsers.package/EpLogBrowserOperationVisitor.class/definition.st
R EpiceaBrowsers.package/EpLogBrowserView.class/README.md
R EpiceaBrowsers.package/EpLogBrowserView.class/class/accessing/icon.st
R EpiceaBrowsers.package/EpLogBrowserView.class/class/accessing/shortTitle.st
R EpiceaBrowsers.package/EpLogBrowserView.class/class/accessing/title.st
R EpiceaBrowsers.package/EpLogBrowserView.class/class/instance creation/newWithBrowser_.st
R EpiceaBrowsers.package/EpLogBrowserView.class/definition.st
R EpiceaBrowsers.package/EpLogBrowserView.class/instance/accessing/andFilter.st
R EpiceaBrowsers.package/EpLogBrowserView.class/instance/accessing/browser.st
R EpiceaBrowsers.package/EpLogBrowserView.class/instance/accessing/childrenItemsOf_.st
R EpiceaBrowsers.package/EpLogBrowserView.class/instance/accessing/log.st
R EpiceaBrowsers.package/EpLogBrowserView.class/instance/accessing/pageSize.st
R EpiceaBrowsers.package/EpLogBrowserView.class/instance/accessing/pageSize_.st
R EpiceaBrowsers.package/EpLogBrowserView.class/instance/accessing/rootItems.st
R EpiceaBrowsers.package/EpLogBrowserView.class/instance/initialization/initializeBrowser.st
R EpiceaBrowsers.package/EpLogBrowserView.class/instance/initialization/initializeWithBrowser_.st
R EpiceaBrowsers.package/EpLogBrowserView.class/instance/private/filter_ifAccepted_ifNotAccepted_.st
R EpiceaBrowsers.package/EpLogBrowserView.class/instance/private/newAbsentItemFor_in_.st
R EpiceaBrowsers.package/EpLogBrowserView.class/instance/private/newEntryItemFor_.st
R EpiceaBrowsers.package/EpLogBrowserView.class/instance/private/newFetchMoreItemFor_in_.st
R EpiceaBrowsers.package/EpLogBrowserView.class/instance/private/triggerItemsFor_.st
R EpiceaBrowsers.package/EpLogBrowserView.class/instance/refreshing/refresh.st
R EpiceaBrowsers.package/EpLogHeaderItem.class/README.md
R EpiceaBrowsers.package/EpLogHeaderItem.class/definition.st
R EpiceaBrowsers.package/EpLogHeaderItem.class/instance/accessing/entries.st
R EpiceaBrowsers.package/EpLogHeaderItem.class/instance/accessing/entryReference_.st
R EpiceaBrowsers.package/EpLogHeaderItem.class/instance/accessing/priorEntryReference.st
R EpiceaBrowsers.package/EpLogHeaderItem.class/instance/converting/asMorph.st
R EpiceaBrowsers.package/EpLogHeaderItem.class/instance/populating browser/icon.st
M EpiceaBrowsers.package/EpLogNode.class/definition.st
M EpiceaBrowsers.package/EpLogNode.class/instance/accessing/referencedGlobalNames.st
M EpiceaBrowsers.package/EpLogNodeGraphModel.class/definition.st
M EpiceaBrowsers.package/EpLogNodeGraphModel.class/instance/accessing/directory.st
M EpiceaBrowsers.package/EpLogNodeGraphModel.class/instance/accessing/monitor.st
M EpiceaBrowsers.package/EpLogNodeGraphModel.class/instance/accessing/monitor_.st
R EpiceaBrowsers.package/EpLogNodeGraphModel.class/instance/initialization/fileOutSelectedLog.st
M EpiceaBrowsers.package/EpLogNodeGraphModel.class/instance/initialization/initializeLogNodesTreeModel.st
R EpiceaBrowsers.package/EpLogNodeGraphModel.class/instance/private/openSelectedLog.st
R EpiceaBrowsers.package/EpLogNodeGraphModel.class/instance/refreshing/refreshIfSnapshotDone_.st
M EpiceaBrowsers.package/EpLostChangesDetector.class/instance/accessing/browserIfLostChanges_.st
M EpiceaBrowsers.package/EpLostChangesDetector.class/instance/accessing/lostChanges.st
M EpiceaBrowsers.package/EpLostChangesDetector.class/instance/accessing/openBrowserIfLostChanges.st
M EpiceaBrowsers.package/EpMenuActionsVisitor.class/definition.st
M EpiceaBrowsers.package/EpMonitorLogNode.class/definition.st
M EpiceaBrowsers.package/EpMorphFactory.class/definition.st
M EpiceaBrowsers.package/EpMorphFactory.class/instance/generic/rowWithAll_.st
M EpiceaBrowsers.package/EpMorphFactory.class/instance/strings/wrapping_.st
M EpiceaBrowsers.package/EpMorphVisitor.class/definition.st
M EpiceaBrowsers.package/EpMorphVisitor.class/instance/private/displayBehavior_.st
M EpiceaBrowsers.package/EpMorphVisitor.class/instance/private/displayOperation_.st
M EpiceaBrowsers.package/EpMorphVisitor.class/instance/private/displayString_color_.st
A EpiceaBrowsers.package/EpMorphVisitor.class/instance/private/morphFactory.st
M EpiceaBrowsers.package/EpNewStateVisitor.class/definition.st
M EpiceaBrowsers.package/EpOldStateVisitor.class/definition.st
R EpiceaBrowsers.package/EpPriorView.class/README.md
R EpiceaBrowsers.package/EpPriorView.class/class/accessing/shortTitle.st
R EpiceaBrowsers.package/EpPriorView.class/definition.st
R EpiceaBrowsers.package/EpPriorView.class/instance/accessing/pageSize_.st
R EpiceaBrowsers.package/EpPriorView.class/instance/accessing/rootItems.st
R EpiceaBrowsers.package/EpPriorView.class/instance/initialization/initialize.st
R EpiceaBrowsers.package/EpPriorView.class/instance/private/draggingPassengerFor_.st
R EpiceaBrowsers.package/EpPriorView.class/instance/private/draggingPassengerMorphsFor_.st
R EpiceaBrowsers.package/EpPriorView.class/instance/private/entryItemFor_.st
R EpiceaBrowsers.package/EpPriorView.class/instance/private/newFilteredItemFor_.st
R EpiceaBrowsers.package/EpPriorView.class/instance/private/newItemFor_ifAbsent_.st
R EpiceaBrowsers.package/EpPriorView.class/instance/private/next_from_.st
R EpiceaBrowsers.package/EpPriorView.class/instance/private/triggerItemsFor_.st
R EpiceaBrowsers.package/EpPriorView.class/instance/refreshing/fetchAll_.st
R EpiceaBrowsers.package/EpPriorView.class/instance/refreshing/fetchMore_.st
R EpiceaBrowsers.package/EpPriorView.class/instance/refreshing/fetch_from_.st
R EpiceaBrowsers.package/EpPriorView.class/instance/refreshing/refresh.st
M EpiceaBrowsers.package/EpRevertVisitor.class/definition.st
M EpiceaBrowsers.package/EpRevertVisitor.class/instance/visitor/visitTraitAddition_.st
R EpiceaBrowsers.package/EpSelection.class/README.md
R EpiceaBrowsers.package/EpSelection.class/class/instance creation/browser_.st
R EpiceaBrowsers.package/EpSelection.class/definition.st
R EpiceaBrowsers.package/EpSelection.class/instance/accessing/items.st
R EpiceaBrowsers.package/EpSelection.class/instance/accessing/selectedCodeChanges.st
R EpiceaBrowsers.package/EpSelection.class/instance/accessing/selectedEntryItems.st
R EpiceaBrowsers.package/EpSelection.class/instance/hooks/oldComment.st
R EpiceaBrowsers.package/EpSelection.class/instance/initialization/initializeWithBrowser_.st
R EpiceaBrowsers.package/EpSelection.class/instance/operations/applyChangesInSelection.st
R EpiceaBrowsers.package/EpSelection.class/instance/operations/applyCompleteRefactoringInSelection.st
R EpiceaBrowsers.package/EpSelection.class/instance/operations/applyPropagateRefactoringInSelection.st
R EpiceaBrowsers.package/EpSelection.class/instance/operations/applyRefactoring_.st
R EpiceaBrowsers.package/EpSelection.class/instance/operations/browseSelection.st
R EpiceaBrowsers.package/EpSelection.class/instance/operations/commentSelection.st
R EpiceaBrowsers.package/EpSelection.class/instance/operations/fileOutSelection.st
R EpiceaBrowsers.package/EpSelection.class/instance/operations/filterAfter.st
R EpiceaBrowsers.package/EpSelection.class/instance/operations/filterAllChangesToSelection.st
R EpiceaBrowsers.package/EpSelection.class/instance/operations/filterAllChangesToSelectionPackage.st
R EpiceaBrowsers.package/EpSelection.class/instance/operations/filterBefore.st
R EpiceaBrowsers.package/EpSelection.class/instance/operations/filterToday.st
R EpiceaBrowsers.package/EpSelection.class/instance/operations/filterWith_.st
R EpiceaBrowsers.package/EpSelection.class/instance/operations/inspectSelection.st
R EpiceaBrowsers.package/EpSelection.class/instance/operations/logOffEvent_.st
R EpiceaBrowsers.package/EpSelection.class/instance/operations/removeAllFilters.st
R EpiceaBrowsers.package/EpSelection.class/instance/operations/revertChangesInSelection.st
R EpiceaBrowsers.package/EpSelection.class/instance/populating menu/filtersSubMenu.st
R EpiceaBrowsers.package/EpSelection.class/instance/populating menu/menuActions.st
R EpiceaBrowsers.package/EpSelection.class/instance/populating menu/populateMenu_.st
R EpiceaBrowsers.package/EpSelection.class/instance/private/trigger_with_.st
R EpiceaBrowsers.package/EpSorterView.class/README.md
R EpiceaBrowsers.package/EpSorterView.class/class/accessing/shortTitle.st
R EpiceaBrowsers.package/EpSorterView.class/definition.st
R EpiceaBrowsers.package/EpSorterView.class/instance/accessing/items.st
R EpiceaBrowsers.package/EpSorterView.class/instance/accessing/rootItems.st
R EpiceaBrowsers.package/EpSorterView.class/instance/initialization/initialize.st
R EpiceaBrowsers.package/EpSorterView.class/instance/private/addWantedItems_.st
R EpiceaBrowsers.package/EpSorterView.class/instance/private/drop_from_.st
R EpiceaBrowsers.package/EpSorterView.class/instance/private/triggerItemsFor_.st
R EpiceaBrowsers.package/EpSorterView.class/instance/private/wantedItemsFrom_.st
R EpiceaBrowsers.package/EpSorterView.class/instance/refreshing/refresh.st
M EpiceaBrowsers.package/EpUnifiedBrowserModel.class/class/accessing/spec.st
M EpiceaBrowsers.package/EpUnifiedBrowserModel.class/definition.st
M EpiceaBrowsers.package/EpUnifiedBrowserModel.class/instance/api/initialExtent.st
M EpiceaBrowsers.package/EpUnifiedBrowserModel.class/instance/initialization/initializePresenter.st
M EpiceaBrowsers.package/EpUnifiedBrowserModel.class/instance/initialization/initializeWidgets.st
M EpiceaBrowsers.package/EpUnifiedBrowserModel.class/instance/initialization/initializeWorkaroundToRefreshOnMonitorLogAnnouncement.st
R EpiceaBrowsers.package/EpUnifiedBrowserModel.class/instance/refreshing/informRefreshError.st
M EpiceaBrowsers.package/EpUnifiedBrowserModel.class/instance/refreshing/refreshWithLogSelected_.st
M EpiceaBrowsers.package/extension/EpLog/instance/browseEvents.st
M EpiceaBrowsers.package/extension/EpLog/instance/browseVersionsOf_.st
A EpiceaBrowsersTests.package/EpApplyTest.class/README.md
A EpiceaBrowsersTests.package/EpApplyTest.class/definition.st
A EpiceaBrowsersTests.package/EpApplyTest.class/instance/private/apply_.st
A EpiceaBrowsersTests.package/EpApplyTest.class/instance/tests/testClassAdditionWithCategoryChanged.st
A EpiceaBrowsersTests.package/EpApplyTest.class/instance/tests/testClassAdditionWithClassRemoved.st
A EpiceaBrowsersTests.package/EpApplyTest.class/instance/tests/testClassAdditionWithInstanceVariablesChanged.st
A EpiceaBrowsersTests.package/EpApplyTest.class/instance/tests/testClassAdditionWithSuperclassChanged.st
A EpiceaBrowsersTests.package/EpApplyTest.class/instance/tests/testClassModificationWithClassRemoved.st
A EpiceaBrowsersTests.package/EpApplyTest.class/instance/tests/testClassRemovalWithClassAdded.st
A EpiceaBrowsersTests.package/EpApplyTest.class/instance/tests/testMethodAdditionWithMethodRemoved.st
A EpiceaBrowsersTests.package/EpApplyTest.class/instance/tests/testMethodAdditionWithProtocolChanged.st
A EpiceaBrowsersTests.package/EpApplyTest.class/instance/tests/testMethodAdditionWithSourceCodeChanged.st
A EpiceaBrowsersTests.package/EpApplyTest.class/instance/tests/testMethodModificationWithMethodRemoved.st
A EpiceaBrowsersTests.package/EpApplyTest.class/instance/tests/testMethodRemovalWithMethodAdded.st
A EpiceaBrowsersTests.package/EpCommentTest.class/README.md
A EpiceaBrowsersTests.package/EpCommentTest.class/definition.st
A EpiceaBrowsersTests.package/EpCommentTest.class/instance/tests/testComment.st
R EpiceaBrowsersTests.package/EpFilterTest.class/README.md
R EpiceaBrowsersTests.package/EpFilterTest.class/definition.st
R EpiceaBrowsersTests.package/EpFilterTest.class/instance/resources/classAddition.st
R EpiceaBrowsersTests.package/EpFilterTest.class/instance/resources/diverseEvents.st
R EpiceaBrowsersTests.package/EpFilterTest.class/instance/resources/expressionEvaluation.st
R EpiceaBrowsersTests.package/EpFilterTest.class/instance/resources/methodAddition.st
R EpiceaBrowsersTests.package/EpFilterTest.class/instance/resources/redo.st
R EpiceaBrowsersTests.package/EpFilterTest.class/instance/resources/refactoring.st
R EpiceaBrowsersTests.package/EpFilterTest.class/instance/running/assert_accepts_rejects_.st
R EpiceaBrowsersTests.package/EpFilterTest.class/instance/running/entryWith_.st
R EpiceaBrowsersTests.package/EpFilterTest.class/instance/tests/testAnd.st
R EpiceaBrowsersTests.package/EpFilterTest.class/instance/tests/testBehavior.st
R EpiceaBrowsersTests.package/EpFilterTest.class/instance/tests/testEquality.st
R EpiceaBrowsersTests.package/EpFilterTest.class/instance/tests/testLogBrowserOperation.st
R EpiceaBrowsersTests.package/EpFilterTest.class/instance/tests/testMethod.st
R EpiceaBrowsersTests.package/EpFilterTest.class/instance/tests/testNoTrigger.st
R EpiceaBrowsersTests.package/EpFilterTest.class/instance/tests/testOrAllFilters.st
R EpiceaBrowsersTests.package/EpFilterTest.class/instance/tests/testRefactoring.st
R EpiceaBrowsersTests.package/EpFilteredViewTest.class/README.md
R EpiceaBrowsersTests.package/EpFilteredViewTest.class/definition.st
R EpiceaBrowsersTests.package/EpFilteredViewTest.class/instance/resources/pageSize.st
R EpiceaBrowsersTests.package/EpFilteredViewTest.class/instance/running/andFilter.st
R EpiceaBrowsersTests.package/EpFilteredViewTest.class/instance/tests/testRootItems.st
A EpiceaBrowsersTests.package/EpLogBrowserOperationFactoryTest.class/README.md
A EpiceaBrowsersTests.package/EpLogBrowserOperationFactoryTest.class/definition.st
R EpiceaBrowsersTests.package/EpLogBrowserOperationIntegrationTest.class/README.md
R EpiceaBrowsersTests.package/EpLogBrowserOperationIntegrationTest.class/definition.st
R EpiceaBrowsersTests.package/EpLogBrowserOperationIntegrationTest.class/instance/tests/testComment.st
R EpiceaBrowsersTests.package/EpLogBrowserViewTest.class/README.md
R EpiceaBrowsersTests.package/EpLogBrowserViewTest.class/definition.st
R EpiceaBrowsersTests.package/EpLogBrowserViewTest.class/instance/resources/newBrowser.st
R EpiceaBrowsersTests.package/EpLogBrowserViewTest.class/instance/resources/newLog.st
R EpiceaBrowsersTests.package/EpLogBrowserViewTest.class/instance/resources/pageSize.st
R EpiceaBrowsersTests.package/EpLogBrowserViewTest.class/instance/resources/viewClass.st
R EpiceaBrowsersTests.package/EpLogBrowserViewTest.class/instance/running/andFilter.st
R EpiceaBrowsersTests.package/EpLogBrowserViewTest.class/instance/running/setUp.st
R EpiceaBrowsersTests.package/EpLogBrowserViewTest.class/instance/running/tearDown.st
M EpiceaBrowsersTests.package/EpLostChangesDetectorTest.class/definition.st
M EpiceaBrowsersTests.package/EpOmbuExporterTest.class/instance/tests/testBasicExport.st
R EpiceaBrowsersTests.package/EpOnePageViewTest.class/README.md
R EpiceaBrowsersTests.package/EpOnePageViewTest.class/definition.st
R EpiceaBrowsersTests.package/EpOnePageViewTest.class/instance/resources/pageSize.st
R EpiceaBrowsersTests.package/EpOnePageViewTest.class/instance/tests/testRootItems.st
A EpiceaBrowsersTests.package/EpRevertTest.class/README.md
A EpiceaBrowsersTests.package/EpRevertTest.class/definition.st
A EpiceaBrowsersTests.package/EpRevertTest.class/instance/private/revert_.st
A EpiceaBrowsersTests.package/EpRevertTest.class/instance/tests/testClassAddition.st
A EpiceaBrowsersTests.package/EpRevertTest.class/instance/tests/testClassAdditionWithClassAlreadyRemoved.st
A EpiceaBrowsersTests.package/EpRevertTest.class/instance/tests/testClassModificationWithClassRemoved.st
A EpiceaBrowsersTests.package/EpRevertTest.class/instance/tests/testClassRemoval.st
A EpiceaBrowsersTests.package/EpRevertTest.class/instance/tests/testClassRemovalWithClassAlreadyAdded.st
A EpiceaBrowsersTests.package/EpRevertTest.class/instance/tests/testMethodAddition.st
A EpiceaBrowsersTests.package/EpRevertTest.class/instance/tests/testMethodAdditionWithMethodAlreadyRemoved.st
A EpiceaBrowsersTests.package/EpRevertTest.class/instance/tests/testMethodModification.st
A EpiceaBrowsersTests.package/EpRevertTest.class/instance/tests/testMethodModificationWithProtocolChanged.st
A EpiceaBrowsersTests.package/EpRevertTest.class/instance/tests/testMethodRemoval.st
A EpiceaBrowsersTests.package/EpRevertTest.class/instance/tests/testMethodRemovalWithMethodAlreadyAdded.st
R EpiceaBrowsersTests.package/EpTwoPagesViewTest.class/README.md
R EpiceaBrowsersTests.package/EpTwoPagesViewTest.class/definition.st
R EpiceaBrowsersTests.package/EpTwoPagesViewTest.class/instance/resources/pageSize.st
R EpiceaBrowsersTests.package/EpTwoPagesViewTest.class/instance/tests/testExpand.st
R EpiceaBrowsersTests.package/EpTwoPagesViewTest.class/instance/tests/testRootItems.st
M EpiceaTests.package/EpCodeChangeIntegrationTest.class/instance/tests/testClassRemoval.st
R EpiceaTests.package/EpCodeChangeIntegrationTest.class/instance/tests/testMethodModification.st
A EpiceaTests.package/EpCodeChangeIntegrationTest.class/instance/tests/testMethodModificationOfProtocol.st
A EpiceaTests.package/EpCodeChangeIntegrationTest.class/instance/tests/testMethodModificationOfSourceCode.st
A EpiceaTests.package/EpFilterTest.class/README.md
A EpiceaTests.package/EpFilterTest.class/definition.st
A EpiceaTests.package/EpFilterTest.class/instance/resources/classAddition.st
A EpiceaTests.package/EpFilterTest.class/instance/resources/diverseEvents.st
A EpiceaTests.package/EpFilterTest.class/instance/resources/expressionEvaluation.st
A EpiceaTests.package/EpFilterTest.class/instance/resources/methodAddition.st
A EpiceaTests.package/EpFilterTest.class/instance/resources/redo.st
A EpiceaTests.package/EpFilterTest.class/instance/resources/refactoring.st
A EpiceaTests.package/EpFilterTest.class/instance/running/assert_accepts_rejects_.st
A EpiceaTests.package/EpFilterTest.class/instance/running/entryWith_.st
A EpiceaTests.package/EpFilterTest.class/instance/tests/testAnd.st
A EpiceaTests.package/EpFilterTest.class/instance/tests/testBehavior.st
A EpiceaTests.package/EpFilterTest.class/instance/tests/testEquality.st
A EpiceaTests.package/EpFilterTest.class/instance/tests/testLogBrowserOperation.st
A EpiceaTests.package/EpFilterTest.class/instance/tests/testMethod.st
A EpiceaTests.package/EpFilterTest.class/instance/tests/testNoTrigger.st
A EpiceaTests.package/EpFilterTest.class/instance/tests/testOrAllFilters.st
A EpiceaTests.package/EpFilterTest.class/instance/tests/testRefactoring.st
A EpiceaTests.package/EpLogTest.class/instance/tests/testEntriesCount.st
A EpiceaTests.package/EpLogTest.class/instance/tests/testEntryReferences.st
M EpiceaTests.package/EpMonitorIntegrationTest.class/instance/running/allLogEntriesWith_.st
R Ombu.package/OmCompositeStore.class/README.md
R Ombu.package/OmCompositeStore.class/definition.st
R Ombu.package/OmCompositeStore.class/instance/accessing/allStores.st
R Ombu.package/OmCompositeStore.class/instance/accessing/entryFor_ifPresent_ifAbsent_.st
R Ombu.package/OmCompositeStore.class/instance/accessing/headReference.st
R Ombu.package/OmCompositeStore.class/instance/adding%2Fremoving/addStore_.st
R Ombu.package/OmCompositeStore.class/instance/adding%2Fremoving/removeStore_.st
R Ombu.package/OmCompositeStore.class/instance/enumerating/entriesDo_.st
R Ombu.package/OmCompositeStore.class/instance/initialization/initialize.st
R Ombu.package/OmCompositeStore.class/instance/refreshing/refresh.st
R Ombu.package/OmCompositeStore.class/instance/writing/newEntry_.st
A Ombu.package/OmDeferrer.class/class/initialization/initialize.st
A Ombu.package/OmDeferrer.class/class/system startup/shutDown_.st
R Ombu.package/OmDirectoryStore.class/README.md
R Ombu.package/OmDirectoryStore.class/class/instance creation/in_.st
R Ombu.package/OmDirectoryStore.class/definition.st
R Ombu.package/OmDirectoryStore.class/instance/accessing/allStores.st
R Ombu.package/OmDirectoryStore.class/instance/accessing/entries.st
R Ombu.package/OmDirectoryStore.class/instance/accessing/entryFor_ifPresent_ifAbsent_.st
R Ombu.package/OmDirectoryStore.class/instance/accessing/fileReference.st
R Ombu.package/OmDirectoryStore.class/instance/accessing/headReference.st
R Ombu.package/OmDirectoryStore.class/instance/accessing/writingFileReference.st
R Ombu.package/OmDirectoryStore.class/instance/enumerating/entriesDo_.st
R Ombu.package/OmDirectoryStore.class/instance/initialization/initializeWithDirectoryReference_.st
R Ombu.package/OmDirectoryStore.class/instance/printing/printOn_.st
R Ombu.package/OmDirectoryStore.class/instance/private/addStoreNamed_ifPossible_ifNotPossible_.st
R Ombu.package/OmDirectoryStore.class/instance/refreshing/refresh.st
R Ombu.package/OmDirectoryStore.class/instance/writing/newEntry_.st
M Ombu.package/OmEntryReader.class/definition.st
A Ombu.package/OmEntryReader.class/instance/accessing/stream.st
A Ombu.package/OmEntryReader.class/instance/accessing/stream_.st
A Ombu.package/OmEntryReader.class/instance/reading/entryPositionsDo_.st
M Ombu.package/OmEntryReader.class/instance/reading/entryPositionsOn_do_.st
A Ombu.package/OmEntryReader.class/instance/reading/nextEntry.st
M Ombu.package/OmEntryReader.class/instance/reading/nextEntryFrom_.st
M Ombu.package/OmFileStore.class/class/accessing/fileReferenceForStoreNamed_inDirectory_.st
M Ombu.package/OmFileStore.class/class/instance creation/named_.st
M Ombu.package/OmFileStore.class/class/instance creation/named_inDirectory_.st
M Ombu.package/OmFileStore.class/class/instance creation/new.st
R Ombu.package/OmFileStore.class/class/instance creation/newNamed_inDirectory_.st
M Ombu.package/OmFileStore.class/class/testing/existsStoreNamed_inDirectory_.st
R Ombu.package/OmFileStore.class/instance/accessing/entryReader.st
A Ombu.package/OmFileStore.class/instance/accessing/entryReferences.st
A Ombu.package/OmFileStore.class/instance/accessing/referenceToLocalName_.st
M Ombu.package/OmFileStore.class/instance/enumerating/entriesDo_.st
M Ombu.package/OmFileStore.class/instance/private/flushEntryBuffer.st
M Ombu.package/OmFileStore.class/instance/private/nextEntryFromPosition_.st
A Ombu.package/OmFileStore.class/instance/private/refreshEntryPositionsByLocalNameStartingAt_since_.st
R Ombu.package/OmFileStore.class/instance/refreshing/referenceToLocalName_.st
M Ombu.package/OmFileStore.class/instance/refreshing/refresh.st
A Ombu.package/OmFuelEntryReader.class/instance/enumerating/entryPositionsDo_.st
A Ombu.package/OmFuelEntryReader.class/instance/reading/nextEntry.st
R Ombu.package/OmFuelEntryReader.class/instance/reading/nextEntryFrom_.st
A Ombu.package/OmMemoryStore.class/README.md
A Ombu.package/OmMemoryStore.class/class/instance creation/named_.st
A Ombu.package/OmMemoryStore.class/class/instance creation/new.st
A Ombu.package/OmMemoryStore.class/definition.st
A Ombu.package/OmMemoryStore.class/instance/accessing/entries.st
A Ombu.package/OmMemoryStore.class/instance/accessing/entryFor_ifPresent_ifAbsent_.st
A Ombu.package/OmMemoryStore.class/instance/accessing/globalName.st
A Ombu.package/OmMemoryStore.class/instance/accessing/headReference.st
A Ombu.package/OmMemoryStore.class/instance/accessing/initializeWithGlobalName_.st
A Ombu.package/OmMemoryStore.class/instance/accessing/writingFileReference.st
A Ombu.package/OmMemoryStore.class/instance/enumerating/entriesDo_.st
A Ombu.package/OmMemoryStore.class/instance/refreshing/refresh.st
A Ombu.package/OmMemoryStore.class/instance/writing/newEntry_.st
R Ombu.package/OmReference.class/instance/accessing/name.st
M Ombu.package/OmReference.class/instance/printing/printOn_.st
A Ombu.package/OmReference.class/instance/printing/shortName.st
A Ombu.package/OmSTONEntryReader.class/instance/accessing/stonReader.st
A Ombu.package/OmSTONEntryReader.class/instance/accessing/stream_.st
R Ombu.package/OmSTONEntryReader.class/instance/initialization/initialize.st
R Ombu.package/OmSTONEntryReader.class/instance/initialization/newSTONReader.st
A Ombu.package/OmSTONEntryReader.class/instance/reading/entryPositionsDo_.st
R Ombu.package/OmSTONEntryReader.class/instance/reading/entryPositionsOn_do_.st
A Ombu.package/OmSTONEntryReader.class/instance/reading/nextEntry.st
R Ombu.package/OmSTONEntryReader.class/instance/reading/nextEntryFrom_.st
R Ombu.package/OmSessionStore.class/class/system startup/shutDown_.st
M Ombu.package/OmSessionStore.class/instance/accessing/entryFor_ifPresent_ifAbsent_.st
M Ombu.package/OmSessionStore.class/instance/initialization/initializeWithBaseLocator_.st
A Ombu.package/OmStore.class/instance/accessing/entryReferences.st
A Ombu.package/OmStore.class/instance/accessing/referenceToLocalName_.st
R Ombu.package/OmStoreFactory.class/class/accessing/startUp_.st
A Ombu.package/OmStoreFactory.class/class/system startup/startUp_.st
R Ombu.package/extension/ZnBufferedWriteStream/instance/position.st
R OmbuTests.package/OmDirectoryStoreTest.class/README.md
R OmbuTests.package/OmDirectoryStoreTest.class/class/as yet unclassified/shouldInheritSelectors.st
R OmbuTests.package/OmDirectoryStoreTest.class/definition.st
R OmbuTests.package/OmDirectoryStoreTest.class/instance/resources/auxiliaryStoreNamed_in_.st
R OmbuTests.package/OmDirectoryStoreTest.class/instance/resources/setUpOtherStore.st
R OmbuTests.package/OmDirectoryStoreTest.class/instance/resources/setUpStore.st
R OmbuTests.package/OmDirectoryStoreTest.class/instance/running/tearDown.st
R OmbuTests.package/OmDirectoryStoreTest.class/instance/tests/testLoadFromDirectory.st
A OmbuTests.package/OmMemoryStoreTest.class/README.md
A OmbuTests.package/OmMemoryStoreTest.class/definition.st
A OmbuTests.package/OmMemoryStoreTest.class/instance/resources/setUpStore.st
A OmbuTests.package/OmStoreTest.class/instance/running/tearDown.st
A OmbuTests.package/OmStoreTest.class/instance/tests/testEntryReferences.st
R ScriptLoader60.package/ScriptLoader.class/instance/pharo - scripts/script60442.st
A ScriptLoader60.package/ScriptLoader.class/instance/pharo - scripts/script60443.st
R ScriptLoader60.package/ScriptLoader.class/instance/pharo - updates/update60442.st
A ScriptLoader60.package/ScriptLoader.class/instance/pharo - updates/update60443.st
M ScriptLoader60.package/ScriptLoader.class/instance/public/commentForCurrentUpdate.st
Log Message:
-----------
60443
19837 Epicea: integrate release 8.1.3
https://pharo.fogbugz.com/f/cases/19837
http://files.pharo.org/image/60/60443.zip
March 16, 2017
Re: [Pharo-dev] [VM] Windows VM SurfacePlugin.dll LoadLibrary failure
by Martin Dias
Same here, in #60442.
Smalltalk vm version --->
"'CoInterpreter * VMMaker.oscog-EstebanLorenzano.2136 uuid:
40534c32-ca6b-4e97-91ec-31d509e49b0c Feb 22 2017
StackToRegisterMappingCogit * VMMaker.oscog-EstebanLorenzano.2136 uuid:
40534c32-ca6b-4e97-91ec-31d509e49b0c Feb 22 2017
VM: 201702221539 https://github.com/pharo-project/pharo-vm.git $ Date: Wed
Feb 22 16:39:40 2017 +0100 $ Plugins: 201702221539
https://github.com/pharo-project/pharo-vm.git $
'"
cmd ver --->
Microsoft Windows [Versión 10.0.14393]
Additionally:
And it takes >30 minutes to load Roassal2, while takes <1 minyte in Linux
(same notebook). Script:
Gofer new
url: 'http://www.smalltalkhub.com/mc/ObjectProfile/Roassal2/main';
package: 'ConfigurationOfRoassal2';
load.
#ConfigurationOfRoassal2 asClass load.
Martin
On Fri, Feb 24, 2017 at 8:52 AM, Peter Uhnak <i.uhnak(a)gmail.com> wrote:
> Well, I take that back.
>
> Today I had the same issue (with the latest VM).
> Closing the image and reopening it helped, but clearly there is something
> broken underneath.
>
> Peter
>
> On Wed, Feb 22, 2017 at 09:29:12PM +0100, Peter Uhnak wrote:
> > On Thu, Feb 16, 2017 at 12:19:00PM +0100, Cyril Ferlicot D. wrote:
> > >
> > > I got the same problem with the latest vm some weeks ago on Windows 7.
> > > It vanished by downloading a new vm some days after.
> >
> > I've downloaded the latest VM and it works as expected. Thanks!
> >
> > Peter
>
>
March 16, 2017
Re: [Pharo-dev] ZnInvalidUTF8 on response from squeaksource
by Ben Coman
On Thu, Mar 16, 2017 at 3:52 AM, Rein, Patrick <Patrick.Rein(a)hpi.de> wrote:
> Unfortunately, as I am trying to fix a Travis build, I can not change the
call to Zinc.
Actually maybe you can.
Is it possible for Travis to run the following from the command line before
loading iCal ?
$ pharo your.image loadAllFilenamesHack.st --save --quit
cheers -ben
March 16, 2017
Re: [Pharo-dev] ZnInvalidUTF8 on response from squeaksource
by Ben Coman
On Thu, Mar 16, 2017 at 6:25 AM, Sven Van Caekenberghe <sven(a)stfx.eu> wrote:
>
>
> > On 15 Mar 2017, at 20:52, Rein, Patrick <Patrick.Rein(a)hpi.de> wrote:
> >
> > Unfortunately, as I am trying to fix a Travis build, I can not change the call to Zinc.
> >
> > To be clear about this: I also think that squeaksource should serve UTF-8.
> > However, at the same time a missing charset in a HTTP response means that the content
> > should be decoded as ISO-8859-1 [1]. So in general this does seem to me like an issue in Zinc.
> >
> > I see that this might be a problem to change though, so I will consider moving the project at one point (or removing that damn umlaut :) ).
> >
> > Bests
> > Patrick
> >
> > [1] https://tools.ietf.org/html/rfc2616#section-3.7.1
(Hypertext Transfer Protocol -- HTTP/1.1)
For easy reference, the pertinent part seems to be...
When no explicit charset parameter is provided by the sender,
media subtypes of the "text" type are defined to have a
default charset value of "ISO-8859-1" when received via HTTP.
Additional support...
Section 6, The 'text/html' Media Type
(http://www.rfc-editor.org/rfc/rfc2854.txt)
[MIME] specifies "The default character set, which must be assumed in
the absence of a charset parameter, is US-ASCII."
[HTTP] Section 3.7.1, defines that "media subtypes of the 'text' type
are defined to have a default charset value of 'ISO-8859-1'".
>
> Hmm, OK, I never saw that paragraph, interesting.
> Thanks for the pointer, I will put it on my todo list to think about.
Food for thought...
https://en.wikipedia.org/wiki/Robustness_principle
which is implied here...
https://www.w3.org/Protocols/rfc2616/rfc2616-sec7.html#sec7.2.1
Any HTTP/1.1 message containing an entity-body SHOULD include a
Content-Type header field defining the media type of that body. If and
only if the media type is not given by a Content-Type field, the
recipient **MAY** attempt to guess the media type via inspection of
its content and/or the name extension(s) of the URI used to identify
the resource.
Perhaps then its okay to consider the media type is not fully defined
when there no character encoding is specified, and content inspection
is okay - perhaps only in the face of a character encoding error. So
even though at the HTML level, these articles are interesting...
Character encoding in HTML
https://www.w3.org/blog/2008/03/html-charset/
Encoding Divination
http://nikitathespider.com/articles/EncodingDivination.html
On Thu, Mar 16, 2017 at 3:55 AM, monty <monty2(a)programmer.net> wrote:
>
> That isn't Zinc's responsibility; it just handles HTTP. The HTML or XML parser using it should disable Zinc's automatic decoding based on Content-Type and do its own decoding of the raw response (which can still be done using Zinc's decoders) informed by the content of the response and not just its Content-Type. XMLParser and XMLParserHTML both use Zinc this way.
But a lot of what people want to do from the image is process web data
by parsing HTML or XML.
So is there anything we do to make it more robust out of the box
(without getting in the way)
ZnClient is promoted as the "easy" way to use Zinc. Could that not
have additional smarts to inspect the content
to "auto" divine the encoding. Or maybe we need another user-agent
tool that does this?
cheers -ben
>
>
> > ________________________________________
> > From: Pharo-dev <pharo-dev-bounces(a)lists.pharo.org> on behalf of Ben Coman <btc(a)openinworld.com>
> > Sent: Wednesday, March 15, 2017 19:16
> > To: Pharo Development List
> > Subject: Re: [Pharo-dev] ZnInvalidUTF8 on response from squeaksource
> >
> > On Thu, Mar 16, 2017 at 1:25 AM, Sven Van Caekenberghe <sven(a)stfx.eu> wrote:
> >>
> >> Hi,
> >>
> >> This is a recurring issue.
> >
> >
> > It would be cool if some magic(TM) could raise a dialog with an
> > explanation and pull-down list to select an encoding - but maybe that
> > is too much hand holding.
> >
> >
> >>
> >> The problem is that the server serves a resource, in this case text/html, without specifying its encoding.
> >
> > I just bumped into [1] while browsing around to learn more, but I
> > don't know fully how to interpret it.
> > What do you make of it saying "An XHTML5 document is served as XML and
> > has XML syntax. XML parsers do not recognise the encoding declarations
> > in meta elements. They only recognise the XML declaration. Here is an
> > example:
> > <?xml version="1.0" encoding="utf-8"?>
> > <!DOCTYPE html ....
> >
> > compared to the page having...
> > <?xml version="1.0" encoding="iso-8859-1"?>
> >
> > cheers -ben
> >
> > [1] https://www.w3.org/International/questions/qa-html-encoding-declarations
> >
> >
> >>
> >> Today, when no encoding is specified, we default to UTF-8. In this case the server silently serves a resource which is ISO-8895-1 encoded.
> >>
> >> The error is triggered by accessing the following URL:
> >>
> >> ZnClient new get: 'http://squeaksource.com/ical/?C=M;O%3DD'; yourself.
> >>
> >> If you inspect the response object inside the http client, you will see that the content-type is text/html. So Zn parses the incoming text using UTF-8 which fails (Zn encoders are strict by default).
> >>
> >> Here is how to change the default during a call:
> >>
> >> ZnDefaultCharacterEncoder
> >> value: ZnCharacterEncoder iso88591
> >> during: [ ZnClient new get: 'http://squeaksource.com/ical/?C=M;O%3DD'; yourself ].
> >>
> >> The solution would be that the server adds the proper charset specification.
> >>
> >> Consider the default in Pharo:
> >>
> >> ZnMimeType textHtml => text/html;charset=utf-8
> >>
> >> The server should serve this resource using the following Content-Type:
> >>
> >> text/html;charset=iso-8859-1
> >>
> >> This is the server's responsibility. The page in question is the MC index page, which would normally be dynamically generated. Somewhere the server decides on the encoding. That encoding does not have to change, but it should be properly indicated in the HTTP response headers.
> >>
> >> HTH,
> >>
> >> Sven
> >>
> >>> On 15 Mar 2017, at 17:42, David T. Lewis <lewis(a)mail.msen.com> wrote:
> >>>
> >>> squeaksource.com is still running on a quite old image, and I know that it
> >>> has problems with multibyte characters. If you are seeing problems related
> >>> to this, it's not the fault of Zinc.
> >>>
> >>> If you can confirm that this is what is happening, then I guess it is time
> >>> to update that trusty old squeaksource.com image :-)
> >>>
> >>> Dave
> >>>
> >>>> On Wed, Mar 15, 2017 at 8:19 PM, Patrick R. <patrick.rein(a)hpi.de> wrote:
> >>>>>
> >>>>> Hi everyone,
> >>>>>
> >>>>> I have been working on bringing http://squeaksource.com/ical/ up to
> >>>>> speed
> >>>>> for Squeak and wanted to make sure that it also works for Pharo.
> >>>> Therefore,
> >>>>> I have created a travis build job for Squeak and Pharo
> >>>>> (https://travis-ci.org/codeZeilen/ical-smalltalk/jobs/211298950) which
> >>>> pulls
> >>>>> the source from squeaksource.com.
> >>>>>
> >>>>> Now the issue is that loading the package in Pharo fails with a
> >>>>> GoferException wrapping a ZnInvalidUTF8 Exception. We figured that this
> >>>>> might be the result of the squeaksource page delivering the page as
> >>>>> iso-8859-1 as it contains special characters. Any ideas on how to get
> >>>>> this
> >>>>> to work? I do not have access to the ical repository description and I
> >>>> would
> >>>>> like to avoid mirroring the whole repository on GitHub.
> >>>>
> >>>>
> >>>> In a fresh 60437 image, in Playground evaluating...
> >>>>
> >>>> Metacello new
> >>>> configuration: 'ICal';
> >>>> repository: 'github://codeZeilen/ical-smalltalk:master/repository';
> >>>> onConflict: [:ex | ex allow];
> >>>> load.
> >>>> ==> Could not resolve: ICal-Core [ICal-Core-PaulDeBruicker.5] in
> >>>> /home/ben/.local/share/Pharo/images/60437-01/pharo-local/package-cache
> >>>> http://squeaksource.com/ical ERROR: 'GoferRepositoryError: Could not
> >>>> access
> >>>> http://squeaksource.com/ical: ZnInvalidUTF8: Illegal continuation byte for
> >>>> utf-8 encoding'
> >>>>
> >>>>
> >>>> In a new fresh 60437 Image (i.e. empty package-cache)
> >>>> World menu > Monticello > +Repository > squeaksource.com...
> >>>> MCSqueaksourceRepository
> >>>> location: 'http://squeaksource.com/ical'
> >>>> user: ''
> >>>> password: ''
> >>>> ==> open repository then errors "MCRepositoryError: Could not access
> >>>> http://squeaksource.com/ical: ZnInvalidUTF8: Illegal continuation byte for
> >>>> utf-8 encoding"
> >>>>
> >>>>
> >>>> In Chrome, opening http://www.squeaksource.com/ical
> >>>> then clicking <Versions>
> >>>> and the browser's View Page Source,
> >>>> I see...
> >>>> <?xml version="1.0" encoding="iso-8859-1"?>
> >>>>
> >>>> Googling: zinc iso-8859-1
> >>>> finds...
> >>>> http://forum.world.st/Problem-using-Zinc-in-Pharo-4-Moose-5-1-td4825329.html
> >>>> but "ZnByteEncoder iso88591"
> >>>> errors with "KeyNotFound: key 'iso88591' not found in Dictionary"
> >>>> and inspecting "ZnByteEncoder byteTextConverters keys sorted"
> >>>> confirms this key is missing (@Sven, I'm curious why was this removed? )
> >>>>
> >>>>
> >>>> Now https://en.wikipedia.org/wiki/ISO/IEC_8859-1
> >>>> indicates IBM819 is an alias
> >>>> and " ZnByteEncoder newForEncoding: 'ibm819' "
> >>>> works okay
> >>>>
> >>>> So in MCHttpRepository>>#loadAllFileNames
> >>>> changing...
> >>>> queryAt: 'C' put: 'M;O=D' ;
> >>>> get.
> >>>> to...
> >>>> queryAt: 'C' put: 'M;O=D' .
> >>>> ZnDefaultCharacterEncoder
> >>>> value: (ZnByteEncoder newForEncoding: 'ibm819')
> >>>> during: [client get].
> >>>>
> >>>> Then from Monticello opening the previously defined
> >>>> http://squeaksource.com/ical
> >>>> works!!
> >>>>
> >>>>
> >>>> Now I was hoping that reverting #loadAllFileNames
> >>>> and in Playground doing...
> >>>> converters := ZnByteEncoder byteTextConverters.
> >>>> converters at: 'iso-8859-1' put: (converters at: 'ibm819').
> >>>> might alleviate the problem, but no luck.
> >>>>
> >>>>
> >>>> Anyone know a better way to deal with this that hardcoding the encoding
> >>>> into #loadAllFileNames?
> >>>>
> >>>> cheers -ben
> >>>>
> >>>
> >>>
> >>>
> >>
> >>
> >
> >
>
>
March 16, 2017
Re: [Pharo-dev] [Vm-dev] BUG? A problem with callbacks that shows up in 64bits (but is on 32bits too)
by Eliot Miranda
Hi Igor,
On Wed, Mar 15, 2017 at 2:53 AM, Igor Stasenko <siguctua(a)gmail.com> wrote:
>
> Here's my d)
> implement callback functions in C, or in native form => no need for
> entering the smalltalk execution => no risk of GC => nothing to worry about.
>
> I guess nobody will like it (and will be right, of course ;) , but it is
> how it was originally done. I used NativeBoost to implement those callback
> functions and they're won't cause any GC problems.
>
yes, I like this. I was wondering why the callbacks solution was used at
all yesterday. All they do is redirect to the cairo library. What are the
reasons? Tedious to write and maintain the necessary simple plugin?
Clément pointed out a really ugly problem with the current implementation.
If one calls back into Pharo from the BitBlt primitives and then reinvokes
BitBlt, say by innocently putting a halt in those callbacks, then the
original BitBlt's state will get overwritten by the BitBlt invocations in
the callback's dynamic exert. At least with my changes the BitBlt
primitive will abort, rather than continue with the invalid state.
> That, of course, gave me solution in this concrete case, but not in
> general.. i.e. : if you have another callback that cannot be implemented
> na(t)ively, then
> you facing similar problems, mainly: how to work around the problem, that
> primitive(s) that using callbacks may capture state, that are subject of GC
> activity.
>
> In general , then, i think such primitive should be (re)written in such
> way , that it won't get puzzled by GC.. and addGCRoot(s), IMO then best
> way, from general interfacing/implementation standpoint.
> I would just add extra interface for using it especially in primitives, so
> that it
> 1) won't punish primitive writer with too much coding
> 2) automatically handle primitive/callback nesting e.g.
> primitive1 -> adds roots1 -> calls fn -> callback -> st code -> primitive2
> -> adds roots2 -> calls fn2 -> callback2 ...
>
>
> something like this:
>
> static initialized once myprimooptable = [ a,b,c].
> vm pushPrimRoots: myooptable.
> self do things primitive does.
> vm popPrimRoots
>
> or, since we have green threading, then maybe better will be in this form:
>
> rootsId := static initialized once myprimooptable = [ a,b,c].
> vm pushPrimRoots: myooptable.
> self do things primitive does.
> vm popPrimRoots: rootsId.
>
We kind of have this with the addGCRoot: interface. But I think it's much
better to design the system so that the primitive fails and can be
retried. The problem there is having to have the primitive failure code
check and roll back. For example in the copyBits primitive one sees
((sourceForm isForm) and: [sourceForm unhibernate])
ifTrue: [^ self copyBits].
((destForm isForm) and: [destForm unhibernate])
ifTrue: [^ self copyBits].
((halftoneForm isForm) and: [halftoneForm unhibernate])
ifTrue: [^ self copyBits].
This is really scruffy because...GrafPort implements copyBits, so this ends
up not just retrying the primitive but running a lot more besides. One way
to write it is
((sourceForm isForm) and: [sourceForm unhibernate])
ifTrue: [^ self perform: #copyBits withArguments: #() inSuperclass: BitBlt].
((destForm isForm) and: [destForm unhibernate])
ifTrue: [^ self perform: #copyBits withArguments: #() inSuperclass:
thisContext method methodClass].
((halftoneForm isForm) and: [halftoneForm unhibernate])
ifTrue: [^ self perform: #copyBits withArguments: #() inSuperclass:
thisContext methodClass].
but that's ugly.
A mechanism that was in the VM would be nice. The state for the invocation
is saved on the stack. So there could be a special failure path for this
kind of recursive invocation problem; another send-back such as
doesNotUnderstand: attemptToReturn:through:. Note (I'm sure you know this
Igor) that there are primitives such as the ThreadedFFIPlugin's call-out
primitive that very much expect to be invoked recursively and have no
problem with it.
>
>
> On 14 March 2017 at 18:33, Eliot Miranda <eliot.miranda(a)gmail.com> wrote:
>
>>
>>
>>
>> On Tue, Mar 14, 2017 at 8:56 AM, Nicolai Hess <nicolaihess(a)gmail.com>
>> wrote:
>>
>>>
>>>
>>>
>>> 2017-03-14 16:46 GMT+01:00 Eliot Miranda <eliot.miranda(a)gmail.com>:
>>>
>>>>
>>>> Hi Esteban, Hi Igor, Hi All,
>>>>
>>>> On Fri, Mar 10, 2017 at 7:35 AM, Esteban Lorenzano <estebanlm(a)gmail.com
>>>> > wrote:
>>>>
>>>>>
>>>>> Hi,
>>>>>
>>>>> Iâm tumbling into an error in Pharo, because we use callbacks
>>>>> intensively, in Athens(cairo)-to-World conversion in particular, and people
>>>>> is sending always their crash reports⦠we made the whole conversion a lot
>>>>> more robust since problems started to arise, but now I hit a wall I cannot
>>>>> solve: I think problem is in something in callbacks.
>>>>>
>>>>> And problem is showing very easy on 64bits (while in 32bits it takes
>>>>> time and is more random).
>>>>>
>>>>
>>>> I responded in the "image not opening" thread, but it's the same
>>>> problem. I really want to hear what y'all think because I'll happily
>>>> implement a fix, but I want to know which one y'all think is a good idea.
>>>> Here's my reply (edits between [ & ] to add information):
>>>>
>>>>
>>>> On Mon, Mar 13, 2017 at 9:11 PM, Eliot Miranda <eliot.miranda(a)gmail.com
>>>> > wrote:
>>>>
>>>> I'm pretty confident [I know] this is to do with bugs in the Athens
>>>> surface code which assumes that callbacks can be made in the existing
>>>> copyBits and warpBits primitive. They can't do this safely because a GC
>>>> (scavenge) can happen during a callback, which then causes chaos when the
>>>> copyBits primitive tries to access objects that have been moved under its
>>>> feet.
>>>>
>>>> I've done work to fix callbacks so that when there is a failure it is
>>>> the copyBits primitive that fails, instead of apparently the callback
>>>> return primitive. One of the apparent effects of this fix is to stop the
>>>> screen opening up too small; another is getting the background colour
>>>> right, and yet another is eliminating bogus pixels in the VGTigerDemo
>>>> demo. But more work is required to fix the copyBits and warpBits
>>>> primitives. There are a few approaches one might take:
>>>>
>>>> a) fixing the primitive so that it saves and restores oops around the
>>>> callbacks using the external oop table [InterpreterProxy>>addGCRoot: &
>>>> removeGCRoot:]. That's a pain but possible. [It's a pain because all the
>>>> derived pointers (the start of the destForm, sourceForm, halftoneForm and
>>>> colorMapTable) must be recomputed also, and of course most of the time the
>>>> objects don't move; we only scavenge about once every 2 seconds in normal
>>>> running]
>>>>
>>>> b) fixing the primitive so that it pins the objects it needs before
>>>> ever invoking a callback [this is a pain because pinning an object causes
>>>> it to be tenured to old space if it is in new space; objects can't be
>>>> pinned in new space, so instead the pin operation forwards the new space
>>>> object to an old space copy if required and answers its location in old
>>>> space, so a putative withPinnedObjectsDo: operation for the copyBits
>>>> primitive looks like
>>>> withPinnedFormsDo: aBlock
>>>> <inline: #always>
>>>> self cppIf: SPURVM & false
>>>> ifTrue:
>>>> [| bitBltOopWasPinned destWasPinned sourceWasPinned halftoneWasPinned |
>>>> (bitBltOopWasPinned := interpreterProxy isPinned: bitBltOop) ifFalse:
>>>> [bitBltOop := interpreterProxy pinObject: bitBltOop].
>>>> (destWasPinned := interpreterProxy isPinned: destForm) ifFalse:
>>>> [destForm := interpreterProxy pinObject: destForm].
>>>> (sourceWasPinned := interpreterProxy isPinned: sourceForm) ifFalse:
>>>> [sourceForm := interpreterProxy pinObject: sourceForm].
>>>> (halftoneWasPinned := interpreterProxy isPinned: halftoneForm) ifFalse:
>>>> [halftoneForm := interpreterProxy pinObject: halftoneForm].
>>>> aBlock value.
>>>> bitBltOopWasPinned ifFalse: [interpreterProxy unpinObject: bitBltOop].
>>>> destWasPinned ifFalse: [interpreterProxy unpinObject: destForm].
>>>> sourceWasPinned ifFalse: [interpreterProxy unpinObject: sourceForm].
>>>> halftoneWasPinned ifFalse: [interpreterProxy unpinObject: halftoneForm]]
>>>> ifFalse: [aBlock value]
>>>> and tenuring objects to old space is not ideal because they are only
>>>> collected by a full GC, so doing this would at least tenure the bitBltOop
>>>> which is very likely to be in new space]
>>>>
>>>> c) fixing the primitive so that it uses the scavenge and fullGC
>>>> counters in the VM to detect if a GC occurred during one of the callbacks
>>>> and would fail the primitive [if it detected that a GC had occurred in any
>>>> of the surface functions]. The primitive would then simply be retried.
>>>>
>>>> d) ?
>>>>
>>>
>>> Wouldn't it be possible to just pause the GC (scavange) when entering a
>>> primitive ?
>>>
>>
>> I don't think so. There is a callback occurring. If the computation
>> executed by the callback requires a GC the application will abort if a GC
>> cannot be done. Right? This is the case here.
>>
>>
>> I like c) as it's very lightweight, but it has issues. It is fine to use
>>>> for callbacks *before* cop[yBits and warpBits move any bits (the
>>>> lockSurface and querySurface functions). But it's potentially erroneous
>>>> after the unlockSurface primitive. For example, a primitive which does an
>>>> xor with the screen can't simply be retried as the first, falling pass,
>>>> would have updated the destination bits but not displayed them via
>>>> unlockSurface. But I think it could be arranged that no objects are
>>>> accessed after unlockSurface, which should naturally be the last call in
>>>> the primitive (or do I mean showSurface?). So the approach would be to
>>>> check for GCs occurring during querySurface and lockSurface, failing if so,
>>>> and then caching any and all state needed by unlockSurface and showSurface
>>>> in local variables. This way no object state is accessed to make the
>>>> unlockSurface and showSurface calls, and no bits are moved before the
>>>> queryDurface and lockSurface calls.
>>>>
>>>> If we used a failure code such as #'object may move' then the
>>>> primitives could answer this when a GC during callbacks is detected and
>>>> then the primitive could be retried only when required.
>>>>
>>>>
>>>> [Come on folks, please comment. I want to know which idea you like
>>>> best. We could fix this quickly. But right now it feels like I'm talking
>>>> to myself.]
>>>>
>>>>
>>>>> Here is the easiest way to reproduce it (in mac):
>>>>>
>>>>> wget files.pharo.org/get-files/60/pharo64-mac-latest.zip
>>>>> wget files.pharo.org/get-files/60/pharo64.zip
>>>>> wget files.pharo.org/get-files/60/sources.zip
>>>>> unzip pharo64-mac-latest.zip
>>>>> unzip pharo64.zip
>>>>> unzip sources.zip
>>>>> ./Pharo.app/Contents/MacOS/Pharo ./Pharo64-60438.image eval
>>>>> "VGTigerDemo runDemo"
>>>>>
>>>>> eventually (like 5-6 seconds after, if not immediately), you will have
>>>>> a stack like this:
>>>>>
>>>>> SmallInteger(Object)>>primitiveFailed:
>>>>> SmallInteger(Object)>>primitiveFailed
>>>>> SmallInteger(VMCallbackContext64)>>primSignal:andReturnAs:fromContext:
>>>>> GrafPort>>copyBits
>>>>> GrafPort>>image:at:sourceRect:rule:
>>>>> FormCanvas>>image:at:sourceRect:rule:
>>>>> FormCanvas(Canvas)>>drawImage:at:sourceRect:
>>>>> FormCanvas(Canvas)>>drawImage:at:
>>>>> VGTigerDemo>>runDemo
>>>>> VGTigerDemo class>>runDemo
>>>>> UndefinedObject>>DoIt
>>>>> OpalCompiler>>evaluate
>>>>> OpalCompiler(AbstractCompiler)>>evaluate:
>>>>> [ result := Smalltalk compiler evaluate: aStream.
>>>>> self hasSessionChanged
>>>>> ifFalse: [ self stdout
>>>>> print: result;
>>>>> lf ] ] in EvaluateCommandLineHandler>>evaluate:
>>>>> in Block: [ result := Smalltalk compiler evaluate: aStream....
>>>>> BlockClosure>>on:do:
>>>>> EvaluateCommandLineHandler>>evaluate:
>>>>> EvaluateCommandLineHandler>>evaluateArguments
>>>>> EvaluateCommandLineHandler>>activate
>>>>> EvaluateCommandLineHandler class(CommandLineHandler
>>>>> class)>>activateWith:
>>>>> [ aCommandLinehandler activateWith: commandLine ] in
>>>>> PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand:
>>>>> in Block: [ aCommandLinehandler activateWith: commandLine ]
>>>>> BlockClosure>>on:do:
>>>>> PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand:
>>>>> PharoCommandLineHandler(BasicCommandLineHandler)>>handleSubcommand
>>>>> PharoCommandLineHandler(BasicCommandLineHandler)>>handleArgument:
>>>>> [ self
>>>>> handleArgument:
>>>>> (self arguments
>>>>> ifEmpty: [ '' ]
>>>>> ifNotEmpty: [ :arguments | arguments first ])
>>>>> ] in PharoCommandLineHandler(BasicCommandLineHandler)>>activate in
>>>>> Block: [ self...
>>>>> BlockClosure>>on:do:
>>>>> PharoCommandLineHandler(BasicCommandLineHandler)>>activate
>>>>> PharoCommandLineHandler>>activate
>>>>> PharoCommandLineHandler class(CommandLineHandler class)>>activateWith:
>>>>> [ super activateWith: aCommandLine ] in PharoCommandLineHandler
>>>>> class>>activateWith: in Block: [ super activateWith: aCommandLine ]
>>>>>
>>>>> Any idea?
>>>>>
>>>>> thanks!
>>>>> Esteban
>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> _,,,^..^,,,_
>>>> best, Eliot
>>>>
>>>>
>>>
>>>
>>
>>
>> --
>> _,,,^..^,,,_
>> best, Eliot
>>
>>
>
>
> --
> Best regards,
> Igor Stasenko.
>
>
--
_,,,^..^,,,_
best, Eliot
March 15, 2017