diff options
| author | kr.angelov <kr.angelov@gmail.com> | 2013-09-27 15:09:48 +0000 |
|---|---|---|
| committer | kr.angelov <kr.angelov@gmail.com> | 2013-09-27 15:09:48 +0000 |
| commit | 426bc49a52b4efa0ef0129d713842d8c9abdf0ff (patch) | |
| tree | d9f5985559de0347448e77ff26ce5a2d3ee2f245 /src/runtime/c/pgf/reader.c | |
| parent | b138899512d9aea248160eb17df3007e55dd03da (diff) | |
a major refactoring in the C and the Haskell runtimes. Note incompatible change in the PGF format!!!
The following are the outcomes:
- Predef.nonExist is fully supported by both the Haskell and the C runtimes
- Predef.BIND is now an internal compiler defined token. For now
it behaves just as usual for the Haskell runtime, i.e. it generates &+.
However, the special treatment will let us to handle it properly in
the C runtime.
- This required a major change in the PGF format since both
nonExist and BIND may appear inside 'pre' and this was not supported
before.
Diffstat (limited to 'src/runtime/c/pgf/reader.c')
| -rw-r--r-- | src/runtime/c/pgf/reader.c | 31 |
1 files changed, 12 insertions, 19 deletions
diff --git a/src/runtime/c/pgf/reader.c b/src/runtime/c/pgf/reader.c index 95b5a4c04..ebc5050e4 100644 --- a/src/runtime/c/pgf/reader.c +++ b/src/runtime/c/pgf/reader.c @@ -586,27 +586,13 @@ pgf_read_printnames(PgfReader* rdr) return printnames; } -static PgfTokens* -pgf_read_tokens(PgfReader* rdr) -{ - size_t len = pgf_read_len(rdr); - gu_return_on_exn(rdr->err, NULL); - - PgfTokens* tokens = gu_new_seq(PgfToken, len, rdr->opool); - for (size_t i = 0; i < len; i++) { - PgfToken token = pgf_read_string(rdr); - gu_return_on_exn(rdr->err, NULL); - - gu_seq_set(tokens, PgfToken, i, token); - } - - return tokens; -} +static PgfSequence* +pgf_read_sequence(PgfReader* rdr); static void pgf_read_alternative(PgfReader* rdr, PgfAlternative* alt) { - alt->form = pgf_read_tokens(rdr); + alt->form = pgf_read_sequence(rdr); gu_return_on_exn(rdr->err,); size_t n_prefixes = pgf_read_len(rdr); @@ -672,12 +658,12 @@ pgf_read_symbol(PgfReader* rdr) gu_new_variant(PGF_SYMBOL_KS, PgfSymbolKS, &sym, rdr->opool); - sym_ks->tokens = pgf_read_tokens(rdr); + sym_ks->token = pgf_read_string(rdr); gu_return_on_exn(rdr->err, gu_null_variant); break; } case PGF_SYMBOL_KP: { - PgfTokens* default_form = pgf_read_tokens(rdr); + PgfSequence* default_form = pgf_read_sequence(rdr); gu_return_on_exn(rdr->err, gu_null_variant); size_t n_forms = pgf_read_len(rdr); @@ -703,6 +689,13 @@ pgf_read_symbol(PgfReader* rdr) gu_return_on_exn(rdr->err, gu_null_variant); break; } + case PGF_SYMBOL_BIND: { + gu_new_variant(PGF_SYMBOL_BIND, + PgfSymbolBIND, + &sym, rdr->opool); + gu_return_on_exn(rdr->err, gu_null_variant); + break; + } default: pgf_read_tag_error(rdr); } |
