wiki:macros

Version 12 (modified by michael.gruenewald, 13 years ago) ( diff )

--

Macro Support for Squeak

This project is a framework which provides compile-time macros for Squeak. It is primarily focused on macros that need to generate additional methods or check constraints. It is integrated with OmniBrowser and Squeak's Debugger.

How to Install

Environment
4.1, 4.2
Any
Any
Sources
ConfigurationOfMacros
Macros
CTM
OmniBrowser optional
Misc
Macros@SqueakSource

Use the Metacello configuration or just load the CTM package. If you also want OmniBrowser support, load the XXX package, too.

You can find the following categories in the packages:

CTM-Core
core implemenation including the event listener
CTM-Operations
supported operations, currently those for methods
CTM-Tests
some basic tests, all should pass
CTM-Examples
basic macros, see the class documentation of each for details

How to Use

To create a macro you have to extend the CTMMacro class. The first thing to do is to decide on which pragmas the macro should listen. You need to implement at least one of those two methods:

matchMethodPragma: aPragma
This should return true if the macro wants to process a method annotated with aPragma or false otherwise. Additionally the method can be used to store additional information that are found in the pragma, e.g. pragma parameters.
matchClassPragma: aPragma
Same as matchMethodPragma: but for classes and their pragmas.

Depending on the use-case and the decision you made above, implement one or more of the following methods which are called when an event in a relevant entity occurs:

classAdded: aClass
classCompiled: aClass from: anOldClassOrNil
classModified: aClass from: anOldClass
classRemoved: aClass
Those are called if a class event occurred.
methodAdded: aMethod in: aClass
methodCompiled: aCompiledMethod in: aClass from: anOldCompiledMethodOrNil
methodModified: aMethod in: aClass from: anOldMethod
methodRemoved: aMethod in: aClass
Those are called if a method event occurred.

How to Extend

Internal documentation. Show models, explain the architecture. Do anything that may help a new developer to extend this project.

Acknowledgments

To date, the following people contributed to this project:

  • Michael Grünewald
  • Stefan Richter
Note: See TracWiki for help on using the wiki.