Partially fixed the critical bug mentioned in the previous revision.

- runcbs->on_enter() is introduced and called when all 
  globals variables are ready.
- changed runcbs->on_start() to return an integer
- run_main() is still under reconstruction. currently it 
  only supports the BEGIN/pattern action/END block exection.
This commit is contained in:
2009-01-23 04:40:57 +00:00
parent 5686bb8ac7
commit 8150f4843d
10 changed files with 543 additions and 145 deletions

View File

@ -1055,9 +1055,10 @@ protected:
/*@}*/
// run-time callbacks
virtual void onRunStart (Run& run);
virtual bool onRunStart (Run& run);
virtual void onRunEnd (Run& run);
virtual void onRunReturn (Run& run, const Argument& ret);
virtual bool onRunEnter (Run& run);
virtual void onRunExit (Run& run, const Argument& ret);
virtual void onRunStatement (Run& run, size_t line);
// primitive handlers
@ -1089,9 +1090,10 @@ protected:
run_t* run, const char_t* name, size_t len);
static void freeFunctionMapValue (map_t* map, void* dptr, size_t dlen);
static void onRunStart (run_t* run, void* data);
static int onRunStart (run_t* run, void* data);
static void onRunEnd (run_t* run, int errnum, void* data);
static void onRunReturn (run_t* run, val_t* ret, void* data);
static int onRunEnter (run_t* run, void* data);
static void onRunExit (run_t* run, val_t* ret, void* data);
static void onRunStatement (run_t* run, size_t line, void* data);
static void* allocMem (void* data, size_t n);
@ -1122,7 +1124,7 @@ private:
Awk (const Awk&);
Awk& operator= (const Awk&);
void triggerOnRunStart (Run& run);
bool triggerOnRunStart (Run& run);
mmgr_t mmgr;
ccls_t ccls;

View File

@ -42,7 +42,6 @@ typedef struct qse_awk_prmfns_t qse_awk_prmfns_t;
typedef struct qse_awk_srcios_t qse_awk_srcios_t;
typedef struct qse_awk_runios_t qse_awk_runios_t;
typedef struct qse_awk_runcbs_t qse_awk_runcbs_t;
typedef struct qse_awk_runarg_t qse_awk_runarg_t;
typedef struct qse_awk_rexfns_t qse_awk_rexfns_t;
typedef qse_real_t (*qse_awk_pow_t) (void* data, qse_real_t x, qse_real_t y);
@ -109,13 +108,16 @@ struct qse_awk_runios_t
struct qse_awk_runcbs_t
{
void (*on_start) (
int (*on_start) (
qse_awk_run_t* run, void* data);
int (*on_enter) (
qse_awk_run_t* run, void* data);
void (*on_statement) (
qse_awk_run_t* run, qse_size_t line, void* data);
void (*on_return) (
void (*on_exit) (
qse_awk_run_t* run, qse_awk_val_t* ret, void* data);
void (*on_end) (
@ -124,12 +126,6 @@ struct qse_awk_runcbs_t
void* data;
};
struct qse_awk_runarg_t
{
qse_char_t* ptr;
qse_size_t len;
};
struct qse_awk_rexfns_t
{
void* (*build) (
@ -888,7 +884,7 @@ int qse_awk_runsimple (
int qse_awk_run (
qse_awk_t* awk, const qse_char_t* main,
qse_awk_runios_t* runios, qse_awk_runcbs_t* runcbs,
qse_awk_runarg_t* runarg, void* data);
const qse_cstr_t* runarg, void* data);
void qse_awk_stop (qse_awk_run_t* run);
void qse_awk_stopall (qse_awk_t* awk);