X-Git-Url: https://git.distorted.org.uk/~mdw/sod/blobdiff_plain/bf090e021a5c20da452a4841cdfb8eb78e29544e..259726f3c3f1d40c56b0d24c370fca4290f49e06:/src/sod.asd diff --git a/src/sod.asd b/src/sod.asd index 822afae..aae3be1 100644 --- a/src/sod.asd +++ b/src/sod.asd @@ -1,6 +1,6 @@ ;;; -*-lisp-*- ;;; -;;; System definition for the Simple Object Design translator +;;; System definition for the Sensible Object Design translator ;;; ;;; (c) 2009 Straylight/Edgeware ;;; @@ -34,7 +34,7 @@ (defsystem sod ;; Boring copyright stuff. - :version "1.0.0" + :version "0.2.0" :author "Mark Wooding" :license "GNU General Public License, version 2 or later" @@ -42,7 +42,7 @@ :description "A Sensible Object Design for C." :long-description - "This system implements a fairly simple, yet powerful object system for + "This system implements a fairly simple, yet powerful, object system for plain old C. Its main features are as follows. * Multiple inheritance, done properly (unlike C++, say), with a @@ -71,95 +71,111 @@ ((:file "package") ;; File location protocol (including error reporting). - (:file "proto-floc" :depends-on ("package")) - (:file "impl-floc" :depends-on ("proto-floc")) + (:file "floc-proto" :depends-on ("package")) + (:file "floc-impl" :depends-on ("floc-proto")) ;; Position-aware streams. - (:file "proto-streams" :depends-on ("package")) - (:file "impl-streams" :depends-on ("proto-streams" "proto-floc")) + (:file "streams-proto" :depends-on ("package")) + (:file "streams-impl" :depends-on ("streams-proto" "floc-proto")) ;; Scanner protocol, and various scanner implementations. - (:file "proto-scanner" :depends-on ("package")) - (:file "impl-scanner" :depends-on ("proto-scanner")) - (:file "impl-scanner-charbuf" :depends-on - ("proto-scanner" "proto-floc" "proto-streams")) - (:file "impl-scanner-token" :depends-on ("proto-scanner")) + (:file "scanner-proto" :depends-on ("package")) + (:file "scanner-impl" :depends-on ("scanner-proto")) + (:file "scanner-charbuf-impl" :depends-on + ("scanner-proto" "floc-proto" "streams-proto")) + (:file "scanner-token-impl" :depends-on ("scanner-proto")) ;; Parser notation macro support. - (:file "proto-parser" :depends-on ("package")) - (:file "impl-parser" :depends-on ("proto-parser")) + (:file "parser-proto" :depends-on ("package")) + (:file "parser-impl" :depends-on ("parser-proto")) ;; Expression parser support. - (:file "proto-parser-expr" :depends-on ("proto-parser")) - (:file "impl-parser-expr" :depends-on ("proto-parser-expr")) + (:file "parser-expr-proto" :depends-on ("parser-proto")) + (:file "parser-expr-impl" :depends-on ("parser-expr-proto")) ;; Stitching parsers to scanners. - (:file "impl-scanner-context" :depends-on - ("proto-parser" "proto-scanner")))) + (:file "scanner-context-impl" :depends-on + ("parser-proto" "scanner-proto")))) - (:file "package" :depends-on ("parser")) + (:file "package" :depends-on ("utilities" "parser")) + + ;; Lexical analysis. + (:file "lexer-proto" :depends-on ("package" "parser")) + (:file "lexer-impl" :depends-on ("lexer-proto")) + (:file "fragment-parse" :depends-on ("lexer-proto")) ;; C type representation protocol. - (:file "proto-c-types" :depends-on ("package")) - (:file "impl-c-types" :depends-on ("proto-c-types")) + (:file "c-types-proto" :depends-on ("package")) + (:file "c-types-impl" :depends-on ("c-types-proto")) + (:file "c-types-parse" :depends-on + ("c-types-proto" "c-types-class-impl" "fragment-parse")) ;; Property set protocol. - (:file "proto-pset" :depends-on ("package")) - (:file "impl-pset" :depends-on ("proto-pset")) - (:file "parse-pset" :depends-on ("proto-pset" "parse-lexical")) - - ;; Lexical analysis. - (:file "parse-lexical" :depends-on ("parser")) - (:file "parse-fragment" :depends-on ("parse-lexical")) + (:file "pset-proto" :depends-on ("package")) + (:file "pset-impl" :depends-on ("pset-proto")) + (:file "pset-parse" :depends-on ("pset-proto" "lexer-proto")) ;; Code generation protocol. - (:file "proto-codegen" :depends-on ("package")) - (:file "impl-codegen" :depends-on ("proto-codegen")) + (:file "codegen-proto" :depends-on ("module-proto")) + (:file "codegen-impl" :depends-on ("codegen-proto")) ;; Modules. - (:file "proto-module" :depends-on ("package")) - (:file "impl-module" :depends-on - ("proto-module" "proto-pset" "impl-c-types-class" "builtin")) - (:file "builtin" :depends-on ("proto-module" "proto-pset" "classes" - "impl-c-types" "impl-c-types-class")) - (:file "parse-module" :depends-on ("impl-module" - "parse-lexical" "parse-fragment")) + (:file "module-proto" :depends-on ("package")) + (:file "module-impl" :depends-on + ("module-proto" "pset-proto" "c-types-class-impl" "builtin")) + (:file "builtin" :depends-on + ("module-proto" "pset-proto" "c-types-impl" "c-types-class-impl" + "classes" "class-layout-proto")) + (:file "module-parse" :depends-on + ("class-make-proto" "class-finalize-proto" + "fragment-parse" "lexer-proto" "module-impl")) + (:file "module-output" :depends-on ("module-impl" "output-proto")) ;; Output. - (:file "proto-output" :depends-on ("package")) - (:file "impl-output" :depends-on ("proto-output")) + (:file "output-proto" :depends-on ("package")) + (:file "output-impl" :depends-on ("output-proto")) ;; Class representation. - (:file "classes" :depends-on ("package" "proto-c-types")) - (:file "impl-c-types-class" :depends-on ("classes" "proto-module")) + (:file "classes" :depends-on ("package" "c-types-proto")) + (:file "c-types-class-impl" :depends-on ("classes" "module-proto")) (:file "class-utilities" :depends-on - ("classes" "impl-codegen" "impl-pset" - "impl-c-types" "impl-c-types-class")) + ("classes" "codegen-impl" "pset-impl" + "c-types-impl" "c-types-class-impl")) ;; Class construction. - (:file "proto-class-make" :depends-on ("class-utilities")) - (:file "impl-class-make" :depends-on ("proto-class-make")) + (:file "class-make-proto" :depends-on ("class-utilities")) + (:file "class-make-impl" :depends-on ("class-make-proto")) ;; Class layout. - (:file "proto-class-layout" :depends-on ("class-utilities")) - (:file "impl-class-layout" :depends-on - ("proto-class-layout" "proto-method")) + (:file "class-layout-proto" :depends-on ("class-utilities")) + (:file "class-layout-impl" :depends-on + ("class-layout-proto" "method-proto")) ;; Class finalization. - (:file "proto-class-finalize" :depends-on ("class-utilities")) - (:file "impl-class-finalize" :depends-on ("proto-class-finalize")) + (:file "class-finalize-proto" :depends-on ("class-utilities")) + (:file "class-finalize-impl" :depends-on ("class-finalize-proto")) ;; Method generation. - (:file "proto-method" :depends-on ("class-utilities")) - (:file "impl-method" :depends-on ("proto-method")) + (:file "method-proto" :depends-on ("class-make-proto")) + (:file "method-impl" :depends-on ("method-proto")) + (:file "method-aggregate" :depends-on ("method-impl")) ;; Class output. - (:file "output-class" :depends-on ("proto-output" "classes")))) + (:file "class-output" :depends-on + ("classes" "class-layout-impl" "method-impl" "output-proto")) + + ;; Debugging and interactive testing. + (:file "debug" :depends-on ("builtin" "module-output")))) ;;;-------------------------------------------------------------------------- ;;; Testing. (defmethod perform ((op test-op) (component (eql (find-system "sod")))) - (operate 'test-op "sod-test" :force t)) + (declare (ignore op component)) + (handler-bind (((or warning style-warning) + (lambda (cond) + (declare (ignore cond)) + (invoke-restart 'muffle-warning)))) + (operate 'test-op "sod-test"))) ;;;----- That's all, folks --------------------------------------------------