Changeset 57

Show
Ignore:
Timestamp:
06/01/06 22:33:31 (2 years ago)
Author:
Gregor
Message:

bcd.gen/bcd/gen/bcdgen.d: Many, many fixes.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/bcd.gen/bcd/gen/bcdgen.d

    r48 r57  
    318318char[] getNName(xmlNode *node) 
    319319{ 
    320     char[] name = safeName(toStringFree(xmlGetProp(node, "name"))); 
    321     if (name == "") name = safeName(toStringFree(xmlGetProp(node, "mangled"))); 
    322     if (name == "") name = safeName("_BCD_" ~ toStringFree(xmlGetProp(node, "id"))); 
     320    char[] name = toStringFree(xmlGetProp(node, "name")); 
     321    if (name == "") name = toStringFree(xmlGetProp(node, "mangled")); 
     322    if (name == "") { 
     323        char[] id = toStringFree(xmlGetProp(node, "id")); 
     324        if (id != "") 
     325            name = "_BCD_" ~ id; 
     326    } 
    323327    return name; 
    324328} 
     
    364368    char* demangled = getDemangled(node); 
    365369    char* incomplete = xmlGetProp(node, "incomplete"); 
     370    if (incomplete) free(incomplete); 
    366371     
    367372    if (file && (demangled || allowNameless) && !incomplete) { 
     
    407412        if (file) free(file); 
    408413        if (demangled) free(demangled); 
    409         if (incomplete) free(incomplete); 
    410414        return false; 
    411415    } 
     
    616620    if (find(base, '<') != -1) base = "bcd.bind.BoundClass"; 
    617621     
    618     dtail ~= "class " ~ name ~ " : " ~ base ~ " {\n"; 
     622    dtail ~= "class " ~ safeName(name) ~ " : " ~ base ~ " {\n"; 
    619623     
    620624    dtail ~= "this(ifloat ignore) {\n"; 
     
    656660        dtail ~= "struct "; 
    657661    } 
    658     dtail ~= name ~ " {\n"; 
     662    dtail ~= safeName(name) ~ " {\n"; 
    659663     
    660664    curClass = demangled; 
     
    685689                dhead ~= "extern (C) void _BCD_set_" ~ mangled ~ "(void *, " ~ type.DType ~ ");\n"; 
    686690             
    687                 dtail ~= "void set_" ~ name ~ "(" ~ type.DType ~ " x) {\n"; 
     691                dtail ~= "void set_" ~ safeName(name) ~ "(" ~ type.DType ~ " x) {\n"; 
    688692                dtail ~= "_BCD_set_" ~ mangled ~ "(__C_data, x);\n"; 
    689693                dtail ~= "}\n"; 
     
    700704            dhead ~= "extern (C) " ~ type.DType ~ " _BCD_get_" ~ mangled ~ "(void *);\n"; 
    701705         
    702             dtail ~= type.DType ~ " get_" ~ name ~ "() {\n"; 
     706            dtail ~= type.DType ~ " get_" ~ safeName(name) ~ "() {\n"; 
    703707            dtail ~= "return _BCD_get_" ~ mangled ~ "(__C_data);\n"; 
    704708            dtail ~= "}\n"; 
     
    716720                dhead ~= "extern (C) void _BCD_set_" ~ mangled ~ "(" ~ type.DType ~ ");\n"; 
    717721             
    718                 dtail ~= "void set_" ~ name ~ "(" ~ type.DType ~ " x) {\n"; 
     722                dtail ~= "void set_" ~ safeName(name) ~ "(" ~ type.DType ~ " x) {\n"; 
    719723                dtail ~= "_BCD_set_" ~ mangled ~ "(x);\n"; 
    720724                dtail ~= "}\n"; 
     
    731735            dhead ~= "extern (C) " ~ type.DType ~ " _BCD_get_" ~ mangled ~ "();\n"; 
    732736         
    733             dtail ~= type.DType ~ " get_" ~ name ~ "() {\n"; 
     737            dtail ~= type.DType ~ " get_" ~ safeName(name) ~ "() {\n"; 
    734738            dtail ~= "return _BCD_get_" ~ mangled ~ "();\n"; 
    735739            dtail ~= "}\n"; 
     
    11411145    static bool[char[]] handledTypedefs; 
    11421146     
    1143     if (!parseThis(node)) return; 
    1144      
    11451147    char[] type = toStringFree(xmlGetProp(node, "id")); 
    11461148    char[] deftype = toStringFree(xmlGetProp(node, "type")); 
     
    11541156        cout ~= "typedef " ~ pt.CType ~ " _BCD_" ~ aname ~ ";\n"; 
    11551157         
    1156         dhead ~= "alias " ~ pt.DType ~ " " ~ aname ~ ";\n"; 
     1158        if (parseThis(node, true)) dhead ~= "alias " ~ pt.DType ~ " " ~ safeName(aname) ~ ";\n"; 
    11571159    } 
    11581160} 
     
    11861188        if (aname[0] == '.') return; 
    11871189         
    1188         dhead ~= "enum " ~ aname ~ " {\n"; 
     1190        dhead ~= "enum " ~ safeName(aname) ~ " {\n"; 
    11891191         
    11901192        xmlNode *curNode = null; 
     
    12421244    { 
    12431245        ParsedType pt = new ParsedType(this); 
     1246        pt.className ~= className; 
    12441247        pt.isClass = isClass; 
    12451248        pt.isClassPtr = isClassPtr; 
     
    12561259} 
    12571260 
     1261extern (C) int getpid(); 
     1262extern (C) int kill(int, int); 
    12581263/** 
    12591264 * Get the type of a node in C[++] and D 
     
    12641269     
    12651270    int xmlrret; 
     1271     
     1272    if (type == "") kill(getpid(), 11); 
    12661273     
    12671274    // first find the element matching the type 
     
    14131420                        // 1) cut off the * 
    14141421                        baseType.CType = baseType.CType[0 .. baseType.CType.length - 2]; 
    1415                      
     1422                         
    14161423                        // 2) add the & 
    14171424                        if (outputC) { 
     
    14201427                            baseType.CType ~= " &"; 
    14211428                        } 
    1422                      
     1429                         
    14231430                        ParsedType pt = new ParsedType(baseType); 
    14241431                        pt.isClassPtr = true; 
     
    14961503                    ParsedType pt = parseType(toStringFree(xmlGetProp(curNode, "type"))); 
    14971504                    char[] aname = getNName(curNode); 
    1498                  
    1499                     if (parseThis(curNode)) parse_Typedef(curNode); 
    1500                  
     1505                     
     1506                    parse_Typedef(curNode); 
     1507                     
    15011508                    ParsedType rpt = new ParsedType("_BCD_" ~ aname, pt.DType); 
    15021509                    rpt.isClass = pt.isClass; 
     
    15101517                    if (!(type in handledFunctions)) { 
    15111518                        handledFunctions[type] = true; 
    1512                      
     1519                         
    15131520                        ParsedType pt = parseType(toStringFree(xmlGetProp(curNode, "returns"))); 
    15141521                        char[] couta, dheada; 
    1515                      
     1522                         
    15161523                        bool first = true; 
    15171524                        couta = "typedef " ~ pt.CType ~ 
     
    15241531                            if (curArg.type == xmlElementType.XML_ELEMENT_NODE) { 
    15251532                                char[] aname = toString(curArg.name); 
    1526                              
    1527                                 ParsedType argType = 
    1528                                     parseType(toStringFree(xmlGetProp(curArg, "type"))); 
    1529                              
    1530                                 if (!first) { 
    1531                                     couta ~= ", "; 
    1532                                     dheada ~= ", "; 
    1533                                 } else { 
    1534                                     first = false; 
     1533                                 
     1534                                if (aname == "Argument") { 
     1535                                    ParsedType argType = 
     1536                                        parseType(toStringFree(xmlGetProp(curArg, "type"))); 
     1537                                     
     1538                                    if (!first) { 
     1539                                        couta ~= ", "; 
     1540                                        dheada ~= ", "; 
     1541                                    } else { 
     1542                                        first = false; 
     1543                                    } 
     1544                                     
     1545                                    couta ~= argType.CType; 
     1546                                    dheada ~= argType.DType; 
     1547                                } else if (aname == "Ellipsis" && outputC) { 
     1548                                    if (!first) { 
     1549                                        couta ~= ", "; 
     1550                                        dheada ~= ", "; 
     1551                                    } else { 
     1552                                        first = false; 
     1553                                    } 
     1554                                     
     1555                                    couta ~= "..."; 
     1556                                    dheada ~= "..."; 
    15351557                                } 
    1536                              
    1537                                 couta ~= argType.CType; 
    1538                                 dheada ~= argType.DType; 
    15391558                            } 
    15401559                        } 
     
    15661585                        if (context != "") { 
    15671586                            ParsedType pt = parseType(context); 
     1587                             
     1588                            pt.CType = replace(pt.CType, " *", ""); 
     1589                             
    15681590                            if (pt.CType == "") { 
    15691591                                pt.CType = "enum " ~ aname;