aboutsummaryrefslogtreecommitdiffstats
path: root/src/java/com/sun/gluegen/JavaConfiguration.java
diff options
context:
space:
mode:
authorSven Gothel <[email protected]>2008-07-21 00:12:58 +0000
committerSven Gothel <[email protected]>2008-07-21 00:12:58 +0000
commit94c2dac899efa43ed421b95c6a24805bbd3eaacd (patch)
tree17358e1500a3200ee87335c14f8ac01c8f9f7893 /src/java/com/sun/gluegen/JavaConfiguration.java
parentf321f151a652b9722af489a82793ac2802769638 (diff)
- Renamed config: IgnoreExtendedInterfaceSymbols -> ExtendedInterfaceSymbols,
so it makes sense with 'ExtendedInterfaceSymbolsOnly' - New config: ExtendedInterfaceSymbolsOnly All symbols not in those Java base classes/interfaces are ignored! - Rewrote/cleanup of the unified names, etc. - Common UnifiedName logic, with specialisation GLUnifiedName - UnifiedName behaves as a Set - UnifiedName function mapping present at all times, and the FunctionSymbol names are mapped to one entity. - DropUniqExtensionNames is now considered within the general shouldIgnore* - GLExtensionNames added: 3DFX git-svn-id: file:///usr/local/projects/SUN/JOGL/git-svn/../svn-server-sync/gluegen/branches/JOGL_2_SANDBOX@104 a78bb65f-1512-4460-ba86-f6dc96a7bf27
Diffstat (limited to 'src/java/com/sun/gluegen/JavaConfiguration.java')
-rw-r--r--src/java/com/sun/gluegen/JavaConfiguration.java94
1 files changed, 68 insertions, 26 deletions
diff --git a/src/java/com/sun/gluegen/JavaConfiguration.java b/src/java/com/sun/gluegen/JavaConfiguration.java
index cfa2d8b..f0511b5 100644
--- a/src/java/com/sun/gluegen/JavaConfiguration.java
+++ b/src/java/com/sun/gluegen/JavaConfiguration.java
@@ -111,7 +111,8 @@ public class JavaConfiguration {
* converted to String args; value is List of Integer argument indices
*/
private Map/*<String,List<Integer>>*/ argumentsAreString = new HashMap();
- private Set/*<String>*/ ignoresIf = new HashSet();
+ private Set/*<String>*/ extendedIfSymbols = new HashSet();
+ private boolean extendedIfSymbolsOnly=false;
private Set/*<Pattern>*/ ignores = new HashSet();
private Map/*<String,Pattern>*/ ignoreMap = new HashMap();
private Set/*<Pattern>*/ ignoreNots = new HashSet();
@@ -138,6 +139,9 @@ public class JavaConfiguration {
private Map/*<String,String>*/ javaMethodRenames = new HashMap();
private Map/*<String,List<String>>*/ javaPrologues = new HashMap();
private Map/*<String,List<String>>*/ javaEpilogues = new HashMap();
+ protected static Map/*<FuncName>,<UnifiedName>*/ uniqNameMap = new HashMap();
+ public static Map/*<UnifiedName>*/ getUniqNameMap() { return uniqNameMap; }
+
/** Reads the configuration file.
@param filename path to file that should be read
@@ -568,24 +572,42 @@ public class JavaConfiguration {
return (String) parentClass.get(className);
}
+ public boolean extendedIfSymbolsOnly() {
+ return extendedIfSymbolsOnly;
+ }
+
+ public static final boolean DEBUG_IGNORES = false;
+ public static boolean dumpedIgnores = false;
+
+ public void dumpIgnoresOnce() {
+ if(!dumpedIgnores) {
+ dumpedIgnores = true;
+ dumpIgnores();
+ }
+ }
+
public void dumpIgnores() {
- System.err.println("Ignores (If): ");
- for (Iterator iter = ignoresIf.iterator(); iter.hasNext(); ) {
+ System.err.println("Extended If: ");
+ for (Iterator iter = extendedIfSymbols.iterator(); iter.hasNext(); ) {
System.err.println("\t"+(String)iter.next());
}
System.err.println("Ignores (All): ");
for (Iterator iter = ignores.iterator(); iter.hasNext(); ) {
- System.err.println("\t"+(String)iter.next());
+ System.err.println("\t"+iter.next());
}
}
/** Returns true if this #define, function, struct, or field within
a struct should be ignored during glue code generation. */
public boolean shouldIgnoreInInterface(String symbol) {
+ if(DEBUG_IGNORES) {
+ dumpIgnoresOnce();
+ }
// Simple case; the entire symbol is in the interface ignore table.
- if (ignoresIf.contains(symbol)) {
- // System.err.println("Ignore If: "+symbol);
- // dumpIgnores();
+ if (extendedIfSymbols.contains(symbol)) {
+ if(DEBUG_IGNORES) {
+ System.err.println("Ignore If: "+symbol);
+ }
return true;
}
return shouldIgnoreInImpl_Int(symbol);
@@ -597,12 +619,31 @@ public class JavaConfiguration {
private boolean shouldIgnoreInImpl_Int(String symbol) {
- // System.err.println("CHECKING IGNORE: " + symbol);
+ if(DEBUG_IGNORES) {
+ dumpIgnoresOnce();
+ }
+ if (extendedIfSymbolsOnly) {
+ String uniSymbol;
+ UnifiedName uniName = (UnifiedName) getUniqNameMap().get(symbol);
+ if(null!=uniName) {
+ uniSymbol=uniName.getUni();
+ } else {
+ uniSymbol=symbol;
+ }
+ if(!extendedIfSymbols.contains(uniSymbol)) {
+ if(DEBUG_IGNORES) {
+ System.err.println("Ignore Impl !extended: "+uniSymbol+": "+uniName);
+ }
+ return true;
+ }
+ }
+
// Simple case; the entire symbol is in the ignore table.
if (ignores.contains(symbol)) {
- // System.err.println("Ignore Impl Simple: "+symbol);
- // dumpIgnores();
+ if(DEBUG_IGNORES) {
+ System.err.println("Ignore Impl ignores: "+symbol);
+ }
return true;
}
@@ -612,7 +653,9 @@ public class JavaConfiguration {
Pattern regexp = (Pattern)iter.next();
Matcher matcher = regexp.matcher(symbol);
if (matcher.matches()) {
- // System.err.println("Ignore Impl RexEx: "+symbol);
+ if(DEBUG_IGNORES) {
+ System.err.println("Ignore Impl RexEx: "+symbol);
+ }
return true;
}
}
@@ -628,7 +671,9 @@ public class JavaConfiguration {
// Special case as this is most often likely to be the case.
// Unignores are not used very often.
if(unignores.size() == 0) {
- // System.err.println("Ignore Impl unignores==0: "+symbol);
+ if(DEBUG_IGNORES) {
+ System.err.println("Ignore Impl unignores==0: "+symbol);
+ }
return true;
}
@@ -643,7 +688,9 @@ public class JavaConfiguration {
}
if (!unignoreFound)
- // System.err.println("Ignore Impl !unignore: "+symbol);
+ if(DEBUG_IGNORES) {
+ System.err.println("Ignore Impl !unignore: "+symbol);
+ }
return true;
}
}
@@ -798,8 +845,11 @@ public class JavaConfiguration {
// because ReturnedArrayLength changes them.
} else if (cmd.equalsIgnoreCase("ArgumentIsString")) {
readArgumentIsString(tok, filename, lineNo);
- } else if (cmd.equalsIgnoreCase("IgnoreExtendedInterfaceSymbols")) {
- readIgnoreExtendedInterfaceSymbols(tok, filename, lineNo);
+ } else if (cmd.equalsIgnoreCase("ExtendedInterfaceSymbols")) {
+ readExtendedInterfaceSymbols(tok, filename, lineNo);
+ } else if (cmd.equalsIgnoreCase("ExtendedInterfaceSymbolsOnly")) {
+ extendedIfSymbolsOnly=true;
+ readExtendedInterfaceSymbols(tok, filename, lineNo);
} else if (cmd.equalsIgnoreCase("Ignore")) {
readIgnore(tok, filename, lineNo);
} else if (cmd.equalsIgnoreCase("Unignore")) {
@@ -1000,7 +1050,7 @@ public class JavaConfiguration {
}
}
- protected void readIgnoreExtendedInterfaceSymbols(StringTokenizer tok, String filename, int lineNo) {
+ protected void readExtendedInterfaceSymbols(StringTokenizer tok, String filename, int lineNo) {
File javaFile;
BufferedReader javaReader;
try {
@@ -1024,15 +1074,8 @@ public class JavaConfiguration {
return;
}
- Set set = parser.getParsedEnumNames();
- for(Iterator iter = set.iterator(); iter.hasNext(); ) {
- ignoresIf.add((String) iter.next());
- }
- System.out.println("Functions");
- set = parser.getParsedFunctionNames();
- for(Iterator iter = set.iterator(); iter.hasNext(); ) {
- ignoresIf.add((String) iter.next());
- }
+ extendedIfSymbols.addAll(parser.getParsedEnumNames());
+ extendedIfSymbols.addAll(parser.getParsedFunctionNames());
}
protected void readIgnore(StringTokenizer tok, String filename, int lineNo) {
@@ -1054,7 +1097,6 @@ public class JavaConfiguration {
Pattern pattern = (Pattern) ignoreMap.get(regex);
ignoreMap.remove(regex);
ignores.remove(pattern);
- ignoresIf.remove(pattern.toString());
// If the pattern wasn't registered before, then make sure we have a
// valid pattern instance to put into the unignores set.