summaryrefslogtreecommitdiff
path: root/src/runtime/c/pgf/reader.c
diff options
context:
space:
mode:
authorkr.angelov <kr.angelov@gmail.com>2013-06-27 09:39:15 +0000
committerkr.angelov <kr.angelov@gmail.com>2013-06-27 09:39:15 +0000
commit155afdf9b76e37f4daed6d7d48dfd9e56844964f (patch)
tree81a0ea3cd21dd64cf147c36949235751268b1b87 /src/runtime/c/pgf/reader.c
parentf4f76e46386e0888215eaf264e03e02a924dc7a7 (diff)
a complete Python API for reading, printing and manipulation of abstract trees and types. This includes dependent types, high-order abstract syntax and implicit arguments
Diffstat (limited to 'src/runtime/c/pgf/reader.c')
-rw-r--r--src/runtime/c/pgf/reader.c28
1 files changed, 16 insertions, 12 deletions
diff --git a/src/runtime/c/pgf/reader.c b/src/runtime/c/pgf/reader.c
index 1eccc25e0..a43ebdba0 100644
--- a/src/runtime/c/pgf/reader.c
+++ b/src/runtime/c/pgf/reader.c
@@ -188,7 +188,7 @@ pgf_read_flags(PgfReader* rdr)
}
static PgfType*
-pgf_read_type(PgfReader* rdr);
+pgf_read_type_(PgfReader* rdr);
static PgfExpr
pgf_read_expr_(PgfReader* rdr)
@@ -269,7 +269,7 @@ pgf_read_expr_(PgfReader* rdr)
&expr, rdr->opool);
etyped->expr = pgf_read_expr_(rdr);
gu_return_on_exn(rdr->err, gu_null_variant);
- etyped->type = pgf_read_type(rdr);
+ etyped->type = pgf_read_type_(rdr);
gu_return_on_exn(rdr->err, gu_null_variant);
break;
}
@@ -292,34 +292,38 @@ pgf_read_expr_(PgfReader* rdr)
static void
pgf_read_hypo(PgfReader* rdr, PgfHypo* hypo)
{
- hypo->bindtype = pgf_read_tag(rdr);
+ hypo->bind_type = pgf_read_tag(rdr);
gu_return_on_exn(rdr->err, );
hypo->cid = pgf_read_cid(rdr);
gu_return_on_exn(rdr->err, );
- hypo->type = pgf_read_type(rdr);
+ hypo->type = pgf_read_type_(rdr);
gu_return_on_exn(rdr->err, );
}
static PgfType*
-pgf_read_type(PgfReader* rdr)
+pgf_read_type_(PgfReader* rdr)
{
- PgfType* type = gu_new(PgfType, rdr->opool);
-
size_t n_hypos = pgf_read_len(rdr);
gu_return_on_exn(rdr->err, NULL);
- type->hypos = gu_new_seq(PgfHypo, n_hypos, rdr->opool);
+ GuSeq hypos = gu_new_seq(PgfHypo, n_hypos, rdr->opool);
for (size_t i = 0; i < n_hypos; i++) {
- PgfHypo* hypo = gu_seq_index(type->hypos, PgfHypo, i);
+ PgfHypo* hypo = gu_seq_index(hypos, PgfHypo, i);
pgf_read_hypo(rdr, hypo);
gu_return_on_exn(rdr->err, NULL);
}
- type->cid = pgf_read_cid(rdr);
+ PgfCId cid = pgf_read_cid(rdr);
gu_return_on_exn(rdr->err, NULL);
- type->n_exprs = pgf_read_len(rdr);
+ size_t n_exprs = pgf_read_len(rdr);
+
+ PgfType* type = gu_new_flex(rdr->opool, PgfType, exprs, n_exprs);
+ type->hypos = hypos;
+ type->cid = cid;
+ type->n_exprs = n_exprs;
+
for (size_t i = 0; i < type->n_exprs; i++) {
type->exprs[i] = pgf_read_expr_(rdr);
gu_return_on_exn(rdr->err, NULL);
@@ -423,7 +427,7 @@ pgf_read_absfun(PgfReader* rdr)
absfun->name = pgf_read_cid(rdr);
gu_return_on_exn(rdr->err, NULL);
- absfun->type = pgf_read_type(rdr);
+ absfun->type = pgf_read_type_(rdr);
gu_return_on_exn(rdr->err, NULL);
absfun->arity = pgf_read_int(rdr);