shithub: martian9

Download patch

ref: 53b4d27243b9b20a6628aa200299c3b5ac6f173a
parent: 5597ed0a108af923f112a4ca6336071f71bae6bd
author: McKay Marston <mckay.marston@greymanlabs.com>
date: Fri Oct 16 05:43:25 EDT 2020

even more progress

--- a/macro.ml
+++ b/macro.ml
@@ -243,6 +243,24 @@
   register_variants patterns
 ;;
 
+let match_variant macro args =
+  match macro with
+  | T.Map { T.value = meta } ->
+     (match Types.M9map.find Types.macro_variants meta with
+      | T.Map { T.value = variant_list } ->
+         Types.M9map.iter
+           (fun k v ->
+             print_endline (Printer.print k true ^ ": " ^ Printer.print v true);
+             match v with
+             | T.List { T.value = T.List { T.value = x } :: z } -> print_endline (" !!! [" ^ string_of_int (List.length args) ^ "](" ^ string_of_int (List.length x) ^ ") " ^ Printer.dump x ^ " :: " ^ Printer.dump z);
+                                                                   if List.length args = List.length x
+                                                                   then print_endline "MATCH!"
+                                                                   else print_endline "no match"
+             | _ -> ())
+           variant_list
+      | _ -> ())
+  | _ -> ()
+
 (* match meta with
  * | T.Map { T.value = m } ->
  *    (try
--- a/reader.ml
+++ b/reader.ml
@@ -73,7 +73,7 @@
        | _ -> T.Nil
      with
      | T.Macro { T.value = sym; meta } ->
-        print_endline("FOUND A MACRO! " ^ Printer.print sym true);
+        print_endline("\nFOUND A MACRO! " ^ Printer.print sym true);
         print_endline("  tokens: " ^ String.concat " " list_reader.tokens);
         let rec collect_args tokens args =
           match tokens with
@@ -82,7 +82,8 @@
            | _ -> []
         in
         let args = collect_args (List.tl list_reader.tokens) [] in
-        print_endline(" ### " ^ String.concat " " args)
+        print_endline(" ### " ^ String.concat " " args);
+        Macro.match_variant meta args
      | _ -> ());
   match list_reader.tokens with
   | [] -> raise (Utils.Syntax_error ("unterminated '" ^ eol ^ "'"))