I'm still not entirely sure I want to get into this pretty-printing
game, but this way I can at least make the decision in a single place.
For example, if @|MyClass| has the nickname @|mine|, and defines a slot @|x|
of type @|int|, then the simple function
\begin{prog}
For example, if @|MyClass| has the nickname @|mine|, and defines a slot @|x|
of type @|int|, then the simple function
\begin{prog}
- int get_x(MyClass *m) \{ return (m->mine.x); \}
+ int get_x(MyClass *m) \{ return (m@->mine.x); \}
\end{prog}
will extract the value of @|x| from an instance of @|MyClass|.
\end{prog}
will extract the value of @|x| from an instance of @|MyClass|.
\begin{prog}
void *new_instance(const SodClass *c) \\
\{ \\ \ind
\begin{prog}
void *new_instance(const SodClass *c) \\
\{ \\ \ind
- void *p = malloc(c->cls.initsz); \\
+ void *p = malloc(c@->cls.initsz); \\
return (p); \- \\
\}
\end{prog}
return (p); \- \\
\}
\end{prog}
hostile to object-oriented programming as it ever was. This means that
you'll end up writing ugly things like
\begin{prog}
hostile to object-oriented programming as it ever was. This means that
you'll end up writing ugly things like
\begin{prog}
- thing->_vt->foo.frob(thing, mumble);
+ thing@->_vt@->foo.frob(thing, mumble);
\end{prog}
fairly frequently. This can be made somewhat less painful using macros,
but we're basically stuck with C. The upside is that you know exactly what
\end{prog}
fairly frequently. This can be made somewhat less painful using macros,
but we're basically stuck with C. The upside is that you know exactly what
allocates space for an instance of class @"Greeter". We're not going to use
this space directly. Instead, we do this frightening looking thing.
\begin{prog}
allocates space for an instance of class @"Greeter". We're not going to use
this space directly. Instead, we do this frightening looking thing.
\begin{prog}
- Greeter *g = Greeter__class->cls.init(\&g_obj);
+ Greeter *g = Greeter__class@->cls.init(\&g_obj);
\end{prog}
Taking it slowly: @"Greeter__class" is a pointer to the object that
represents our class @"Greeter". This object contains a member, named
\end{prog}
Taking it slowly: @"Greeter__class" is a pointer to the object that
represents our class @"Greeter". This object contains a member, named
Having done this, we `send the instance a message':
\begin{prog}
Having done this, we `send the instance a message':
\begin{prog}
- g->_vt->greeter.greet(g, stdout);
+ g@->_vt@->greeter.greet(g, stdout);
\end{prog}
This looks horrific, and seems to repeat itself quite unnecessarily. The
first @"g" is the recipient of our `message'. The second is indeed a copy of
\end{prog}
This looks horrific, and seems to repeat itself quite unnecessarily. The
first @"g" is the recipient of our `message'. The second is indeed a copy of