cl-annot icon indicating copy to clipboard operation
cl-annot copied to clipboard

export-constructors doesn't export default constructor from defstruct when another constructor specified

Open fourier opened this issue 9 years ago • 0 comments

defstruct in CL allows to specify several constructors. If second argument to the :constructor keyword provided, it is used as a constructor name. :constructor with no arguments creates a default constructor. However if both BOA(By Order of Arguments) and explicit default constructor provided, the export-constructors macro exports only BOA constructor, see the session below:

CL-USER 28 > (defstruct (point (:constructor create-point (x y)) (:constructor)) x y)
POINT

CL-USER 29 > (create-point 10 20)
#S(POINT :X 10 :Y 20)

CL-USER 30 > (make-point :x 10 :y 10)
#S(POINT :X 10 :Y 10)

CL-USER 31 > (pprint (macroexpand '(cl-annot.class:export-constructors (defstruct (point (:constructor create-point (x y)) (:constructor)) x y))))

(PROGN
  (EXPORT '(CREATE-POINT))
  (DEFSTRUCT (POINT (:CONSTRUCTOR CREATE-POINT (X Y)) (:CONSTRUCTOR)) X Y))

fourier avatar Mar 28 '16 16:03 fourier