*** empty log message ***
This commit is contained in:
parent
2bf83484d8
commit
df7b9d975b
120
ase/awk/Awk.java
120
ase/awk/Awk.java
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: Awk.java,v 1.9 2006-11-24 15:04:23 bacon Exp $
|
* $Id: Awk.java,v 1.10 2006-11-26 15:55:43 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package ase.awk;
|
package ase.awk;
|
||||||
@ -17,20 +17,29 @@ public abstract class Awk
|
|||||||
System.load ("c://projects//ase/awk/aseawk.dll");
|
System.load ("c://projects//ase/awk/aseawk.dll");
|
||||||
}
|
}
|
||||||
|
|
||||||
private long __awk;
|
private long handle;
|
||||||
|
|
||||||
public Awk () throws Exception
|
public Awk () throws Exception
|
||||||
{
|
{
|
||||||
open ();
|
open ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* == just in case == */
|
||||||
|
protected void finalize ()
|
||||||
|
{
|
||||||
|
if (handle != 0) close ();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* == methods to provide major functionalities */
|
||||||
public native void close ();
|
public native void close ();
|
||||||
public native void parse () throws Exception;
|
public native void parse () throws Exception;
|
||||||
public native void run () throws Exception;
|
public native void run () throws Exception;
|
||||||
|
|
||||||
private native void open () throws Exception;
|
private native void open () throws Exception;
|
||||||
private native int setfilename (long run_id, String name);
|
private native int setfilename (long run_id, String name);
|
||||||
private native int setofilename (long run_id, String name);
|
private native int setofilename (long run_id, String name);
|
||||||
|
|
||||||
|
/* == console name setters == */
|
||||||
public void setInputConsoleName (Extio extio, String name) //throws Exception
|
public void setInputConsoleName (Extio extio, String name) //throws Exception
|
||||||
{
|
{
|
||||||
/* TODO: setconsolename is not safe. for example, it can
|
/* TODO: setconsolename is not safe. for example, it can
|
||||||
@ -47,33 +56,44 @@ public abstract class Awk
|
|||||||
setofilename (extio.getRunId(), name);
|
setofilename (extio.getRunId(), name);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* abstrace methods */
|
/* == recursion depth limiting == */
|
||||||
protected abstract int open_source (int mode);
|
protected int getMaxParseDepth ()
|
||||||
protected abstract int close_source (int mode);
|
{
|
||||||
protected abstract int read_source (char[] buf, int len);
|
return 0;
|
||||||
protected abstract int write_source (char[] buf, int len);
|
}
|
||||||
|
protected int getMaxRunDepth ()
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
protected int open_extio (Extio extio)
|
/* == source code management == */
|
||||||
|
protected abstract int openSource (int mode);
|
||||||
|
protected abstract int closeSource (int mode);
|
||||||
|
protected abstract int readSource (char[] buf, int len);
|
||||||
|
protected abstract int writeSource (char[] buf, int len);
|
||||||
|
|
||||||
|
/* == external io interface == */
|
||||||
|
protected int openExtio (Extio extio)
|
||||||
{
|
{
|
||||||
int type = extio.getType ();
|
int type = extio.getType ();
|
||||||
if (type == Extio.TYPE_CONSOLE) return open_console (extio);
|
if (type == Extio.TYPE_CONSOLE) return openConsole (extio);
|
||||||
if (type == Extio.TYPE_FILE) return open_file (extio);
|
if (type == Extio.TYPE_FILE) return openFile (extio);
|
||||||
if (type == Extio.TYPE_PIPE) return open_pipe (extio);
|
if (type == Extio.TYPE_PIPE) return openPipe (extio);
|
||||||
//if (type == Extio.TYPE_COPROC) return open_coproc (extio);
|
//if (type == Extio.TYPE_COPROC) return openCoproc (extio);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected int close_extio (Extio extio)
|
protected int closeExtio (Extio extio)
|
||||||
{
|
{
|
||||||
int type = extio.getType ();
|
int type = extio.getType ();
|
||||||
if (type == Extio.TYPE_CONSOLE) return close_console (extio);
|
if (type == Extio.TYPE_CONSOLE) return closeConsole (extio);
|
||||||
if (type == Extio.TYPE_FILE) return close_file (extio);
|
if (type == Extio.TYPE_FILE) return closeFile (extio);
|
||||||
if (type == Extio.TYPE_PIPE) return close_pipe (extio);
|
if (type == Extio.TYPE_PIPE) return closePipe (extio);
|
||||||
//if (type == Extio.TYPE_COPROC) return close_coproc (extio);
|
//if (type == Extio.TYPE_COPROC) return closeCoproc (extio);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected int read_extio (Extio extio, char[] buf, int len)
|
protected int readExtio (Extio extio, char[] buf, int len)
|
||||||
{
|
{
|
||||||
// this check is needed because 0 is used to indicate
|
// this check is needed because 0 is used to indicate
|
||||||
// the end of the stream. java streams can return 0
|
// the end of the stream. java streams can return 0
|
||||||
@ -83,65 +103,65 @@ public abstract class Awk
|
|||||||
|
|
||||||
int type = extio.getType ();
|
int type = extio.getType ();
|
||||||
if (type == Extio.TYPE_CONSOLE)
|
if (type == Extio.TYPE_CONSOLE)
|
||||||
return read_console (extio, buf, len);
|
return readConsole (extio, buf, len);
|
||||||
if (type == Extio.TYPE_FILE)
|
if (type == Extio.TYPE_FILE)
|
||||||
return read_file (extio, buf, len);
|
return readFile (extio, buf, len);
|
||||||
if (type == Extio.TYPE_PIPE)
|
if (type == Extio.TYPE_PIPE)
|
||||||
return read_pipe (extio, buf, len);
|
return readPipe (extio, buf, len);
|
||||||
//if (type == Extio.TYPE_COPROC)
|
//if (type == Extio.TYPE_COPROC)
|
||||||
// return read_coproc (extio, buf, len);
|
// return readCoproc (extio, buf, len);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected int write_extio (Extio extio, char[] buf, int len)
|
protected int writeExtio (Extio extio, char[] buf, int len)
|
||||||
{
|
{
|
||||||
if (len <= 0) return -1;
|
if (len <= 0) return -1;
|
||||||
|
|
||||||
int type = extio.getType ();
|
int type = extio.getType ();
|
||||||
if (type == Extio.TYPE_CONSOLE)
|
if (type == Extio.TYPE_CONSOLE)
|
||||||
return write_console (extio, buf, len);
|
return writeConsole (extio, buf, len);
|
||||||
if (type == Extio.TYPE_FILE)
|
if (type == Extio.TYPE_FILE)
|
||||||
return write_file (extio, buf, len);
|
return writeFile (extio, buf, len);
|
||||||
if (type == Extio.TYPE_PIPE)
|
if (type == Extio.TYPE_PIPE)
|
||||||
return write_pipe (extio, buf, len);
|
return writePipe (extio, buf, len);
|
||||||
//if (type == Extio.TYPE_COPROC)
|
//if (type == Extio.TYPE_COPROC)
|
||||||
// return write_coproc (extio, buf, len);
|
// return writeCoproc (extio, buf, len);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected int flush_extio (Extio extio)
|
protected int flushExtio (Extio extio)
|
||||||
{
|
{
|
||||||
int type = extio.getType ();
|
int type = extio.getType ();
|
||||||
if (type == Extio.TYPE_CONSOLE) return flush_console (extio);
|
if (type == Extio.TYPE_CONSOLE) return flushConsole (extio);
|
||||||
if (type == Extio.TYPE_FILE) return flush_file (extio);
|
if (type == Extio.TYPE_FILE) return flushFile (extio);
|
||||||
if (type == Extio.TYPE_PIPE) return flush_pipe (extio);
|
if (type == Extio.TYPE_PIPE) return flushPipe (extio);
|
||||||
//if (type == Extio.TYPE_COPROC) return flush_coproc (extio);
|
//if (type == Extio.TYPE_COPROC) return flushCoproc (extio);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected int next_extio (Extio extio)
|
protected int nextExtio (Extio extio)
|
||||||
{
|
{
|
||||||
int type = extio.getType ();
|
int type = extio.getType ();
|
||||||
if (type == Extio.TYPE_CONSOLE) return next_console (extio);
|
if (type == Extio.TYPE_CONSOLE) return nextConsole (extio);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract int open_console (Extio extio);
|
protected abstract int openConsole (Extio extio);
|
||||||
protected abstract int close_console (Extio extio);
|
protected abstract int closeConsole (Extio extio);
|
||||||
protected abstract int read_console (Extio extio, char[] buf, int len);
|
protected abstract int readConsole (Extio extio, char[] buf, int len);
|
||||||
protected abstract int write_console (Extio extio, char[] buf, int len);
|
protected abstract int writeConsole (Extio extio, char[] buf, int len);
|
||||||
protected abstract int flush_console (Extio extio);
|
protected abstract int flushConsole (Extio extio);
|
||||||
protected abstract int next_console (Extio extio);
|
protected abstract int nextConsole (Extio extio);
|
||||||
|
|
||||||
protected abstract int open_file (Extio extio);
|
protected abstract int openFile (Extio extio);
|
||||||
protected abstract int close_file (Extio extio);
|
protected abstract int closeFile (Extio extio);
|
||||||
protected abstract int read_file (Extio extio, char[] buf, int len);
|
protected abstract int readFile (Extio extio, char[] buf, int len);
|
||||||
protected abstract int write_file (Extio extio, char[] buf, int len);
|
protected abstract int writeFile (Extio extio, char[] buf, int len);
|
||||||
protected abstract int flush_file (Extio extio);
|
protected abstract int flushFile (Extio extio);
|
||||||
|
|
||||||
protected abstract int open_pipe (Extio extio);
|
protected abstract int openPipe (Extio extio);
|
||||||
protected abstract int close_pipe (Extio extio);
|
protected abstract int closePipe (Extio extio);
|
||||||
protected abstract int read_pipe (Extio extio, char[] buf, int len);
|
protected abstract int readPipe (Extio extio, char[] buf, int len);
|
||||||
protected abstract int write_pipe (Extio extio, char[] buf, int len);
|
protected abstract int writePipe (Extio extio, char[] buf, int len);
|
||||||
protected abstract int flush_pipe (Extio extio);
|
protected abstract int flushPipe (Extio extio);
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: StdAwk.java,v 1.4 2006-11-25 15:51:29 bacon Exp $
|
* $Id: StdAwk.java,v 1.5 2006-11-26 15:55:43 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package ase.awk;
|
package ase.awk;
|
||||||
@ -25,7 +25,7 @@ public abstract class StdAwk extends Awk
|
|||||||
super ();
|
super ();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ===== overridden major methods ===== */
|
/* == major methods == */
|
||||||
public void parse () throws Exception
|
public void parse () throws Exception
|
||||||
{
|
{
|
||||||
sin = getSourceNames (); sin_no = 0;
|
sin = getSourceNames (); sin_no = 0;
|
||||||
@ -40,16 +40,16 @@ public abstract class StdAwk extends Awk
|
|||||||
super.run ();
|
super.run ();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ===== source code names ===== */
|
/* == source code names == */
|
||||||
protected abstract String[] getSourceNames ();
|
protected abstract String[] getSourceNames ();
|
||||||
protected String getDeparsedSourceName () { return null; }
|
protected String getDeparsedSourceName () { return null; }
|
||||||
|
|
||||||
/* ===== console names ===== */
|
/* == console names == */
|
||||||
protected abstract String[] getInputConsoleNames ();
|
protected abstract String[] getInputConsoleNames ();
|
||||||
protected abstract String[] getOutputConsoleNames ();
|
protected abstract String[] getOutputConsoleNames ();
|
||||||
|
|
||||||
/* ===== source code ===== */
|
/* == source code == */
|
||||||
protected int open_source (int mode)
|
protected int openSource (int mode)
|
||||||
{
|
{
|
||||||
if (mode == SOURCE_READ)
|
if (mode == SOURCE_READ)
|
||||||
{
|
{
|
||||||
@ -77,7 +77,7 @@ public abstract class StdAwk extends Awk
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected int close_source (int mode)
|
protected int closeSource (int mode)
|
||||||
{
|
{
|
||||||
if (mode == SOURCE_READ)
|
if (mode == SOURCE_READ)
|
||||||
{
|
{
|
||||||
@ -96,12 +96,10 @@ public abstract class StdAwk extends Awk
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected int read_source (char[] buf, int len)
|
protected int readSource (char[] buf, int len)
|
||||||
{
|
{
|
||||||
int n;
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
n = src_in.read (buf, 0, len);
|
int n = src_in.read (buf, 0, len);
|
||||||
while (n == -1)
|
while (n == -1)
|
||||||
{
|
{
|
||||||
InputStreamReader isr;
|
InputStreamReader isr;
|
||||||
@ -127,17 +125,16 @@ public abstract class StdAwk extends Awk
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected int write_source (char[] buf, int len)
|
protected int writeSource (char[] buf, int len)
|
||||||
{
|
{
|
||||||
//System.out.println (new String(buf, 0, len));
|
|
||||||
if (src_out == null) return len;
|
if (src_out == null) return len;
|
||||||
try { src_out.write (buf, 0, len); }
|
try { src_out.write (buf, 0, len); }
|
||||||
catch (IOException e) { return -1; }
|
catch (IOException e) { return -1; }
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ===== console ===== */
|
/* == console interface == */
|
||||||
protected int open_console (Extio extio)
|
protected int openConsole (Extio extio)
|
||||||
{
|
{
|
||||||
System.err.println ("[open_console called.... name: " + extio.getName() + " mode: " + extio.getMode());
|
System.err.println ("[open_console called.... name: " + extio.getName() + " mode: " + extio.getMode());
|
||||||
|
|
||||||
@ -177,7 +174,7 @@ public abstract class StdAwk extends Awk
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected int close_console (Extio extio)
|
protected int closeConsole (Extio extio)
|
||||||
{
|
{
|
||||||
System.err.println ("[close_console called.... name: " + extio.getName() + " mode: " + extio.getMode());
|
System.err.println ("[close_console called.... name: " + extio.getName() + " mode: " + extio.getMode());
|
||||||
|
|
||||||
@ -203,7 +200,7 @@ public abstract class StdAwk extends Awk
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected int read_console (Extio extio, char[] buf, int len)
|
protected int readConsole (Extio extio, char[] buf, int len)
|
||||||
{
|
{
|
||||||
int mode = extio.getMode ();
|
int mode = extio.getMode ();
|
||||||
|
|
||||||
@ -241,7 +238,7 @@ public abstract class StdAwk extends Awk
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected int write_console (Extio extio, char[] buf, int len)
|
protected int writeConsole (Extio extio, char[] buf, int len)
|
||||||
{
|
{
|
||||||
int mode = extio.getMode ();
|
int mode = extio.getMode ();
|
||||||
|
|
||||||
@ -261,7 +258,7 @@ public abstract class StdAwk extends Awk
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected int flush_console (Extio extio)
|
protected int flushConsole (Extio extio)
|
||||||
{
|
{
|
||||||
int mode = extio.getMode ();
|
int mode = extio.getMode ();
|
||||||
|
|
||||||
@ -277,7 +274,7 @@ public abstract class StdAwk extends Awk
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected int next_console (Extio extio)
|
protected int nextConsole (Extio extio)
|
||||||
{
|
{
|
||||||
int mode = extio.getMode ();
|
int mode = extio.getMode ();
|
||||||
|
|
||||||
@ -310,7 +307,7 @@ public abstract class StdAwk extends Awk
|
|||||||
tmp = get_output_stream (cout[cout_no]);
|
tmp = get_output_stream (cout[cout_no]);
|
||||||
if (tmp == null) return -1;
|
if (tmp == null) return -1;
|
||||||
|
|
||||||
/* TODO: selective close the stream...
|
/* TODO: selectively close the stream...
|
||||||
* system.out should not be closed??? */
|
* system.out should not be closed??? */
|
||||||
try { osw.close (); }
|
try { osw.close (); }
|
||||||
catch (IOException e) { /* ignore */ }
|
catch (IOException e) { /* ignore */ }
|
||||||
@ -363,8 +360,8 @@ public abstract class StdAwk extends Awk
|
|||||||
return osw;
|
return osw;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ===== file ===== */
|
/* == file interface == */
|
||||||
public int open_file (Extio extio)
|
protected int openFile (Extio extio)
|
||||||
{
|
{
|
||||||
int mode = extio.getMode();
|
int mode = extio.getMode();
|
||||||
|
|
||||||
@ -408,7 +405,7 @@ public abstract class StdAwk extends Awk
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int close_file (Extio extio)
|
protected int closeFile (Extio extio)
|
||||||
{
|
{
|
||||||
int mode = extio.getMode();
|
int mode = extio.getMode();
|
||||||
|
|
||||||
@ -440,7 +437,7 @@ public abstract class StdAwk extends Awk
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected int read_file (Extio extio, char[] buf, int len)
|
protected int readFile (Extio extio, char[] buf, int len)
|
||||||
{
|
{
|
||||||
int mode = extio.getMode();
|
int mode = extio.getMode();
|
||||||
|
|
||||||
@ -461,7 +458,7 @@ public abstract class StdAwk extends Awk
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected int write_file (Extio extio, char[] buf, int len)
|
protected int writeFile (Extio extio, char[] buf, int len)
|
||||||
{
|
{
|
||||||
int mode = extio.getMode();
|
int mode = extio.getMode();
|
||||||
|
|
||||||
@ -478,7 +475,7 @@ public abstract class StdAwk extends Awk
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected int flush_file (Extio extio)
|
protected int flushFile (Extio extio)
|
||||||
{
|
{
|
||||||
int mode = extio.getMode ();
|
int mode = extio.getMode ();
|
||||||
|
|
||||||
@ -495,8 +492,8 @@ public abstract class StdAwk extends Awk
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ===== pipe ===== */
|
/* == pipe interface == */
|
||||||
public int open_pipe (Extio extio)
|
protected int openPipe (Extio extio)
|
||||||
{
|
{
|
||||||
int mode = extio.getMode();
|
int mode = extio.getMode();
|
||||||
|
|
||||||
@ -527,7 +524,7 @@ public abstract class StdAwk extends Awk
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int close_pipe (Extio extio)
|
protected int closePipe (Extio extio)
|
||||||
{
|
{
|
||||||
int mode = extio.getMode();
|
int mode = extio.getMode();
|
||||||
|
|
||||||
@ -551,7 +548,7 @@ public abstract class StdAwk extends Awk
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected int read_pipe (Extio extio, char[] buf, int len)
|
protected int readPipe (Extio extio, char[] buf, int len)
|
||||||
{
|
{
|
||||||
int mode = extio.getMode();
|
int mode = extio.getMode();
|
||||||
|
|
||||||
@ -572,7 +569,7 @@ public abstract class StdAwk extends Awk
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected int write_pipe (Extio extio, char[] buf, int len)
|
protected int writePipe (Extio extio, char[] buf, int len)
|
||||||
{
|
{
|
||||||
int mode = extio.getMode();
|
int mode = extio.getMode();
|
||||||
|
|
||||||
@ -588,7 +585,7 @@ public abstract class StdAwk extends Awk
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected int flush_pipe (Extio extio)
|
protected int flushPipe (Extio extio)
|
||||||
{
|
{
|
||||||
int mode = extio.getMode ();
|
int mode = extio.getMode ();
|
||||||
|
|
||||||
|
129
ase/awk/jni.c
129
ase/awk/jni.c
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: jni.c,v 1.25 2006-11-25 15:51:30 bacon Exp $
|
* $Id: jni.c,v 1.26 2006-11-26 15:55:43 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <ase/awk/jni.h>
|
#include <ase/awk/jni.h>
|
||||||
@ -22,7 +22,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define EXCEPTION_AWK "ase/awk/Exception"
|
#define EXCEPTION_AWK "ase/awk/Exception"
|
||||||
#define FIELD_AWK "__awk"
|
#define FIELD_HANDLE "handle"
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
@ -30,8 +30,6 @@ enum
|
|||||||
SOURCE_WRITE = 2
|
SOURCE_WRITE = 2
|
||||||
};
|
};
|
||||||
|
|
||||||
/* TODO: what if ase_char_t is ase_mchar_t??? */
|
|
||||||
|
|
||||||
static ase_ssize_t __read_source (
|
static ase_ssize_t __read_source (
|
||||||
int cmd, void* arg, ase_char_t* data, ase_size_t count);
|
int cmd, void* arg, ase_char_t* data, ase_size_t count);
|
||||||
static ase_ssize_t __write_source (
|
static ase_ssize_t __write_source (
|
||||||
@ -189,7 +187,7 @@ JNIEXPORT void JNICALL Java_ase_awk_Awk_open (JNIEnv* env, jobject obj)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
fid = (*env)->GetFieldID (env, class, FIELD_AWK, "J");
|
fid = (*env)->GetFieldID (env, class, FIELD_HANDLE, "J");
|
||||||
if (fid == 0) return;
|
if (fid == 0) return;
|
||||||
|
|
||||||
(*env)->SetLongField (env, obj, fid, (jlong)awk);
|
(*env)->SetLongField (env, obj, fid, (jlong)awk);
|
||||||
@ -210,7 +208,7 @@ JNIEXPORT void JNICALL Java_ase_awk_Awk_close (JNIEnv* env, jobject obj)
|
|||||||
|
|
||||||
class = (*env)->GetObjectClass(env, obj);
|
class = (*env)->GetObjectClass(env, obj);
|
||||||
|
|
||||||
fid = (*env)->GetFieldID (env, class, FIELD_AWK, "J");
|
fid = (*env)->GetFieldID (env, class, FIELD_HANDLE, "J");
|
||||||
if (fid == 0) return;
|
if (fid == 0) return;
|
||||||
|
|
||||||
ase_awk_close ((ase_awk_t*) (*env)->GetLongField (env, obj, fid));
|
ase_awk_close ((ase_awk_t*) (*env)->GetLongField (env, obj, fid));
|
||||||
@ -219,11 +217,40 @@ JNIEXPORT void JNICALL Java_ase_awk_Awk_close (JNIEnv* env, jobject obj)
|
|||||||
printf ("close (native) done\n");
|
printf ("close (native) done\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static jint __java_get_max_depth (JNIEnv* env, jobject obj, const char* name)
|
||||||
|
{
|
||||||
|
jclass class;
|
||||||
|
jmethodID mid;
|
||||||
|
jthrowable thrown;
|
||||||
|
jint ret;
|
||||||
|
|
||||||
|
class = (*env)->GetObjectClass(env, obj);
|
||||||
|
|
||||||
|
mid = (*env)->GetMethodID (env, class, name, "()I");
|
||||||
|
if (mid == NULL)
|
||||||
|
{
|
||||||
|
(*env)->DeleteLocalRef (env, class);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = (*env)->CallIntMethod (env, obj, mid);
|
||||||
|
thrown = (*env)->ExceptionOccurred (env);
|
||||||
|
if (thrown)
|
||||||
|
{
|
||||||
|
(*env)->ExceptionClear (env);
|
||||||
|
ret = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
(*env)->DeleteLocalRef (env, class);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
JNIEXPORT void JNICALL Java_ase_awk_Awk_parse (JNIEnv* env, jobject obj)
|
JNIEXPORT void JNICALL Java_ase_awk_Awk_parse (JNIEnv* env, jobject obj)
|
||||||
{
|
{
|
||||||
jclass class;
|
jclass class;
|
||||||
jfieldID fid;
|
jfieldID fid;
|
||||||
jthrowable except;
|
jthrowable except;
|
||||||
|
jint depth;
|
||||||
|
|
||||||
ase_awk_t* awk;
|
ase_awk_t* awk;
|
||||||
ase_awk_srcios_t srcios;
|
ase_awk_srcios_t srcios;
|
||||||
@ -231,7 +258,7 @@ JNIEXPORT void JNICALL Java_ase_awk_Awk_parse (JNIEnv* env, jobject obj)
|
|||||||
|
|
||||||
class = (*env)->GetObjectClass (env, obj);
|
class = (*env)->GetObjectClass (env, obj);
|
||||||
|
|
||||||
fid = (*env)->GetFieldID (env, class, FIELD_AWK, "J");
|
fid = (*env)->GetFieldID (env, class, FIELD_HANDLE, "J");
|
||||||
if (fid == 0) return;
|
if (fid == 0) return;
|
||||||
|
|
||||||
awk = (ase_awk_t*) (*env)->GetLongField (env, obj, fid);
|
awk = (ase_awk_t*) (*env)->GetLongField (env, obj, fid);
|
||||||
@ -243,14 +270,25 @@ JNIEXPORT void JNICALL Java_ase_awk_Awk_parse (JNIEnv* env, jobject obj)
|
|||||||
srcios.out = __write_source;
|
srcios.out = __write_source;
|
||||||
srcios.custom_data = &srcio_data;
|
srcios.custom_data = &srcio_data;
|
||||||
|
|
||||||
ase_awk_setmaxparsedepth (awk, ASE_AWK_DEPTH_BLOCK, 10);
|
depth = __java_get_max_depth (env, obj, "getMaxParseDepth");
|
||||||
|
if (depth < 0) depth = 0;
|
||||||
|
ase_awk_setmaxparsedepth (awk,
|
||||||
|
ASE_AWK_DEPTH_BLOCK | ASE_AWK_DEPTH_EXPR, depth);
|
||||||
|
|
||||||
if (ase_awk_parse (awk, &srcios) == -1)
|
if (ase_awk_parse (awk, &srcios) == -1)
|
||||||
{
|
{
|
||||||
printf ("parse error.......\n");
|
char msg[256];
|
||||||
|
int n;
|
||||||
|
|
||||||
except = (*env)->FindClass (env, EXCEPTION_AWK);
|
except = (*env)->FindClass (env, EXCEPTION_AWK);
|
||||||
if (except == 0) return;
|
if (except == 0) return;
|
||||||
(*env)->ThrowNew (env, except, "Parse Error ...");
|
|
||||||
printf ("parse error -> line [%d] %S\n", ase_awk_getsrcline(awk), ase_awk_geterrstr(ase_awk_geterrnum(awk)));
|
snprintf (msg, sizeof(msg), "parse error at line %d: %S",
|
||||||
|
ase_awk_getsrcline(awk),
|
||||||
|
ase_awk_geterrstr(ase_awk_geterrnum(awk)));
|
||||||
|
if (n < 0 || n >= sizeof(msg)) msg[sizeof(msg)-1] = '\0';
|
||||||
|
|
||||||
|
(*env)->ThrowNew (env, except, msg);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -267,7 +305,7 @@ JNIEXPORT void JNICALL Java_ase_awk_Awk_run (JNIEnv* env, jobject obj)
|
|||||||
|
|
||||||
class = (*env)->GetObjectClass (env, obj);
|
class = (*env)->GetObjectClass (env, obj);
|
||||||
|
|
||||||
fid = (*env)->GetFieldID (env, class, FIELD_AWK, "J");
|
fid = (*env)->GetFieldID (env, class, FIELD_HANDLE, "J");
|
||||||
if (fid == 0) return;
|
if (fid == 0) return;
|
||||||
|
|
||||||
awk = (ase_awk_t*) (*env)->GetLongField (env, obj, fid);
|
awk = (ase_awk_t*) (*env)->GetLongField (env, obj, fid);
|
||||||
@ -281,6 +319,8 @@ JNIEXPORT void JNICALL Java_ase_awk_Awk_run (JNIEnv* env, jobject obj)
|
|||||||
runios.console = __process_extio;
|
runios.console = __process_extio;
|
||||||
runios.custom_data = &runio_data;
|
runios.custom_data = &runio_data;
|
||||||
|
|
||||||
|
//depth = __java_get_max_depth (env, obj, "getMaxRunDepth");
|
||||||
|
|
||||||
if (ase_awk_run (awk, ASE_NULL, &runios, ASE_NULL, ASE_NULL) == -1)
|
if (ase_awk_run (awk, ASE_NULL, &runios, ASE_NULL, ASE_NULL) == -1)
|
||||||
{
|
{
|
||||||
char msg[256];
|
char msg[256];
|
||||||
@ -297,7 +337,7 @@ JNIEXPORT void JNICALL Java_ase_awk_Awk_run (JNIEnv* env, jobject obj)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static ase_ssize_t __call_java_open_source (JNIEnv* env, jobject obj, int mode)
|
static ase_ssize_t __java_open_source (JNIEnv* env, jobject obj, int mode)
|
||||||
{
|
{
|
||||||
jclass class;
|
jclass class;
|
||||||
jmethodID mid;
|
jmethodID mid;
|
||||||
@ -306,7 +346,7 @@ static ase_ssize_t __call_java_open_source (JNIEnv* env, jobject obj, int mode)
|
|||||||
|
|
||||||
class = (*env)->GetObjectClass(env, obj);
|
class = (*env)->GetObjectClass(env, obj);
|
||||||
|
|
||||||
mid = (*env)->GetMethodID (env, class, "open_source", "(I)I");
|
mid = (*env)->GetMethodID (env, class, "openSource", "(I)I");
|
||||||
if (mid == NULL)
|
if (mid == NULL)
|
||||||
{
|
{
|
||||||
(*env)->DeleteLocalRef (env, class);
|
(*env)->DeleteLocalRef (env, class);
|
||||||
@ -325,7 +365,7 @@ static ase_ssize_t __call_java_open_source (JNIEnv* env, jobject obj, int mode)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ase_ssize_t __call_java_close_source (JNIEnv* env, jobject obj, int mode)
|
static ase_ssize_t __java_close_source (JNIEnv* env, jobject obj, int mode)
|
||||||
{
|
{
|
||||||
jclass class;
|
jclass class;
|
||||||
jmethodID mid;
|
jmethodID mid;
|
||||||
@ -334,7 +374,7 @@ static ase_ssize_t __call_java_close_source (JNIEnv* env, jobject obj, int mode)
|
|||||||
|
|
||||||
class = (*env)->GetObjectClass(env, obj);
|
class = (*env)->GetObjectClass(env, obj);
|
||||||
|
|
||||||
mid = (*env)->GetMethodID (env, class, "close_source", "(I)I");
|
mid = (*env)->GetMethodID (env, class, "closeSource", "(I)I");
|
||||||
if (mid == NULL)
|
if (mid == NULL)
|
||||||
{
|
{
|
||||||
(*env)->DeleteLocalRef (env, class);
|
(*env)->DeleteLocalRef (env, class);
|
||||||
@ -353,7 +393,7 @@ static ase_ssize_t __call_java_close_source (JNIEnv* env, jobject obj, int mode)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ase_ssize_t __call_java_read_source (
|
static ase_ssize_t __java_read_source (
|
||||||
JNIEnv* env, jobject obj, ase_char_t* buf, ase_size_t size)
|
JNIEnv* env, jobject obj, ase_char_t* buf, ase_size_t size)
|
||||||
{
|
{
|
||||||
jclass class;
|
jclass class;
|
||||||
@ -365,7 +405,7 @@ static ase_ssize_t __call_java_read_source (
|
|||||||
|
|
||||||
class = (*env)->GetObjectClass(env, obj);
|
class = (*env)->GetObjectClass(env, obj);
|
||||||
|
|
||||||
mid = (*env)->GetMethodID (env, class, "read_source", "([CI)I");
|
mid = (*env)->GetMethodID (env, class, "readSource", "([CI)I");
|
||||||
if (mid == NULL)
|
if (mid == NULL)
|
||||||
{
|
{
|
||||||
(*env)->DeleteLocalRef (env, class);
|
(*env)->DeleteLocalRef (env, class);
|
||||||
@ -396,7 +436,7 @@ static ase_ssize_t __call_java_read_source (
|
|||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ase_ssize_t __call_java_write_source (
|
static ase_ssize_t __java_write_source (
|
||||||
JNIEnv* env, jobject obj, ase_char_t* buf, ase_size_t size)
|
JNIEnv* env, jobject obj, ase_char_t* buf, ase_size_t size)
|
||||||
{
|
{
|
||||||
jclass class;
|
jclass class;
|
||||||
@ -408,7 +448,7 @@ static ase_ssize_t __call_java_write_source (
|
|||||||
|
|
||||||
class = (*env)->GetObjectClass(env, obj);
|
class = (*env)->GetObjectClass(env, obj);
|
||||||
|
|
||||||
mid = (*env)->GetMethodID (env, class, "write_source", "([CI)I");
|
mid = (*env)->GetMethodID (env, class, "writeSource", "([CI)I");
|
||||||
if (mid == NULL)
|
if (mid == NULL)
|
||||||
{
|
{
|
||||||
(*env)->DeleteLocalRef (env, class);
|
(*env)->DeleteLocalRef (env, class);
|
||||||
@ -440,7 +480,7 @@ static ase_ssize_t __call_java_write_source (
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ase_ssize_t __call_java_open_extio (
|
static ase_ssize_t __java_open_extio (
|
||||||
JNIEnv* env, jobject obj, char* meth, ase_awk_extio_t* extio)
|
JNIEnv* env, jobject obj, char* meth, ase_awk_extio_t* extio)
|
||||||
{
|
{
|
||||||
jclass class;
|
jclass class;
|
||||||
@ -527,7 +567,7 @@ static ase_ssize_t __call_java_open_extio (
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ase_ssize_t __call_java_close_extio (
|
static ase_ssize_t __java_close_extio (
|
||||||
JNIEnv* env, jobject obj, char* meth, ase_awk_extio_t* extio)
|
JNIEnv* env, jobject obj, char* meth, ase_awk_extio_t* extio)
|
||||||
{
|
{
|
||||||
jclass class;
|
jclass class;
|
||||||
@ -566,7 +606,7 @@ static ase_ssize_t __call_java_close_extio (
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ase_ssize_t __call_java_read_extio (
|
static ase_ssize_t __java_read_extio (
|
||||||
JNIEnv* env, jobject obj, char* meth,
|
JNIEnv* env, jobject obj, char* meth,
|
||||||
ase_awk_extio_t* extio, ase_char_t* buf, ase_size_t size)
|
ase_awk_extio_t* extio, ase_char_t* buf, ase_size_t size)
|
||||||
{
|
{
|
||||||
@ -613,7 +653,7 @@ static ase_ssize_t __call_java_read_extio (
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ase_ssize_t __call_java_write_extio (
|
static ase_ssize_t __java_write_extio (
|
||||||
JNIEnv* env, jobject obj, char* meth,
|
JNIEnv* env, jobject obj, char* meth,
|
||||||
ase_awk_extio_t* extio, ase_char_t* data, ase_size_t size)
|
ase_awk_extio_t* extio, ase_char_t* data, ase_size_t size)
|
||||||
{
|
{
|
||||||
@ -659,7 +699,7 @@ static ase_ssize_t __call_java_write_extio (
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static ase_ssize_t __call_java_flush_extio (
|
static ase_ssize_t __java_flush_extio (
|
||||||
JNIEnv* env, jobject obj, char* meth, ase_awk_extio_t* extio)
|
JNIEnv* env, jobject obj, char* meth, ase_awk_extio_t* extio)
|
||||||
{
|
{
|
||||||
jclass class;
|
jclass class;
|
||||||
@ -690,7 +730,7 @@ static ase_ssize_t __call_java_flush_extio (
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ase_ssize_t __call_java_next_extio (
|
static ase_ssize_t __java_next_extio (
|
||||||
JNIEnv* env, jobject obj, char* meth, ase_awk_extio_t* extio)
|
JNIEnv* env, jobject obj, char* meth, ase_awk_extio_t* extio)
|
||||||
{
|
{
|
||||||
jclass class;
|
jclass class;
|
||||||
@ -728,17 +768,17 @@ static ase_ssize_t __read_source (
|
|||||||
|
|
||||||
if (cmd == ASE_AWK_IO_OPEN)
|
if (cmd == ASE_AWK_IO_OPEN)
|
||||||
{
|
{
|
||||||
return __call_java_open_source (
|
return __java_open_source (
|
||||||
srcio_data->env, srcio_data->obj, SOURCE_READ);
|
srcio_data->env, srcio_data->obj, SOURCE_READ);
|
||||||
}
|
}
|
||||||
else if (cmd == ASE_AWK_IO_CLOSE)
|
else if (cmd == ASE_AWK_IO_CLOSE)
|
||||||
{
|
{
|
||||||
return __call_java_close_source (
|
return __java_close_source (
|
||||||
srcio_data->env, srcio_data->obj, SOURCE_READ);
|
srcio_data->env, srcio_data->obj, SOURCE_READ);
|
||||||
}
|
}
|
||||||
else if (cmd == ASE_AWK_IO_READ)
|
else if (cmd == ASE_AWK_IO_READ)
|
||||||
{
|
{
|
||||||
return __call_java_read_source (
|
return __java_read_source (
|
||||||
srcio_data->env, srcio_data->obj, data, count);
|
srcio_data->env, srcio_data->obj, data, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -752,17 +792,17 @@ static ase_ssize_t __write_source (
|
|||||||
|
|
||||||
if (cmd == ASE_AWK_IO_OPEN)
|
if (cmd == ASE_AWK_IO_OPEN)
|
||||||
{
|
{
|
||||||
return __call_java_open_source (
|
return __java_open_source (
|
||||||
srcio_data->env, srcio_data->obj, SOURCE_WRITE);
|
srcio_data->env, srcio_data->obj, SOURCE_WRITE);
|
||||||
}
|
}
|
||||||
else if (cmd == ASE_AWK_IO_CLOSE)
|
else if (cmd == ASE_AWK_IO_CLOSE)
|
||||||
{
|
{
|
||||||
return __call_java_close_source (
|
return __java_close_source (
|
||||||
srcio_data->env, srcio_data->obj, SOURCE_WRITE);
|
srcio_data->env, srcio_data->obj, SOURCE_WRITE);
|
||||||
}
|
}
|
||||||
else if (cmd == ASE_AWK_IO_WRITE)
|
else if (cmd == ASE_AWK_IO_WRITE)
|
||||||
{
|
{
|
||||||
return __call_java_write_source (
|
return __java_write_source (
|
||||||
srcio_data->env, srcio_data->obj, data, count);
|
srcio_data->env, srcio_data->obj, data, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -777,39 +817,39 @@ static ase_ssize_t __process_extio (
|
|||||||
|
|
||||||
if (cmd == ASE_AWK_IO_OPEN)
|
if (cmd == ASE_AWK_IO_OPEN)
|
||||||
{
|
{
|
||||||
return __call_java_open_extio (
|
return __java_open_extio (
|
||||||
runio_data->env, runio_data->obj,
|
runio_data->env, runio_data->obj,
|
||||||
"open_extio", epa);
|
"openExtio", epa);
|
||||||
}
|
}
|
||||||
else if (cmd == ASE_AWK_IO_CLOSE)
|
else if (cmd == ASE_AWK_IO_CLOSE)
|
||||||
{
|
{
|
||||||
return __call_java_close_extio (
|
return __java_close_extio (
|
||||||
runio_data->env, runio_data->obj,
|
runio_data->env, runio_data->obj,
|
||||||
"close_extio", epa);
|
"closeExtio", epa);
|
||||||
}
|
}
|
||||||
else if (cmd == ASE_AWK_IO_READ)
|
else if (cmd == ASE_AWK_IO_READ)
|
||||||
{
|
{
|
||||||
return __call_java_read_extio (
|
return __java_read_extio (
|
||||||
runio_data->env, runio_data->obj,
|
runio_data->env, runio_data->obj,
|
||||||
"read_extio", epa, data, size);
|
"readExtio", epa, data, size);
|
||||||
}
|
}
|
||||||
else if (cmd == ASE_AWK_IO_WRITE)
|
else if (cmd == ASE_AWK_IO_WRITE)
|
||||||
{
|
{
|
||||||
return __call_java_write_extio (
|
return __java_write_extio (
|
||||||
runio_data->env, runio_data->obj,
|
runio_data->env, runio_data->obj,
|
||||||
"write_extio", epa, data, size);
|
"writeExtio", epa, data, size);
|
||||||
}
|
}
|
||||||
else if (cmd == ASE_AWK_IO_FLUSH)
|
else if (cmd == ASE_AWK_IO_FLUSH)
|
||||||
{
|
{
|
||||||
return __call_java_flush_extio (
|
return __java_flush_extio (
|
||||||
runio_data->env, runio_data->obj,
|
runio_data->env, runio_data->obj,
|
||||||
"flush_console", epa);
|
"flushExtio", epa);
|
||||||
}
|
}
|
||||||
else if (cmd == ASE_AWK_IO_NEXT)
|
else if (cmd == ASE_AWK_IO_NEXT)
|
||||||
{
|
{
|
||||||
return __call_java_next_extio (
|
return __java_next_extio (
|
||||||
runio_data->env, runio_data->obj,
|
runio_data->env, runio_data->obj,
|
||||||
"next_console", epa);
|
"nextExtio", epa);
|
||||||
}
|
}
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
@ -828,7 +868,6 @@ JNIEXPORT int JNICALL Java_ase_awk_Awk_setfilename (JNIEnv* env, jobject obj, jl
|
|||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
JNIEXPORT int JNICALL Java_ase_awk_Awk_setofilename (JNIEnv* env, jobject obj, jlong run_id, jstring name)
|
JNIEXPORT int JNICALL Java_ase_awk_Awk_setofilename (JNIEnv* env, jobject obj, jlong run_id, jstring name)
|
||||||
{
|
{
|
||||||
ase_awk_run_t* run = (ase_awk_run_t*)run_id;
|
ase_awk_run_t* run = (ase_awk_run_t*)run_id;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: parse.c,v 1.209 2006-11-25 15:51:30 bacon Exp $
|
* $Id: parse.c,v 1.210 2006-11-26 15:55:44 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <ase/awk/awk_i.h>
|
#include <ase/awk/awk_i.h>
|
||||||
@ -1369,6 +1369,13 @@ static ase_awk_nde_t* __parse_expression (ase_awk_t* awk)
|
|||||||
{
|
{
|
||||||
ase_awk_nde_t* nde;
|
ase_awk_nde_t* nde;
|
||||||
|
|
||||||
|
if (awk->parse.depth.max.expr > 0 &&
|
||||||
|
awk->parse.depth.cur.expr >= awk->parse.depth.max.expr)
|
||||||
|
{
|
||||||
|
awk->errnum = ASE_AWK_ERECURSION;
|
||||||
|
return ASE_NULL;
|
||||||
|
}
|
||||||
|
|
||||||
awk->parse.depth.cur.expr++;
|
awk->parse.depth.cur.expr++;
|
||||||
nde = __parse_expression0 (awk);
|
nde = __parse_expression0 (awk);
|
||||||
awk->parse.depth.cur.expr--;
|
awk->parse.depth.cur.expr--;
|
||||||
@ -1971,7 +1978,15 @@ static ase_awk_nde_t* __parse_unary (ase_awk_t* awk)
|
|||||||
|
|
||||||
if (__get_token(awk) == -1) return ASE_NULL;
|
if (__get_token(awk) == -1) return ASE_NULL;
|
||||||
|
|
||||||
|
if (awk->parse.depth.max.expr > 0 &&
|
||||||
|
awk->parse.depth.cur.expr >= awk->parse.depth.max.expr)
|
||||||
|
{
|
||||||
|
awk->errnum = ASE_AWK_ERECURSION;
|
||||||
|
return ASE_NULL;
|
||||||
|
}
|
||||||
|
awk->parse.depth.cur.expr++;
|
||||||
left = __parse_unary (awk);
|
left = __parse_unary (awk);
|
||||||
|
awk->parse.depth.cur.expr--;
|
||||||
if (left == ASE_NULL) return ASE_NULL;
|
if (left == ASE_NULL) return ASE_NULL;
|
||||||
|
|
||||||
nde = (ase_awk_nde_exp_t*)
|
nde = (ase_awk_nde_exp_t*)
|
||||||
@ -2017,7 +2032,15 @@ static ase_awk_nde_t* __parse_unary_exp (ase_awk_t* awk)
|
|||||||
|
|
||||||
if (__get_token(awk) == -1) return ASE_NULL;
|
if (__get_token(awk) == -1) return ASE_NULL;
|
||||||
|
|
||||||
|
if (awk->parse.depth.max.expr > 0 &&
|
||||||
|
awk->parse.depth.cur.expr >= awk->parse.depth.max.expr)
|
||||||
|
{
|
||||||
|
awk->errnum = ASE_AWK_ERECURSION;
|
||||||
|
return ASE_NULL;
|
||||||
|
}
|
||||||
|
awk->parse.depth.cur.expr++;
|
||||||
left = __parse_unary (awk);
|
left = __parse_unary (awk);
|
||||||
|
awk->parse.depth.cur.expr--;
|
||||||
if (left == ASE_NULL) return ASE_NULL;
|
if (left == ASE_NULL) return ASE_NULL;
|
||||||
|
|
||||||
nde = (ase_awk_nde_exp_t*)
|
nde = (ase_awk_nde_exp_t*)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user