chiark / gitweb /
Mark Wooding [Mon, 5 Aug 2019 17:06:07 +0000 (18:06 +0100)]
doc/sod.sty: Rewrite `@-' to cope with other things following.
Also, typesets as a dash, which is probably good.
Mark Wooding [Mon, 5 Aug 2019 15:13:13 +0000 (16:13 +0100)]
doc/sod.sty: Hoist `\@ifnextchar@preserve' further up.
Mark Wooding [Mon, 5 Aug 2019 14:10:50 +0000 (15:10 +0100)]
src/parser/streams-{proto,impl}.lisp: Publish classes and generic functions.
I bungled this somehow. The exported classes should have ended up in
`streams-proto.lisp'. I'm not, for now, exporting the proxy streams.
Because of this foolishness, I also failed to include documentation
stubs for any of these, so also add those.
Mark Wooding [Mon, 5 Aug 2019 13:56:19 +0000 (14:56 +0100)]
doc/misc.tex: Mention that `int' is magically exported.
Someone might care.
Mark Wooding [Mon, 5 Aug 2019 13:48:33 +0000 (14:48 +0100)]
doc/misc.tex: Include missing return values in synopses.
Mark Wooding [Mon, 5 Aug 2019 13:27:50 +0000 (14:27 +0100)]
doc/Makefile.am, doc/sod.tex: Include package version on title page.
Maybe this should be in the running header or footer, but I'm not quite
sure where.
Mark Wooding [Mon, 5 Aug 2019 10:09:32 +0000 (11:09 +0100)]
NOTES: New file of things to think about.
Mark Wooding [Mon, 5 Aug 2019 10:09:08 +0000 (11:09 +0100)]
Makefile.am: Distribute the `STYLE' guide.
Mark Wooding [Mon, 5 Aug 2019 09:57:19 +0000 (10:57 +0100)]
asdf-hack.lisp.in: Shore up and distribute.
For a long time, this was a private hack. Shoring up involved using
`*load-pathname*' to find the right directory, and /that/ requires
actually having the hack be in the build directory rather than the
source, and that involves having the makefile put it there, and then it
needs shipping.
Mark Wooding [Mon, 5 Aug 2019 09:55:55 +0000 (10:55 +0100)]
Makefile.am: Ship `emacs-hacks.el' on the offchance.
It's tiny and harmless.
Mark Wooding [Mon, 5 Aug 2019 09:27:42 +0000 (10:27 +0100)]
lib/sod.h (SOD_DECL): Check that we allocated the right size.
Mark Wooding [Mon, 5 Aug 2019 09:26:41 +0000 (10:26 +0100)]
lib/sod.h: Introduce `SOD_RECKLESS' feature macro to inhibit checking.
Currently there isn't any, but there will be soon.
Mark Wooding [Mon, 5 Aug 2019 09:22:48 +0000 (10:22 +0100)]
doc/runtime.tex: Suggest asserting that a stack-allocated object tore down.
As discussed, it's not an error in itself if an object refuses teardown:
that just means that you can forget about it and it's someone else's
problem now. But if you really have to deallocate it right now, that's
not going to work.
It might be an idea to introduce a macro to say, essentially,
{ int rc = sod_teardown(OBJ); assert(!rc); }
Mark Wooding [Mon, 5 Aug 2019 09:21:15 +0000 (10:21 +0100)]
lib/sod.3: Add missing documentation.
I must have just stopped midway through `SOD_DECL'. Documentation for
`sod_teardown', `SOD_MAKE' and friends, and `sod_destroy' is entirely
absent.
Mark Wooding [Mon, 5 Aug 2019 09:19:42 +0000 (10:19 +0100)]
src/output-proto.lisp: Fix some bad indentation.
Bad Emacs. No biscuit.
Mark Wooding [Sun, 4 Aug 2019 18:04:10 +0000 (19:04 +0100)]
frontend.lisp: Add hooks for extensions to add new command-line options.
It seems rather pointless to document the option parser and then fail to
provide any way for extensions to make use of it.
Not that I've actually documented it yet...
Mark Wooding [Sun, 4 Aug 2019 17:56:46 +0000 (18:56 +0100)]
src/optparse.lisp: Cope with options which don't have long names.
This makes the format strings remarkably hairy, but that just adds to
the fun, right?
Mark Wooding [Sun, 4 Aug 2019 17:52:36 +0000 (18:52 +0100)]
src/optparse.lisp: Don't print options which have no help text.
This seems better than crashing because nil isn't a thing that can have
characters extracted from it.
Mark Wooding [Sun, 4 Aug 2019 17:23:15 +0000 (18:23 +0100)]
src/frontend.lisp: Add a function to update the `*usage*' list.
Mark Wooding [Sun, 4 Aug 2019 17:21:01 +0000 (18:21 +0100)]
src/frontend.lisp: Make the option parser available in a special variable.
No effect at the moment, because nobody does anything with the variable.
Mark Wooding [Sun, 4 Aug 2019 17:02:41 +0000 (18:02 +0100)]
src/codegen-proto.lisp (definst): Overhaul argument-list processing.
Previously I just used gensyms for the argument names. That breaks
reloading the system, though: the classes get redefined with new slot
names, but the old instances continue to linger, only they don't work
properly any more.
Instead, write a proper lambda-list parser which allows slot names to be
specified independently of the user-facing argument names.
Of course, this now changes the way the `list-exports' machinery parses
`definst' forms.
Mark Wooding [Sun, 4 Aug 2019 12:59:50 +0000 (13:59 +0100)]
src/module-impl.lisp (find-file): Take a home path rather than a scanner.
Honestly, picking the home path out of the scanner input was always a
bit of a stretch.
Obviously, we also need to fix up the callers, but there's only one of
them.
Mark Wooding [Sun, 4 Aug 2019 12:54:24 +0000 (13:54 +0100)]
src/: Use the `optparse' package in `sod-user'.
This involves moving the `optparse' build into the main `sod' system.
Mark Wooding [Sun, 4 Aug 2019 12:48:52 +0000 (13:48 +0100)]
src/utilities.lisp: Share `int' to `sod' and `optparse' packages.
Now we don't have to choose between the C type and the option type.
Mark Wooding [Sun, 4 Aug 2019 09:25:19 +0000 (10:25 +0100)]
doc/module.tex: Add stub for missing function `clear-the-decks'.
Mark Wooding [Sat, 3 Aug 2019 23:37:55 +0000 (00:37 +0100)]
doc/misc.tex: Document some more miscellaneous utilities.
Mark Wooding [Sat, 3 Aug 2019 23:21:33 +0000 (00:21 +0100)]
src/utilities.lisp (dosequence): Capture SEQ as a variable explicitly.
Previously it used `once-only', but that doesn't actually produce a
binding for constant expressions.
Mark Wooding [Sat, 3 Aug 2019 22:34:59 +0000 (23:34 +0100)]
src/utilities.lisp (compose): Handle the case of zero arguments.
Mark Wooding [Sat, 3 Aug 2019 20:16:21 +0000 (21:16 +0100)]
doc/misc.tex: Fix citation argument brackets.
Mark Wooding [Sat, 3 Aug 2019 20:15:57 +0000 (21:15 +0100)]
doc/clang.tex: Fix `\descref' call missing its category code.
Mark Wooding [Sat, 3 Aug 2019 20:12:31 +0000 (21:12 +0100)]
doc/: Reorder the arguments to `\descref'.
We now have
\descref*{CAT}{NAME}[TEXT]
rather than
\descref*{NAME}[TEXT]{CAT}
which flows much better. There's a complication, that `\@ifnextchar'
gobbles space while looking for its character: implement a custom
version which doesn't do that.
The call sites were mostly fixed by [long line]
$ sed -i '/\\descref\(\*\)\?\({[^}]\+}\(\[[^]]\+]\)\?\)\({[^}]\+}\)/ s//\\descref\1\4\2/g' doc/*.tex
but some calls run over two lines and had to be found and fixed by hand.
Mark Wooding [Sat, 3 Aug 2019 19:40:27 +0000 (20:40 +0100)]
doc/runtime.tex: Fix linking for `obj.teardown' message.
Use new `\descref*' and `\autopageref'.
Mark Wooding [Sat, 3 Aug 2019 19:39:09 +0000 (20:39 +0100)]
doc/: Add `*' option to `\descref' to suppress the page number.
Now you only get the hyperlink.
Mark Wooding [Sat, 3 Aug 2019 19:09:07 +0000 (20:09 +0100)]
doc/concepts.tex: Make a footnote a bit less stuffy.
Mark Wooding [Sat, 3 Aug 2019 19:07:08 +0000 (20:07 +0100)]
doc/runtime.tex, lib/keyword.3: Explain the other benefit of `NO_KWARGS'.
It's not just for hacking around C89 after all.
Mark Wooding [Sat, 3 Aug 2019 15:49:55 +0000 (16:49 +0100)]
doc/concepts.tex: Add some clarifications about initargs.
Mark Wooding [Sat, 3 Aug 2019 15:48:53 +0000 (16:48 +0100)]
doc/concepts.tex: Briefly explain translation-time metaobjects.
Mark Wooding [Sat, 3 Aug 2019 15:47:15 +0000 (16:47 +0100)]
doc/concepts.tex: Delete `no way to discover alignment for instance' claim.
Replace with a reference to the `align' class slot.
Mark Wooding [Sat, 3 Aug 2019 15:46:46 +0000 (16:46 +0100)]
doc/misc.tex: Document many utilities.
Mark Wooding [Sat, 3 Aug 2019 15:41:53 +0000 (16:41 +0100)]
doc/misc.tex: Fix keyword argument name in `find-duplicates'.
Mark Wooding [Sat, 3 Aug 2019 15:40:21 +0000 (16:40 +0100)]
doc/misc.tex: `parse-body' is a function, not a macro.
Mark Wooding [Sat, 3 Aug 2019 15:36:24 +0000 (16:36 +0100)]
doc/misc.tex: Recategorize some descriptions.
* `loc' is a locative thing, not a macro thing.
* `distinguished-point-shortest-paths' doesn't do anything with lists.
* `whitespace-char-p' doesn't track positions.
squash! doc/misc.tex: Recategorize some descriptions.
Mark Wooding [Sat, 3 Aug 2019 15:26:27 +0000 (16:26 +0100)]
doc/structures.tex: Confess to a slight lie about header files.
Mark Wooding [Sat, 3 Aug 2019 15:20:30 +0000 (16:20 +0100)]
doc/: Invent an override for `\xref' categories, and use it.
The most important thing here is to able to list two things as `sections
X and Y'. I can't use plain `\ref' for this any more because I'm
relying on `\xref' to highlight the category name.
Mark Wooding [Sat, 3 Aug 2019 15:23:05 +0000 (16:23 +0100)]
doc/concepts.tex: Link to `SodObject' for the `init' message.
Mark Wooding [Sat, 3 Aug 2019 15:24:08 +0000 (16:24 +0100)]
doc/concepts.tex: Fix subclass/superclass confusion.
If I can't get this right, my readers don't stand a chance.
Mark Wooding [Sat, 3 Aug 2019 15:17:48 +0000 (16:17 +0100)]
doc/sod.sty: Highlight hyperlinks to descriptions better.
Make the name itself be a link, and highlight `page' as part of the page
link.
Mark Wooding [Sat, 3 Aug 2019 15:17:17 +0000 (16:17 +0100)]
doc/sod.sty: Index `*earmuffs*' and `:keywords' more usefully.
Using the new machinery.
Mark Wooding [Sat, 3 Aug 2019 15:16:40 +0000 (16:16 +0100)]
doc/sod.sty: Let the modifier control labelling and indexing.
Mark Wooding [Sat, 3 Aug 2019 15:15:15 +0000 (16:15 +0100)]
doc/sod.sty: Rename `descmod' to `modcat'.
There'll be more `mod...' things along soon.
Mark Wooding [Sat, 3 Aug 2019 15:12:29 +0000 (16:12 +0100)]
doc/sod.sty: Hoist `\@desc@dispatch' above its call sites.
Mark Wooding [Sat, 3 Aug 2019 15:11:24 +0000 (16:11 +0100)]
doc/sod.sty: Forbid page breaks between description header entries.
Mark Wooding [Sat, 3 Aug 2019 15:10:54 +0000 (16:10 +0100)]
doc/sod.sty: Make internal PDF links go to the right places.
Mark Wooding [Sat, 3 Aug 2019 15:08:57 +0000 (16:08 +0100)]
doc/runtime.tex: Line-wrapping failure.
Mark Wooding [Sat, 3 Aug 2019 15:08:25 +0000 (16:08 +0100)]
doc/structures.tex: Mention that the Sod examples are fictitious.
Mark Wooding [Sat, 3 Aug 2019 15:07:25 +0000 (16:07 +0100)]
doc/structures.tex: Missing line break.
Mark Wooding [Sat, 3 Aug 2019 15:06:59 +0000 (16:06 +0100)]
doc/concepts.tex: Fix description of C-fragment syntax.
Mark Wooding [Sat, 3 Aug 2019 15:06:14 +0000 (16:06 +0100)]
lib/keyword.3, doc/concepts.tex: Mention performance of keyword arguments.
It's surprisingly not that bad.
Mark Wooding [Sat, 3 Aug 2019 15:05:44 +0000 (16:05 +0100)]
lib/keyword.3: Missing word.
Mark Wooding [Sat, 3 Aug 2019 15:04:43 +0000 (16:04 +0100)]
doc/: Fix <metasyntactic-variable>s which were missing their `@'.
Mark Wooding [Sat, 3 Aug 2019 15:02:51 +0000 (16:02 +0100)]
lib/sod.h: Fix formatting failure.
Mark Wooding [Sat, 3 Aug 2019 15:01:56 +0000 (16:01 +0100)]
lib/keyword.h, src/method-impl.lisp: Check user keywords first.
For better performance, check the user's specific keywords before the
magic built-in ones.
Mark Wooding [Sat, 3 Aug 2019 15:01:21 +0000 (16:01 +0100)]
lib/keyword.h: Random commentary fixes.
Mark Wooding [Sat, 3 Aug 2019 15:00:09 +0000 (16:00 +0100)]
lib/keyword.c, src/method-impl.lisp: Use `kw.valist' consistently.
Argh. I had `kw.va_list' intermixed. Settle on the version without the
underscore (because it matches `K_VALIST' better).
Mark Wooding [Sat, 3 Aug 2019 14:56:10 +0000 (15:56 +0100)]
src/builtin.lisp: Keep the first initarg in the list.
Otherwise a superclass unexpectedly defining an initarg will cause it to
be demoted relative to other initargs.
Mark Wooding [Sat, 3 Aug 2019 14:55:03 +0000 (15:55 +0100)]
src/builtin.lisp: Don't assume we have an initializer if there are initargs.
This caused an ugly crash with the text
class Foo: SodObject {
[initarg = x] int x;
}
Mark Wooding [Sat, 3 Aug 2019 14:53:21 +0000 (15:53 +0100)]
src/class-make-impl.lisp: Attach initargs in the correct order.
This is important for selecting the right slot initarg.
Mark Wooding [Sat, 3 Aug 2019 14:20:46 +0000 (15:20 +0100)]
src/class-make-{proto,impl}.lisp: Don't make duplicate initargs.
If you set an initarg property on a slot definition which includes an
initializer then both the slot definition and the initializer act on the
initarg property and you end up with two initargs. This isn't actually
a major problem, but it's ugly.
Add a new keyword argument to `make-sod-instance-initializer' to prevent
this from happening.
Mark Wooding [Sat, 3 Aug 2019 14:40:37 +0000 (15:40 +0100)]
src/class-make-{proto,impl}.lisp, ...: Use &key rather than &optional.
This makes it easier to add new bells and whistles as needed.
Mark Wooding [Sat, 3 Aug 2019 14:18:14 +0000 (15:18 +0100)]
doc/meta.tex: Use correct names for `make-sod-MUMBLE-initializer'.
Mark Wooding [Sat, 3 Aug 2019 14:15:57 +0000 (15:15 +0100)]
src/classes.lisp: Give initargs a useful print representation.
Mark Wooding [Sat, 3 Aug 2019 14:07:39 +0000 (15:07 +0100)]
src/parser/floc-proto.lisp, src/utilities.lisp: Move generic condition stuff.
Move the non-location-specific condition machinery from `sod-parser' to
`sod-utilities' where it makes more sense.
Also, give `my-cerror' a more sensible name (`promiscuous-cerror') now
that it needs to be exported.
Mark Wooding [Sat, 3 Aug 2019 14:01:14 +0000 (15:01 +0100)]
src/utilities.lisp (categorize): Don't leak the ITEMS-VAR into the body.
The body forms only need the CAT-VARs, so that's all that should be
bound in their environment.
Mark Wooding [Sat, 3 Aug 2019 13:59:40 +0000 (14:59 +0100)]
src/utilities.lisp: Convert merge candidates to presentation form on the fly.
In `inconsistent-merge-error', retain the raw list of candidates, and
the presentation function, rather than requiring the caller to convert
the candidates when constructing the condition object. This makes the
list considerably more useful to condition handler code.
Mark Wooding [Sat, 3 Aug 2019 13:58:37 +0000 (14:58 +0100)]
.skelrc: Fix for change to licence machinery.
Mark Wooding [Mon, 29 Jul 2019 10:46:51 +0000 (11:46 +0100)]
src/module-proto.lisp: Fix word-wrapping in a docstring.
Mark Wooding [Mon, 29 Jul 2019 09:54:36 +0000 (10:54 +0100)]
doc/misc.tex: Divide `Miscellaneous utilities' into subsections.
Also reorder some of the items to make things fit better.
Mark Wooding [Sun, 28 Jul 2019 02:12:44 +0000 (03:12 +0100)]
doc/sod.sty: Allow setting the description modifier explicitly.
This is necessary if the name is also picked out explicitly. There are
currently no uses of this facility, but it's provided for completeness's
sake.
Mark Wooding [Sun, 28 Jul 2019 02:10:23 +0000 (03:10 +0100)]
doc/sod.sty, doc/*.tex: Support category-specific arguments.
Now description categories can accept arguments and influence labels and
indexing. Use this to collect method specializers and report them in
the index.
Mark Wooding [Sun, 28 Jul 2019 01:46:25 +0000 (02:46 +0100)]
doc/sod.sty: Add indirection for printing modified description names.
The previous version just printed `MOD-' in front of the description
category name. Now:
* there's a `\descmod/MOD' macro which should decorate an appropriate
piece of the category name; and
* the category name macros themselves take an argument which they
should apply to the part of the name which should be decorated.
Mark Wooding [Sun, 28 Jul 2019 01:44:10 +0000 (02:44 +0100)]
doc/sod.sty: Typeset method roles as keywords in descriptions.
Mark Wooding [Sun, 28 Jul 2019 01:28:24 +0000 (02:28 +0100)]
doc/sod.sty: Handle `setf' functions and friends in a more useful way.
* Extend the `dhead' protocol to include a new MOD argument, which is
usually empty, but may be something like `setf' to denote a modified
thing.
* Include the modification (if not empty) in the label, index subitem,
and the description headline.
This is still rather rough, but will be refined soon.
Mark Wooding [Sat, 27 Jul 2019 16:25:18 +0000 (17:25 +0100)]
doc/sod.sty, doc/*.tex: Put optional explicit name right before synopsis.
This makes the argument order better, and also clears space at the start
of the argument list for a different optional thing.
Mark Wooding [Sat, 27 Jul 2019 16:22:39 +0000 (17:22 +0100)]
doc/concepts.tex: Clearly distinguish between types and classes.
C++ bungles this one badly, but we can do better.
Mark Wooding [Sat, 27 Jul 2019 16:22:06 +0000 (17:22 +0100)]
doc/concepts.tex: Explicitly define `instances' clearly.
Mark Wooding [Sat, 27 Jul 2019 16:21:16 +0000 (17:21 +0100)]
doc/structures.tex, lib/sod-structs.3: Fix unclear language.
Mark Wooding [Sat, 27 Jul 2019 16:11:12 +0000 (17:11 +0100)]
doc/*.tex: Delete duplicate description entries.
Mark Wooding [Sat, 27 Jul 2019 16:06:32 +0000 (17:06 +0100)]
doc/clang.tex: Remove indexing override for `setf' function.
We'll handle them in a better way later.
Mark Wooding [Sat, 27 Jul 2019 16:06:03 +0000 (17:06 +0100)]
doc/misc.tex: Fix copied-and-pasted section label.
Mark Wooding [Sat, 27 Jul 2019 16:05:45 +0000 (17:05 +0100)]
doc/parsing.tex: Zap a stray `>'.
Mark Wooding [Sat, 27 Jul 2019 16:03:46 +0000 (17:03 +0100)]
doc/clang.tex: Fix some slightly garbled text.
Mark Wooding [Sat, 27 Jul 2019 15:48:15 +0000 (16:48 +0100)]
doc/sod.sty: Reorder description-head arguments.
This is purely an internal change, between `\parse@dhd' and `\dhead@'.
Mark Wooding [Sat, 27 Jul 2019 15:32:41 +0000 (16:32 +0100)]
doc/sod.sty: Add commentary to help following `\parse@dhd' and friends.
Mostly just comments and newlines, but two code changes:
* the internal steps of `\parse@dhd' have been renamed to anticipate
future developments; and
* `\parse@dhd@cc' has been uncurried.
Mark Wooding [Sat, 27 Jul 2019 15:30:01 +0000 (16:30 +0100)]
doc/sod.tex: Pull index sub-items into their own paragraphs.
Items with multiple sub-items end up being quite hard to read. It may
be necessary to do something more complicated here.
Mark Wooding [Sat, 27 Jul 2019 13:58:06 +0000 (14:58 +0100)]
doc/sod.sty: Add `fixme' notices to the index.
Mark Wooding [Sat, 27 Jul 2019 13:17:14 +0000 (14:17 +0100)]
STYLE: Add a big section about C style.
Mark Wooding [Sat, 27 Jul 2019 13:15:41 +0000 (14:15 +0100)]
STYLE: Make this document cover multiple languages.
Add a language-neutral section to the top, and demote all of the Lisp
stuff by a level.
Mark Wooding [Sat, 27 Jul 2019 13:14:15 +0000 (14:14 +0100)]
STYLE: Add more on horizontal whitespace issues.
Mark Wooding [Sat, 27 Jul 2019 13:12:26 +0000 (14:12 +0100)]
STYLE: Expand on a couple of remarks.
Mark Wooding [Sat, 27 Jul 2019 13:10:51 +0000 (14:10 +0100)]
doc/syntax.tex: Add property definitions to module syntax.
Currently not defined, which is a shame.