Changeset 66
- Timestamp:
- 08/01/06 12:00:48 (2 years ago)
- Files:
-
- trunk/bcd.gen/bcd/gen/bcdgen.d (modified) (13 diffs)
- trunk/bcd.gen/scripts/fltk2.sh (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/bcd.gen/bcd/gen/bcdgen.d
r64 r66 62 62 /** The class currently being processed */ 63 63 char[] curClass; 64 /** Is the current class abstract? */ 65 bool curClassAbstract; 64 66 /** Was a constructor made for the current class? */ 65 67 bool hasConstructor; … … 640 642 char[] mangled = toStringFree(getMangled(node)); 641 643 char[] demangled = toStringFree(getDemangled(node)); 644 char[] prevCurClass = curClass; 642 645 char* isabstract = xmlGetProp(node, "abstract"); 643 646 if (isabstract) free(isabstract); 644 647 curClass = demangled; 648 curClassAbstract = isabstract ? true : false; 645 649 hasConstructor = false; 646 650 hasPublicConstructor = false; … … 697 701 dtail ~= "__C_data_owned = true;\n"; 698 702 dtail ~= "}\n"; 699 cout ~= demangled~ " *_BCD_new_" ~ mangled ~ "() {\n";700 cout ~= "return new " ~ demangled~ "();\n";703 cout ~= curClass ~ " *_BCD_new_" ~ mangled ~ "() {\n"; 704 cout ~= "return new " ~ curClass ~ "();\n"; 701 705 cout ~= "}\n"; 702 706 } … … 705 709 706 710 // now make the reflected class 711 curClass = prevCurClass; 707 712 if (!outputReflections) return; 708 713 if (isabstract) return; // not for abstract classes yet 714 curClass = demangled; 709 715 curReflectionCBase = demangled; 710 716 curReflectionDBase = safeName(name); … … 767 773 cout ~= "cd->__D_data = dd;\n"; 768 774 cout ~= "}\n"; 775 776 curClass = prevCurClass; 769 777 } 770 778 … … 808 816 char[] mangled = toStringFree(getMangled(node)); 809 817 char[] demangled = toStringFree(getDemangled(node)); 818 char[] prevCurClass = curClass; 810 819 811 820 parseMembers(node, true, true); … … 822 831 parseMembers(node, true, false); 823 832 dtail ~= "}\n"; 833 834 curClass = prevCurClass; 824 835 } 825 836 … … 1028 1039 char[] Dargs, char[] Deargs, char[] Cargs, char[] Dcall, char[] Ccall) 1029 1040 { 1041 // make sure it's not already defined (particularly problematic for overrides that aren't overrides in D) 1042 static bool[char[]] handledFunctions; 1043 char[] fid = curClass ~ "::" ~ demangled ~ "(" ~ Deargs ~ ")"; 1044 if (fid in handledFunctions) return; 1045 handledFunctions[fid] = true; 1046 1030 1047 if (outputC) { 1031 1048 dhead ~= "extern (C) " ~ type.DType ~ " " ~ demangled ~ "(" ~ Deargs ~ ");\n"; … … 1349 1366 { 1350 1367 if (outputC) return; // no constructors in C 1351 1368 if (curClassAbstract) return; // no constructors for virtual classes 1369 1352 1370 char[] name = getNName(node); 1353 1371 char[] mangled = toStringFree(getMangled(node)); … … 1371 1389 parse_Arguments(node, Dargs, Deargs, Cargs, Dcall, Ccall, false); 1372 1390 1391 // make sure it's not already defined (particularly problematic for overrides that aren't overrides in D) 1392 static bool[char[]] handledCtors; 1393 char[] fid = curClass ~ "(" ~ Deargs ~ ")"; 1394 if (fid in handledCtors) return; 1395 handledCtors[fid] = true; 1396 1373 1397 if (reflection) { 1374 1398 // make sure it's not already reflected … … 1423 1447 handledTypedefs[type] = true; 1424 1448 1425 cout ~= "typedef " ~ pt.CType ~ " _BCD_" ~ aname ~ ";\n";1449 cout ~= "typedef " ~ pt.CType ~ " _BCD_" ~ type ~ "_" ~ aname ~ ";\n"; 1426 1450 1427 1451 if (parseThis(node, true)) dhead ~= "alias " ~ pt.DType ~ " " ~ safeName(aname) ~ ";\n"; … … 1799 1823 parse_Typedef(curNode); 1800 1824 1801 ParsedType rpt = new ParsedType("_BCD_" ~ aname, pt.DType);1825 ParsedType rpt = new ParsedType("_BCD_" ~ type ~ "_" ~ aname, pt.DType); 1802 1826 rpt.isClass = pt.isClass; 1803 1827 rpt.isFunction = pt.isFunction; … … 1811 1835 if (nname == "MethodType") { 1812 1836 base = parseType(toStringFree(xmlGetProp(curNode, "basetype"))).CType; 1813 base [base.length - 2 .. base.length] = "::";1837 base = base[0 .. base.length - 2] ~ "::*"; 1814 1838 } 1815 1839 trunk/bcd.gen/scripts/fltk2.sh
r27 r66 184 184 \ 185 185 -N"fltk::image_filetypes" \ 186 -N"fltk::Menu::get_location(fltk::Widget*, int const*, int, int) const" 186 -N"fltk::Menu::get_location(fltk::Widget*, int const*, int, int) const" \ 187 \ 188 -N"fltk::Window::backbuffer() const" 187 189 done
