summaryrefslogtreecommitdiff
path: root/src/parser2.mly
diff options
context:
space:
mode:
authorAlasdair Armstrong2017-08-23 17:57:26 +0100
committerAlasdair Armstrong2017-08-23 17:57:26 +0100
commitb9810423d4eece710a276384a4664aaab6aed046 (patch)
treee5de0df1abbf25ed0cb59c5807fa73ff0723a442 /src/parser2.mly
parentc380d2d0b51be71871085ac7d085268f5baccb56 (diff)
Started work on an undefined literal removal pass for the ocaml
backed. Ocaml doesn't support undefined values, so we need a way to remove them from the specification in order to generate good ocaml code. There are more subtle issues to - like if we initialize a mutable variable with an undefined list, then the ocaml runtime has no way of telling what it's length should be (as this information is removed by the simple_types pass). We therefore rewrite undefined literals with calls to functions that create undefined types, e.g. (bool) undefined becomes undefined_bool () (vector<'n,'m,dec,bit>) undefined becomes undefined_vector(sizeof 'n, sizeof 'm, undefined_bit ()) We therefore have to generate undefined_X functions for any user defined datatype X. initial_check seems to be the logical place for this. This is straightforward provided the user defined types are not-recursive (and it shouldn't be too bad even if they are).
Diffstat (limited to 'src/parser2.mly')
-rw-r--r--src/parser2.mly3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/parser2.mly b/src/parser2.mly
index bde542e0..42e13721 100644
--- a/src/parser2.mly
+++ b/src/parser2.mly
@@ -153,6 +153,8 @@ let rec desugar_rchain chain s e =
%token <string> Op0r Op1r Op2r Op3r Op4r Op5r Op6r Op7r Op8r Op9r
%start file
+%start typschm
+%type <Parse_ast.typschm> typschm
%type <Parse_ast.defs> defs
%type <Parse_ast.defs> file
@@ -1022,4 +1024,3 @@ defs:
file:
| defs Eof
{ $1 }
-