Changeset 76

Show
Ignore:
Timestamp:
08/07/06 16:57:04 (2 years ago)
Author:
Gregor
Message:

bcd.gen/bcd/gen/bcdgen.d: parseTypeReturnable: Parse a type, but convert static arrays into pointers.

Files:

Legend:

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

    r75 r76  
    11571157    char[] name = getNName(node); 
    11581158    char[] mangled = toStringFree(getMangled(node)); 
    1159     ParsedType type = parseType(toStringFree(xmlGetProp(node, "returns"))); 
     1159    ParsedType type = parseTypeReturnable(toStringFree(xmlGetProp(node, "returns"))); 
    11601160    char[] Dargs; 
    11611161    char[] Deargs; 
     
    11831183    char[] name = toStringFree(xmlGetProp(node, "name"));; 
    11841184    char[] mangled = toStringFree(getMangled(node)); 
    1185     ParsedType type = parseType(toStringFree(xmlGetProp(node, "returns"))); 
     1185    ParsedType type = parseTypeReturnable(toStringFree(xmlGetProp(node, "returns"))); 
    11861186    char[] Dargs; 
    11871187    char[] Deargs; 
     
    13551355    char[] mangled = toStringFree(getMangled(node)); 
    13561356    char[] demangled = toStringFree(getDemangled(node)); 
    1357     ParsedType type = parseType(toStringFree(xmlGetProp(node, "returns"))); 
     1357    ParsedType type = parseTypeReturnable(toStringFree(xmlGetProp(node, "returns"))); 
    13581358    char[] Dargs; 
    13591359    char[] Deargs; 
     
    15631563    bool isClassPtr; 
    15641564    bool isFunction; 
     1565    bool isStaticArray; 
     1566} 
     1567 
     1568/** 
     1569 * Get the type of a node in C[++] and D, in a way which can be a D return type 
     1570 */ 
     1571ParsedType parseTypeReturnable(char[] type) 
     1572{ 
     1573    ParsedType t = parseType(type); 
     1574    if (t.isStaticArray) { 
     1575        // can't return a static array, convert it into a pointer 
     1576        int bloc = rfind(t.DType, '['); 
     1577        if (bloc != -1) { 
     1578            // cut off the [...] 
     1579            t.DType = t.DType[0..bloc] ~ "*"; 
     1580            t.isStaticArray = false; 
     1581        } 
     1582    } 
     1583 
     1584    return t; 
    15651585} 
    15661586 
     
    17161736                    baseType.DType ~= " [" ~ toString(size) ~ "]"; 
    17171737                 
    1718                     parsedCache[type] = new ParsedType(baseType); 
     1738                    ParsedType t = new ParsedType(baseType); 
     1739                    t.isStaticArray = true; 
     1740                    parsedCache[type] = t; 
    17191741                 
    17201742                } else if (nname == "ReferenceType") {