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