From a67df32aa0bd577c37f27b879fc33fd23612e711 Mon Sep 17 00:00:00 2001 From: Shinya Sato Date: Sat, 29 Apr 2023 12:12:31 +0900 Subject: v0.10.8 --- Changelog.md | 8 ++++++++ README.md | 2 +- src/inpla.y | 12 +++++++----- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/Changelog.md b/Changelog.md index 5becd68..aae567d 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,5 +1,13 @@ # Change log +### v0.10.8 (released on 29 April 2023) +#### Bug fix +- **Segmentation faults due to use of 4-tuples or built-in Eraser**: These are now resolved. + + + + + ### v0.10.7 (released on 11 March 2023) | | Inpla8 | Inpla8r | diff --git a/README.md b/README.md index 8cea68b..a6cbe5a 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Inpla is a multi-threaded parallel interpreter of interaction nets. Once you write programs for sequential execution, it works also in multi-threaded parallel execution. Each thread is managed on each CPU-core with POSIX-thread library. -* The current version is 0.10.7, released on **11 March 2023**. (See [Changelog.md](Changelog.md) for details.) +* The current version is 0.10.8, released on **29 April 2023**. (See [Changelog.md](Changelog.md) for details.) * The below graph shows speed-up ratio to threads numbers for programs in the following benchmark table. ![speedup-ratio](pic/benchmark_reuse_v0.10.7.png) diff --git a/src/inpla.y b/src/inpla.y index 7bf496d..c0833c3 100644 --- a/src/inpla.y +++ b/src/inpla.y @@ -22,8 +22,8 @@ // ---------------------------------------------- -#define VERSION "0.10.7" -#define BUILT_DATE "11 March 2023" +#define VERSION "0.10.8" +#define BUILT_DATE "29 April 2023" // ------------------------------------------------------------------ @@ -6457,7 +6457,7 @@ int Compile_term_on_ast(Ast *ptr, int target) { IMCode_genCode3(OP_LOADP, alloc[0], 0, result); IMCode_genCode3(OP_LOADP, alloc[1], 1, result); IMCode_genCode3(OP_LOADP, alloc[2], 2, result); - IMCode_genCode3(OP_LOADP, alloc[2], 3, result); + IMCode_genCode3(OP_LOADP, alloc[3], 3, result); #endif } else { mkagent = OP_REUSEAGENT4; @@ -8084,12 +8084,14 @@ int make_rule(Ast *ast) { ast->left->left = ast_remove_tuple1(ruleAgent_L); ast->left->right = ast_remove_tuple1(ruleAgent_R); + Ast *rule_mainbody = ast->right; Ast_remove_tuple1_in_mainbody(rule_mainbody); set_annotation_LR(VM_OFFSET_ANNOTATE_L, VM_OFFSET_ANNOTATE_R); + if (!make_rule_oneway(ast)) { return 0; } @@ -8104,7 +8106,7 @@ int make_rule(Ast *ast) { ruleAgent_R = ast->left->right; ast->left->left = ruleAgent_R; - ast->left->right = ruleAgent_L;; + ast->left->right = ruleAgent_L; set_annotation_LR(VM_OFFSET_ANNOTATE_R, VM_OFFSET_ANNOTATE_L); // ast_puts(ast);puts(""); @@ -9785,7 +9787,7 @@ loop_agent_a1_a2_this_order: default: for (int i=1; iport[1]; + VALUE a2port = AGENT(a2)->port[i]; VALUE eps = make_Agent(vm, ID_ERASER); PUSH(vm, eps, a2port); } -- cgit v1.2.3