summaryrefslogtreecommitdiff
path: root/src/runtime/c/pgf/reader.c
diff options
context:
space:
mode:
authorkr.angelov <kr.angelov@gmail.com>2014-10-08 12:57:29 +0000
committerkr.angelov <kr.angelov@gmail.com>2014-10-08 12:57:29 +0000
commit9c2f71b07a5de7d6d4d13dc3c72d9b9ddc2f37dc (patch)
treecc468098d8b2f567121b860662311b9eb8d18492 /src/runtime/c/pgf/reader.c
parent67781996b639e9c31acd4a25b229222139686f07 (diff)
now we statically allocate closures for all top-level functions and all nullary constructors. closures are dynamically allocated only for CAFs. this reduces memory use and time to allocate dynamic closures
Diffstat (limited to 'src/runtime/c/pgf/reader.c')
-rw-r--r--src/runtime/c/pgf/reader.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/runtime/c/pgf/reader.c b/src/runtime/c/pgf/reader.c
index c65b8b057..2e8c154be 100644
--- a/src/runtime/c/pgf/reader.c
+++ b/src/runtime/c/pgf/reader.c
@@ -442,7 +442,12 @@ pgf_read_absfun(PgfReader* rdr, PgfAbstr* abstr)
switch (tag) {
case 0:
absfun->defns = NULL;
- absfun->closure_id = 0;
+ if (absfun->arity == 0) {
+ absfun->closure.code = abstr->eval_gates->evaluate_value;
+ absfun->closure.con = &absfun->closure.code;
+ } else {
+ absfun->closure.code = NULL;
+ }
break;
case 1: {
GuLength length = pgf_read_len(rdr);