Pharo-dev
By thread
pharo-dev@lists.pharo.org
By month
Messages by month
- ----- 2026 -----
- August
- 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
- 3 participants
- 144616 messages
Re: [Pharo-project] Fwd: sort: and sortBlock:
by csrabak@bol.com.br
I just would like to point out that English plus the use of some [of their] overloaded words may create havoc in a discussion.
TreeSets would be a common data structure to implement *sorted* sets in Smalltalk parlance.
Although /ordered/ and /sorted/ may be synonyms in lay English, in Smalltalk the use of "Ordered" in the Collection classes has to the property of being indexable and sequenceable which other languages will call the behaviour of "random access".
just my 0.0199999....
Em 23/12/2009 14:34, Adrian Kuhn < akuhn(a)iam.unibe.ch > escreveu:
Stéphane Ducasse writes:
> >> I started to implement OrderedSet (OrderedCollection no duplicate)
> >> but I think that I want probably UniqueOrdered.
> >> I will publish what I have done and ask for feedback and that other can
> >> improve. I like the idea of using the TraitsTest to have coherent sets of
> >> behavior.
> >
> > Oh yeah, TreeSet ftw, missed that already sometime!
>
> what is TreeSet?
The common data structure to implement ordered sets. Which one do you use?
--AA
_______________________________________________
Pharo-project mailing list
Pharo-project(a)lists.gforge.inria.fr
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
Dec. 23, 2009
Re: [Pharo-project] SUnit forked, gofer it
by Adrian Kuhn
Mariano Martinez Peck <marianopeck@...> writes:
> Can I add something to my dear santa list ??Many times, I have tests that
> freeze the image. And I don't known what test was the "guilty". I always hack
> the runCase to show in Transcript the test selector. Maybe adding a
> configurable logging option (enable/disable) may help.
Good point.
I plan to add a TestListener that can be used to do this.
--AA
--
4th Workshop on Dynamic Languages and Applications
Submit papers by March 31, 2010. http://bit.ly/dyla2010
Dec. 23, 2009
Re: [Pharo-project] Fwd: sort: and sortBlock:
by Nicolas Cellier
2009/12/23 Adrian Kuhn <akuhn(a)iam.unibe.ch>:
> Levente Uzonyi <leves@...> writes:
>
>> > what is TreeSet?
>>
>> The common data structure to implement ordered sets. Which one do you use?
>>
>> IMO ordered sets (where ordering means the same as in OrderedCollection)
>> should be implemented with a hashtable of linked elements.
That's probably why Stephane proposed a UniqueOrderedCollection: he
must have the expectation that this collection can be indexed in O(1)
Nicolas
>
> You're right.
>
> I confused ordered and sorted.
>
> --AA
>
>
> _______________________________________________
> Pharo-project mailing list
> Pharo-project(a)lists.gforge.inria.fr
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>
Dec. 23, 2009
Re: [Pharo-project] Fwd: hasEqualElements:
by Stéphane Ducasse
Excellent the Browser did not find it.
So now I understand where I got used to the idea of having the difference between
sameElements and sameStructuralElements.
Tx eliot I will read again in VW.
Stef
On Dec 23, 2009, at 7:10 PM, Eliot Miranda wrote:
>
>
> On Wed, Dec 23, 2009 at 1:08 AM, Nicolas Cellier <nicolas.cellier.aka.nice(a)gmail.com> wrote:
> 2009/12/23 Stéphane Ducasse <stephane.ducasse(a)inria.fr>:
> >
> >
> >
> > Hi
> >
> > (SortedCollection new addAll: #(9 2 3 ); yourself)
> > hasEqualElements: (OrderedCollection withAll: #(9 2 3)) -> false
> >
> > hasEqualElements: otherCollection
> > "Answer whether the receiver's size is the same as otherCollection's
> > size, and each of the receiver's elements equal the corresponding
> > element of otherCollection.
> > This should probably replace the current definition of #= ."
> >
> > | size |
> > (otherCollection isKindOf: SequenceableCollection) ifFalse: [^ false].
> > (size := self size) = otherCollection size ifFalse: [^ false].
> > 1 to: size do:
> > [:index |
> > (self at: index) = (otherCollection at: index) ifFalse: [^ false]].
> > ^ true
> >
> > For me the name of this method is misleading and I would really like to
> > renaming it
> > hasStructurallyEqualElements: and have new one doing hasEqualElements:
> >
> > What do you think?
> > I would like a beautiful world....
> >
> > Stef (freezing with a flu in my bed.... cool christmax).
> >
> >
>
> Didn't VW had a #isSameSquenceAs:
>
> Nicolas
>
>
> <methods>
> <class-id>Core.SequenceableCollection</class-id> <category>comparing</category>
>
> <body package="Collections-Abstract" selector="isSameSequenceAs:">isSameSequenceAs: otherCollection
> "Answer whether the receiver's size is the same as otherCollection's size, and each
> of the receiver's elements equal the corresponding element of otherCollection."
>
> | size |
> (size := self size) = otherCollection size ifFalse: [^false].
> 1 to: size do: [:index |
> (self at: index) = (otherCollection at: index) ifFalse: [^false]].
> ^true</body>
> </methods>
>
>
> i.e. trust the caller is providing a sequence and if otherCollection doesn't implement at: there will be a run-time error, hence any otherCollection isKindOf: SequenceableCollection is just wasted cycles.
> _______________________________________________
> Pharo-project mailing list
> Pharo-project(a)lists.gforge.inria.fr
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
Dec. 23, 2009
Re: [Pharo-project] Long method can not be compiled using #compile: aString
by Eliot Miranda
This results in an MNU instead of a warning about too many literals because
Encoder>>notify: does not report notifications if there is no requestor (if
compilation is non-interactive). A fix would be to integrate with Colin's
compiler error changes, e.g. by having Encoder hold onto its parser and
defer to Parser>>notify:. In the interim an adequate fix is
!Encoder methodsFor: 'error handling' stamp: 'eem 12/22/2009 11:57'!
notify: string
"Put a separate notifier on top of the requestor's window"
| req |
requestor == nil
ifTrue:
[super notify: string]
ifFalse:
[req := requestor.
self release.
req notify: string].
^false! !
With this fix a notifier opens stating:
"More than 256 literals referenced.
You must split or otherwise simplify this method.
The 257th literal is: 397
Select Proceed to continue, or close this window to cancel the operation."
Find file-in attached.
2009/12/21 Bart Gauquie <bart.gauquie(a)gmail.com>
> Hi,
>
> First load the latest http://www.squeaksource.com/MorphicsRecordNPlaypackage.
>
> Then for instance following fails if I evaluate it in a workspace:
>
> MorphicReplayDemoTest compile:
> 'testMethod
> self addMMEFrom: 1054@512 to: 1037@504.
> self addMMEFrom: 1037@504 to: 979@482.
> self addMMEFrom: 979@482 to: 905@464.
> self addMMEFrom: 905@464 to: 823@462.
> self addMMEFrom: 823@462 to: 745@482.
> self addMMEFrom: 745@482 to: 685@520.
> self addMMEFrom: 685@520 to: 651@559.
>
> self addMMEFrom: 651@559 to: 643@579.
> self addMMEFrom: 643@579 to: 653@579.
> self addMMEFrom: 653@579 to: 675@564.
> self addMMEFrom: 675@564 to: 810@452.
> self addMMEFrom: 810@452 to: 923@353.
> self addMMEFrom: 923@353 to: 1005@287.
> self addMMEFrom: 1005@287 to: 1052@257.
> self addMMEFrom: 1052@257 to: 1061@252.
> self addMMEFrom: 1061@252 to: 1059@259.
> self addMMEFrom: 1059@259 to: 998@314.
> self addMMEFrom: 998@314 to: 898@414.
> self addMMEFrom: 898@414 to: 827@502.
> self addMMEFrom: 827@502 to: 789@570.
> self addMMEFrom: 789@570 to: 792@610.
> self addMMEFrom: 792@610 to: 839@630.
> self addMMEFrom: 839@630 to: 929@620.
> self addMMEFrom: 929@620 to: 1039@579.
> self addMMEFrom: 1039@579 to: 1086@549.
> self addMMEFrom: 1086@549 to: 1158@447.
> self addMMEFrom: 1158@447 to: 1147@379.
> self addMMEFrom: 1147@379 to: 1066@377.
> self addMMEFrom: 1066@377 to: 930@416.
> self addMMEFrom: 930@416 to: 864@446.
> self addMMEFrom: 864@446 to: 734@530.
> self addMMEFrom: 734@530 to: 714@548.
> self addMMEFrom: 714@548 to: 734@546.
> self addMMEFrom: 734@546 to: 815@515.
> self addMMEFrom: 815@515 to: 875@491.
> self addMMEFrom: 875@491 to: 1065@407.
> self addMMEFrom: 1065@407 to: 1128@361.
> self addMMEFrom: 1128@361 to: 1142@343.
> self addMMEFrom: 1142@343 to: 1112@340.
> self addMMEFrom: 1112@340 to: 1064@349.
> self addMMEFrom: 1064@349 to: 864@416.
> self addMMEFrom: 864@416 to: 757@471.
> self addMMEFrom: 757@471 to: 705@511.
> self addMMEFrom: 705@511 to: 701@524.
> self addMMEFrom: 701@524 to: 743@528.
> self addMMEFrom: 743@528 to: 845@509.
> self addMMEFrom: 845@509 to: 914@493.
> self addMMEFrom: 914@493 to: 1101@446.
> self addMMEFrom: 1101@446 to: 1154@427.
> self addMMEFrom: 1154@427 to: 1163@423.
> self addMMEFrom: 1163@423 to: 1156@422.
> self addMMEFrom: 1156@422 to: 1129@424.
> self addMMEFrom: 1129@424 to: 923@449.
> self addMMEFrom: 923@449 to: 785@479.
> self addMMEFrom: 785@479 to: 689@503.
> self addMMEFrom: 689@503 to: 651@512.
> self addMMEFrom: 651@512 to: 650@512.
> self addMMEFrom: 650@512 to: 672@508.
> self addMMEFrom: 672@508 to: 773@492.
> self addMMEFrom: 773@492 to: 916@486.
> self addMMEFrom: 916@486 to: 1066@494.
> self addMMEFrom: 1066@494 to: 1175@508.
> self addMMEFrom: 1175@508 to: 1229@514.
> self addMMEFrom: 1229@514 to: 1232@514.
> self addMMEFrom: 1232@514 to: 1142@492.
> self addMMEFrom: 1142@492 to: 986@483.
> self addMMEFrom: 986@483 to: 810@498.
> self addMMEFrom: 810@498 to: 678@519.
> self addMMEFrom: 678@519 to: 637@523.
> self addMMEFrom: 637@523 to: 606@502.
> self addMMEFrom: 606@502 to: 659@442.
> self addMMEFrom: 659@442 to: 769@365.
> self addMMEFrom: 769@365 to: 911@316.
> self addMMEFrom: 911@316 to: 1052@318.
> self addMMEFrom: 1052@318 to: 1129@360.
> self addMMEFrom: 1129@360 to: 1153@403.
> self addMMEFrom: 1153@403 to: 1127@443.
> self addMMEFrom: 1127@443 to: 1015@491.
> self addMMEFrom: 1015@491 to: 850@536.
> self addMMEFrom: 850@536 to: 697@571.
> self addMMEFrom: 697@571 to: 642@578.
> self addMMEFrom: 642@578 to: 571@545.
> self addMMEFrom: 571@545 to: 604@485.
> self addMMEFrom: 604@485 to: 701@419.
> self addMMEFrom: 701@419 to: 843@383.
> self addMMEFrom: 843@383 to: 919@383.
> self addMMEFrom: 919@383 to: 1095@425.
> self addMMEFrom: 1095@425 to: 1126@443.
> self addMMEFrom: 1126@443 to: 1102@449.
> self addMMEFrom: 1102@449 to: 984@468.
> self addMMEFrom: 984@468 to: 829@509.
> self addMMEFrom: 829@509 to: 703@547.
> self addMMEFrom: 703@547 to: 637@555.
> self addMMEFrom: 637@555 to: 633@531.
> self addMMEFrom: 633@531 to: 694@468.
> self addMMEFrom: 694@468 to: 809@407.
> self addMMEFrom: 809@407 to: 946@380.
> self addMMEFrom: 946@380 to: 1011@378.
> self addMMEFrom: 1011@378 to: 1119@393.
> self addMMEFrom: 1119@393 to: 1110@393.
> self addMMEFrom: 1110@393 to: 1010@388.
> self addMMEFrom: 1010@388 to: 859@402.
> self addMMEFrom: 859@402 to: 727@433.
> self addMMEFrom: 727@433 to: 665@454.
> self addMMEFrom: 665@454 to: 663@461.
> self addMMEFrom: 663@461 to: 683@469.
> self addMMEFrom: 683@469 to: 837@492.
> self addMMEFrom: 837@492 to: 989@495.
> self addMMEFrom: 989@495 to: 1103@476.
> self addMMEFrom: 1103@476 to: 1153@433.
> self addMMEFrom: 1153@433 to: 1163@404.
> self addMMEFrom: 1163@404 to: 1147@307.
> self addMMEFrom: 1147@307 to: 1086@294.
> self addMMEFrom: 1086@294 to: 995@324.
> self addMMEFrom: 995@324 to: 935@357.
> self addMMEFrom: 935@357 to: 922@366.
> self addMMEFrom: 922@366 to: 925@370.
> self addMMEFrom: 925@370 to: 941@379.
> self addMMEFrom: 941@379 to: 974@389.
> self addMMEFrom: 974@389 to: 1010@399.
> self addMMEFrom: 1010@399 to: 1036@408.
> self addMMEFrom: 1036@408 to: 1052@414.
> self addMMEFrom: 1052@414 to: 1056@416.
> self addMMEFrom: 1056@416 to: 1061@418.
> self addMMEFrom: 1061@418 to: 1068@419.
> self addMMEFrom: 1068@419 to: 1078@418.
> self addMMEFrom: 1078@418 to: 1086@414.
> self addMMEFrom: 1086@414 to: 1089@411.
> self addMMEFrom: 1089@411 to: 1095@404.
> self addMMEFrom: 1095@404 to: 1097@404.
> self addMMEFrom: 1097@404 to: 1099@406.
> self addMMEFrom: 1099@406 to: 1100@407.
> self addMMEFrom: 1100@407 to: 1101@408.
> self addMMEFrom: 1101@408 to: 1101@409.
> self addMMEFrom: 1101@409 to: 1101@410.
> self addMMEFrom: 1101@410 to: 1102@411.
> self addMMEFrom: 1102@411 to: 1104@412.
> self addMMEFrom: 1104@412 to: 1106@411.
> self addMMEFrom: 1106@411 to: 1110@409.
> self addMMEFrom: 1110@409 to: 1112@408.
> self addMMEFrom: 1112@408 to: 1114@407.
> self addMMEFrom: 1114@407 to: 1115@408.
> self addMMEFrom: 1115@408 to: 1115@408.
> self addMMEFrom: 1115@408 to: 1115@407.
> MouseButtonEvent new.
> MouseButtonEvent new.
> self addMMEFrom: 1131@401 to: 1129@403.
> self addMMEFrom: 1129@403 to: 1121@408.
> self addMMEFrom: 1121@408 to: 1106@416.
> self addMMEFrom: 1106@416 to: 1084@426.
> self addMMEFrom: 1084@426 to: 1051@443.
> self addMMEFrom: 1051@443 to: 1019@470.
> self addMMEFrom: 1019@470 to: 995@504.
> self addMMEFrom: 995@504 to: 981@546.
> self addMMEFrom: 981@546 to: 980@592.
> self addMMEFrom: 980@592 to: 990@634.
> self addMMEFrom: 990@634 to: 1012@665.
> self addMMEFrom: 1012@665 to: 1043@680.
> self addMMEFrom: 1043@680 to: 1076@677.
> self addMMEFrom: 1076@677 to: 1132@658.
> self addMMEFrom: 1132@658 to: 1189@626.
> self addMMEFrom: 1189@626 to: 1205@606.
> self addMMEFrom: 1205@606 to: 1222@543.
> self addMMEFrom: 1222@543 to: 1219@504.
> self addMMEFrom: 1219@504 to: 1207@464.
> self addMMEFrom: 1207@464 to: 1190@425.
> self addMMEFrom: 1190@425 to: 1180@409.
> self addMMEFrom: 1180@409 to: 1140@387.
> self addMMEFrom: 1140@387 to: 1092@397.
> self addMMEFrom: 1092@397 to: 1044@424.
> self addMMEFrom: 1044@424 to: 1004@464.
> self addMMEFrom: 1004@464 to: 977@513.
> self addMMEFrom: 977@513 to: 965@565.
> self addMMEFrom: 965@565 to: 965@614.
> self addMMEFrom: 965@614 to: 977@656.
> self addMMEFrom: 977@656 to: 1001@689.
> self addMMEFrom: 1001@689 to: 1035@709.
> self addMMEFrom: 1035@709 to: 1067@714.
> self addMMEFrom: 1067@714 to: 1094@710.
> self addMMEFrom: 1094@710 to: 1219@673.
> self addMMEFrom: 1219@673 to: 1254@635.
> self addMMEFrom: 1254@635 to: 1269@594.
> self addMMEFrom: 1269@594 to: 1277@552.
> self addMMEFrom: 1277@552 to: 1277@530.
> self addMMEFrom: 1277@530 to: 1251@459.
> self addMMEFrom: 1251@459 to: 1215@418.
> self addMMEFrom: 1215@418 to: 1180@389.
> self addMMEFrom: 1180@389 to: 1143@377.
> self addMMEFrom: 1143@377 to: 1092@379.
> self addMMEFrom: 1092@379 to: 1041@397.
> self addMMEFrom: 1041@397 to: 1019@410.
> self addMMEFrom: 1019@410 to: 972@460.
> self addMMEFrom: 972@460 to: 955@499.
> self addMMEFrom: 955@499 to: 951@541.
> self addMMEFrom: 951@541 to: 954@580.
> self addMMEFrom: 954@580 to: 960@597.
> self addMMEFrom: 960@597 to: 991@639.
> self addMMEFrom: 991@639 to: 1027@657.
> self addMMEFrom: 1027@657 to: 1066@666.
> self addMMEFrom: 1066@666 to: 1122@665.
> self addMMEFrom: 1122@665 to: 1199@651.
> self addMMEFrom: 1199@651 to: 1245@625.
> self addMMEFrom: 1245@625 to: 1270@596.
> self addMMEFrom: 1270@596 to: 1284@565.
> self addMMEFrom: 1284@565 to: 1287@528.
> self addMMEFrom: 1287@528 to: 1275@486.
> self addMMEFrom: 1275@486 to: 1242@445.
> self addMMEFrom: 1242@445 to: 1204@412.
> self addMMEFrom: 1204@412 to: 1171@390.
> self addMMEFrom: 1171@390 to: 1126@383.
> self addMMEFrom: 1126@383 to: 1083@394.
> self addMMEFrom: 1083@394 to: 1040@420.
> self addMMEFrom: 1040@420 to: 1025@438.
> self addMMEFrom: 1025@438 to: 996@506.
> self addMMEFrom: 996@506 to: 992@555.
> self addMMEFrom: 992@555 to: 999@596.
> self addMMEFrom: 999@596 to: 1015@629.
> self addMMEFrom: 1015@629 to: 1027@641.
> self addMMEFrom: 1027@641 to: 1068@658.
> self addMMEFrom: 1068@658 to: 1115@655.
> self addMMEFrom: 1115@655 to: 1184@640.
> self addMMEFrom: 1184@640 to: 1234@616.
> self addMMEFrom: 1234@616 to: 1266@589.
> self addMMEFrom: 1266@589 to: 1290@555.
> self addMMEFrom: 1290@555 to: 1301@518.
> self addMMEFrom: 1301@518 to: 1296@474.
> self addMMEFrom: 1296@474 to: 1267@430.
> self addMMEFrom: 1267@430 to: 1223@392.
> self addMMEFrom: 1223@392 to: 1187@370.
> self addMMEFrom: 1187@370 to: 1172@366.
> self addMMEFrom: 1172@366 to: 1115@375.
> self addMMEFrom: 1115@375 to: 1076@397.
> self addMMEFrom: 1076@397 to: 1046@429.
> self addMMEFrom: 1046@429 to: 1027@468.
> self addMMEFrom: 1027@468 to: 1022@489.
> self addMMEFrom: 1022@489 to: 1023@545.
> self addMMEFrom: 1023@545 to: 1033@567.
> self addMMEFrom: 1033@567 to: 1061@590.
> self addMMEFrom: 1061@590 to: 1104@603.
> self addMMEFrom: 1104@603 to: 1165@605.
> self addMMEFrom: 1165@605 to: 1220@593.
> self addMMEFrom: 1220@593 to: 1258@571.
> self addMMEFrom: 1258@571 to: 1284@543.
> self addMMEFrom: 1284@543 to: 1298@509.
> self addMMEFrom: 1298@509 to: 1299@466.
> self addMMEFrom: 1299@466 to: 1276@414.
> self addMMEFrom: 1276@414 to: 1255@390.
> self addMMEFrom: 1255@390 to: 1189@340.
> self addMMEFrom: 1189@340 to: 1148@334.
> self addMMEFrom: 1148@334 to: 1094@346.
> self addMMEFrom: 1094@346 to: 1051@373.
> self addMMEFrom: 1051@373 to: 1021@412.
> self addMMEFrom: 1021@412 to: 1006@457.
> self addMMEFrom: 1006@457 to: 1002@506.
> self addMMEFrom: 1002@506 to: 1006@557.
> self addMMEFrom: 1006@557 to: 1012@581.
> self addMMEFrom: 1012@581 to: 1041@637.
> self addMMEFrom: 1041@637 to: 1070@657.
> self addMMEFrom: 1070@657 to: 1127@660.
> self addMMEFrom: 1127@660 to: 1209@644.
> self addMMEFrom: 1209@644 to: 1234@630.
> self addMMEFrom: 1234@630 to: 1284@569.
> self addMMEFrom: 1284@569 to: 1302@521.
> self addMMEFrom: 1302@521 to: 1304@466.
> self addMMEFrom: 1304@466 to: 1286@410.
> self addMMEFrom: 1286@410 to: 1247@369.
> self addMMEFrom: 1247@369 to: 1208@347.
> self addMMEFrom: 1208@347 to: 1196@342.
> self addMMEFrom: 1196@342 to: 1170@346.
> self addMMEFrom: 1170@346 to: 1151@356.
> self addMMEFrom: 1151@356 to: 1137@363.
> self addMMEFrom: 1137@363 to: 1133@366.
> self addMMEFrom: 1133@366 to: 1133@366.
> self addMMEFrom: 1133@366 to: 1135@372.
> self addMMEFrom: 1135@372 to: 1133@381.
> self addMMEFrom: 1133@381 to: 1128@393.
> self addMMEFrom: 1128@393 to: 1126@399.
> self addMMEFrom: 1126@399 to: 1125@401.
> self addMMEFrom: 1125@401 to: 1125@401.
> self addMMEFrom: 1125@401 to: 1125@400.
> self addMMEFrom: 1125@400 to: 1124@401.
> self addMMEFrom: 1124@401 to: 1124@403.
> self addMMEFrom: 1124@403 to: 1124@404.
> self addMMEFrom: 1124@404 to: 1124@405.
> self addMMEFrom: 1124@405 to: 1124@404.
> MouseButtonEvent new.
> MouseButtonEvent new.
> '
>
> These are autogenerated contents I want to export as a test case. The
> strange thing is that, if I manually create the testMethod using the system
> browser, and paste the content in it; it works fine.
>
> Kind Regards,
>
> Bart
>
> 2009/12/21 Eliot Miranda <eliot.miranda(a)gmail.com>
>
> Hi Bart,
>>
>> I still want to take a look at this specific case because the compiler
>> should produce a proper error message, not an internal error. So could you
>> please package it up as a reproducible case, or email me the full string
>> that fails?
>>
>> TIA
>>
>>
>> 2009/12/20 Bart Gauquie <bart.gauquie(a)gmail.com>
>>
>>> Dear all,
>>>
>>> I'm developing code which generates a method content, compiles it and
>>> adds it to an existing class.
>>> I compile the message using #compile: message:
>>> for instance:
>>>
>>> MorphicReplayDemoTest compile: '
>>> testMethod
>>> self addMMEFrom: 1054@512 to: 1037@504.
>>> self addMMEFrom: 651@559 to: 643@579.
>>> '.
>>>
>>> This works fine. However if the contents of the method is too long; for
>>> instance:
>>> if the self addMMEFrom: 1054@512 to: 1037@504. is repeated around 250
>>> times; I get following error (see stack below)
>>>
>>> The strange thing is that if I manually add that method using the editor
>>> and paste it, it works just fine. I even tested up to 5000 lines of code;
>>> its slow, but its working.
>>>
>>> Any ideas how to solve this?
>>>
>>> Thanks,
>>>
>>> Bart
>>>
>>> I'm using Pharo 1.0 rc update: 10502; using Ubuntu 9.10, using vm
>>> pharo-vm-0.15.2f-linux.
>>>
>>> THERE_BE_DRAGONS_HERE
>>> MessageNotUnderstood: receiver of "<" is nil
>>> 20 December 2009 8:17:14 pm
>>>
>>> VM: unix - i686 - linux-gnu - Pharo0.1 of 16 May 2008 [latest update:
>>> #10074]
>>> Image: PharoCore1.0rc1 [Latest update: #10502]
>>>
>>> SecurityManager state:
>>> Restricted: false
>>> FileAccess: true
>>> SocketAccess: true
>>> Working Dir /home/gauquiebart/Smalltalk/Pharo/Images/Pharo 1.0 Playground
>>> Image
>>> Trusted Dir /home/gauquiebart/Smalltalk/Pharo/Images/Pharo 1.0 Playground
>>> Image/secure
>>> Untrusted Dir /home/gauquiebart/Smalltalk/Pharo/Images/Pharo 1.0
>>> Playground Image/My Squeak
>>>
>>> UndefinedObject(Object)>>doesNotUnderstand: #<
>>> Receiver: nil
>>> Arguments and temporary variables:
>>> aMessage: < 0
>>> exception: MessageNotUnderstood: receiver of "<" is nil
>>> resumeValue: nil
>>> Receiver's instance variables:
>>> nil
>>>
>>> EncoderForV3PlusClosures(EncoderForV3)>>genPushLiteral:
>>> Receiver: {an EncoderForV3PlusClosures}
>>> Arguments and temporary variables:
>>> literalIndex: nil
>>> Receiver's instance variables:
>>> comment: nil
>>> pc: nil
>>> scopeTable: a Dictionary('false'->{false} 'nil'->{nil}
>>> 'recording'->{recording}...etc...
>>> nTemps: 0
>>> supered: false
>>> requestor: nil
>>> class: MorphicReplayDemoTest
>>> selector: #testMethod
>>> literalStream: a WriteStream {#addMMEFrom:to:. 1054. 512. 1037. 504. 979.
>>> 482. ...etc...
>>> selectorSet: a Dictionary(#*->{*} #+->{+} #-->{-} #/->{/} #'//'->{//}
>>> #<->{<} #...etc...
>>> litIndSet: a
>>> Dictionary(#MouseButtonEvent->MouseButtonEvent->{MouseButtonEvent}...etc...
>>> litSet: a LiteralDictionary(size 402)
>>> sourceRanges: a Dictionary(size 853)
>>> globalSourceRanges: an OrderedCollection({'MouseButtonEvent'. (5763 to:
>>> 5778). ...etc...
>>> addedSelectorAndMethodClassLiterals: false
>>> stream: {an EncoderForV3PlusClosures}
>>> position: 0
>>> rootNode: testMethod
>>> self addMMEFrom: 1054 @ 512 to: 1037 @ 504.
>>> self addMMEF...etc...
>>> blockExtentsToLocals: nil
>>>
>>>
>>> EncoderForV3PlusClosures(BytecodeEncoder)>>sizeOpcodeSelector:withArguments:
>>> Receiver: {an EncoderForV3PlusClosures}
>>> Arguments and temporary variables:
>>> genSelector: #genPushLiteral:
>>> args: #(nil)
>>> Receiver's instance variables:
>>> comment: nil
>>> pc: nil
>>> scopeTable: a Dictionary('false'->{false} 'nil'->{nil}
>>> 'recording'->{recording}...etc...
>>> nTemps: 0
>>> supered: false
>>> requestor: nil
>>> class: MorphicReplayDemoTest
>>> selector: #testMethod
>>> literalStream: a WriteStream {#addMMEFrom:to:. 1054. 512. 1037. 504. 979.
>>> 482. ...etc...
>>> selectorSet: a Dictionary(#*->{*} #+->{+} #-->{-} #/->{/} #'//'->{//}
>>> #<->{<} #...etc...
>>> litIndSet: a
>>> Dictionary(#MouseButtonEvent->MouseButtonEvent->{MouseButtonEvent}...etc...
>>> litSet: a LiteralDictionary(size 402)
>>> sourceRanges: a Dictionary(size 853)
>>> globalSourceRanges: an OrderedCollection({'MouseButtonEvent'. (5763 to:
>>> 5778). ...etc...
>>> addedSelectorAndMethodClassLiterals: false
>>> stream: {an EncoderForV3PlusClosures}
>>> position: 0
>>> rootNode: testMethod
>>> self addMMEFrom: 1054 @ 512 to: 1037 @ 504.
>>> self addMMEF...etc...
>>> blockExtentsToLocals: nil
>>>
>>> EncoderForV3PlusClosures(BytecodeEncoder)>>sizePushLiteral:
>>> Receiver: {an EncoderForV3PlusClosures}
>>> Arguments and temporary variables:
>>> literalIndex: nil
>>> Receiver's instance variables:
>>> comment: nil
>>> pc: nil
>>> scopeTable: a Dictionary('false'->{false} 'nil'->{nil}
>>> 'recording'->{recording}...etc...
>>> nTemps: 0
>>> supered: false
>>> requestor: nil
>>> class: MorphicReplayDemoTest
>>> selector: #testMethod
>>> literalStream: a WriteStream {#addMMEFrom:to:. 1054. 512. 1037. 504. 979.
>>> 482. ...etc...
>>> selectorSet: a Dictionary(#*->{*} #+->{+} #-->{-} #/->{/} #'//'->{//}
>>> #<->{<} #...etc...
>>> litIndSet: a
>>> Dictionary(#MouseButtonEvent->MouseButtonEvent->{MouseButtonEvent}...etc...
>>> litSet: a LiteralDictionary(size 402)
>>> sourceRanges: a Dictionary(size 853)
>>> globalSourceRanges: an OrderedCollection({'MouseButtonEvent'. (5763 to:
>>> 5778). ...etc...
>>> addedSelectorAndMethodClassLiterals: false
>>> stream: {an EncoderForV3PlusClosures}
>>> position: 0
>>> rootNode: testMethod
>>> self addMMEFrom: 1054 @ 512 to: 1037 @ 504.
>>> self addMMEF...etc...
>>> blockExtentsToLocals: nil
>>>
>>> LiteralNode>>sizeCodeForValue:
>>> Receiver: {397}
>>> Arguments and temporary variables:
>>> encoder: {an EncoderForV3PlusClosures}
>>> Receiver's instance variables:
>>> comment: nil
>>> pc: nil
>>> key: 397
>>> code: -3
>>> index: nil
>>>
>>> [] in MessageNode>>sizeCodeForValue:
>>> Receiver: {1092 @ 397}
>>> Arguments and temporary variables:
>>> <<error during printing>
>>> Receiver's instance variables:
>>> comment: nil
>>> pc: nil
>>> receiver: {1092}
>>> selector: {@}
>>> precedence: 2
>>> special: 0
>>> arguments: #({397})
>>> sizes: #(nil)
>>> equalNode: nil
>>> caseErrorNode: nil
>>>
>>> Array(SequenceableCollection)>>collect:
>>> Receiver: #({397})
>>> Arguments and temporary variables:
>>> aBlock: [closure] in MessageNode>>sizeCodeForValue:
>>> newCollection: #(nil)
>>> index: 1
>>> indexLimiT: 1
>>> Receiver's instance variables:
>>> #({397})
>>>
>>> MessageNode>>sizeCodeForValue:
>>> Receiver: {1092 @ 397}
>>> Arguments and temporary variables:
>>> <<error during printing>
>>> Receiver's instance variables:
>>> comment: nil
>>> pc: nil
>>> receiver: {1092}
>>> selector: {@}
>>> precedence: 2
>>> special: 0
>>> arguments: #({397})
>>> sizes: #(nil)
>>> equalNode: nil
>>> caseErrorNode: nil
>>>
>>> [] in MessageNode>>sizeCodeForValue:
>>> Receiver: {self addMMEFrom: 1140 @ 387 to: 1092 @ 397}
>>> Arguments and temporary variables:
>>> <<error during printing>
>>> Receiver's instance variables:
>>> comment: nil
>>> pc: nil
>>> receiver: {self}
>>> selector: {addMMEFrom:to:}
>>> precedence: 3
>>> special: 0
>>> arguments: an OrderedCollection({1140 @ 387} {1092 @ 397})
>>> sizes: #(nil nil)
>>> equalNode: nil
>>> caseErrorNode: nil
>>>
>>> OrderedCollection>>collect:
>>> Receiver: an OrderedCollection({1140 @ 387} {1092 @ 397})
>>> Arguments and temporary variables:
>>> aBlock: [closure] in MessageNode>>sizeCodeForValue:
>>> newCollection: an OrderedCollection(7)
>>> index: 4
>>> Receiver's instance variables:
>>> array: an Array(nil nil {1140 @ 387} {1092 @ 397} nil nil nil nil nil
>>> nil)
>>> firstIndex: 3
>>> lastIndex: 4
>>>
>>> MessageNode>>sizeCodeForValue:
>>> Receiver: {self addMMEFrom: 1140 @ 387 to: 1092 @ 397}
>>> Arguments and temporary variables:
>>> <<error during printing>
>>> Receiver's instance variables:
>>> comment: nil
>>> pc: nil
>>> receiver: {self}
>>> selector: {addMMEFrom:to:}
>>> precedence: 3
>>> special: 0
>>> arguments: an OrderedCollection({1140 @ 387} {1092 @ 397})
>>> sizes: #(nil nil)
>>> equalNode: nil
>>> caseErrorNode: nil
>>>
>>> MessageNode(ParseNode)>>sizeCodeForEffect:
>>> Receiver: {self addMMEFrom: 1140 @ 387 to: 1092 @ 397}
>>> Arguments and temporary variables:
>>> encoder: {an EncoderForV3PlusClosures}
>>> Receiver's instance variables:
>>> comment: nil
>>> pc: nil
>>> receiver: {self}
>>> selector: {addMMEFrom:to:}
>>> precedence: 3
>>> special: 0
>>> arguments: an OrderedCollection({1140 @ 387} {1092 @ 397})
>>> sizes: #(nil nil)
>>> equalNode: nil
>>> caseErrorNode: nil
>>>
>>> MessageNode>>sizeCodeForEffect:
>>> Receiver: {self addMMEFrom: 1140 @ 387 to: 1092 @ 397}
>>> Arguments and temporary variables:
>>> encoder: {an EncoderForV3PlusClosures}
>>> Receiver's instance variables:
>>> comment: nil
>>> pc: nil
>>> receiver: {self}
>>> selector: {addMMEFrom:to:}
>>> precedence: 3
>>> special: 0
>>> arguments: an OrderedCollection({1140 @ 387} {1092 @ 397})
>>> sizes: #(nil nil)
>>> equalNode: nil
>>> caseErrorNode: nil
>>>
>>> BlockNode>>sizeCodeExceptLast:
>>> Receiver: {[self addMMEFrom: 1054 @ 512 to: 1037 @ 504.
>>> self addMMEFrom: 1037 @ 504 to: 979 @ 482.
>>> ...etc...
>>> Arguments and temporary variables:
>>> encoder: {an EncoderForV3PlusClosures}
>>> codeSize: 2564
>>> i: 169
>>> statement: {self addMMEFrom: 1140 @ 387 to: 1092 @ 397}
>>> iLimiT: 287
>>> Receiver's instance variables:
>>> comment: nil
>>> pc: nil
>>> arguments: #()
>>> statements: an OrderedCollection({self addMMEFrom: 1054 @ 512 to: 1037 @
>>> 504} {...etc...
>>> returns: true
>>> nArgsNode: nil
>>> size: nil
>>> remoteCopyNode: nil
>>> temporaries: an OrderedCollection()
>>> optimized: false
>>> actualScopeIfOptimized: nil
>>> blockExtent: (0 to: 2)
>>> remoteTempNode: nil
>>> copiedValues: nil
>>> closureCreationNode: nil
>>> startOfLastStatement: 11519
>>>
>>> BlockNode>>sizeCodeForEvaluatedValue:
>>> Receiver: {[self addMMEFrom: 1054 @ 512 to: 1037 @ 504.
>>> self addMMEFrom: 1037 @ 504 to: 979 @ 482.
>>> ...etc...
>>> Arguments and temporary variables:
>>> encoder: {an EncoderForV3PlusClosures}
>>> Receiver's instance variables:
>>> comment: nil
>>> pc: nil
>>> arguments: #()
>>> statements: an OrderedCollection({self addMMEFrom: 1054 @ 512 to: 1037 @
>>> 504} {...etc...
>>> returns: true
>>> nArgsNode: nil
>>> size: nil
>>> remoteCopyNode: nil
>>> temporaries: an OrderedCollection()
>>> optimized: false
>>> actualScopeIfOptimized: nil
>>> blockExtent: (0 to: 2)
>>> remoteTempNode: nil
>>> copiedValues: nil
>>> closureCreationNode: nil
>>> startOfLastStatement: 11519
>>>
>>> BytecodeAgnosticMethodNode>>generate:
>>> Receiver: testMethod
>>> self addMMEFrom: 1054 @ 512 to: 1037 @ 504.
>>> self addMMEFrom: 1037 @ 504 to: 9...etc...
>>> Arguments and temporary variables:
>>> trailer: #(0 0 0 0)
>>> primErrNode: nil
>>> blkSize: nil
>>> nLits: nil
>>> literals: nil
>>> stack: nil
>>> method: nil
>>> locals: nil
>>> lit: nil
>>> Receiver's instance variables:
>>> comment: nil
>>> pc: nil
>>> selectorOrFalse: #testMethod
>>> precedence: 1
>>> arguments: #()
>>> block: {[self addMMEFrom: 1054 @ 512 to: 1037 @ 504.
>>> self addMMEFrom: 1037 @ 5...etc...
>>> primitive: 0
>>> encoder: {an EncoderForV3PlusClosures}
>>> temporaries: #()
>>> properties: an AdditionalMethodState
>>> sourceText: 'testMethod
>>> self addMMEFrom: 1054@512 to: 1037@504.
>>> self addMMEFr...etc...
>>> locationCounter: 3
>>> localsPool: an IdentitySet()
>>>
>>> CompiledMethodWithNode class>>generateMethodFromNode:trailer:
>>> Receiver: CompiledMethodWithNode
>>> Arguments and temporary variables:
>>> aMethodNode: testMethod
>>> self addMMEFrom: 1054 @ 512 to: 1037 @ 504.
>>> self addM...etc...
>>> bytes: #(0 0 0 0)
>>> Receiver's instance variables:
>>> superclass: Object
>>> methodDict: a MethodDictionary(#method->a CompiledMethod(650:
>>> CompiledMethodWit...etc...
>>> format: 134
>>> instanceVariables: #('node' 'method')
>>> organization: ('accessing' method node selector)
>>> ('private' method: node:)
>>>
>>> subclasses: nil
>>> name: #CompiledMethodWithNode
>>> classPool: nil
>>> sharedPools: nil
>>> environment: Smalltalk
>>> category: #'Compiler-Support'
>>> traitComposition: nil
>>> localSelectors: nil
>>>
>>> MorphicReplayDemoTest
>>> class(Behavior)>>compile:classified:notifying:trailer:ifFail:
>>> Receiver: MorphicReplayDemoTest
>>> Arguments and temporary variables:
>>> code: 'testMethod
>>> self addMMEFrom: 1054@512 to: 1037@504.
>>> self addMMEFrom: 10...etc...
>>> category: #'as yet unclassified'
>>> requestor: nil
>>> bytes: #(0 0 0 0)
>>> failBlock: [closure] in MorphicReplayDemoTest
>>> class(ClassDescription)>>compile:...etc...
>>> methodNode: testMethod
>>> self addMMEFrom: 1054 @ 512 to: 1037 @ 504.
>>> self addMM...etc...
>>> Receiver's instance variables:
>>> superclass: AbstractReplayTestCase
>>> methodDict: a MethodDictionary(#testMethod->a CompiledMethod(1191:
>>> MorphicRepla...etc...
>>> format: 134
>>> instanceVariables: nil
>>> organization: ('tests' testMethod)
>>>
>>> subclasses: nil
>>> name: #MorphicReplayDemoTest
>>> classPool: nil
>>> sharedPools: nil
>>> environment: Smalltalk
>>> category: #'MorphicsRecordNPlay-Model'
>>> traitComposition: nil
>>> localSelectors: nil
>>> history: a Dictionary(#errors->a Set() #failures->a Set() #passed->a
>>> Set(#testM...etc...
>>>
>>> MorphicReplayDemoTest
>>> class(ClassDescription)>>compile:classified:withStamp:notifying:logSource:
>>> Receiver: MorphicReplayDemoTest
>>> Arguments and temporary variables:
>>> text: 'testMethod
>>> self addMMEFrom: 1054@512 to: 1037@504.
>>> self addMMEFrom: 10...etc...
>>> category: #'as yet unclassified'
>>> changeStamp: 'BartGauquie 12/20/2009 20:17'
>>> requestor: nil
>>> logSource: true
>>> methodAndNode: nil
>>> Receiver's instance variables:
>>> superclass: AbstractReplayTestCase
>>> methodDict: a MethodDictionary(#testMethod->a CompiledMethod(1191:
>>> MorphicRepla...etc...
>>> format: 134
>>> instanceVariables: nil
>>> organization: ('tests' testMethod)
>>>
>>> subclasses: nil
>>> name: #MorphicReplayDemoTest
>>> classPool: nil
>>> sharedPools: nil
>>> environment: Smalltalk
>>> category: #'MorphicsRecordNPlay-Model'
>>> traitComposition: nil
>>> localSelectors: nil
>>> history: a Dictionary(#errors->a Set() #failures->a Set() #passed->a
>>> Set(#testM...etc...
>>>
>>> MorphicReplayDemoTest
>>> class(ClassDescription)>>compile:classified:withStamp:notifying:
>>> Receiver: MorphicReplayDemoTest
>>> Arguments and temporary variables:
>>> text: 'testMethod
>>> self addMMEFrom: 1054@512 to: 1037@504.
>>> self addMMEFrom: 10...etc...
>>> category: #'as yet unclassified'
>>> changeStamp: 'BartGauquie 12/20/2009 20:17'
>>> requestor: nil
>>> Receiver's instance variables:
>>> superclass: AbstractReplayTestCase
>>> methodDict: a MethodDictionary(#testMethod->a CompiledMethod(1191:
>>> MorphicRepla...etc...
>>> format: 134
>>> instanceVariables: nil
>>> organization: ('tests' testMethod)
>>>
>>> subclasses: nil
>>> name: #MorphicReplayDemoTest
>>> classPool: nil
>>> sharedPools: nil
>>> environment: Smalltalk
>>> category: #'MorphicsRecordNPlay-Model'
>>> traitComposition: nil
>>> localSelectors: nil
>>> history: a Dictionary(#errors->a Set() #failures->a Set() #passed->a
>>> Set(#testM...etc...
>>>
>>> MorphicReplayDemoTest
>>> class(ClassDescription)>>compile:classified:notifying:
>>> Receiver: MorphicReplayDemoTest
>>> Arguments and temporary variables:
>>> text: 'testMethod
>>> self addMMEFrom: 1054@512 to: 1037@504.
>>> self addMMEFrom: 10...etc...
>>> category: #'as yet unclassified'
>>> requestor: nil
>>> stamp: 'BartGauquie 12/20/2009 20:17'
>>> Receiver's instance variables:
>>> superclass: AbstractReplayTestCase
>>> methodDict: a MethodDictionary(#testMethod->a CompiledMethod(1191:
>>> MorphicRepla...etc...
>>> format: 134
>>> instanceVariables: nil
>>> organization: ('tests' testMethod)
>>>
>>> subclasses: nil
>>> name: #MorphicReplayDemoTest
>>> classPool: nil
>>> sharedPools: nil
>>> environment: Smalltalk
>>> category: #'MorphicsRecordNPlay-Model'
>>> traitComposition: nil
>>> localSelectors: nil
>>> history: a Dictionary(#errors->a Set() #failures->a Set() #passed->a
>>> Set(#testM...etc...
>>>
>>> MorphicReplayDemoTest class(ClassDescription)>>compile:notifying:
>>> Receiver: MorphicReplayDemoTest
>>> Arguments and temporary variables:
>>> code: 'testMethod
>>> self addMMEFrom: 1054@512 to: 1037@504.
>>> self addMMEFrom: 10...etc...
>>> requestor: nil
>>> Receiver's instance variables:
>>> superclass: AbstractReplayTestCase
>>> methodDict: a MethodDictionary(#testMethod->a CompiledMethod(1191:
>>> MorphicRepla...etc...
>>> format: 134
>>> instanceVariables: nil
>>> organization: ('tests' testMethod)
>>>
>>> subclasses: nil
>>> name: #MorphicReplayDemoTest
>>> classPool: nil
>>> sharedPools: nil
>>> environment: Smalltalk
>>> category: #'MorphicsRecordNPlay-Model'
>>> traitComposition: nil
>>> localSelectors: nil
>>> history: a Dictionary(#errors->a Set() #failures->a Set() #passed->a
>>> Set(#testM...etc...
>>>
>>> MorphicReplayDemoTest class(Behavior)>>compile:
>>> Receiver: MorphicReplayDemoTest
>>> Arguments and temporary variables:
>>> code: 'testMethod
>>> self addMMEFrom: 1054@512 to: 1037@504.
>>> self addMMEFrom: 10...etc...
>>> Receiver's instance variables:
>>> superclass: AbstractReplayTestCase
>>> methodDict: a MethodDictionary(#testMethod->a CompiledMethod(1191:
>>> MorphicRepla...etc...
>>> format: 134
>>> instanceVariables: nil
>>> organization: ('tests' testMethod)
>>>
>>> subclasses: nil
>>> name: #MorphicReplayDemoTest
>>> classPool: nil
>>> sharedPools: nil
>>> environment: Smalltalk
>>> category: #'MorphicsRecordNPlay-Model'
>>> traitComposition: nil
>>> localSelectors: nil
>>> history: a Dictionary(#errors->a Set() #failures->a Set() #passed->a
>>> Set(#testM...etc...
>>>
>>> ByteString>>DoIt
>>> Receiver: 'testMethod
>>> self addMMEFrom: 1054@512 to: 1037@504.
>>> self addMMEFrom: 1037@504 to: 979@48...etc...
>>> Arguments and temporary variables:
>>>
>>> Receiver's instance variables:
>>> 'testMethod
>>> self addMMEFrom: 1054@512 to: 1037@504.
>>> self addMMEFrom: 1037@504 to: 979@48...etc...
>>>
>>> Compiler>>evaluate:in:to:notifying:ifFail:logged:
>>> Receiver: a Compiler
>>> Arguments and temporary variables:
>>> textOrStream: a ReadWriteStream 'MorphicReplayDemoTest
>>> compile: self.'
>>> aContext: nil
>>> receiver: 'testMethod
>>> self addMMEFrom: 1054@512 to: 1037@504.
>>> self addMMEFrom...etc...
>>> aRequestor: a TextMorphEditor
>>> failBlock: [closure] in [] in
>>> TextMorphEditor(ParagraphEditor)>>evaluateSelecti...etc...
>>> logFlag: true
>>> methodNode: DoIt
>>> ^ MorphicReplayDemoTest compile: self
>>> method: a CompiledMethod(2378: ByteString>>DoIt)
>>> value: nil
>>> toLog: nil
>>> itsSelection: nil
>>> itsSelectionString: nil
>>> Receiver's instance variables:
>>> sourceStream: a ReadWriteStream 'MorphicReplayDemoTest
>>> compile: self.'
>>> requestor: a TextMorphEditor
>>> class: ByteString
>>> category: nil
>>> context: nil
>>> parser: a Parser
>>>
>>> [] in TextMorphEditor(ParagraphEditor)>>evaluateSelection
>>> Receiver: a TextMorphEditor
>>> Arguments and temporary variables:
>>> rcvr: 'testMethod
>>> self addMMEFrom: 1054@512 to: 1037@504.
>>> self addMMEFrom: 10...etc...
>>> ctxt: nil
>>> Receiver's instance variables:
>>> model: a NewInspector
>>> paragraph: a MultiNewParagraph
>>> startBlock: a CharacterBlock with index 39 and rectangle 103@16 corner:
>>> 103@32
>>> ...etc...
>>> stopBlock: a CharacterBlock with index 1 and character $M and rectangle
>>> 0@0 cor...etc...
>>> beginTypeInBlock: nil
>>> emphasisHere: an Array(a TextFontChange font: 2)
>>> initialText: a Text for 'MorphicReplayDemoTest
>>> compile: self
>>> '
>>> selectionShowing: false
>>> otherInterval: (38 to: 38)
>>> lastParentLocation: nil
>>> morph: a TextMorphForEditView(3730)
>>> oldInterval: nil
>>> pivotBlock: nil
>>>
>>> BlockClosure>>on:do:
>>> Receiver: [closure] in
>>> TextMorphEditor(ParagraphEditor)>>evaluateSelection
>>> Arguments and temporary variables:
>>> exception: OutOfScopeNotification
>>> handlerAction: [closure] in
>>> TextMorphEditor(ParagraphEditor)>>evaluateSelection...etc...
>>> handlerActive: true
>>> Receiver's instance variables:
>>> outerContext: TextMorphEditor(ParagraphEditor)>>evaluateSelection
>>> startpc: 116
>>> numArgs: 0
>>>
>>> TextMorphEditor(ParagraphEditor)>>evaluateSelection
>>> Receiver: a TextMorphEditor
>>> Arguments and temporary variables:
>>> result: nil
>>> rcvr: 'testMethod
>>> self addMMEFrom: 1054@512 to: 1037@504.
>>> self addMMEFrom: 10...etc...
>>> ctxt: nil
>>> Receiver's instance variables:
>>> model: a NewInspector
>>> paragraph: a MultiNewParagraph
>>> startBlock: a CharacterBlock with index 39 and rectangle 103@16 corner:
>>> 103@32
>>> ...etc...
>>> stopBlock: a CharacterBlock with index 1 and character $M and rectangle
>>> 0@0 cor...etc...
>>> beginTypeInBlock: nil
>>> emphasisHere: an Array(a TextFontChange font: 2)
>>> initialText: a Text for 'MorphicReplayDemoTest
>>> compile: self
>>> '
>>> selectionShowing: false
>>> otherInterval: (38 to: 38)
>>> lastParentLocation: nil
>>> morph: a TextMorphForEditView(3730)
>>> oldInterval: nil
>>> pivotBlock: nil
>>>
>>> TextMorphEditor(ParagraphEditor)>>doIt
>>> Receiver: a TextMorphEditor
>>> Arguments and temporary variables:
>>>
>>> Receiver's instance variables:
>>> model: a NewInspector
>>> paragraph: a MultiNewParagraph
>>> startBlock: a CharacterBlock with index 39 and rectangle 103@16 corner:
>>> 103@32
>>> ...etc...
>>> stopBlock: a CharacterBlock with index 1 and character $M and rectangle
>>> 0@0 cor...etc...
>>> beginTypeInBlock: nil
>>> emphasisHere: an Array(a TextFontChange font: 2)
>>> initialText: a Text for 'MorphicReplayDemoTest
>>> compile: self
>>> '
>>> selectionShowing: false
>>> otherInterval: (38 to: 38)
>>> lastParentLocation: nil
>>> morph: a TextMorphForEditView(3730)
>>> oldInterval: nil
>>> pivotBlock: nil
>>>
>>> [] in TextMorphEditor(ParagraphEditor)>>doIt:
>>> Receiver: a TextMorphEditor
>>> Arguments and temporary variables:
>>>
>>> Receiver's instance variables:
>>> model: a NewInspector
>>> paragraph: a MultiNewParagraph
>>> startBlock: a CharacterBlock with index 39 and rectangle 103@16 corner:
>>> 103@32
>>> ...etc...
>>> stopBlock: a CharacterBlock with index 1 and character $M and rectangle
>>> 0@0 cor...etc...
>>> beginTypeInBlock: nil
>>> emphasisHere: an Array(a TextFontChange font: 2)
>>> initialText: a Text for 'MorphicReplayDemoTest
>>> compile: self
>>> '
>>> selectionShowing: false
>>> otherInterval: (38 to: 38)
>>> lastParentLocation: nil
>>> morph: a TextMorphForEditView(3730)
>>> oldInterval: nil
>>> pivotBlock: nil
>>>
>>> TextMorphEditor(ParagraphEditor)>>terminateAndInitializeAround:
>>> Receiver: a TextMorphEditor
>>> Arguments and temporary variables:
>>> aBlock: [closure] in TextMorphEditor(ParagraphEditor)>>doIt:
>>> Receiver's instance variables:
>>> model: a NewInspector
>>> paragraph: a MultiNewParagraph
>>> startBlock: a CharacterBlock with index 39 and rectangle 103@16 corner:
>>> 103@32
>>> ...etc...
>>> stopBlock: a CharacterBlock with index 1 and character $M and rectangle
>>> 0@0 cor...etc...
>>> beginTypeInBlock: nil
>>> emphasisHere: an Array(a TextFontChange font: 2)
>>> initialText: a Text for 'MorphicReplayDemoTest
>>> compile: self
>>> '
>>> selectionShowing: false
>>> otherInterval: (38 to: 38)
>>> lastParentLocation: nil
>>> morph: a TextMorphForEditView(3730)
>>> oldInterval: nil
>>> pivotBlock: nil
>>>
>>> TextMorphEditor(ParagraphEditor)>>doIt:
>>> Receiver: a TextMorphEditor
>>> Arguments and temporary variables:
>>> characterStream: a WriteStream ''
>>> Receiver's instance variables:
>>> model: a NewInspector
>>> paragraph: a MultiNewParagraph
>>> startBlock: a CharacterBlock with index 39 and rectangle 103@16 corner:
>>> 103@32
>>> ...etc...
>>> stopBlock: a CharacterBlock with index 1 and character $M and rectangle
>>> 0@0 cor...etc...
>>> beginTypeInBlock: nil
>>> emphasisHere: an Array(a TextFontChange font: 2)
>>> initialText: a Text for 'MorphicReplayDemoTest
>>> compile: self
>>> '
>>> selectionShowing: false
>>> otherInterval: (38 to: 38)
>>> lastParentLocation: nil
>>> morph: a TextMorphForEditView(3730)
>>> oldInterval: nil
>>> pivotBlock: nil
>>>
>>> TextMorphEditor(ParagraphEditor)>>dispatchOnKeyEvent:with:
>>> Receiver: a TextMorphEditor
>>> Arguments and temporary variables:
>>> keyEvent: [keystroke '<Cmd-d>']
>>> typeAheadStream: a WriteStream ''
>>> honorCommandKeys: true
>>> keyValue: 100
>>> keyChar: $d
>>> char: $d
>>> action: #doIt:
>>> Receiver's instance variables:
>>> model: a NewInspector
>>> paragraph: a MultiNewParagraph
>>> startBlock: a CharacterBlock with index 39 and rectangle 103@16 corner:
>>> 103@32
>>> ...etc...
>>> stopBlock: a CharacterBlock with index 1 and character $M and rectangle
>>> 0@0 cor...etc...
>>> beginTypeInBlock: nil
>>> emphasisHere: an Array(a TextFontChange font: 2)
>>> initialText: a Text for 'MorphicReplayDemoTest
>>> compile: self
>>> '
>>> selectionShowing: false
>>> otherInterval: (38 to: 38)
>>> lastParentLocation: nil
>>> morph: a TextMorphForEditView(3730)
>>> oldInterval: nil
>>> pivotBlock: nil
>>>
>>> TextMorphEditor>>dispatchOnKeyEvent:with:
>>> Receiver: a TextMorphEditor
>>> Arguments and temporary variables:
>>> keyEvent: [keystroke '<Cmd-d>']
>>> typeAheadStream: a WriteStream ''
>>> Receiver's instance variables:
>>> model: a NewInspector
>>> paragraph: a MultiNewParagraph
>>> startBlock: a CharacterBlock with index 39 and rectangle 103@16 corner:
>>> 103@32
>>> ...etc...
>>> stopBlock: a CharacterBlock with index 1 and character $M and rectangle
>>> 0@0 cor...etc...
>>> beginTypeInBlock: nil
>>> emphasisHere: an Array(a TextFontChange font: 2)
>>> initialText: a Text for 'MorphicReplayDemoTest
>>> compile: self
>>> '
>>> selectionShowing: false
>>> otherInterval: (38 to: 38)
>>> lastParentLocation: nil
>>> morph: a TextMorphForEditView(3730)
>>> oldInterval: nil
>>> pivotBlock: nil
>>>
>>> TextMorphEditor(ParagraphEditor)>>keystroke:
>>> Receiver: a TextMorphEditor
>>> Arguments and temporary variables:
>>> keyEvent: [keystroke '<Cmd-d>']
>>> typeAhead: a WriteStream ''
>>> Receiver's instance variables:
>>> model: a NewInspector
>>> paragraph: a MultiNewParagraph
>>> startBlock: a CharacterBlock with index 39 and rectangle 103@16 corner:
>>> 103@32
>>> ...etc...
>>> stopBlock: a CharacterBlock with index 1 and character $M and rectangle
>>> 0@0 cor...etc...
>>> beginTypeInBlock: nil
>>> emphasisHere: an Array(a TextFontChange font: 2)
>>> initialText: a Text for 'MorphicReplayDemoTest
>>> compile: self
>>> '
>>> selectionShowing: false
>>> otherInterval: (38 to: 38)
>>> lastParentLocation: nil
>>> morph: a TextMorphForEditView(3730)
>>> oldInterval: nil
>>> pivotBlock: nil
>>>
>>> TextMorphEditor>>keystroke:
>>> Receiver: a TextMorphEditor
>>> Arguments and temporary variables:
>>> keyEvent: [keystroke '<Cmd-d>']
>>> Receiver's instance variables:
>>> model: a NewInspector
>>> paragraph: a MultiNewParagraph
>>> startBlock: a CharacterBlock with index 39 and rectangle 103@16 corner:
>>> 103@32
>>> ...etc...
>>> stopBlock: a CharacterBlock with index 1 and character $M and rectangle
>>> 0@0 cor...etc...
>>> beginTypeInBlock: nil
>>> emphasisHere: an Array(a TextFontChange font: 2)
>>> initialText: a Text for 'MorphicReplayDemoTest
>>> compile: self
>>> '
>>> selectionShowing: false
>>> otherInterval: (38 to: 38)
>>> lastParentLocation: nil
>>> morph: a TextMorphForEditView(3730)
>>> oldInterval: nil
>>> pivotBlock: nil
>>>
>>> [] in [] in TextMorphForEditView(TextMorph)>>keyStroke:
>>> Receiver: a TextMorphForEditView(3730)
>>> Arguments and temporary variables:
>>> evt: [keystroke '<Cmd-d>']
>>> Receiver's instance variables:
>>> bounds: 0@0 corner: 358@34
>>> owner: a TransformMorph(942)
>>> submorphs: #()
>>> fullBounds: 0@0 corner: 358@34
>>> color: Color black
>>> extension: a MorphExtension (3477) [other: (blinkStart -> 11369859)]
>>> borderWidth: 0
>>> borderColor: Color black
>>> textStyle: a TextStyle Bitmap DejaVu Sans 9
>>> text: a Text for 'MorphicReplayDemoTest
>>> compile: self.'
>>> wrapFlag: true
>>> paragraph: a MultiNewParagraph
>>> editor: a TextMorphEditor
>>> container: nil
>>> predecessor: nil
>>> successor: nil
>>> backgroundColor: nil
>>> margins: nil
>>> editHistory: a TextMorphCommandHistory
>>> editView: a PluggableTextMorphPlus(2866)
>>> acceptOnCR: false
>>>
>>> TextMorphForEditView(TextMorph)>>handleInteraction:
>>> Receiver: a TextMorphForEditView(3730)
>>> Arguments and temporary variables:
>>> interactionBlock: [closure] in [] in
>>> TextMorphForEditView(TextMorph)>>keyStroke...etc...
>>> oldEditor: a TextMorphEditor
>>> oldParagraph: a MultiNewParagraph
>>> oldText: a Text for 'MorphicReplayDemoTest
>>> compile: self.'
>>> Receiver's instance variables:
>>> bounds: 0@0 corner: 358@34
>>> owner: a TransformMorph(942)
>>> submorphs: #()
>>> fullBounds: 0@0 corner: 358@34
>>> color: Color black
>>> extension: a MorphExtension (3477) [other: (blinkStart -> 11369859)]
>>> borderWidth: 0
>>> borderColor: Color black
>>> textStyle: a TextStyle Bitmap DejaVu Sans 9
>>> text: a Text for 'MorphicReplayDemoTest
>>> compile: self.'
>>> wrapFlag: true
>>> paragraph: a MultiNewParagraph
>>> editor: a TextMorphEditor
>>> container: nil
>>> predecessor: nil
>>> successor: nil
>>> backgroundColor: nil
>>> margins: nil
>>> editHistory: a TextMorphCommandHistory
>>> editView: a PluggableTextMorphPlus(2866)
>>> acceptOnCR: false
>>>
>>> TextMorphForEditView>>handleInteraction:
>>> Receiver: a TextMorphForEditView(3730)
>>> Arguments and temporary variables:
>>> interActionBlock: [closure] in [] in
>>> TextMorphForEditView(TextMorph)>>keyStroke...etc...
>>> Receiver's instance variables:
>>> bounds: 0@0 corner: 358@34
>>> owner: a TransformMorph(942)
>>> submorphs: #()
>>> fullBounds: 0@0 corner: 358@34
>>> color: Color black
>>> extension: a MorphExtension (3477) [other: (blinkStart -> 11369859)]
>>> borderWidth: 0
>>> borderColor: Color black
>>> textStyle: a TextStyle Bitmap DejaVu Sans 9
>>> text: a Text for 'MorphicReplayDemoTest
>>> compile: self.'
>>> wrapFlag: true
>>> paragraph: a MultiNewParagraph
>>> editor: a TextMorphEditor
>>> container: nil
>>> predecessor: nil
>>> successor: nil
>>> backgroundColor: nil
>>> margins: nil
>>> editHistory: a TextMorphCommandHistory
>>> editView: a PluggableTextMorphPlus(2866)
>>> acceptOnCR: false
>>>
>>>
>>> --- The full stack ---
>>> UndefinedObject(Object)>>doesNotUnderstand: #<
>>> EncoderForV3PlusClosures(EncoderForV3)>>genPushLiteral:
>>>
>>> EncoderForV3PlusClosures(BytecodeEncoder)>>sizeOpcodeSelector:withArguments:
>>> EncoderForV3PlusClosures(BytecodeEncoder)>>sizePushLiteral:
>>> LiteralNode>>sizeCodeForValue:
>>> [] in MessageNode>>sizeCodeForValue:
>>> Array(SequenceableCollection)>>collect:
>>> MessageNode>>sizeCodeForValue:
>>> [] in MessageNode>>sizeCodeForValue:
>>> OrderedCollection>>collect:
>>> MessageNode>>sizeCodeForValue:
>>> MessageNode(ParseNode)>>sizeCodeForEffect:
>>> MessageNode>>sizeCodeForEffect:
>>> BlockNode>>sizeCodeExceptLast:
>>> BlockNode>>sizeCodeForEvaluatedValue:
>>> BytecodeAgnosticMethodNode>>generate:
>>> CompiledMethodWithNode class>>generateMethodFromNode:trailer:
>>> MorphicReplayDemoTest
>>> class(Behavior)>>compile:classified:notifying:trailer:ifFail:
>>> MorphicReplayDemoTest
>>> class(ClassDescription)>>compile:classified:withStamp:notifying:logSource:
>>> MorphicReplayDemoTest
>>> class(ClassDescription)>>compile:classified:withStamp:notifying:
>>> MorphicReplayDemoTest
>>> class(ClassDescription)>>compile:classified:notifying:
>>> MorphicReplayDemoTest class(ClassDescription)>>compile:notifying:
>>> MorphicReplayDemoTest class(Behavior)>>compile:
>>> ByteString>>DoIt
>>> Compiler>>evaluate:in:to:notifying:ifFail:logged:
>>> [] in TextMorphEditor(ParagraphEditor)>>evaluateSelection
>>> BlockClosure>>on:do:
>>> TextMorphEditor(ParagraphEditor)>>evaluateSelection
>>> TextMorphEditor(ParagraphEditor)>>doIt
>>> [] in TextMorphEditor(ParagraphEditor)>>doIt:
>>> TextMorphEditor(ParagraphEditor)>>terminateAndInitializeAround:
>>> TextMorphEditor(ParagraphEditor)>>doIt:
>>> TextMorphEditor(ParagraphEditor)>>dispatchOnKeyEvent:with:
>>> TextMorphEditor>>dispatchOnKeyEvent:with:
>>> TextMorphEditor(ParagraphEditor)>>keystroke:
>>> TextMorphEditor>>keystroke:
>>> [] in [] in TextMorphForEditView(TextMorph)>>keyStroke:
>>> TextMorphForEditView(TextMorph)>>handleInteraction:
>>> TextMorphForEditView>>handleInteraction:
>>> - - - - - - - - - - - - - - -
>>> - - - - - - - - - - - - - - - - - -
>>> [] in TextMorphForEditView(TextMorph)>>keyStroke:
>>> ECToolSet class>>codeCompletionAround:textMorph:keyStroke:
>>> DEVToolSet class>>codeCompletionAround:textMorph:keyStroke:
>>> ToolSet class>>codeCompletionAround:textMorph:keyStroke:
>>> TextMorphForEditView(TextMorph)>>keyStroke:
>>> TextMorphForEditView>>keyStroke:
>>> TextMorphForEditView(TextMorph)>>handleKeystroke:
>>> KeyboardEvent>>sentTo:
>>> TextMorphForEditView(Morph)>>handleEvent:
>>> TextMorphForEditView(Morph)>>handleFocusEvent:
>>> [] in HandMorph>>sendFocusEvent:to:clear:
>>> [] in PasteUpMorph>>becomeActiveDuring:
>>> BlockClosure>>on:do:
>>> PasteUpMorph>>becomeActiveDuring:
>>> HandMorph>>sendFocusEvent:to:clear:
>>> HandMorph>>sendEvent:focus:clear:
>>> HandMorph>>sendKeyboardEvent:
>>> HandMorph>>handleEvent:
>>> HandMorph>>processEvents
>>> [] in WorldState>>doOneCycleNowFor:
>>> Array(SequenceableCollection)>>do:
>>> WorldState>>handsDo:
>>> WorldState>>doOneCycleNowFor:
>>> WorldState>>doOneCycleFor:
>>> PasteUpMorph>>doOneCycle
>>> [] in Project class>>spawnNewProcess
>>> [] in BlockClosure>>newProcess
>>> -----------------------------------------------------------
>>>
>>>
>>> _______________________________________________
>>> Pharo-project mailing list
>>> Pharo-project(a)lists.gforge.inria.fr
>>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>>>
>>
>>
>> _______________________________________________
>> Pharo-project mailing list
>> Pharo-project(a)lists.gforge.inria.fr
>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>>
>
>
>
> --
> imagination is more important than knowledge - Albert Einstein
> Logic will get you from A to B. Imagination will take you everywhere -
> Albert Einstein
> Learn from yesterday, live for today, hope for tomorrow. The important
> thing is not to stop questioning. - Albert Einstein
> The true sign of intelligence is not knowledge but imagination. - Albert
> Einstein
> Gravitation is not responsible for people falling in love. - Albert
> Einstein
>
> _______________________________________________
> Pharo-project mailing list
> Pharo-project(a)lists.gforge.inria.fr
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>
Dec. 23, 2009
Re: [Pharo-project] Fwd: sort: and sortBlock:
by Stéphane Ducasse
On Dec 23, 2009, at 6:43 PM, Levente Uzonyi wrote:
> On Wed, 23 Dec 2009, Stéphane Ducasse wrote:
>
>>>>
>>>
>>> What bugs me is that #sortBy: does not what it says. I would expect that
>>>
>>> aCollection sortBy: [ :each | each name ]
>>>
>>> does the same as
>>>
>>> aCollection sort: [ :a :b | a name <= b name ]
>>>
>>> if you want that, I can provide a fast implementation of #sortBy:
>>>
>>>
>>> Not all collections are sortable and #sort: is sorting in-place, so it's hardly doable.
>>
>> But it would be nice to have sort: and sortBlock: polymorph.
>> Because right now we cannot have OrderedCollection and Array or SortedCollection interchanged.
>
> SortedCollection should be used as rarely as possible. In the past it was used for sorting which is a misuse of this data structure (I wonder why such data strucure exists at all, it's almost never useful).
Indeed I understand that now. sort is much better bette because it is orthogonal to the datastructure
> If you pick the changes from squeak trunk, Array and OrderedCollection (and SortedCollection) will understand #sort and #sort: and will have the same semantics: sort in place (by a stable sorting algorithm).
Ok I will have a look.
>
>
> Levente
>
>>
>> Stef
>> _______________________________________________
>> Pharo-project mailing list
>> Pharo-project(a)lists.gforge.inria.fr
>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
> _______________________________________________
> Pharo-project mailing list
> Pharo-project(a)lists.gforge.inria.fr
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
Dec. 23, 2009
Re: [Pharo-project] Fwd: hasEqualElements:
by Eliot Miranda
On Wed, Dec 23, 2009 at 1:08 AM, Nicolas Cellier <
nicolas.cellier.aka.nice(a)gmail.com> wrote:
> 2009/12/23 Stéphane Ducasse <stephane.ducasse(a)inria.fr>:
> >
> >
> >
> > Hi
> >
> > (SortedCollection new addAll: #(9 2 3 ); yourself)
> > hasEqualElements: (OrderedCollection withAll: #(9 2 3)) -> false
> >
> > hasEqualElements: otherCollection
> > "Answer whether the receiver's size is the same as otherCollection's
> > size, and each of the receiver's elements equal the corresponding
> > element of otherCollection.
> > This should probably replace the current definition of #= ."
> >
> > | size |
> > (otherCollection isKindOf: SequenceableCollection) ifFalse: [^ false].
> > (size := self size) = otherCollection size ifFalse: [^ false].
> > 1 to: size do:
> > [:index |
> > (self at: index) = (otherCollection at: index) ifFalse: [^ false]].
> > ^ true
> >
> > For me the name of this method is misleading and I would really like to
> > renaming it
> > hasStructurallyEqualElements: and have new one doing hasEqualElements:
> >
> > What do you think?
> > I would like a beautiful world....
> >
> > Stef (freezing with a flu in my bed.... cool christmax).
> >
> >
>
> Didn't VW had a #isSameSquenceAs:
>
> Nicolas
>
>
<methods>
<class-id>Core.SequenceableCollection</class-id>
<category>comparing</category>
<body package="Collections-Abstract"
selector="isSameSequenceAs:">isSameSequenceAs: otherCollection
"Answer whether the receiver's size is the same as otherCollection's
size, and each
of the receiver's elements equal the corresponding element of
otherCollection."
| size |
(size := self size) = otherCollection size ifFalse: [^false].
1 to: size do: [:index |
(self at: index) = (otherCollection at: index) ifFalse:
[^false]].
^true</body>
</methods>
i.e. trust the caller is providing a sequence and if otherCollection doesn't
implement at: there will be a run-time error, hence any otherCollection
isKindOf: SequenceableCollection is just wasted cycles.
Dec. 23, 2009
Re: [Pharo-project] SUnit forked, gofer it
by Mariano Martinez Peck
Can I add something to my dear santa list ??
Many times, I have tests that freeze the image. And I don't known what test
was the "guilty". I always hack the runCase to show in Transcript the test
selector.
Maybe adding a configurable logging option (enable/disable) may help.
Somehing like this:
runCase
Author
ifUnknownAuthorUse: 'TestRunner'
during: [
[
self log: 'Test to be performed: ', testSelector asSymbol
asSring.
self setUp.
self performTest]
ensure: [
self tearDown.
self cleanUpInstanceVariables ] ]
and then something like:
log: aString
self isLogEnable ifTrue: [Transcript show: aSring].
Or similar...but I like the idea of knowing which test make the image to
freeze.
Cheers,
Mariano
On Wed, Dec 23, 2009 at 5:28 PM, Stéphane Ducasse <stephane.ducasse(a)inria.fr
> wrote:
>
> On Dec 23, 2009, at 5:17 PM, Adrian Kuhn wrote:
>
> > Yanni Chiu <yanni@...> writes:
> >
> >>> Gofer it
> >>> squeaksource: 'akuhn';
> >>> package: 'SUnit';
> >>> package: 'SUnitGUI';
> >>> load
> >>
> >> Is it too late to call it SUnit2, SUnit3, whatever?
> >
> > Too early in my opinion :)
> >
> > I follow the github style of forking, ie "fork early, fork often". The
> name of
> > a fork is qualified by prefixing it with the name of the forker, so my
> fork is
> > qualified "akuhn/SUnit". IMHO it is early enough to think about a new
> name
> > when it is (ever?) merged back into Pharo. Phunit might be nice.
> >
> > @stef that might make a nice feature for new package system: to tell in
> an
> > immediately visible way from which repo a package/class is coming.
>
> The problem is that you can have multiple repos.
> Now RPackage is disconnect orthogonal to MC and repo it is just a couple of
> classes
> to replace packageInfo.
>
> >> What happens is that people start writing test cases assuming the newer
> >> version. Then at some point there's a conflict, and you either have to
> >> re-write your old or your new test cases. Maybe it's okay to be forced
> >> to update your old test cases, but it would be good know which version
> >> of the "SUnit API" is available or required.
> >
> > Good point, I share your concern. Maybe something like
> >
> > self assumeSUnitIsAkuhnFork
> >
> > might help. This will fail with DNU on all version except my fork.
> >
> > --AA
> >
> >
> >
> > _______________________________________________
> > Pharo-project mailing list
> > Pharo-project(a)lists.gforge.inria.fr
> > http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>
>
> _______________________________________________
> Pharo-project mailing list
> Pharo-project(a)lists.gforge.inria.fr
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>
Dec. 23, 2009
Re: [Pharo-project] Fwd: hasEqualElements:
by Eliot Miranda
On Wed, Dec 23, 2009 at 1:08 AM, Nicolas Cellier <
nicolas.cellier.aka.nice(a)gmail.com> wrote:
> 2009/12/23 Stéphane Ducasse <stephane.ducasse(a)inria.fr>:
> >
> >
> >
> > Hi
> >
> > (SortedCollection new addAll: #(9 2 3 ); yourself)
> > hasEqualElements: (OrderedCollection withAll: #(9 2 3)) -> false
> >
> > hasEqualElements: otherCollection
> > "Answer whether the receiver's size is the same as otherCollection's
> > size, and each of the receiver's elements equal the corresponding
> > element of otherCollection.
> > This should probably replace the current definition of #= ."
> >
> > | size |
> > (otherCollection isKindOf: SequenceableCollection) ifFalse: [^ false].
> > (size := self size) = otherCollection size ifFalse: [^ false].
> > 1 to: size do:
> > [:index |
> > (self at: index) = (otherCollection at: index) ifFalse: [^ false]].
> > ^ true
> >
> > For me the name of this method is misleading and I would really like to
> > renaming it
> > hasStructurallyEqualElements: and have new one doing hasEqualElements:
> >
> > What do you think?
> > I would like a beautiful world....
> >
> > Stef (freezing with a flu in my bed.... cool christmax).
> >
> >
>
> Didn't VW had a #isSameSquenceAs:
>
Yes.
>
> Nicolas
>
> >
> >
> > _______________________________________________
> > Pharo-project mailing list
> > Pharo-project(a)lists.gforge.inria.fr
> > http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
> >
>
> _______________________________________________
> Pharo-project mailing list
> Pharo-project(a)lists.gforge.inria.fr
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>
Dec. 23, 2009
Re: [Pharo-project] Fwd: sort: and sortBlock:
by Adrian Kuhn
Levente Uzonyi <leves@...> writes:
> > what is TreeSet?
>
> The common data structure to implement ordered sets. Which one do you use?
>
> IMO ordered sets (where ordering means the same as in OrderedCollection)
> should be implemented with a hashtable of linked elements.
You're right.
I confused ordered and sorted.
--AA
Dec. 23, 2009