[Issue 19047] New: Undefined identifier caused by circular import and CTFE
    d-bugmail at puremagic.com 
    d-bugmail at puremagic.com
       
    Mon Jul  2 07:03:22 UTC 2018
    
    
  
https://issues.dlang.org/show_bug.cgi?id=19047
          Issue ID: 19047
           Summary: Undefined identifier caused by circular import and
                    CTFE
           Product: D
           Version: D2
          Hardware: All
                OS: All
            Status: NEW
          Severity: normal
          Priority: P1
         Component: dmd
          Assignee: nobody at puremagic.com
          Reporter: b2.temp at gmx.com
3 modules are involved:
=== ast.d ===
module ast;
import symbol;
string astNodesClasses()
{
    return "alias AstNodesSeq = AstNode;";
}
mixin(astNodesClasses());
alias AstNodes = AstNodesSeq;
string genVisitMethods(string statements)
{
    return "void visit(" ~ AstNodes.stringof ~ "){}";
}
class AstNode{}
=== utils.d ====
module utils;
import ast, symbol;
class Foo
{
    mixin(genVisitMethods(""));
}
=== symbol.d ===
module symbol;
import utils; // circular problem caused by this
================
compile with: 
    `dmd ast.d symbol.d utils.d -lib`
to get: 
    `ast.d(12): Error: undefined identifier AstNodesSeq
    utils.d(8):        called from here: genVisitMethods("")`
Now remove the import in symbol.d and try again, no problem, error is gone.
I think that there's should not be any circular issue.
In bigger project CTFE fails because of this (CTFE fails because of previous
error in genVisit... etc)
--
    
    
More information about the Digitalmars-d-bugs
mailing list