summaryrefslogtreecommitdiff
path: root/src/initial_check.ml
diff options
context:
space:
mode:
authorAlasdair Armstrong2018-01-25 00:30:24 +0000
committerAlasdair Armstrong2018-01-25 00:30:24 +0000
commitd87d4ad3a6d2ec2804cb7b20128fecb6d9df4e6e (patch)
tree76a85742db61e8f4dcac8471c6c0856603453543 /src/initial_check.ml
parent10e2be330c14aaddbd8ada6b6ce8a8a63c7d605e (diff)
Add simple conditional processing and file include
Can now use C-style include declarations to include files within other sail files. This is done in such a way that all the location information is preserved in error messages. As an example: $include "aarch64/prelude.sail" $define SYM $ifndef SYM $include <../util.sail> $endif would include the file aarch64/prelude.sail relative to the file where the include is contained. It then defines a symbol SYM and includes another file if it is not defined. The <../util.sail> include will be accessed relative to $SAIL_DIR/lib, so $SAIL_DIR/lib/../util.sail in this case. This can be used with the standard C trick of $ifndef ONCE $define ONCE val f : unit -> unit $endif so no matter how many sail files include the above file, the valspec for f will only appear once. Currently we just have $include, $define, $ifdef and $ifndef (with $else and $endif). We're using $ rather than # because # is already used in internal identifiers, although this could be switched.
Diffstat (limited to 'src/initial_check.ml')
-rw-r--r--src/initial_check.ml4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/initial_check.ml b/src/initial_check.ml
index 87adb290..16df4648 100644
--- a/src/initial_check.ml
+++ b/src/initial_check.ml
@@ -826,9 +826,11 @@ let to_ast_def (names, k_env, def_ord) partial_defs def : def_progress envs_out
| Parse_ast.DEF_reg_dec(dec) ->
let d = to_ast_dec envs dec in
((Finished(DEF_reg_dec(d))),envs),partial_defs
+ | Parse_ast.DEF_pragma (_, _, l) ->
+ typ_error l "Encountered preprocessor directive in initial check" None None None
| Parse_ast.DEF_internal_mutrec _ ->
(* Should never occur because of remove_mutrec *)
- typ_error Parse_ast.Unknown "Internal mutual block found when processing scattered defs" None None None
+ typ_error Parse_ast.Unknown "Internal mutual block found when processing scattered defs" None None None
| Parse_ast.DEF_scattered(Parse_ast.SD_aux(sd,l)) ->
(match sd with
| Parse_ast.SD_scattered_function(rec_opt, tannot_opt, effects_opt, id) ->