summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES3
-rw-r--r--appl/cmd/limbo/stubs.b8
-rw-r--r--dis/limbo.disbin343321 -> 343383 bytes
-rw-r--r--include/version.h2
-rw-r--r--limbo/stubs.c8
5 files changed, 14 insertions, 7 deletions
diff --git a/CHANGES b/CHANGES
index f4626387..2b7f72b3 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,6 @@
+20090217
+ appl/cmd/limbo/stubs.b limbo/stubs.c - include length parameter to builtinmod (could just be 0 in most cases)
+ change f->ret/destroy code in stubs.c/stubs.b to destroy correctly in case of exceptions
20090202
emu/port/win-x11a.c: might as well try this everywhere now
20090127
diff --git a/appl/cmd/limbo/stubs.b b/appl/cmd/limbo/stubs.b
index cafd6ff7..28b92a13 100644
--- a/appl/cmd/limbo/stubs.b
+++ b/appl/cmd/limbo/stubs.b
@@ -142,7 +142,7 @@ modcode(globals: ref Decl)
print("\nvoid\n%sinit(void)\n{\n", emitcode);
else{
print("\nvoid\n%smodinit(void)\n{\n", emitcode);
- print("\tbuiltinmod(\"$%s\", %smodtab);\n", emitcode, emitcode);
+ print("\tbuiltinmod(\"$%s\", %smodtab, %smodlen);\n", emitcode, emitcode, emitcode);
}
for(id = d.ty.ids; id != nil; id = id.next)
if(id.store == Dtype && id.ty.kind == Tadt){
@@ -173,8 +173,10 @@ modcode(globals: ref Decl)
print("\nvoid\n%s_%s(void *fp)\n{\n\tF_%s_%s *f = fp;\n",
id.dot.sym.name, id.sym.name,
id.dot.sym.name, id.sym.name);
- if(id.ty.tof != tnone && tattr[id.ty.tof.kind].isptr)
- print("\n\tdestroy(*f->ret);\n\t*f->ret = H;\n");
+ if(id.ty.tof != tnone && tattr[id.ty.tof.kind].isptr){
+ print("\tvoid *r;\n");
+ print("\n\tr = *f->ret;\n\t*f->ret = H;\n\tdestroy(r);\n");
+ }
print("}\n");
}
diff --git a/dis/limbo.dis b/dis/limbo.dis
index 8abc6333..3e835b96 100644
--- a/dis/limbo.dis
+++ b/dis/limbo.dis
Binary files differ
diff --git a/include/version.h b/include/version.h
index 606ad1e2..54f3a53c 100644
--- a/include/version.h
+++ b/include/version.h
@@ -1 +1 @@
-#define VERSION "Fourth Edition (20090202)"
+#define VERSION "Fourth Edition (20090217)"
diff --git a/limbo/stubs.c b/limbo/stubs.c
index 7d951c63..ca6db284 100644
--- a/limbo/stubs.c
+++ b/limbo/stubs.c
@@ -113,7 +113,7 @@ modcode(Decl *globals)
print("\nvoid\n%sinit(void)\n{\n", emitcode);
else{
print("\nvoid\n%smodinit(void)\n{\n", emitcode);
- print("\tbuiltinmod(\"$%s\", %smodtab);\n", emitcode, emitcode);
+ print("\tbuiltinmod(\"$%s\", %smodtab, %smodlen);\n", emitcode, emitcode, emitcode);
}
for(id = d->ty->ids; id != nil; id = id->next){
if(id->store == Dtype && id->ty->kind == Tadt){
@@ -145,8 +145,10 @@ modcode(Decl *globals)
print("\nvoid\n%s_%s(void *fp)\n{\n\tF_%s_%s *f = fp;\n",
id->dot->sym->name, id->sym->name,
id->dot->sym->name, id->sym->name);
- if(id->ty->tof != tnone && tattr[id->ty->tof->kind].isptr)
- print("\n\tdestroy(*f->ret);\n\t*f->ret = H;\n");
+ if(id->ty->tof != tnone && tattr[id->ty->tof->kind].isptr){
+ print("\tvoid *r;\n");
+ print("\n\tr = *f->ret;\n\t*f->ret = H;\n\tdestroy(r);\n");
+ }
print("}\n");
}