X-Git-Url: https://git.distorted.org.uk/~mdw/sod/blobdiff_plain/1d8cc67a3f4ded443f5efc673a616883cbae9c50..refs/heads/master:/src/parser/streams-impl.lisp diff --git a/src/parser/streams-impl.lisp b/src/parser/streams-impl.lisp index d84bee4..b3bb424 100644 --- a/src/parser/streams-impl.lisp +++ b/src/parser/streams-impl.lisp @@ -7,7 +7,7 @@ ;;;----- Licensing notice --------------------------------------------------- ;;; -;;; This file is part of the Sensble Object Design, an object system for C. +;;; This file is part of the Sensible Object Design, an object system for C. ;;; ;;; SOD is free software; you can redistribute it and/or modify ;;; it under the terms of the GNU General Public License as published by @@ -210,39 +210,9 @@ ;; Base class. -(export '(position-aware-stream - position-aware-stream-line position-aware-stream-column)) -(defclass position-aware-stream (proxy-stream) - ((file :initarg :file :initform nil - :type pathname :accessor position-aware-stream-file) - (line :initarg :line :initform 1 - :type fixnum :accessor position-aware-stream-line) - (column :initarg :column :initform 0 - :type fixnum :accessor position-aware-stream-column)) - (:documentation - "Character stream which keeps track of the line and column position. - - A position-aware-stream wraps an existing character stream and tracks the - line and column position of the current stream position. A newline - character increases the line number by one and resets the column number to - zero; most characters advance the column number by one, but tab advances - to the next multiple of eight. (This is consistent with Emacs, at least.) - The position can be read using `stream-line-and-column'. - - This is a base class; you probably want `position-aware-input-stream' or - `position-aware-output-stream'.")) - -(defgeneric stream-line-and-column (stream) - (:documentation - "Returns the current stream position of STREAM as line/column numbers. - - Returns two values: the line and column numbers of STREAM's input - position.") - (:method ((stream stream)) - (values nil nil)) - (:method ((stream position-aware-stream)) - (with-slots (line column) stream - (values line column)))) +(defmethod stream-line-and-column ((stream position-aware-stream)) + (with-slots (line column) stream + (values line column))) (defmethod stream-pathname ((stream position-aware-stream)) "Return the pathname corresponding to a `position-aware-stream'. @@ -254,8 +224,8 @@ present back to a user. Secondly, a name can be attached to a stream which doesn't actually have a file backing it." - (with-slots (file) stream - (or file (call-next-method)))) + (or (position-aware-stream-file stream) + (call-next-method))) (defmethod file-location ((stream position-aware-stream)) (multiple-value-bind (line column) (stream-line-and-column stream) @@ -288,16 +258,6 @@ ;; Input stream. -(export 'position-aware-input-stream) -(defclass position-aware-input-stream - (position-aware-stream proxy-character-input-stream) - () - (:documentation - "A character input stream which tracks the input position. - - This is particularly useful for parsers and suchlike, which want to - produce accurate error-location information.")) - (defmethod stream-unread-char ((stream position-aware-input-stream) char) ;; I could have written this as a :before or :after method, but I think @@ -336,17 +296,6 @@ ;; Output stream. -(export 'position-aware-output-stream) -(defclass position-aware-output-stream - (position-aware-stream proxy-character-output-stream) - () - (:documentation - "A character output stream which tracks the output position. - - This is particularly useful when generating C code: the position can be - used to generate `#line' directives referring to the generated code after - insertion of some user code.")) - (defmethod stream-write-sequence ((stream position-aware-output-stream) seq #+clisp &key #-clisp &optional (start 0) end)