sod
4 years agodoc/sod.sty: Forbid page breaks between description header entries.
Mark Wooding [Sat, 3 Aug 2019 15:11:24 +0000 (16:11 +0100)]
doc/sod.sty: Forbid page breaks between description header entries.

4 years agodoc/sod.sty: Make internal PDF links go to the right places.
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.

4 years agodoc/runtime.tex: Line-wrapping failure.
Mark Wooding [Sat, 3 Aug 2019 15:08:57 +0000 (16:08 +0100)]
doc/runtime.tex: Line-wrapping failure.

4 years agodoc/structures.tex: Mention that the Sod examples are fictitious.
Mark Wooding [Sat, 3 Aug 2019 15:08:25 +0000 (16:08 +0100)]
doc/structures.tex: Mention that the Sod examples are fictitious.

4 years agodoc/structures.tex: Missing line break.
Mark Wooding [Sat, 3 Aug 2019 15:07:25 +0000 (16:07 +0100)]
doc/structures.tex: Missing line break.

4 years agodoc/concepts.tex: Fix description of C-fragment syntax.
Mark Wooding [Sat, 3 Aug 2019 15:06:59 +0000 (16:06 +0100)]
doc/concepts.tex: Fix description of C-fragment syntax.

4 years agolib/keyword.3, doc/concepts.tex: Mention performance of keyword arguments.
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.

4 years agolib/keyword.3: Missing word.
Mark Wooding [Sat, 3 Aug 2019 15:05:44 +0000 (16:05 +0100)]
lib/keyword.3: Missing word.

4 years agodoc/: Fix <metasyntactic-variable>s which were missing their `@'.
Mark Wooding [Sat, 3 Aug 2019 15:04:43 +0000 (16:04 +0100)]
doc/: Fix <metasyntactic-variable>s which were missing their `@'.

4 years agolib/sod.h: Fix formatting failure.
Mark Wooding [Sat, 3 Aug 2019 15:02:51 +0000 (16:02 +0100)]
lib/sod.h: Fix formatting failure.

4 years agolib/keyword.h, src/method-impl.lisp: Check user keywords first.
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.

4 years agolib/keyword.h: Random commentary fixes.
Mark Wooding [Sat, 3 Aug 2019 15:01:21 +0000 (16:01 +0100)]
lib/keyword.h: Random commentary fixes.

4 years agolib/keyword.c, src/method-impl.lisp: Use `kw.valist' consistently.
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).

4 years agosrc/builtin.lisp: Keep the first initarg in the list.
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.

4 years agosrc/builtin.lisp: Don't assume we have an initializer if there are 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;
}

4 years agosrc/class-make-impl.lisp: Attach initargs in the correct order.
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.

4 years agosrc/class-make-{proto,impl}.lisp: Don't make duplicate initargs.
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.

4 years agosrc/class-make-{proto,impl}.lisp, ...: Use &key rather than &optional.
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.

4 years agodoc/meta.tex: Use correct names for `make-sod-MUMBLE-initializer'.
Mark Wooding [Sat, 3 Aug 2019 14:18:14 +0000 (15:18 +0100)]
doc/meta.tex: Use correct names for `make-sod-MUMBLE-initializer'.

4 years agosrc/classes.lisp: Give initargs a useful print representation.
Mark Wooding [Sat, 3 Aug 2019 14:15:57 +0000 (15:15 +0100)]
src/classes.lisp: Give initargs a useful print representation.

4 years agosrc/parser/floc-proto.lisp, src/utilities.lisp: Move generic condition stuff.
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.

4 years agosrc/utilities.lisp (categorize): Don't leak the ITEMS-VAR into the body.
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.

4 years agosrc/utilities.lisp: Convert merge candidates to presentation form on the fly.
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.

4 years ago.skelrc: Fix for change to licence machinery.
Mark Wooding [Sat, 3 Aug 2019 13:58:37 +0000 (14:58 +0100)]
.skelrc: Fix for change to licence machinery.

4 years agosrc/module-proto.lisp: Fix word-wrapping in a docstring.
Mark Wooding [Mon, 29 Jul 2019 10:46:51 +0000 (11:46 +0100)]
src/module-proto.lisp: Fix word-wrapping in a docstring.

4 years agodoc/misc.tex: Divide `Miscellaneous utilities' into subsections.
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.

4 years agodoc/sod.sty: Allow setting the description modifier explicitly.
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.

4 years agodoc/sod.sty, doc/*.tex: Support category-specific arguments.
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.

4 years agodoc/sod.sty: Add indirection for printing modified description names.
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.

4 years agodoc/sod.sty: Typeset method roles as keywords in descriptions.
Mark Wooding [Sun, 28 Jul 2019 01:44:10 +0000 (02:44 +0100)]
doc/sod.sty: Typeset method roles as keywords in descriptions.

4 years agodoc/sod.sty: Handle `setf' functions and friends in a more useful way.
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.

4 years agodoc/sod.sty, doc/*.tex: Put optional explicit name right before synopsis.
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.

4 years agodoc/concepts.tex: Clearly distinguish between types and classes.
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.

4 years agodoc/concepts.tex: Explicitly define `instances' clearly.
Mark Wooding [Sat, 27 Jul 2019 16:22:06 +0000 (17:22 +0100)]
doc/concepts.tex: Explicitly define `instances' clearly.

4 years agodoc/structures.tex, lib/sod-structs.3: Fix unclear language.
Mark Wooding [Sat, 27 Jul 2019 16:21:16 +0000 (17:21 +0100)]
doc/structures.tex, lib/sod-structs.3: Fix unclear language.

4 years agodoc/*.tex: Delete duplicate description entries.
Mark Wooding [Sat, 27 Jul 2019 16:11:12 +0000 (17:11 +0100)]
doc/*.tex: Delete duplicate description entries.

4 years agodoc/clang.tex: Remove indexing override for `setf' function.
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.

4 years agodoc/misc.tex: Fix copied-and-pasted section label.
Mark Wooding [Sat, 27 Jul 2019 16:06:03 +0000 (17:06 +0100)]
doc/misc.tex: Fix copied-and-pasted section label.

4 years agodoc/parsing.tex: Zap a stray `>'.
Mark Wooding [Sat, 27 Jul 2019 16:05:45 +0000 (17:05 +0100)]
doc/parsing.tex: Zap a stray `>'.

4 years agodoc/clang.tex: Fix some slightly garbled text.
Mark Wooding [Sat, 27 Jul 2019 16:03:46 +0000 (17:03 +0100)]
doc/clang.tex: Fix some slightly garbled text.

4 years agodoc/sod.sty: Reorder description-head arguments.
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@'.

4 years agodoc/sod.sty: Add commentary to help following `\parse@dhd' and friends.
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.

4 years agodoc/sod.tex: Pull index sub-items into their own paragraphs.
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.

4 years agodoc/sod.sty: Add `fixme' notices to the index.
Mark Wooding [Sat, 27 Jul 2019 13:58:06 +0000 (14:58 +0100)]
doc/sod.sty: Add `fixme' notices to the index.

4 years agoSTYLE: Add a big section about C style.
Mark Wooding [Sat, 27 Jul 2019 13:17:14 +0000 (14:17 +0100)]
STYLE: Add a big section about C style.

4 years agoSTYLE: Make this document cover multiple languages.
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.

4 years agoSTYLE: Add more on horizontal whitespace issues.
Mark Wooding [Sat, 27 Jul 2019 13:14:15 +0000 (14:14 +0100)]
STYLE: Add more on horizontal whitespace issues.

4 years agoSTYLE: Expand on a couple of remarks.
Mark Wooding [Sat, 27 Jul 2019 13:12:26 +0000 (14:12 +0100)]
STYLE: Expand on a couple of remarks.

4 years agodoc/syntax.tex: Add property definitions to module syntax.
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.

4 years agodoc/syntax.tex: Add module- and class-level productions for extensions.
Mark Wooding [Sat, 27 Jul 2019 13:10:11 +0000 (14:10 +0100)]
doc/syntax.tex: Add module- and class-level productions for extensions.

4 years agodoc/syntax.tex: Expand on what modules are.
Mark Wooding [Sat, 27 Jul 2019 13:09:54 +0000 (14:09 +0100)]
doc/syntax.tex: Expand on what modules are.

4 years agodoc/syntax.tex: Hoist `Properties' to section level and expand.
Mark Wooding [Sat, 27 Jul 2019 12:29:16 +0000 (13:29 +0100)]
doc/syntax.tex: Hoist `Properties' to section level and expand.

4 years agodoc/syntax.tex: Hoist `C-types' to section level.
Mark Wooding [Sat, 27 Jul 2019 12:27:50 +0000 (13:27 +0100)]
doc/syntax.tex: Hoist `C-types' to section level.

4 years agodoc/syntax.tex: Promote `Integer literals' to subsection.
Mark Wooding [Sat, 27 Jul 2019 12:25:51 +0000 (13:25 +0100)]
doc/syntax.tex: Promote `Integer literals' to subsection.

For consistency.  This was just a mistake, or a half-finished edit.

4 years agodoc/concepts.tex: Fix description of merging keyword argument lists.
Mark Wooding [Sat, 27 Jul 2019 12:07:49 +0000 (13:07 +0100)]
doc/concepts.tex: Fix description of merging keyword argument lists.

It doesn't matter whether the applicable methods come from different
superclasses: we have to merge everything.

4 years agodoc/concepts.tex: Add cross-ref to conversions in slot-access description.
Mark Wooding [Sat, 27 Jul 2019 11:59:32 +0000 (12:59 +0100)]
doc/concepts.tex: Add cross-ref to conversions in slot-access description.

4 years agodoc/concepts.tex: Delete fixme-ref to direct instances.
Mark Wooding [Sat, 27 Jul 2019 12:04:56 +0000 (13:04 +0100)]
doc/concepts.tex: Delete fixme-ref to direct instances.

They've been defined for ages, and this is established terminology by
now.

4 years agodoc/structures.tex: Put two spaces between sentences.
Mark Wooding [Sat, 27 Jul 2019 11:57:34 +0000 (12:57 +0100)]
doc/structures.tex: Put two spaces between sentences.

4 years agodoc/refintro.tex: Describe a fancy feature of the syntax notation.
Mark Wooding [Sat, 27 Jul 2019 11:56:34 +0000 (12:56 +0100)]
doc/refintro.tex: Describe a fancy feature of the syntax notation.

4 years agodoc/concepts.tex: Fix vertical space above subsections.
Mark Wooding [Sat, 27 Jul 2019 11:52:13 +0000 (12:52 +0100)]
doc/concepts.tex: Fix vertical space above subsections.

4 years agodoc/concepts.tex: Replace prose description by a source example.
Mark Wooding [Sat, 27 Jul 2019 11:40:52 +0000 (12:40 +0100)]
doc/concepts.tex: Replace prose description by a source example.

4 years agodoc/concepts.tex: Fix superclass/subclass confusion.
Mark Wooding [Sat, 27 Jul 2019 11:39:26 +0000 (12:39 +0100)]
doc/concepts.tex: Fix superclass/subclass confusion.

4 years agodoc/concepts.tex: Fix directed-graph terminology.
Mark Wooding [Sat, 27 Jul 2019 11:38:18 +0000 (12:38 +0100)]
doc/concepts.tex: Fix directed-graph terminology.

Vertex/edge are for undirected graphs; node/arc are for directed ones.

4 years agodoc/*.tex: Prefer @|...| over @"..." for general typeset-as-code.
Mark Wooding [Sat, 27 Jul 2019 00:10:55 +0000 (01:10 +0100)]
doc/*.tex: Prefer @|...| over @"..." for general typeset-as-code.

The latter is strictly for literal tokens, rather than general code.

4 years agosrc/pset-impl.lisp: Decode C fragments as property values.
Mark Wooding [Sat, 27 Jul 2019 11:51:27 +0000 (12:51 +0100)]
src/pset-impl.lisp: Decode C fragments as property values.

4 years agosrc/pset-{proto,impl}.lisp: Move `decode-property' methods to `impl'.
Mark Wooding [Sat, 27 Jul 2019 00:05:41 +0000 (01:05 +0100)]
src/pset-{proto,impl}.lisp: Move `decode-property' methods to `impl'.

Most of these don't count as part of the protocol.

4 years agosrc/pset-parse.lisp: Report `{' and `<' as expected tokens in errors.
Mark Wooding [Sat, 27 Jul 2019 00:04:30 +0000 (01:04 +0100)]
src/pset-parse.lisp: Report `{' and `<' as expected tokens in errors.

For fragments and types, respectively.

4 years agosrc/pset-parse.lisp: Mention fragment and type expressions in docstring.
Mark Wooding [Sat, 27 Jul 2019 00:03:36 +0000 (01:03 +0100)]
src/pset-parse.lisp: Mention fragment and type expressions in docstring.

4 years agosrc/pset-impl.lisp: Improve boolean literal handling.
Mark Wooding [Sat, 27 Jul 2019 00:01:47 +0000 (01:01 +0100)]
src/pset-impl.lisp: Improve boolean literal handling.

  * Allow `on' and `off'.

  * Recognize literals case-insensitively.

4 years agosrc/optparse.lisp: Quote literals properly.
Mark Wooding [Sat, 27 Jul 2019 00:01:22 +0000 (01:01 +0100)]
src/optparse.lisp: Quote literals properly.

4 years agosrc/module-{proto,impl}.lisp: Publish fragments properly.
Mark Wooding [Sat, 27 Jul 2019 00:00:40 +0000 (01:00 +0100)]
src/module-{proto,impl}.lisp: Publish fragments properly.

Not sure why this was languishing in `module-impl.lisp'.

4 years agosrc/sod.asd.in: Note missing dependency of `module-proto' on `pset-proto'.
Mark Wooding [Sat, 27 Jul 2019 11:53:59 +0000 (12:53 +0100)]
src/sod.asd.in: Note missing dependency of `module-proto' on `pset-proto'.

The definition of the `module' class includes a `pset' object.

4 years agoSTYLE: Explain how to indent lambda-lists.
Mark Wooding [Sat, 27 Jul 2019 11:23:47 +0000 (12:23 +0100)]
STYLE: Explain how to indent lambda-lists.

4 years agosrc/: Improve formatting of big lambda-lists.
Mark Wooding [Fri, 26 Jul 2019 23:50:49 +0000 (00:50 +0100)]
src/: Improve formatting of big lambda-lists.

4 years agosrc/c-types-impl.lisp: Remember `signed' as a C-level synonym for `int'.
Mark Wooding [Fri, 26 Jul 2019 23:48:46 +0000 (00:48 +0100)]
src/c-types-impl.lisp: Remember `signed' as a C-level synonym for `int'.

4 years agolib/keyword.h: Fix typo in commentary.
Mark Wooding [Fri, 26 Jul 2019 23:47:13 +0000 (00:47 +0100)]
lib/keyword.h: Fix typo in commentary.

4 years agolib/Makefile: Fix bogus formatting.
Mark Wooding [Fri, 26 Jul 2019 23:44:31 +0000 (00:44 +0100)]
lib/Makefile: Fix bogus formatting.

4 years agodoc/concepts.tex: Start work on documenting metaclasses.
Mark Wooding [Sat, 27 Jul 2019 13:44:43 +0000 (14:44 +0100)]
doc/concepts.tex: Start work on documenting metaclasses.

4 years agodoc/concepts.tex: Add class-precedence-list examples, with diagrams.
Mark Wooding [Sat, 27 Jul 2019 13:43:14 +0000 (14:43 +0100)]
doc/concepts.tex: Add class-precedence-list examples, with diagrams.

4 years agodoc/concepts.tex: Mention class-slot initializers; cross-ref to metaclasses.
Mark Wooding [Sat, 27 Jul 2019 13:42:18 +0000 (14:42 +0100)]
doc/concepts.tex: Mention class-slot initializers; cross-ref to metaclasses.

4 years agodoc/concepts.tex: Rearrange message-sending documentation.
Mark Wooding [Sat, 27 Jul 2019 13:41:14 +0000 (14:41 +0100)]
doc/concepts.tex: Rearrange message-sending documentation.

Replace `Vtables' stub under `C language integration' with `Sending
messages', and write some stuff.  Rename `Sending messages in C' under
`Messages and methods' to `Method entries'.

4 years agodoc/concepts.tex: Fix cross-reference to compatibility section.
Mark Wooding [Sat, 27 Jul 2019 13:40:55 +0000 (14:40 +0100)]
doc/concepts.tex: Fix cross-reference to compatibility section.

4 years agodoc/*.tex: Use `\fixme' macro rather than `[FIXME]' in prose.
Mark Wooding [Sat, 27 Jul 2019 13:40:36 +0000 (14:40 +0100)]
doc/*.tex: Use `\fixme' macro rather than `[FIXME]' in prose.

4 years agodoc/concepts.tex: Missing blank line before subsection.
Mark Wooding [Sat, 27 Jul 2019 13:38:37 +0000 (14:38 +0100)]
doc/concepts.tex: Missing blank line before subsection.

4 years agodoc/concepts.tex: Centre the (overwide) method-combination diagram.
Mark Wooding [Sat, 27 Jul 2019 13:35:26 +0000 (14:35 +0100)]
doc/concepts.tex: Centre the (overwide) method-combination diagram.

4 years agodoc/sod.sty: Add `lit' TikZ style for literal text.
Mark Wooding [Sat, 27 Jul 2019 13:44:13 +0000 (14:44 +0100)]
doc/sod.sty: Add `lit' TikZ style for literal text.

5 years ago.gitignore: Ignore `makeindex' debris.
Mark Wooding [Mon, 9 Jul 2018 12:08:20 +0000 (13:08 +0100)]
.gitignore: Ignore `makeindex' debris.

5 years agodoc/: A bibliography! With citations!
Mark Wooding [Mon, 9 Jul 2018 12:06:16 +0000 (13:06 +0100)]
doc/: A bibliography!  With citations!

Currently this uses pieces of Nelson Beebe's computer science
bibliography directly.  At some point I'll extract the pieces I need.

5 years agosrc/class-make-impl.lisp (check-method-argument-lists): Fix docstring.
Mark Wooding [Mon, 9 Jul 2018 12:05:29 +0000 (13:05 +0100)]
src/class-make-impl.lisp (check-method-argument-lists): Fix docstring.

5 years agosrc/module-parse.lisp (parse-class-body): Check for duplicate superclasses.
Mark Wooding [Mon, 9 Jul 2018 12:04:38 +0000 (13:04 +0100)]
src/module-parse.lisp (parse-class-body): Check for duplicate superclasses.

It turns out that this is a thing that can happen.  Catch it early
rather than waiting for a less helpful message during CPL construction.

5 years agosrc/module-parse.lisp (parse-class-body): Refactor superclass list.
Mark Wooding [Mon, 9 Jul 2018 12:03:48 +0000 (13:03 +0100)]
src/module-parse.lisp (parse-class-body): Refactor superclass list.

Arrange to be able to do more computation on the direct superclass
list.  No functional change for now.

5 years agosrc/utilities.lisp, src/class-finalize-impl.lisp: Add `find-duplicates'.
Mark Wooding [Mon, 9 Jul 2018 11:56:28 +0000 (12:56 +0100)]
src/utilities.lisp, src/class-finalize-impl.lisp: Add `find-duplicates'.

Replace the internal `check-list' function in `check-sod-class' with a
proper, if strangely shaped, utility function.

5 years agosrc/: Check that methods are compatible during class finalization.
Mark Wooding [Mon, 9 Jul 2018 11:53:52 +0000 (12:53 +0100)]
src/: Check that methods are compatible during class finalization.

This is the payoff from the previous refactoring.  Check, specifically,
that the keyword argument types among the applicable methods are
compatible.  Otherwise we only find out about this during effective-
method computation, which happens during output, and it's too late to
stop the presses.

5 years agosrc/: Lift keyword-argument protocol from effective methods to messages.
Mark Wooding [Mon, 9 Jul 2018 11:48:26 +0000 (12:48 +0100)]
src/: Lift keyword-argument protocol from effective methods to messages.

We're going to want to use this stuff during class finalization, before
we've made the effective methods.

This also refactors the machinery somewhat, introducing a new function
`compute-effective-method-keyword-arguments' to do the slightly fiddly
work in initializing `effective-method'.

5 years agosrc/class-layout-impl.lisp: Abstract out `sod-message-applicable-methods'.
Mark Wooding [Mon, 9 Jul 2018 11:19:19 +0000 (12:19 +0100)]
src/class-layout-impl.lisp: Abstract out `sod-message-applicable-methods'.

We shall want this more later.

5 years agodoc/sod.sty, doc/concepts.tex: Pull out common style features.
Mark Wooding [Sat, 7 Jul 2018 20:55:36 +0000 (21:55 +0100)]
doc/sod.sty, doc/concepts.tex: Pull out common style features.

Thicker lines, stealth arrows.

5 years agodoc/sod.sty: Add `\fixme' macro for making omissions more obvious.
Mark Wooding [Sat, 7 Jul 2018 13:56:07 +0000 (14:56 +0100)]
doc/sod.sty: Add `\fixme' macro for making omissions more obvious.

5 years agodoc/sod.tex: Number mathematical things within sections.
Mark Wooding [Sat, 7 Jul 2018 13:54:31 +0000 (14:54 +0100)]
doc/sod.tex: Number mathematical things within sections.

Maybe this should be within subsections, but that makes the numbers
awfully long.

5 years agosrc/package.lisp: Have `sod-user' use `sod-parser' and the `utilities'.
Mark Wooding [Sat, 7 Jul 2018 13:36:45 +0000 (14:36 +0100)]
src/package.lisp: Have `sod-user' use `sod-parser' and the `utilities'.

I'm not so sure about the utilities, but the parser machinery exports
lots of useful things such as `cerror*-with-location' which extensions
will definitely need.

5 years agosrc/classes.lisp: Fix docstring formatting.
Mark Wooding [Fri, 6 Jul 2018 23:12:23 +0000 (00:12 +0100)]
src/classes.lisp: Fix docstring formatting.

Is this the last holdout of the CAPITAL symbol names?