From e024d6cab3b07ac2033630aac54e94d6494d8c5e Mon Sep 17 00:00:00 2001 From: Sven Gothel Date: Sun, 7 Nov 2010 23:44:00 +0100 Subject: Fix PCPP 'define' case; Keep PCPP output file if 'debug' ; GlueGen uses PCPP in same thread via File. Fix PCPP 'define' case ------------------------ A recursive define like: #define LALA ((int)1) #define LILI LALA was streamed out of PCPP, even though such 'macro defines' like #define LILI ((int)1) are disabled due to the parsers inability to digg those. Added test on macro definition for replaced values. GlueGen uses PCPP in same thread via File ------------------------------------------ To ease debugging we call PCPP from the same thread and use normal temp files as i/o. Keep PCPP output file if 'debug' --------------------------------- Keep temp outfile if debug is enabled --- src/java/com/jogamp/gluegen/GlueGen.java | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) (limited to 'src/java/com/jogamp/gluegen/GlueGen.java') diff --git a/src/java/com/jogamp/gluegen/GlueGen.java b/src/java/com/jogamp/gluegen/GlueGen.java index 719d54c..f24d0b2 100644 --- a/src/java/com/jogamp/gluegen/GlueGen.java +++ b/src/java/com/jogamp/gluegen/GlueGen.java @@ -107,23 +107,24 @@ public class GlueGen implements GlueEmitterControls { final PipedInputStream ppIn = new PipedInputStream(); final PipedOutputStream ppOut = new PipedOutputStream(ppIn); + File out = File.createTempFile("PCPPTemp", ".pcpp"); + FileOutputStream outStream = new FileOutputStream(out); + + if(debug) { + System.err.println("PCPP output at (persistent): " + out.getAbsolutePath()); + } else { + out.deleteOnExit(); + } + preprocessor = new PCPP(includePaths, debug, copyPCPPOutput2Stderr); - preprocessor.setOut(ppOut); + preprocessor.setOut(outStream); - new Thread("PCPP") { + preprocessor.run(reader, filename); + outStream.flush(); - @Override - public void run() { - try { - preprocessor.run(reader, filename); - ppOut.close(); - } catch (IOException e) { - throw new RuntimeException(e); - } - } - }.start(); + FileInputStream inStream = new FileInputStream(out); + DataInputStream dis = new DataInputStream(inStream); - DataInputStream dis = new DataInputStream(ppIn); GnuCLexer lexer = new GnuCLexer(dis); lexer.setTokenObjectClass(CToken.class.getName()); lexer.initialize(); -- cgit v1.2.3