diff options
Diffstat (limited to 'src/java/com/sun/gluegen/JavaConfiguration.java')
-rw-r--r-- | src/java/com/sun/gluegen/JavaConfiguration.java | 57 |
1 files changed, 17 insertions, 40 deletions
diff --git a/src/java/com/sun/gluegen/JavaConfiguration.java b/src/java/com/sun/gluegen/JavaConfiguration.java index ae8c46e..b5f43d6 100644 --- a/src/java/com/sun/gluegen/JavaConfiguration.java +++ b/src/java/com/sun/gluegen/JavaConfiguration.java @@ -116,8 +116,6 @@ 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(); - private Map/*<String,Map<Integer,String>>*/ rangeChecks = new HashMap(); - private Map/*<String,Map<Integer,String>>*/ byteRangeChecks = new HashMap(); /** Reads the configuration file. @param filename path to file that should be read @@ -571,22 +569,6 @@ public class JavaConfiguration { return res; } - /** Returns a map of Integer argument numbers to expressions to be - used to range check the given arguments to the given function. - Returns null if there were no range check expressions supplied - for this function. */ - public Map/*<Integer, String>*/ rangeCheckExpressions(String functionName) { - return (Map/*<Integer, String>*/) rangeChecks.get(functionName); - } - - /** Returns a map of Integer argument numbers to expressions to be - used to range check (in size of bytes) the given arguments to - the given function. Returns null if there were no range check - expressions supplied for this function. */ - public Map/*<Integer, String>*/ byteRangeCheckExpressions(String functionName) { - return (Map/*<Integer, String>*/) byteRangeChecks.get(functionName); - } - //---------------------------------------------------------------------- // Internals only below this point // @@ -1142,13 +1124,7 @@ public class JavaConfiguration { methodName = methodName + descriptor; } } - Map code = (prologue ? javaPrologues : javaEpilogues); - List/*<String>*/ data = (List/*<String>*/) code.get(methodName); - if (data == null) { - data = new ArrayList/*<String>*/(); - code.put(methodName, data); - } - data.add(restOfLine); + addJavaPrologueOrEpilogue(methodName, restOfLine, prologue); } catch (NoSuchElementException e) { throw new RuntimeException("Error parsing \"" + (prologue ? "JavaPrologue" : "JavaEpilogue") + @@ -1157,27 +1133,28 @@ public class JavaConfiguration { } } + protected void addJavaPrologueOrEpilogue(String methodName, String code, boolean prologue) { + Map codes = (prologue ? javaPrologues : javaEpilogues); + List/*<String>*/ data = (List/*<String>*/) codes.get(methodName); + if (data == null) { + data = new ArrayList/*<String>*/(); + codes.put(methodName, data); + } + data.add(code); + } + protected void readRangeCheck(StringTokenizer tok, String filename, int lineNo, boolean inBytes) { try { String functionName = tok.nextToken(); int argNum = Integer.parseInt(tok.nextToken()); String restOfLine = tok.nextToken("\n\r\f"); restOfLine = restOfLine.trim(); - Map/*<Integer, String>*/ checksForFunction = null; - if (inBytes) { - checksForFunction = (Map/*<Integer, String>*/) byteRangeChecks.get(functionName); - } else { - checksForFunction = (Map/*<Integer, String>*/) rangeChecks.get(functionName); - } - if (checksForFunction == null) { - checksForFunction = new HashMap/*<Integer, String>*/(); - if (inBytes) { - byteRangeChecks.put(functionName, checksForFunction); - } else { - rangeChecks.put(functionName, checksForFunction); - } - } - checksForFunction.put(new Integer(argNum), restOfLine); + // Construct a JavaPrologue for this + addJavaPrologueOrEpilogue(functionName, + "BufferFactory.rangeCheck" + + (inBytes ? "Bytes" : "") + + "({" + argNum + "}, " + restOfLine + ");", + true); } catch (Exception e) { throw new RuntimeException("Error parsing \"RangeCheck" + (inBytes ? "Bytes" : "") + "\" command at line " + lineNo + " in file \"" + filename + "\"", e); |