--- kawa-clean-trunk/kawa/lang/SyntaxPattern.java Thu Oct 12 12:21:24 2006 +++ kawa-trunk/kawa/lang/SyntaxPattern.java Thu Oct 12 16:20:45 2006 @@ -247,6 +247,7 @@ Translator tr) { PatternScope patternScope = tr.patternScope; + ScopeExp outerScope = patternScope.outer; Vector patternNames = patternScope.pattern_names; for (;;) { @@ -337,8 +338,8 @@ { ScopeExp scope = syntax == null ? tr.currentScope() : syntax.scope; - if (literalIdentifierEq(pattern, scope, - literal_identifiers[j])) + if (literalIdentifierEqDef(pattern, scope, + literal_identifiers[j], outerScope)) { int i = SyntaxTemplate.indexOf(literals, pattern); if (i < 0) @@ -600,15 +601,15 @@ return vars; } - public static boolean literalIdentifierEq (Object id1, ScopeExp sc1, - Object literal2) + public static boolean literalIdentifierEqDef (Object id1, ScopeExp sc1, + Object literal2, ScopeExp sc2) { if (literal2 instanceof SyntaxForm) { SyntaxForm syntax = (SyntaxForm) literal2; return literalIdentifierEq(id1, sc1, syntax.form, syntax.scope); } - return literalIdentifierEq(id1, sc1, literal2, null); + return literalIdentifierEq(id1, sc1, literal2, sc2); } public static boolean literalIdentifierEq (Object id1, ScopeExp sc1, @@ -626,7 +627,7 @@ } while (sc2 != null && ! (sc2 instanceof ModuleExp)) { - d2 = sc1.lookup(id1); + d2 = sc2.lookup(id1); if (d2 != null) break; sc2 = sc2.outer;