[squeak-dev] Re: Monticello trickery: pointers needed
frank.shearar at gmail.com
Wed Jan 4 08:20:26 UTC 2012
On 25 December 2011 22:18, Frank Shearar <frank.shearar at gmail.com> wrote:
> 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
> 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.
More information about the Squeak-dev