mirror of
				https://github.com/janet-lang/janet
				synced 2025-11-04 01:23:04 +00:00 
			
		
		
		
	Add quoted literal support in the match macro.
This commit is contained in:
		@@ -2,6 +2,8 @@
 | 
			
		||||
All notable changes to this project will be documented in this file.
 | 
			
		||||
 | 
			
		||||
## ??? - Unreleased
 | 
			
		||||
- Allow quoted literals in the `match` macro to behave as expected in patterns.
 | 
			
		||||
- Fix windows net related bug for TCP servers.
 | 
			
		||||
- Allow evaluating ev streams with dofile.
 | 
			
		||||
- Fix `ev` related bug with operations on already closed file descriptors.
 | 
			
		||||
- Add struct and table agnostic `getproto` function.
 | 
			
		||||
 
 | 
			
		||||
@@ -1685,6 +1685,8 @@
 | 
			
		||||
  already bound to `<sym>`, rather than matching and rebinding it.
 | 
			
		||||
 | 
			
		||||
  Any other value pattern will only match if it is equal to `x`.
 | 
			
		||||
  Quoting a pattern with `'` will also treat the value as a literal value to match against.
 | 
			
		||||
 | 
			
		||||
  ```
 | 
			
		||||
  [x & cases]
 | 
			
		||||
 | 
			
		||||
@@ -1736,6 +1738,10 @@
 | 
			
		||||
        (array/push x s)
 | 
			
		||||
        (put b2g pattern @[s]))
 | 
			
		||||
 | 
			
		||||
      # match quoted literal
 | 
			
		||||
      (and (= t :tuple) (= 2 (length pattern)) (= 'quote (pattern 0)))
 | 
			
		||||
      (break)
 | 
			
		||||
 | 
			
		||||
      # match data structure template
 | 
			
		||||
      (or isarr (= t :struct) (= t :table))
 | 
			
		||||
      (do
 | 
			
		||||
@@ -1773,6 +1779,10 @@
 | 
			
		||||
      # match local binding
 | 
			
		||||
      (= t :symbol) (break)
 | 
			
		||||
 | 
			
		||||
      # match quoted literal
 | 
			
		||||
      (and (= t :tuple) (= 2 (length pattern)) (= 'quote (pattern 0)))
 | 
			
		||||
      (array/push anda ['= s pattern])
 | 
			
		||||
 | 
			
		||||
      # match global unification
 | 
			
		||||
      (and (= t :tuple) (= 2 (length pattern)) (= '@ (pattern 0)))
 | 
			
		||||
      (if-let [x (in gun (pattern 1))]
 | 
			
		||||
 
 | 
			
		||||
@@ -348,4 +348,8 @@ neldb\0\0\0\xD8\x05printG\x01\0\xDE\xDE\xDE'\x03\0marshal_tes/\x02
 | 
			
		||||
(assert (deep= @[111] (peg/match '(number :d+) "111")) "simple number capture 1")
 | 
			
		||||
(assert (deep= @[255] (peg/match '(number :w+) "0xff")) "simple number capture 2")
 | 
			
		||||
 | 
			
		||||
# quoted match test
 | 
			
		||||
(assert (= :yes (match 'john 'john :yes _ :nope)) "quoted literal match 1")
 | 
			
		||||
(assert (= :nope (match 'john ''john :yes _ :nope)) "quoted literal match 2")
 | 
			
		||||
 | 
			
		||||
(end-suite)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user