Hi, there!
Is it okay that there is an endless recursion when evaluating "String new: -1"? ... ByteString class(Behavior)>>handleFailingFailingBasicNew: ByteString class(Behavior)>>handleFailingBasicNew: ByteString class(Behavior)>>basicNew: ByteString class(Behavior)>>handleFailingFailingBasicNew: ByteString class(Behavior)>>handleFailingBasicNew: ByteString class(Behavior)>>basicNew: ByteString class(Behavior)>>handleFailingFailingBasicNew: ByteString class(Behavior)>>handleFailingBasicNew: ByteString class(Behavior)>>basicNew: ... I would like to have an error signaled instead. Note that the -1 is just an example for a bad computation. The error I get is "Space is low" then. :-) Best, Marcel |
On Wed, Jul 06, 2016 at 06:43:25AM -0700, marcel.taeumel wrote:
> Hi, there! > > Is it okay that there is an endless recursion when evaluating "String new: -1"? No, it is not okay. It should fail with a primitive failure. Dave > > ... > ByteString class(Behavior)>>handleFailingFailingBasicNew: > ByteString class(Behavior)>>handleFailingBasicNew: > ByteString class(Behavior)>>basicNew: > ByteString class(Behavior)>>handleFailingFailingBasicNew: > ByteString class(Behavior)>>handleFailingBasicNew: > ByteString class(Behavior)>>basicNew: > ByteString class(Behavior)>>handleFailingFailingBasicNew: > ByteString class(Behavior)>>handleFailingBasicNew: > ByteString class(Behavior)>>basicNew: > ... > > I would like to have an error signaled instead. Note that the -1 is just an > example for a bad computation. The error I get is "Space is low" then. :-) > > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/Endless-recursion-String-new-1-tp4905179.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. |
Someone seems to have trimmed the versions in the changes file. In Squeak
4.4 Behavior >> #basicNew: had the following body: <primitive: 71> self isVariable ifFalse: [self error: self printString, ' cannot have variable sized instances']. (sizeRequested isInteger and: [sizeRequested >= 0]) ifTrue: ["arg okay; space must be low." OutOfMemory signal. ^ self basicNew: sizeRequested "retry if user proceeds"]. self primitiveFailed So, non-integer and negative arguments were primitive failures. Levente On Wed, 6 Jul 2016, David T. Lewis wrote: > On Wed, Jul 06, 2016 at 06:43:25AM -0700, marcel.taeumel wrote: >> Hi, there! >> >> Is it okay that there is an endless recursion when evaluating "String new: -1"? > > No, it is not okay. It should fail with a primitive failure. > > Dave > > >> >> ... >> ByteString class(Behavior)>>handleFailingFailingBasicNew: >> ByteString class(Behavior)>>handleFailingBasicNew: >> ByteString class(Behavior)>>basicNew: >> ByteString class(Behavior)>>handleFailingFailingBasicNew: >> ByteString class(Behavior)>>handleFailingBasicNew: >> ByteString class(Behavior)>>basicNew: >> ByteString class(Behavior)>>handleFailingFailingBasicNew: >> ByteString class(Behavior)>>handleFailingBasicNew: >> ByteString class(Behavior)>>basicNew: >> ... >> >> I would like to have an error signaled instead. Note that the -1 is just an >> example for a bad computation. The error I get is "Space is low" then. :-) >> >> >> Best, >> Marcel >> >> >> >> -- >> View this message in context: http://forum.world.st/Endless-recursion-String-new-1-tp4905179.html >> Sent from the Squeak - Dev mailing list archive at Nabble.com. > > |
I think the problem is in the primitive error code checking. The primitive
is failing with #'bad argument' but the fallback code attempts to handle it as #'insufficient object memory'. It then tries to free some memory, fails to correct the problem, and raises a "Space is low" notifier. Dave On Thu, Jul 07, 2016 at 09:23:14AM +0200, Levente Uzonyi wrote: > Someone seems to have trimmed the versions in the changes file. In Squeak > 4.4 Behavior >> #basicNew: had the following body: > > <primitive: 71> > self isVariable ifFalse: > [self error: self printString, ' cannot have variable sized > instances']. > (sizeRequested isInteger and: [sizeRequested >= 0]) ifTrue: > ["arg okay; space must be low." > OutOfMemory signal. > ^ self basicNew: sizeRequested "retry if user proceeds"]. > self primitiveFailed > > So, non-integer and negative arguments were primitive failures. > > Levente > > > On Wed, 6 Jul 2016, David T. Lewis wrote: > > >On Wed, Jul 06, 2016 at 06:43:25AM -0700, marcel.taeumel wrote: > >>Hi, there! > >> > >>Is it okay that there is an endless recursion when evaluating "String > >>new: -1"? > > > >No, it is not okay. It should fail with a primitive failure. > > > >Dave > > > > > >> > >>... > >>ByteString class(Behavior)>>handleFailingFailingBasicNew: > >>ByteString class(Behavior)>>handleFailingBasicNew: > >>ByteString class(Behavior)>>basicNew: > >>ByteString class(Behavior)>>handleFailingFailingBasicNew: > >>ByteString class(Behavior)>>handleFailingBasicNew: > >>ByteString class(Behavior)>>basicNew: > >>ByteString class(Behavior)>>handleFailingFailingBasicNew: > >>ByteString class(Behavior)>>handleFailingBasicNew: > >>ByteString class(Behavior)>>basicNew: > >>... > >> > >>I would like to have an error signaled instead. Note that the -1 is just > >>an > >>example for a bad computation. The error I get is "Space is low" then. :-) > >> > >> > >>Best, > >>Marcel > >> > >> > >> > >>-- > >>View this message in context: > >>http://forum.world.st/Endless-recursion-String-new-1-tp4905179.html > >>Sent from the Squeak - Dev mailing list archive at Nabble.com. > > > > |
Hi all
(cc vm-dev) On 07.07.2016, at 14:28, David T. Lewis <[hidden email]> wrote: > I think the problem is in the primitive error code checking. The primitive > is failing with #'bad argument' but the fallback code attempts to handle it > as #'insufficient object memory'. It then tries to free some memory, fails > to correct the problem, and raises a "Space is low" notifier. > I noted that when we moved to Spur initially and I tried to fix tests. The AllocationTest failed, and I changed ec == #'insufficient object memory' ifTrue: to (ec == #'insufficient object memory' or: [ec == #'bad argument']) ifTrue: in Behavior>>#basicNew: Maybe that was an error? @Eliot, why does Spur return #'bad argument' instead of #'insufficient object memory' when too much memory is to be allocated? Best regards -Tobias > Dave > > > On Thu, Jul 07, 2016 at 09:23:14AM +0200, Levente Uzonyi wrote: >> Someone seems to have trimmed the versions in the changes file. In Squeak >> 4.4 Behavior >> #basicNew: had the following body: >> >> <primitive: 71> >> self isVariable ifFalse: >> [self error: self printString, ' cannot have variable sized >> instances']. >> (sizeRequested isInteger and: [sizeRequested >= 0]) ifTrue: >> ["arg okay; space must be low." >> OutOfMemory signal. >> ^ self basicNew: sizeRequested "retry if user proceeds"]. >> self primitiveFailed >> >> So, non-integer and negative arguments were primitive failures. >> >> Levente >> >> >> On Wed, 6 Jul 2016, David T. Lewis wrote: >> >>> On Wed, Jul 06, 2016 at 06:43:25AM -0700, marcel.taeumel wrote: >>>> Hi, there! >>>> >>>> Is it okay that there is an endless recursion when evaluating "String >>>> new: -1"? >>> >>> No, it is not okay. It should fail with a primitive failure. >>> >>> Dave >>> >>> >>>> >>>> ... >>>> ByteString class(Behavior)>>handleFailingFailingBasicNew: >>>> ByteString class(Behavior)>>handleFailingBasicNew: >>>> ByteString class(Behavior)>>basicNew: >>>> ByteString class(Behavior)>>handleFailingFailingBasicNew: >>>> ByteString class(Behavior)>>handleFailingBasicNew: >>>> ByteString class(Behavior)>>basicNew: >>>> ByteString class(Behavior)>>handleFailingFailingBasicNew: >>>> ByteString class(Behavior)>>handleFailingBasicNew: >>>> ByteString class(Behavior)>>basicNew: >>>> ... >>>> >>>> I would like to have an error signaled instead. Note that the -1 is just >>>> an >>>> example for a bad computation. The error I get is "Space is low" then. :-) >>>> >>>> >>>> Best, >>>> Marcel >>>> >>>> >>>> >>>> -- >>>> View this message in context: >>>> http://forum.world.st/Endless-recursion-String-new-1-tp4905179.html >>>> Sent from the Squeak - Dev mailing list archive at Nabble.com. |
On Thu, Jul 7, 2016 at 5:42 AM, Tobias Pape <[hidden email]> wrote:
If it does, there's a bug. I'll go look.
_,,,^..^,,,_ best, Eliot |
In reply to this post by Tobias Pape
On Thu, Jul 7, 2016 at 5:42 AM, Tobias Pape <[hidden email]> wrote:
It doesn't. It answers bad argument for anything other than an integer in the range 0 to 2^32-1 or 0 to 2^64-1. I think your commit of topa 10/7/2015 20:41 for Behavior>>basicNew: is wrong, and should be reverted.
_,,,^..^,,,_ best, Eliot |
Free forum by Nabble | Edit this page |