 ;;;;;; picolisp-mode: Major mode to edit picoLisp.
-;;;;;; Version: 1.1
+;;;;;; Version: 1.2
 
 ;;; Copyright (c) 2009, Guillermo R. Palavecino
 

                      "balance" "get" "fill" "apply" "range"
                      ;; Control Flow
                      "load" "args" "next" "arg" "rest" "pass" "quote" "as" 
                      "lit" "eval" "run" "macro" "curry" "def" "de" "dm" 
                      "recur" "recurse" "undef" "box" "new" "type" "isa" 
                      "method" "meth" "send" "try" "super" "extra" "with" 
                      "bind" "job" "let" "let?" "use" "and" "or" "nand" "nor" 
                      "xor" "bool" "not" "nil" "t" "prog" "prog1" "prog2" "if" 
                      "if2" "ifn" "when" "unless" "cond" "nond" "case" "state" 
                      "while" "until" "loop" "do" "at" "for" "catch" "throw" 
                      "finally" "!" "e" "$" "sys" "call" "tick" "ipid" "opid" 
                      "kill" "quit" "task" "fork" "pipe" "later" "timeout" 
                      "abort" "bye"
                      ;; Mapping
                      "apply" "pass" "maps" "map" "mapc" "maplist" "mapcar" 
                      "mapcon" "mapcan" "filter" "extract" "seek" "find" "pick" 

     ;;
     ;; Declarations.
     (list 
      (concat "(" (regexp-opt '("be" "de" "dm") t) "\\>"
              ;; Any whitespace and declared object.
              "[ \t]*"
              "\\(\\sw+\\)?" )
      '(2 font-lock-function-name-face
          nil t ) )
     (list (concat "\\<"
                   (regexp-opt '("NIL" "T") t)  
                   "\\>" )
           '(1 font-lock-constant-face) )
     (list
      (concat "\\<"
              (regexp-opt '("*OS" "*DB" "*Solo" "*PPid" "*Pid" "@" "@@" "@@@"
                            "This" "*Dbg" "*Zap" "*Scl" "*Class" "*Dbs" "*Run"
                            "*Hup" "*Sig1" "*Sig2" "^" "*Err" "*Msg" "*Uni" 
                            "*Led" "*Adr" "*Allow" "*Fork" "*Bye" ) t )
              "\\>" )
      '(1 font-lock-builtin-face) )
     ;; This is so we make the point used in conses more visible
     '("\\<\\(\\.\\)\\>" (1 font-lock-negation-char-face))
     '("(\\(====\\)\\>" (1 font-lock-negation-char-face)) 
     (list ;; Functions that modify @
      (concat "("
              (regexp-opt '("prog1" "prog2"
                            "cond" "case"
                            "if" "if2" "ifn"
                            "when" "unless"
                            "and" "or" "nor" "not"
                            "nand" "nond"
                            "loop" "do" "while" "until" "for"
                            "state" ) t )
              "\\>" )
      '(1 font-lock-preprocessor-face) ) ) )
  "Subdued expressions to highlight in Picolisp modes." )

(defconst picolisp-font-lock-keywords-2
  (append picolisp-font-lock-keywords-1
          (eval-when-compile
            (list
             ;; Control structures.
             (cons
              (concat
