Hack src/sod.asd.in because pset now depends on c-types.
((value symbol) (type (eql :symbol)) (wanted (eql :id)))
(frob-identifier (symbol-name value)))
+;;; Types.
+
+(defmethod coerce-property-value
+ ((value string) (type (eql :id)) (wanted (eql :type)))
+ (or (gethash value *module-type-map*)
+ (gethash value *declspec-map*)
+ (error "Unknown type `~A'." value)))
+
;;;--------------------------------------------------------------------------
;;; Property sets.
term: factor | term `*' factor | term `/' factor
factor: primary | `+' factor | `-' factor
primary: int | id | string | `(' expression `)' | `{' fragment `}'
- | `?' lisp-expression
+ | `<' declspec+ declarator[empty] `>' | `?' lisp-expression
Only operators for dealing with integers are provided."
(with-parser-context (token-scanner-context :scanner scanner)
(parse-delimited-fragment scanner
#\{ #\}))
t t))
+ (#\<
+ (parse (seq (#\<
+ (ds (parse-c-type scanner))
+ (dc (parse-declarator
+ scanner ds
+ :kernel (lambda ()
+ (values nil t nil))
+ :abstractp t))
+ #\>)
+ (values (cons :type (car dc))
+ t t))))
(t
(values (list :int :id :char :string #\?)
nil nil)))))
distinctly about identifiers, strings and symbols, and we've only got two
obvious Lisp types to play with. Sad, but true."
- (name nil :type (or string symbol))
- (value nil :type t)
- (%type nil :type symbol)
- (location (file-location nil) :type file-location)
- (key nil :type symbol)
+ (name nil :type (or string symbol) :read-only t)
+ (value nil :type t :read-only t)
+ (%type nil :type symbol :read-only t)
+ (location (file-location nil) :type file-location :read-only t)
+ (key nil :type symbol :read-only t)
(seenp nil :type boolean))
(define-access-wrapper p-type p-%type :read-only t)
(:method ((raw character)) (values :char raw))
(:method ((raw property)) (values (p-type raw) (p-value raw)))
(:method ((raw cons)) (values (car raw) (cdr raw)))
- (:method ((raw function)) (values :func raw)))
+ (:method ((raw function)) (values :func raw))
+ (:method ((raw c-type)) (values :type raw)))
(export 'make-property)
(defun make-property (name raw-value &key type location seenp)
("c-types-proto" "c-types-class-impl" "fragment-parse"))
;; Property set protocol.
- (:file "pset-proto" :depends-on ("package"))
+ (:file "pset-proto" :depends-on ("package" "c-types-proto"))
(:file "pset-impl" :depends-on ("pset-proto"))
(:file "pset-parse" :depends-on ("pset-proto" "lexer-proto"))