Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

define-record-type methods and interfaces #596

Open
wants to merge 5 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions LOG
Original file line number Diff line number Diff line change
Expand Up @@ -2251,3 +2251,35 @@
users to create standard ftype bindings for the native-types if that
is preferred.
s/ftype.ss, mats/ftype.ms
- for each input-list element that is an identifier, symbol, or string,
generate-temporaries uses the identifier name, symbol name, or string
as the name for the corresponding generated temporary.
syntax.ss
- updated the just-reports target to look for reports to regenerate in
the output* directories.
mats/Mf-base
- fixed bug in strip: was counting on the two definitions of the table
table record type in fasl.ss and the table record type in strip.ss being
dybvig marked this conversation as resolved.
Show resolved Hide resolved
identical without assigning a uid. this worked at optimize-level 3
but not at optimize-level 2. also eliminated an unused variable
addr from put-padty and fixed the call to put-field to pass in the
correct (target) fld record.
strip.ss, fasl.ss
- added define-record-type support for declaring methods and implementing
interfaces, along with a new define-interfaces form for defining
interfaces. the implementation is based on combination of the
dybvig marked this conversation as resolved.
Show resolved Hide resolved
existing define-record-type code and the code for define-class
that used to reside in mats/oop.ss. every record-type descriptor
dybvig marked this conversation as resolved.
Show resolved Hide resolved
now contains an slot for interfaces (accessed via
record-type-interfaces), and those for record types with methods
additionally have one slot per method. bootstrapping with this
change to record-type descriptors required using a modified
fasl.patch to rewrite all rtds to include the extra rtd field.
the various procedures for creating record types now check to
make sure the interfaces and extra fields are equal when verifying
equality of nongenerative record types with the same name.
record-defin.ss (new), syntax.ss, cmacros.ss, cp0.ss, cpnanopass.ss,
dybvig marked this conversation as resolved.
Show resolved Hide resolved
mkheader.ss, pretty.ss, s/Mf-base,
record.ms, mats/Mf-base, 8.ms, patch-compile-0-f-t-f,
patch-interpret-0-f-f-f, patch=interpret-0-f-t-f,
root-experr-compile-0-f-f-f
4 changes: 3 additions & 1 deletion boot/a6le/equates.h
Original file line number Diff line number Diff line change
Expand Up @@ -445,6 +445,7 @@ typedef unsigned long U64;
#define record_type_disp 0x1
#define record_type_flags_disp 0x39
#define record_type_flds_disp 0x31
#define record_type_interfaces_disp 0x51
#define record_type_mpm_disp 0x21
#define record_type_name_disp 0x29
#define record_type_parent_disp 0x9
Expand Down Expand Up @@ -508,7 +509,7 @@ typedef unsigned long U64;
#define size_pair 0x10
#define size_port 0x50
#define size_ratnum 0x20
#define size_record_type 0x50
#define size_record_type 0x60
#define size_rp_header 0x20
#define size_rtd_counts 0x810
#define size_symbol 0x30
Expand Down Expand Up @@ -875,6 +876,7 @@ typedef unsigned long U64;
#define RECORDDESCFLAGS(x) (*((ptr *)((uptr)(x)+57)))
#define RECORDDESCUID(x) (*((ptr *)((uptr)(x)+65)))
#define RECORDDESCCOUNTS(x) (*((ptr *)((uptr)(x)+73)))
#define RECORDDESINTERFACES(x) (*((ptr *)((uptr)(x)+81)))
#define RECORDINSTTYPE(x) (*((ptr *)((uptr)(x)+1)))
#define RECORDINSTIT(x,i) (((ptr *)((uptr)(x)+9))[i])
#define CLOSCODE(p) ((ptr)((uptr)CLOSENTRY(p)-code_data_disp))
Expand Down
Binary file modified boot/a6le/petite.boot
Binary file not shown.
Binary file modified boot/a6le/scheme.boot
Binary file not shown.
4 changes: 3 additions & 1 deletion boot/a6nt/equates.h
Original file line number Diff line number Diff line change
Expand Up @@ -445,6 +445,7 @@ typedef unsigned long long U64;
#define record_type_disp 0x1
#define record_type_flags_disp 0x39
#define record_type_flds_disp 0x31
#define record_type_interfaces_disp 0x51
#define record_type_mpm_disp 0x21
#define record_type_name_disp 0x29
#define record_type_parent_disp 0x9
Expand Down Expand Up @@ -508,7 +509,7 @@ typedef unsigned long long U64;
#define size_pair 0x10
#define size_port 0x50
#define size_ratnum 0x20
#define size_record_type 0x50
#define size_record_type 0x60
#define size_rp_header 0x20
#define size_rtd_counts 0x810
#define size_symbol 0x30
Expand Down Expand Up @@ -875,6 +876,7 @@ typedef unsigned long long U64;
#define RECORDDESCFLAGS(x) (*((ptr *)((uptr)(x)+57)))
#define RECORDDESCUID(x) (*((ptr *)((uptr)(x)+65)))
#define RECORDDESCCOUNTS(x) (*((ptr *)((uptr)(x)+73)))
#define RECORDDESINTERFACES(x) (*((ptr *)((uptr)(x)+81)))
#define RECORDINSTTYPE(x) (*((ptr *)((uptr)(x)+1)))
#define RECORDINSTIT(x,i) (((ptr *)((uptr)(x)+9))[i])
#define CLOSCODE(p) ((ptr)((uptr)CLOSENTRY(p)-code_data_disp))
Expand Down
Binary file modified boot/a6nt/petite.boot
Binary file not shown.
Binary file modified boot/a6nt/scheme.boot
Binary file not shown.
4 changes: 3 additions & 1 deletion boot/a6osx/equates.h
Original file line number Diff line number Diff line change
Expand Up @@ -445,6 +445,7 @@ typedef unsigned long U64;
#define record_type_disp 0x1
#define record_type_flags_disp 0x39
#define record_type_flds_disp 0x31
#define record_type_interfaces_disp 0x51
#define record_type_mpm_disp 0x21
#define record_type_name_disp 0x29
#define record_type_parent_disp 0x9
Expand Down Expand Up @@ -508,7 +509,7 @@ typedef unsigned long U64;
#define size_pair 0x10
#define size_port 0x50
#define size_ratnum 0x20
#define size_record_type 0x50
#define size_record_type 0x60
#define size_rp_header 0x20
#define size_rtd_counts 0x810
#define size_symbol 0x30
Expand Down Expand Up @@ -875,6 +876,7 @@ typedef unsigned long U64;
#define RECORDDESCFLAGS(x) (*((ptr *)((uptr)(x)+57)))
#define RECORDDESCUID(x) (*((ptr *)((uptr)(x)+65)))
#define RECORDDESCCOUNTS(x) (*((ptr *)((uptr)(x)+73)))
#define RECORDDESINTERFACES(x) (*((ptr *)((uptr)(x)+81)))
#define RECORDINSTTYPE(x) (*((ptr *)((uptr)(x)+1)))
#define RECORDINSTIT(x,i) (((ptr *)((uptr)(x)+9))[i])
#define CLOSCODE(p) ((ptr)((uptr)CLOSENTRY(p)-code_data_disp))
Expand Down
Binary file modified boot/a6osx/petite.boot
Binary file not shown.
Binary file modified boot/a6osx/scheme.boot
Binary file not shown.
4 changes: 3 additions & 1 deletion boot/arm32le/equates.h
Original file line number Diff line number Diff line change
Expand Up @@ -445,6 +445,7 @@ typedef unsigned long long U64;
#define record_type_disp 0x1
#define record_type_flags_disp 0x1D
#define record_type_flds_disp 0x19
#define record_type_interfaces_disp 0x29
#define record_type_mpm_disp 0x11
#define record_type_name_disp 0x15
#define record_type_parent_disp 0x5
Expand Down Expand Up @@ -507,7 +508,7 @@ typedef unsigned long long U64;
#define size_pair 0x8
#define size_port 0x28
#define size_ratnum 0x10
#define size_record_type 0x28
#define size_record_type 0x30
#define size_rp_header 0x10
#define size_rtd_counts 0x410
#define size_symbol 0x18
Expand Down Expand Up @@ -873,6 +874,7 @@ typedef unsigned long long U64;
#define RECORDDESCFLAGS(x) (*((ptr *)((uptr)(x)+29)))
#define RECORDDESCUID(x) (*((ptr *)((uptr)(x)+33)))
#define RECORDDESCCOUNTS(x) (*((ptr *)((uptr)(x)+37)))
#define RECORDDESINTERFACES(x) (*((ptr *)((uptr)(x)+41)))
#define RECORDINSTTYPE(x) (*((ptr *)((uptr)(x)+1)))
#define RECORDINSTIT(x,i) (((ptr *)((uptr)(x)+5))[i])
#define CLOSCODE(p) ((ptr)((uptr)CLOSENTRY(p)-code_data_disp))
Expand Down
Binary file modified boot/arm32le/petite.boot
Binary file not shown.
Binary file modified boot/arm32le/scheme.boot
Binary file not shown.
4 changes: 3 additions & 1 deletion boot/i3le/equates.h
Original file line number Diff line number Diff line change
Expand Up @@ -446,6 +446,7 @@ typedef unsigned long long U64;
#define record_type_disp 0x1
#define record_type_flags_disp 0x1D
#define record_type_flds_disp 0x19
#define record_type_interfaces_disp 0x29
#define record_type_mpm_disp 0x11
#define record_type_name_disp 0x15
#define record_type_parent_disp 0x5
Expand Down Expand Up @@ -506,7 +507,7 @@ typedef unsigned long long U64;
#define size_pair 0x8
#define size_port 0x28
#define size_ratnum 0x10
#define size_record_type 0x28
#define size_record_type 0x30
#define size_rp_header 0x10
#define size_rtd_counts 0x410
#define size_symbol 0x18
Expand Down Expand Up @@ -873,6 +874,7 @@ typedef unsigned long long U64;
#define RECORDDESCFLAGS(x) (*((ptr *)((uptr)(x)+29)))
#define RECORDDESCUID(x) (*((ptr *)((uptr)(x)+33)))
#define RECORDDESCCOUNTS(x) (*((ptr *)((uptr)(x)+37)))
#define RECORDDESINTERFACES(x) (*((ptr *)((uptr)(x)+41)))
#define RECORDINSTTYPE(x) (*((ptr *)((uptr)(x)+1)))
#define RECORDINSTIT(x,i) (((ptr *)((uptr)(x)+5))[i])
#define CLOSCODE(p) ((ptr)((uptr)CLOSENTRY(p)-code_data_disp))
Expand Down
Binary file modified boot/i3le/petite.boot
Binary file not shown.
Binary file modified boot/i3le/scheme.boot
Binary file not shown.
4 changes: 3 additions & 1 deletion boot/i3nt/equates.h
Original file line number Diff line number Diff line change
Expand Up @@ -446,6 +446,7 @@ typedef unsigned long long U64;
#define record_type_disp 0x1
#define record_type_flags_disp 0x1D
#define record_type_flds_disp 0x19
#define record_type_interfaces_disp 0x29
#define record_type_mpm_disp 0x11
#define record_type_name_disp 0x15
#define record_type_parent_disp 0x5
Expand Down Expand Up @@ -506,7 +507,7 @@ typedef unsigned long long U64;
#define size_pair 0x8
#define size_port 0x28
#define size_ratnum 0x10
#define size_record_type 0x28
#define size_record_type 0x30
#define size_rp_header 0x10
#define size_rtd_counts 0x410
#define size_symbol 0x18
Expand Down Expand Up @@ -874,6 +875,7 @@ typedef unsigned long long U64;
#define RECORDDESCFLAGS(x) (*((ptr *)((uptr)(x)+29)))
#define RECORDDESCUID(x) (*((ptr *)((uptr)(x)+33)))
#define RECORDDESCCOUNTS(x) (*((ptr *)((uptr)(x)+37)))
#define RECORDDESINTERFACES(x) (*((ptr *)((uptr)(x)+41)))
#define RECORDINSTTYPE(x) (*((ptr *)((uptr)(x)+1)))
#define RECORDINSTIT(x,i) (((ptr *)((uptr)(x)+5))[i])
#define CLOSCODE(p) ((ptr)((uptr)CLOSENTRY(p)-code_data_disp))
Expand Down
Binary file modified boot/i3nt/petite.boot
Binary file not shown.
Binary file modified boot/i3nt/scheme.boot
Binary file not shown.
4 changes: 3 additions & 1 deletion boot/i3osx/equates.h
Original file line number Diff line number Diff line change
Expand Up @@ -446,6 +446,7 @@ typedef unsigned long long U64;
#define record_type_disp 0x1
#define record_type_flags_disp 0x1D
#define record_type_flds_disp 0x19
#define record_type_interfaces_disp 0x29
#define record_type_mpm_disp 0x11
#define record_type_name_disp 0x15
#define record_type_parent_disp 0x5
Expand Down Expand Up @@ -506,7 +507,7 @@ typedef unsigned long long U64;
#define size_pair 0x8
#define size_port 0x28
#define size_ratnum 0x10
#define size_record_type 0x28
#define size_record_type 0x30
#define size_rp_header 0x10
#define size_rtd_counts 0x410
#define size_symbol 0x18
Expand Down Expand Up @@ -873,6 +874,7 @@ typedef unsigned long long U64;
#define RECORDDESCFLAGS(x) (*((ptr *)((uptr)(x)+29)))
#define RECORDDESCUID(x) (*((ptr *)((uptr)(x)+33)))
#define RECORDDESCCOUNTS(x) (*((ptr *)((uptr)(x)+37)))
#define RECORDDESINTERFACES(x) (*((ptr *)((uptr)(x)+41)))
#define RECORDINSTTYPE(x) (*((ptr *)((uptr)(x)+1)))
#define RECORDINSTIT(x,i) (((ptr *)((uptr)(x)+5))[i])
#define CLOSCODE(p) ((ptr)((uptr)CLOSENTRY(p)-code_data_disp))
Expand Down
Binary file modified boot/i3osx/petite.boot
Binary file not shown.
Binary file modified boot/i3osx/scheme.boot
Binary file not shown.
4 changes: 3 additions & 1 deletion boot/ta6le/equates.h
Original file line number Diff line number Diff line change
Expand Up @@ -445,6 +445,7 @@ typedef unsigned long U64;
#define record_type_disp 0x1
#define record_type_flags_disp 0x39
#define record_type_flds_disp 0x31
#define record_type_interfaces_disp 0x51
#define record_type_mpm_disp 0x21
#define record_type_name_disp 0x29
#define record_type_parent_disp 0x9
Expand Down Expand Up @@ -508,7 +509,7 @@ typedef unsigned long U64;
#define size_pair 0x10
#define size_port 0x50
#define size_ratnum 0x20
#define size_record_type 0x50
#define size_record_type 0x60
#define size_rp_header 0x20
#define size_rtd_counts 0x810
#define size_symbol 0x30
Expand Down Expand Up @@ -875,6 +876,7 @@ typedef unsigned long U64;
#define RECORDDESCFLAGS(x) (*((ptr *)((uptr)(x)+57)))
#define RECORDDESCUID(x) (*((ptr *)((uptr)(x)+65)))
#define RECORDDESCCOUNTS(x) (*((ptr *)((uptr)(x)+73)))
#define RECORDDESINTERFACES(x) (*((ptr *)((uptr)(x)+81)))
#define RECORDINSTTYPE(x) (*((ptr *)((uptr)(x)+1)))
#define RECORDINSTIT(x,i) (((ptr *)((uptr)(x)+9))[i])
#define CLOSCODE(p) ((ptr)((uptr)CLOSENTRY(p)-code_data_disp))
Expand Down
Binary file modified boot/ta6le/petite.boot
Binary file not shown.
Binary file modified boot/ta6le/scheme.boot
Binary file not shown.
4 changes: 3 additions & 1 deletion boot/ta6nt/equates.h
Original file line number Diff line number Diff line change
Expand Up @@ -445,6 +445,7 @@ typedef unsigned long long U64;
#define record_type_disp 0x1
#define record_type_flags_disp 0x39
#define record_type_flds_disp 0x31
#define record_type_interfaces_disp 0x51
#define record_type_mpm_disp 0x21
#define record_type_name_disp 0x29
#define record_type_parent_disp 0x9
Expand Down Expand Up @@ -508,7 +509,7 @@ typedef unsigned long long U64;
#define size_pair 0x10
#define size_port 0x50
#define size_ratnum 0x20
#define size_record_type 0x50
#define size_record_type 0x60
#define size_rp_header 0x20
#define size_rtd_counts 0x810
#define size_symbol 0x30
Expand Down Expand Up @@ -875,6 +876,7 @@ typedef unsigned long long U64;
#define RECORDDESCFLAGS(x) (*((ptr *)((uptr)(x)+57)))
#define RECORDDESCUID(x) (*((ptr *)((uptr)(x)+65)))
#define RECORDDESCCOUNTS(x) (*((ptr *)((uptr)(x)+73)))
#define RECORDDESINTERFACES(x) (*((ptr *)((uptr)(x)+81)))
#define RECORDINSTTYPE(x) (*((ptr *)((uptr)(x)+1)))
#define RECORDINSTIT(x,i) (((ptr *)((uptr)(x)+9))[i])
#define CLOSCODE(p) ((ptr)((uptr)CLOSENTRY(p)-code_data_disp))
Expand Down
Binary file modified boot/ta6nt/petite.boot
Binary file not shown.
Binary file modified boot/ta6nt/scheme.boot
Binary file not shown.
4 changes: 3 additions & 1 deletion boot/ta6osx/equates.h
Original file line number Diff line number Diff line change
Expand Up @@ -445,6 +445,7 @@ typedef unsigned long U64;
#define record_type_disp 0x1
#define record_type_flags_disp 0x39
#define record_type_flds_disp 0x31
#define record_type_interfaces_disp 0x51
#define record_type_mpm_disp 0x21
#define record_type_name_disp 0x29
#define record_type_parent_disp 0x9
Expand Down Expand Up @@ -508,7 +509,7 @@ typedef unsigned long U64;
#define size_pair 0x10
#define size_port 0x50
#define size_ratnum 0x20
#define size_record_type 0x50
#define size_record_type 0x60
#define size_rp_header 0x20
#define size_rtd_counts 0x810
#define size_symbol 0x30
Expand Down Expand Up @@ -875,6 +876,7 @@ typedef unsigned long U64;
#define RECORDDESCFLAGS(x) (*((ptr *)((uptr)(x)+57)))
#define RECORDDESCUID(x) (*((ptr *)((uptr)(x)+65)))
#define RECORDDESCCOUNTS(x) (*((ptr *)((uptr)(x)+73)))
#define RECORDDESINTERFACES(x) (*((ptr *)((uptr)(x)+81)))
#define RECORDINSTTYPE(x) (*((ptr *)((uptr)(x)+1)))
#define RECORDINSTIT(x,i) (((ptr *)((uptr)(x)+9))[i])
#define CLOSCODE(p) ((ptr)((uptr)CLOSENTRY(p)-code_data_disp))
Expand Down
Binary file modified boot/ta6osx/petite.boot
Binary file not shown.
Binary file modified boot/ta6osx/scheme.boot
Binary file not shown.
4 changes: 3 additions & 1 deletion boot/ti3le/equates.h
Original file line number Diff line number Diff line change
Expand Up @@ -446,6 +446,7 @@ typedef unsigned long long U64;
#define record_type_disp 0x1
#define record_type_flags_disp 0x1D
#define record_type_flds_disp 0x19
#define record_type_interfaces_disp 0x29
#define record_type_mpm_disp 0x11
#define record_type_name_disp 0x15
#define record_type_parent_disp 0x5
Expand Down Expand Up @@ -506,7 +507,7 @@ typedef unsigned long long U64;
#define size_pair 0x8
#define size_port 0x28
#define size_ratnum 0x10
#define size_record_type 0x28
#define size_record_type 0x30
#define size_rp_header 0x10
#define size_rtd_counts 0x410
#define size_symbol 0x18
Expand Down Expand Up @@ -873,6 +874,7 @@ typedef unsigned long long U64;
#define RECORDDESCFLAGS(x) (*((ptr *)((uptr)(x)+29)))
#define RECORDDESCUID(x) (*((ptr *)((uptr)(x)+33)))
#define RECORDDESCCOUNTS(x) (*((ptr *)((uptr)(x)+37)))
#define RECORDDESINTERFACES(x) (*((ptr *)((uptr)(x)+41)))
#define RECORDINSTTYPE(x) (*((ptr *)((uptr)(x)+1)))
#define RECORDINSTIT(x,i) (((ptr *)((uptr)(x)+5))[i])
#define CLOSCODE(p) ((ptr)((uptr)CLOSENTRY(p)-code_data_disp))
Expand Down
Binary file modified boot/ti3le/petite.boot
Binary file not shown.
Binary file modified boot/ti3le/scheme.boot
Binary file not shown.
4 changes: 3 additions & 1 deletion boot/ti3nt/equates.h
Original file line number Diff line number Diff line change
Expand Up @@ -446,6 +446,7 @@ typedef unsigned long long U64;
#define record_type_disp 0x1
#define record_type_flags_disp 0x1D
#define record_type_flds_disp 0x19
#define record_type_interfaces_disp 0x29
#define record_type_mpm_disp 0x11
#define record_type_name_disp 0x15
#define record_type_parent_disp 0x5
Expand Down Expand Up @@ -506,7 +507,7 @@ typedef unsigned long long U64;
#define size_pair 0x8
#define size_port 0x28
#define size_ratnum 0x10
#define size_record_type 0x28
#define size_record_type 0x30
#define size_rp_header 0x10
#define size_rtd_counts 0x410
#define size_symbol 0x18
Expand Down Expand Up @@ -874,6 +875,7 @@ typedef unsigned long long U64;
#define RECORDDESCFLAGS(x) (*((ptr *)((uptr)(x)+29)))
#define RECORDDESCUID(x) (*((ptr *)((uptr)(x)+33)))
#define RECORDDESCCOUNTS(x) (*((ptr *)((uptr)(x)+37)))
#define RECORDDESINTERFACES(x) (*((ptr *)((uptr)(x)+41)))
#define RECORDINSTTYPE(x) (*((ptr *)((uptr)(x)+1)))
#define RECORDINSTIT(x,i) (((ptr *)((uptr)(x)+5))[i])
#define CLOSCODE(p) ((ptr)((uptr)CLOSENTRY(p)-code_data_disp))
Expand Down
Binary file modified boot/ti3nt/petite.boot
Binary file not shown.
Binary file modified boot/ti3nt/scheme.boot
Binary file not shown.
4 changes: 3 additions & 1 deletion boot/ti3osx/equates.h
Original file line number Diff line number Diff line change
Expand Up @@ -446,6 +446,7 @@ typedef unsigned long long U64;
#define record_type_disp 0x1
#define record_type_flags_disp 0x1D
#define record_type_flds_disp 0x19
#define record_type_interfaces_disp 0x29
#define record_type_mpm_disp 0x11
#define record_type_name_disp 0x15
#define record_type_parent_disp 0x5
Expand Down Expand Up @@ -506,7 +507,7 @@ typedef unsigned long long U64;
#define size_pair 0x8
#define size_port 0x28
#define size_ratnum 0x10
#define size_record_type 0x28
#define size_record_type 0x30
#define size_rp_header 0x10
#define size_rtd_counts 0x410
#define size_symbol 0x18
Expand Down Expand Up @@ -873,6 +874,7 @@ typedef unsigned long long U64;
#define RECORDDESCFLAGS(x) (*((ptr *)((uptr)(x)+29)))
#define RECORDDESCUID(x) (*((ptr *)((uptr)(x)+33)))
#define RECORDDESCCOUNTS(x) (*((ptr *)((uptr)(x)+37)))
#define RECORDDESINTERFACES(x) (*((ptr *)((uptr)(x)+41)))
#define RECORDINSTTYPE(x) (*((ptr *)((uptr)(x)+1)))
#define RECORDINSTIT(x,i) (((ptr *)((uptr)(x)+5))[i])
#define CLOSCODE(p) ((ptr)((uptr)CLOSENTRY(p)-code_data_disp))
Expand Down
Binary file modified boot/ti3osx/petite.boot
Binary file not shown.
Binary file modified boot/ti3osx/scheme.boot
Binary file not shown.
6 changes: 5 additions & 1 deletion mats/8.ms
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
[(foo (bar x)) x]
[(foo x) (cons x '())]
[(foo x y ...) (cons x (foo y ...))]))
(define a)
#t)
(equivalent-expansion? (expand '(foo)) ''())
(equivalent-expansion? (expand '(foo (bar a))) 'a)
Expand Down Expand Up @@ -67,6 +68,9 @@
(syntax-case x ()
[(_ keys)
(with-syntax ([x `,(syntax keys)]) (syntax x))])))
(define a)
(define b)
(define c)
(equivalent-expansion? (expand '(foo (a b c))) '(a b c)))
(begin (define-syntax foo ; test exponential "with" time problem
(lambda (x)
Expand Down Expand Up @@ -2560,7 +2564,7 @@
(with-implicit (a 2 c) d e))
(error? ; 15 is not an identifier
(with-syntax ([a 15])
(with-implicit (a b c) d e)))
(with-implicit (a b c) 1 2)))
(eqv?
(let ((borf 'borf-outer))
(define-syntax frob
Expand Down
Loading