;;; -*-lisp-*-
;;;
-;;; System definition for the Simple Object Design translator
+;;; System definition for the Sensible Object Design translator
;;;
;;; (c) 2009 Straylight/Edgeware
;;;
(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"
: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
((: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"))
-
- ;; Lexical analysis.
- ;;(:file "proto-lexer" :depends-on ("parser"))
- ;;(:file "impl-lexer" :depends-on ("proto-lexer"))
+ (: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 "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 --------------------------------------------------