aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--Changelog.md8
-rw-r--r--README.md2
-rw-r--r--src/inpla.y12
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; i<arity; i++) {
- VALUE a2port = AGENT(a2)->port[1];
+ VALUE a2port = AGENT(a2)->port[i];
VALUE eps = make_Agent(vm, ID_ERASER);
PUSH(vm, eps, a2port);
}