Author: yamakenz
Date: Wed Sep 12 09:48:17 2007
New Revision: 4950

Modified:
   sigscheme-trunk/QALog
   sigscheme-trunk/src/eval.c
   sigscheme-trunk/test/test-legacy-macro.scm

Log:
[QA] eval.c

* src/eval.c
  - (call): Fix non-toplevel definition by a form returned by syntactic
    closure
* test/test-legacy-macro.scm
  - Add various tests "define-macro bad definition placement"
* QALog
  - Update


Modified: sigscheme-trunk/QALog
==============================================================================
--- sigscheme-trunk/QALog       (original)
+++ sigscheme-trunk/QALog       Wed Sep 12 09:48:17 2007
@@ -692,14 +692,14 @@
 
 file:              eval.c
 category:          core
-spec by eyes:      [EMAIL PROTECTED], [EMAIL PROTECTED], [EMAIL PROTECTED], 
[EMAIL PROTECTED], [EMAIL PROTECTED], [EMAIL PROTECTED]
-spec by tests:     [EMAIL PROTECTED], [EMAIL PROTECTED], [EMAIL PROTECTED], 
[EMAIL PROTECTED], [EMAIL PROTECTED]
+spec by eyes:      [EMAIL PROTECTED], [EMAIL PROTECTED], [EMAIL PROTECTED], 
[EMAIL PROTECTED], [EMAIL PROTECTED], [EMAIL PROTECTED], [EMAIL PROTECTED]
+spec by tests:     [EMAIL PROTECTED], [EMAIL PROTECTED], [EMAIL PROTECTED], 
[EMAIL PROTECTED], [EMAIL PROTECTED], [EMAIL PROTECTED]
 general review:    [EMAIL PROTECTED], [EMAIL PROTECTED]
 64-bit by eyes:    [EMAIL PROTECTED], [EMAIL PROTECTED]
 64-bit by tests:   
 coding style:      [EMAIL PROTECTED], [EMAIL PROTECTED]
-normal case tests: [EMAIL PROTECTED], [EMAIL PROTECTED], [EMAIL PROTECTED], 
[EMAIL PROTECTED]
-corner case tests: [EMAIL PROTECTED], [EMAIL PROTECTED], [EMAIL PROTECTED], 
[EMAIL PROTECTED]
+normal case tests: [EMAIL PROTECTED], [EMAIL PROTECTED], [EMAIL PROTECTED], 
[EMAIL PROTECTED], [EMAIL PROTECTED]
+corner case tests: [EMAIL PROTECTED], [EMAIL PROTECTED], [EMAIL PROTECTED], 
[EMAIL PROTECTED], [EMAIL PROTECTED]
 
 file:              module.c
 category:          core
@@ -1133,6 +1133,12 @@
 
 Log
 ---
+2007-09-13  YamaKen <yamaken AT bp.iij4u.or.jp>
+        * eval.c
+          - Fix non-toplevel definition by a form returned by syntactic
+            closure, and QA done again @r4950 for define-macro with
+            test-legacy-macro.scm
+
 2007-09-08  YamaKen <yamaken AT bp.iij4u.or.jp>
         * module-srfi43.c
           - QA done @r4943 with test-srfi43.scm

Modified: sigscheme-trunk/src/eval.c
==============================================================================
--- sigscheme-trunk/src/eval.c  (original)
+++ sigscheme-trunk/src/eval.c  Wed Sep 12 09:48:17 2007
@@ -254,10 +254,13 @@
 #if SCM_USE_LEGACY_MACRO
             if (SYNTACTIC_CLOSUREP(proc)) {
                 ScmObj ret;
+                scm_bool toplevelp;
 
                 if (!need_eval)
                     ERR_OBJ("can't apply/map a macro", proc);
 
+                toplevelp = SCM_DEFINABLE_TOPLEVELP(eval_state);
+
                 ret = call_closure(proc, args, eval_state, SCM_VALTYPE_AS_IS);
                 /* eval the result into an as-is object */
                 ret = SCM_FINISH_TAILREC_CALL(ret, eval_state);
@@ -269,7 +272,8 @@
 #if SCM_STRICT_TOPLEVEL_DEFINITIONS
                 /* Workaround to allow toplevel definitions by the returned
                  * form. See scm_eval(). */
-                eval_state->nest = SCM_NEST_RETTYPE_BEGIN;
+                if (toplevelp)
+                    eval_state->nest = SCM_NEST_RETTYPE_BEGIN;
 #endif
 
                 return ret;

Modified: sigscheme-trunk/test/test-legacy-macro.scm
==============================================================================
--- sigscheme-trunk/test/test-legacy-macro.scm  (original)
+++ sigscheme-trunk/test/test-legacy-macro.scm  Wed Sep 12 09:48:17 2007
@@ -66,6 +66,18 @@
   (test-eq 'val (m))))
 (test-end)
 
+(test-begin "define-macro bad definition placement")
+;; non-toplevel definition
+(test-error (if #t (define-macro m
+                     (lambda ()
+                       '(define foo 3)))))
+;; non-toplevel definition by a form returned by syntactic closure
+(define-macro m
+  (lambda ()
+    '(define foo 3)))
+(test-error (if #t (m)))
+(test-end)
+
 (test-begin "define-macro referring runtime env")
 (define cnt 0)
 (define-macro m

Reply via email to