~ chicken-core (chicken-5) 2b4ded5946e5d4a7736d8229bfcc3bac2424448a
commit 2b4ded5946e5d4a7736d8229bfcc3bac2424448a Author: Peter Bex <peter@more-magic.net> AuthorDate: Fri Apr 5 16:15:23 2019 +0200 Commit: Evan Hanson <evhan@foldling.org> CommitDate: Sun Apr 7 15:40:51 2019 +1200 Reject import of module currently being defined (fixes #1506) Signed-off-by: Evan Hanson <evhan@foldling.org> diff --git a/NEWS b/NEWS index ab9221fb..2d3e62fb 100644 --- a/NEWS +++ b/NEWS @@ -10,6 +10,12 @@ - Removed the unused, undocumented (and incorrect!) C functions C_delete_symbol_table and C_set_symbol_table. +- Module system + - When you try to import the module you are currently defining into + itself, an error will be raised. This prevents an infinite loop in + the compiler when later trying to import that same module (fixes + #1506, thanks to Kristian Lein-Mathisen). + 5.0.1 diff --git a/expand.scm b/expand.scm index ec302d48..c5ec3bcb 100644 --- a/expand.scm +++ b/expand.scm @@ -969,7 +969,11 @@ (lambda (x r c) `(##core#begin ,@(map (lambda (x) - (let-values (((name lib spec v s i) (##sys#decompose-import x r c 'import))) + (let-values (((name lib spec v s i) (##sys#decompose-import x r c 'import)) + ((mod) (##sys#current-module))) + (when (and mod (eq? name (##sys#module-name mod))) + (##sys#syntax-error-hook + 'import "cannot import from module currently being defined" name)) (if (not spec) (##sys#syntax-error-hook 'import "cannot import from undefined module" name)Trap