Skip to content
This repository was archived by the owner on Dec 29, 2018. It is now read-only.
This repository was archived by the owner on Dec 29, 2018. It is now read-only.

Incorrect early failure when match macro is invoked inside another macro (iter) #125

@cfallin

Description

@cfallin

With the following program (tested on SBCL), there seems to be a conflict of some sort between optima's match and rutils' iter:

(ql:quickload :rutilsx)
(ql:quickload :optima)

(defpackage :bug
  (:use :cl :rutilsx.iter :optima))
(in-package :bug)

(format t "result: ~a~%"
	(iter
	 (:for i in '(1 2 3))
	 (:collect
	  (match i
		 (1 'x)
		 (2 'y)
		 (3 'z)))))

This will raise a condition with error message "Not pattern matching."

From the macroexpand output, it appears that the redefinition of the %fail macro inside each match code block is not working: (IF (EQL I 1) 'X (ERROR "Not pattern matching.")). I'm not very well-versed in Lisp macros; could this have something to do with the use of the symbol macro in fail.lisp, combined with use inside the body of another macro?

In any case, this was very surprising behavior and cost a bit of debugging time for me -- hopefully there's an easy fix! Thanks for the package in any case!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions