Basic macrolet
[jscl.git] / src / array.lisp
index a90a4bc..150c70d 100644 (file)
          (array (make-storage-vector size)))
     ;; Upgrade type
     (if (eq element-type 'character)
-        (setf element-type 'character
-              initial-element (or initial-element #\space))
+        (progn
+          (oset 1 array "stringp")
+          (setf element-type 'character
+                initial-element (or initial-element #\space)))
         (setf element-type t))
     ;; Initialize array
     (dotimes (i size)
       (storage-vector-set array i initial-element))
     ;; Record and return the object
-    (oset array "type" element-type)
-    (oset array "dimensions" dimensions)
+    (oset element-type array "type")
+    (oset dimensions array "dimensions")
     array))
 
 
@@ -48,7 +50,9 @@
 (defun array-element-type (array)
   (unless (arrayp array)
     (error "~S is not an array." array))
-  (oget array "type"))
+  (if (eq (oget array "stringp") 1)
+      'character
+      (oget array "type")))
 
 (defun array-dimensions (array)
   (unless (arrayp array)
@@ -78,6 +82,8 @@
 ;;; FIXME: should take optional min-extension.
 ;;; FIXME: should use fill-pointer instead of the absolute end of array
 (defun vector-push-extend (new vector)
+  (unless (vectorp vector)
+    (error "~S is not a vector." vector))  
   (let ((size (storage-vector-size vector)))
     (resize-storage-vector vector (1+ size))
     (aset vector size new)