|
724 | 724 | (map (lambda (x) (gensy)) field-names)
|
725 | 725 | field-names))
|
726 | 726 |
|
727 |
| -(define (default-inner-ctors name field-names field-types gen-specific?) |
728 |
| - (let* ((field-names (safe-field-names field-names field-types)) |
729 |
| - (any-ctor |
730 |
| - ;; definition with Any for all arguments |
731 |
| - `(function (call ,name ,@field-names) |
732 |
| - (block |
733 |
| - (call new ,@field-names))))) |
734 |
| - (if gen-specific? |
735 |
| - (list |
736 |
| - ;; definition with field types for all arguments |
737 |
| - `(function (call ,name |
738 |
| - ,@(map make-decl field-names field-types)) |
739 |
| - (block |
740 |
| - (call new ,@field-names))) |
741 |
| - any-ctor) |
742 |
| - (list any-ctor)))) |
| 727 | +(define (default-inner-ctors name field-names field-types gen-specific? mutabl) |
| 728 | + (let* ((arg-names (safe-field-names field-names field-types)) |
| 729 | + (any-ctor `(function (call ,name ,@arg-names) |
| 730 | + (block (call new ,@arg-names)))) |
| 731 | + (ctors (if gen-specific? |
| 732 | + (list |
| 733 | + ;; definition with field types for all arguments |
| 734 | + `(function (call ,name ,@(map make-decl arg-names field-types)) |
| 735 | + (block (call new ,@arg-names))) |
| 736 | + any-ctor) |
| 737 | + (list any-ctor)))) |
| 738 | + (if (and (not mutabl) |
| 739 | + (length> field-names 1) |
| 740 | + (eq? arg-names field-names)) |
| 741 | + (let ((g (gensy))) |
| 742 | + (cons `(function (call ,name |
| 743 | + (parameters ,@(map (lambda (k) `(kw ,k (|.| ,g ',k))) field-names)) |
| 744 | + (|::| ,g ,name)) |
| 745 | + (block (call new ,@field-names))) |
| 746 | + ctors)) |
| 747 | + ctors))) |
743 | 748 |
|
744 | 749 | (define (default-outer-ctor name field-names field-types params bounds)
|
745 | 750 | (let ((field-names (safe-field-names field-names field-types)))
|
|
828 | 833 | (field-names (map decl-var fields))
|
829 | 834 | (field-types (map decl-type fields))
|
830 | 835 | (defs2 (if (null? defs)
|
831 |
| - (default-inner-ctors name field-names field-types (null? params)) |
| 836 | + (default-inner-ctors name field-names field-types (null? params) mut) |
832 | 837 | defs)))
|
833 | 838 | (for-each (lambda (v)
|
834 | 839 | (if (not (symbol? v))
|
|
0 commit comments