Changeset 57
- Timestamp:
- 06/01/06 22:33:31 (2 years ago)
- Files:
-
- trunk/bcd.gen/bcd/gen/bcdgen.d (modified) (21 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/bcd.gen/bcd/gen/bcdgen.d
r48 r57 318 318 char[] getNName(xmlNode *node) 319 319 { 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 } 323 327 return name; 324 328 } … … 364 368 char* demangled = getDemangled(node); 365 369 char* incomplete = xmlGetProp(node, "incomplete"); 370 if (incomplete) free(incomplete); 366 371 367 372 if (file && (demangled || allowNameless) && !incomplete) { … … 407 412 if (file) free(file); 408 413 if (demangled) free(demangled); 409 if (incomplete) free(incomplete);410 414 return false; 411 415 } … … 616 620 if (find(base, '<') != -1) base = "bcd.bind.BoundClass"; 617 621 618 dtail ~= "class " ~ name~ " : " ~ base ~ " {\n";622 dtail ~= "class " ~ safeName(name) ~ " : " ~ base ~ " {\n"; 619 623 620 624 dtail ~= "this(ifloat ignore) {\n"; … … 656 660 dtail ~= "struct "; 657 661 } 658 dtail ~= name~ " {\n";662 dtail ~= safeName(name) ~ " {\n"; 659 663 660 664 curClass = demangled; … … 685 689 dhead ~= "extern (C) void _BCD_set_" ~ mangled ~ "(void *, " ~ type.DType ~ ");\n"; 686 690 687 dtail ~= "void set_" ~ name~ "(" ~ type.DType ~ " x) {\n";691 dtail ~= "void set_" ~ safeName(name) ~ "(" ~ type.DType ~ " x) {\n"; 688 692 dtail ~= "_BCD_set_" ~ mangled ~ "(__C_data, x);\n"; 689 693 dtail ~= "}\n"; … … 700 704 dhead ~= "extern (C) " ~ type.DType ~ " _BCD_get_" ~ mangled ~ "(void *);\n"; 701 705 702 dtail ~= type.DType ~ " get_" ~ name~ "() {\n";706 dtail ~= type.DType ~ " get_" ~ safeName(name) ~ "() {\n"; 703 707 dtail ~= "return _BCD_get_" ~ mangled ~ "(__C_data);\n"; 704 708 dtail ~= "}\n"; … … 716 720 dhead ~= "extern (C) void _BCD_set_" ~ mangled ~ "(" ~ type.DType ~ ");\n"; 717 721 718 dtail ~= "void set_" ~ name~ "(" ~ type.DType ~ " x) {\n";722 dtail ~= "void set_" ~ safeName(name) ~ "(" ~ type.DType ~ " x) {\n"; 719 723 dtail ~= "_BCD_set_" ~ mangled ~ "(x);\n"; 720 724 dtail ~= "}\n"; … … 731 735 dhead ~= "extern (C) " ~ type.DType ~ " _BCD_get_" ~ mangled ~ "();\n"; 732 736 733 dtail ~= type.DType ~ " get_" ~ name~ "() {\n";737 dtail ~= type.DType ~ " get_" ~ safeName(name) ~ "() {\n"; 734 738 dtail ~= "return _BCD_get_" ~ mangled ~ "();\n"; 735 739 dtail ~= "}\n"; … … 1141 1145 static bool[char[]] handledTypedefs; 1142 1146 1143 if (!parseThis(node)) return;1144 1145 1147 char[] type = toStringFree(xmlGetProp(node, "id")); 1146 1148 char[] deftype = toStringFree(xmlGetProp(node, "type")); … … 1154 1156 cout ~= "typedef " ~ pt.CType ~ " _BCD_" ~ aname ~ ";\n"; 1155 1157 1156 dhead ~= "alias " ~ pt.DType ~ " " ~ aname~ ";\n";1158 if (parseThis(node, true)) dhead ~= "alias " ~ pt.DType ~ " " ~ safeName(aname) ~ ";\n"; 1157 1159 } 1158 1160 } … … 1186 1188 if (aname[0] == '.') return; 1187 1189 1188 dhead ~= "enum " ~ aname~ " {\n";1190 dhead ~= "enum " ~ safeName(aname) ~ " {\n"; 1189 1191 1190 1192 xmlNode *curNode = null; … … 1242 1244 { 1243 1245 ParsedType pt = new ParsedType(this); 1246 pt.className ~= className; 1244 1247 pt.isClass = isClass; 1245 1248 pt.isClassPtr = isClassPtr; … … 1256 1259 } 1257 1260 1261 extern (C) int getpid(); 1262 extern (C) int kill(int, int); 1258 1263 /** 1259 1264 * Get the type of a node in C[++] and D … … 1264 1269 1265 1270 int xmlrret; 1271 1272 if (type == "") kill(getpid(), 11); 1266 1273 1267 1274 // first find the element matching the type … … 1413 1420 // 1) cut off the * 1414 1421 baseType.CType = baseType.CType[0 .. baseType.CType.length - 2]; 1415 1422 1416 1423 // 2) add the & 1417 1424 if (outputC) { … … 1420 1427 baseType.CType ~= " &"; 1421 1428 } 1422 1429 1423 1430 ParsedType pt = new ParsedType(baseType); 1424 1431 pt.isClassPtr = true; … … 1496 1503 ParsedType pt = parseType(toStringFree(xmlGetProp(curNode, "type"))); 1497 1504 char[] aname = getNName(curNode); 1498 1499 if (parseThis(curNode))parse_Typedef(curNode);1500 1505 1506 parse_Typedef(curNode); 1507 1501 1508 ParsedType rpt = new ParsedType("_BCD_" ~ aname, pt.DType); 1502 1509 rpt.isClass = pt.isClass; … … 1510 1517 if (!(type in handledFunctions)) { 1511 1518 handledFunctions[type] = true; 1512 1519 1513 1520 ParsedType pt = parseType(toStringFree(xmlGetProp(curNode, "returns"))); 1514 1521 char[] couta, dheada; 1515 1522 1516 1523 bool first = true; 1517 1524 couta = "typedef " ~ pt.CType ~ … … 1524 1531 if (curArg.type == xmlElementType.XML_ELEMENT_NODE) { 1525 1532 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 ~= "..."; 1535 1557 } 1536 1537 couta ~= argType.CType;1538 dheada ~= argType.DType;1539 1558 } 1540 1559 } … … 1566 1585 if (context != "") { 1567 1586 ParsedType pt = parseType(context); 1587 1588 pt.CType = replace(pt.CType, " *", ""); 1589 1568 1590 if (pt.CType == "") { 1569 1591 pt.CType = "enum " ~ aname;
