Monticello trickery: pointers needed

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

Monticello trickery: pointers needed

Frank Shearar-3
Hi,

The background to the question is that I'm trying to repackage
LanguageBoxes so that both the Squeak and Pharo community can use its
features (or just parts of it).

Cutie-Helvetia defines a class, CURaisedToExample. Among others, it
defines two methods: CURaisedToExample class >> #raise:to and
CURaisedToExample >> testSplice.

The latter makes use of QQCompiler's splice operation (just like
Common Lisp's) - @foo will replace 'foo' with whatever 'foo' evaluates
to, so compiling 'a := @(3 + 4)' means the same thing as 'a := 7'. Now
testSplice says

  self assert: `@(self raise: 2 to: -3) = (1/8).

which means that, _at_compile_time_, testSplice will invoke #raise:to:
(the self refers to the class-side method)... and at this point in
time #raise:to: has been compiled, but not installed. Compiling
#testSplice fails with a MessageNotUnderstood, and package loading
aborts.

My question is this: how can I work around this? Can I move the
installation of #raise:to: to a preload step?

Some hacks that spring to mind, and don't seem very pleasant, are:
* introduce a new superclass defining the method, put that in a
seperate package, and load that package before Cutie-Helvetia
* move the definition of CURaisedToExample and #raise:to: to a
separate package, and make all the tests extensions to that package.

frank

Reply | Threaded
Open this post in threaded view
|

Re: Monticello trickery: pointers needed

Frank Shearar-3
On 25 December 2011 22:18, Frank Shearar <[hidden email]> wrote:

> Hi,
>
> The background to the question is that I'm trying to repackage
> LanguageBoxes so that both the Squeak and Pharo community can use its
> features (or just parts of it).
>
> Cutie-Helvetia defines a class, CURaisedToExample. Among others, it
> defines two methods: CURaisedToExample class >> #raise:to and
> CURaisedToExample >> testSplice.
>
> The latter makes use of QQCompiler's splice operation (just like
> Common Lisp's) - @foo will replace 'foo' with whatever 'foo' evaluates
> to, so compiling 'a := @(3 + 4)' means the same thing as 'a := 7'. Now
> testSplice says
>
>  self assert: `@(self raise: 2 to: -3) = (1/8).
>
> which means that, _at_compile_time_, testSplice will invoke #raise:to:
> (the self refers to the class-side method)... and at this point in
> time #raise:to: has been compiled, but not installed. Compiling
> #testSplice fails with a MessageNotUnderstood, and package loading
> aborts.
>
> My question is this: how can I work around this? Can I move the
> installation of #raise:to: to a preload step?
>
> Some hacks that spring to mind, and don't seem very pleasant, are:
> * introduce a new superclass defining the method, put that in a
> seperate package, and load that package before Cutie-Helvetia
> * move the definition of CURaisedToExample and #raise:to: to a
> separate package, and make all the tests extensions to that package.

My general question still stands, but I worked around the issue by
moving the fixtures - #raise:to: - to a superclass CURaisedToFixtures,
and put that superclass in its own package.

frank