Changeset 5053


Ignore:
Timestamp:
Aug 28, 2006, 4:28:21 AM (18 years ago)
Author:
Gary Byers
Message:

New string stuff.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ccl/level-0/nfasload.lisp

    r5043 r5053  
    147147    (values str n copy)))
    148148
     149
     150(defun %fasl-read-n-string (s string start n)
     151  (declare (fixnum start n))
     152  (do* ((i start (1+ i))
     153        (n n (1- n)))
     154       ((<= n 0))
     155    (declare (fixnum i n))
     156    (setf (schar string i) (code-char (%fasl-read-count s)))))
     157
     158(defun %fasl-nvreadstr (s)
     159  (let* ((nchars (%fasl-read-count s))
     160         (copy t)
     161         (n nchars)
     162         (str (faslstate.faslstr s)))
     163    (declare (fixnum n nbytes))
     164    (if (> n (length str))
     165        (setq str (make-string n :element-type 'base-char))
     166        (setq copy nil))
     167    (%fasl-read-n-string  s str 0 nchars)
     168    (values str n copy)))
     169
    149170(defun %fasl-copystr (str len)
    150171  (declare (fixnum len))
     
    185206      (%epushval s sym))))
    186207
     208(defun %fasl-nvmake-symbol (s &optional idx)
     209  (declare (fixnum subtype))
     210  (let* ((n (%fasl-read-count s))
     211         (str (make-string n :element-type 'base-char)))
     212    (declare (fixnum n))
     213    (%fasl-read-n-string s str 0 n)
     214    (let* ((sym (make-symbol str)))
     215      (when idx (ensure-binding-index sym))
     216      (%epushval s sym))))
     217
    187218(defun %fasl-vintern (s package &optional binding-index)
    188219  (multiple-value-bind (str len new-p) (%fasl-vreadstr s)
     220    (with-package-lock (package)
     221      (multiple-value-bind (symbol access internal-offset external-offset)
     222          (%find-symbol str len package)
     223        (unless access
     224          (unless new-p (setq str (%fasl-copystr str len)))
     225          (setq symbol (%add-symbol str package internal-offset external-offset)))
     226        (when binding-index
     227          (ensure-binding-index symbol))
     228        (%epushval s symbol)))))
     229
     230(defun %fasl-nvintern (s package &optional binding-index)
     231  (multiple-value-bind (str len new-p) (%fasl-nvreadstr s)
    189232    (with-package-lock (package)
    190233      (multiple-value-bind (symbol access internal-offset external-offset)
     
    242285(defun %fasl-vpackage (s)
    243286  (multiple-value-bind (str len new-p) (%fasl-vreadstr s)
     287    (let* ((p (%find-pkg str len)))
     288      (%epushval s (or p (%kernel-restart $XNOPKG (if new-p str (%fasl-copystr str len))))))))
     289
     290
     291(defun %fasl-nvpackage (s)
     292  (multiple-value-bind (str len new-p) (%fasl-nvreadstr s)
    244293    (let* ((p (%find-pkg str len)))
    245294      (%epushval s (or p (%kernel-restart $XNOPKG (if new-p str (%fasl-copystr str len))))))))
     
    344393    (%fasl-read-n-bytes s str 0 n)))
    345394
     395(deffaslop $fasl-nvstr (s)
     396  (let* ((n (%fasl-read-count s))
     397         (str (make-string (the fixnum n) :element-type 'base-char)))
     398    (%epushval s str)
     399    (%fasl-read-n-string s str 0 n)))
     400
    346401(deffaslop $fasl-word-fixnum (s)
    347402  (%epushval s (%word-to-int (%fasl-read-word s))))
     
    350405  (%fasl-vmake-symbol s))
    351406
     407(deffaslop $fasl-nvmksym (s)
     408  (%fasl-nvmake-symbol s))
     409
    352410(deffaslop $fasl-vmksym-special (s)
    353411  (%fasl-vmake-symbol s t))
    354412
     413(deffaslop $fasl-nvmksym-special (s)
     414  (%fasl-nvmake-symbol s t))
     415
    355416(deffaslop $fasl-vintern (s)
    356417  (%fasl-vintern s *package*))
    357418
     419(deffaslop $fasl-nvintern (s)
     420  (%fasl-nvintern s *package*))
     421
    358422(deffaslop $fasl-vintern-special (s)
    359423  (%fasl-vintern s *package* t))
     424
     425(deffaslop $fasl-nvintern-special (s)
     426  (%fasl-nvintern s *package* t))
     427
     428
    360429
    361430
     
    366435    (%fasl-vintern s pkg)))
    367436
     437(deffaslop $fasl-nvpkg-intern (s)
     438  (let* ((pkg (%fasl-expr-preserve-epush s)))
     439    #+paranoia
     440    (setq pkg (pkg-arg pkg))
     441    (%fasl-nvintern s pkg)))
     442
    368443(deffaslop $fasl-vpkg-intern-special (s)
    369444  (let* ((pkg (%fasl-expr-preserve-epush s)))
     
    372447    (%fasl-vintern s pkg t)))
    373448
     449(deffaslop $fasl-nvpkg-intern-special (s)
     450  (let* ((pkg (%fasl-expr-preserve-epush s)))
     451    #+paranoia
     452    (setq pkg (pkg-arg pkg))
     453    (%fasl-nvintern s pkg t)))
     454
    374455(deffaslop $fasl-vpkg (s)
    375456  (%fasl-vpackage s))
     457
     458(deffaslop $fasl-nvpkg (s)
     459  (%fasl-nvpackage s))
    376460
    377461(deffaslop $fasl-cons (s)
Note: See TracChangeset for help on using the changeset viewer.