From 9e6abbf4d40b3ebe121147b9e51a68f6746e3848 Mon Sep 17 00:00:00 2001 From: Calvin Rose Date: Sun, 10 Mar 2024 09:06:32 -0500 Subject: [PATCH] Fix asm roundtrip issue. --- src/core/asm.c | 8 ++++++-- test/suite-asm.janet | 8 ++++++++ test/suite-boot.janet | 6 +++++- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/core/asm.c b/src/core/asm.c index 14fa28c0..9fd46d5f 100644 --- a/src/core/asm.c +++ b/src/core/asm.c @@ -560,6 +560,9 @@ static JanetAssembleResult janet_asm1(JanetAssembler *parent, Janet source, int x = janet_get1(s, janet_ckeywordv("vararg")); if (janet_truthy(x)) def->flags |= JANET_FUNCDEF_FLAG_VARARG; + /* Initialize slotcount */ + def->slotcount = !!(def->flags & JANET_FUNCDEF_FLAG_VARARG) + def->arity; + /* Check structarg */ x = janet_get1(s, janet_ckeywordv("structarg")); if (janet_truthy(x)) def->flags |= JANET_FUNCDEF_FLAG_STRUCTARG; @@ -784,8 +787,9 @@ static JanetAssembleResult janet_asm1(JanetAssembler *parent, Janet source, int } /* Verify the func def */ - if (janet_verify(def)) { - janet_asm_error(&a, "invalid assembly"); + int verify_status = janet_verify(def); + if (verify_status) { + janet_asm_errorv(&a, janet_formatc("invalid assembly (%d)", verify_status)); } /* Add final flags */ diff --git a/test/suite-asm.janet b/test/suite-asm.janet index 7e230860..e435094d 100644 --- a/test/suite-asm.janet +++ b/test/suite-asm.janet @@ -51,5 +51,13 @@ (def f (asm (disasm (fn [x] (fn [y] (+ x y)))))) (assert (= ((f 10) 37) 47) "asm environment tables") +# issue #1424 +(assert-no-error "arity > used slots (issue #1424)" + (asm + (disasm + (fn [] + (def foo (fn [one two] one)) + (foo 100 200))))) + (end-suite) diff --git a/test/suite-boot.janet b/test/suite-boot.janet index 5a754e09..89fb0076 100644 --- a/test/suite-boot.janet +++ b/test/suite-boot.janet @@ -364,7 +364,7 @@ "sort 5") (assert (<= ;(sort (map (fn [x] (math/random)) (range 1000)))) "sort 6") -# #1283 +# #1283 (assert (deep= (partition 2 (generate [ i :in [:a :b :c :d :e]] i)) '@[(:a :b) (:c :d) (:e)])) @@ -955,6 +955,10 @@ (defn case-4 [&] (def x (break (break (break))))) (bytecode-roundtrip case-4) +(defn case-5 [] + (def foo (fn [one two] one)) + (foo 100 200)) +(bytecode-roundtrip case-5) # Debug bytecode of these functions # (pp (disasm case-1))