Hello all, This patch implements a new primitive syntax form 'with-ellipsis' that changes the ellipsis identifier within a lexical scope, and uses this to implement the R7RS extension to 'syntax-rules'. I'd like to apply this to the stable-2.0 branch. It took me quite a while to figure out the right way to generalize this R7RS feature for the syntax-case system. My first idea was to make 'syntax' a syntax parameter, but further thought made it clear that this would be inadequate. Consider all of the other macros based on 'syntax' and 'syntax-case': things such as 'with-syntax', 'quasisyntax', etc. It was obvious that 'with-ellipsis' should modify the lexical environment somehow, but how? First of all, consider that a single 'syntax' or 'syntax-case' form might, in general, be composed of identifiers from many different lexical environments. The lexical environment of the 'syntax' keyword is not the right environment to look at for the entire template, because in a 'quasisyntax' or 'syntax-rules' form, that's the lexical environment of the 'quasisyntax' or 'syntax-rules' macro. It soon became clear that I must search the lexical environment of each identifier within a pattern or template to determine if that identifier is an ellipsis. But what identifier should it look up in that lexical environment? Again, my first thought was to look up the identifier itself, but that's not right either. A 'with-ellipsis' form must not only add a new ellipsis identifier; it must also disable the special meaning of the previous ellipsis identifier. In the end, here's how this works: 'with-ellipsis' binds a special identifier named #{ $sc-ellipsis }# using a new 'ellipsis' binding type. The new ellipsis identifier is stored within the binding. In order to determine whether an identifier X is an ellipsis, the binding for #{ $sc-ellipsis }# is looked up in the lexical environment of X. If the binding is found and has binding-type 'ellipsis', then X is compared to the identifier stored in the binding using 'bound-id=?'. Otherwise, X is compared to '...' using 'free-id=?' as was done before. After much thought, I'm fairly confident that this is the only good approach. I'd like to push this to stable-2.0. Comments and suggestions welcome.