 (defconst fstar-syntax-block-start-re
   (format "^\\(?:%s \\)*%s "
           (regexp-opt fstar-syntax-qualifiers)
-          (regexp-opt (remove "and" fstar-syntax-headers)))
+          (regexp-opt (append (remove "and" fstar-syntax-headers)
+                              fstar-syntax-preprocessor-directives)))
   "Regexp matching starts of semantic blocks.")
 
 (defconst fstar-syntax-structure
   (regexp-opt `("begin" "end" "in"
-                ,@fstar-syntax-structural-headers
+                ,@fstar-syntax-headers
                 ,@fstar-syntax-qualifiers)
               'symbols))
 


(defconst fstar-syntax-preprocessor-directives
  '("#set-options" "#reset-options"))

(defconst fstar-syntax-headers
  `(,@fstar-syntax-preprocessor-directives ,@fstar-syntax-structural-headers))

(defconst fstar-syntax-qualifiers
  '("new" "abstract" "logic" "assume" "visible"


;;; Font-Lock

(defconst fstar-syntax-headers
  '("open" "module" "include"
    "let" "let rec" "val" "and"
    "exception" "effect" "new_effect" "sub_effect" "new_effect_for_free"
