Recovered from cvs revision 2007-05-16 15:46:00
This commit is contained in:
parent
a89fc5e2aa
commit
b564cc2d8a
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: Awk.cpp,v 1.28 2007/05/14 08:40:13 bacon Exp $
|
* $Id: Awk.cpp,v 1.29 2007/05/16 06:43:32 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <ase/awk/Awk.hpp>
|
#include <ase/awk/Awk.hpp>
|
||||||
@ -7,6 +7,9 @@
|
|||||||
#include <ase/cmn/str.h>
|
#include <ase/cmn/str.h>
|
||||||
#include <ase/cmn/mem.h>
|
#include <ase/cmn/mem.h>
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <tchar.h>
|
||||||
|
|
||||||
namespace ASE
|
namespace ASE
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -155,7 +158,47 @@ namespace ASE
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int Awk::Argument::init (run_t* run, ase_awk_val_t* v)
|
void* Awk::Argument::operator new (size_t n, awk_t* awk)
|
||||||
|
{
|
||||||
|
void* ptr = ase_awk_malloc (awk, ASE_SIZEOF(awk) + n);
|
||||||
|
if (ptr == ASE_NULL) return ASE_NULL;
|
||||||
|
|
||||||
|
*(awk_t**)ptr = awk;
|
||||||
|
return (char*)ptr+ASE_SIZEOF(awk);
|
||||||
|
}
|
||||||
|
|
||||||
|
void* Awk::Argument::operator new[] (size_t n, awk_t* awk)
|
||||||
|
{
|
||||||
|
void* ptr = ase_awk_malloc (awk, ASE_SIZEOF(awk) + n);
|
||||||
|
if (ptr == ASE_NULL) return ASE_NULL;
|
||||||
|
|
||||||
|
*(awk_t**)ptr = awk;
|
||||||
|
return (char*)ptr+ASE_SIZEOF(awk);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Awk::Argument::operator delete (void* ptr, awk_t* awk)
|
||||||
|
{
|
||||||
|
ase_awk_free (awk, (char*)ptr-ASE_SIZEOF(awk));
|
||||||
|
}
|
||||||
|
|
||||||
|
void Awk::Argument::operator delete[] (void* ptr, awk_t* awk)
|
||||||
|
{
|
||||||
|
ase_awk_free (awk, (char*)ptr-ASE_SIZEOF(awk));
|
||||||
|
}
|
||||||
|
|
||||||
|
void Awk::Argument::operator delete (void* ptr)
|
||||||
|
{
|
||||||
|
void* p = (char*)ptr-ASE_SIZEOF(awk_t*);
|
||||||
|
ase_awk_free (*(awk_t**)p, p);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Awk::Argument::operator delete[] (void* ptr)
|
||||||
|
{
|
||||||
|
void* p = (char*)ptr-ASE_SIZEOF(awk_t*);
|
||||||
|
ase_awk_free (*(awk_t**)p, p);
|
||||||
|
}
|
||||||
|
|
||||||
|
int Awk::Argument::init (run_t* run, val_t* v)
|
||||||
{
|
{
|
||||||
// this method is used internally only
|
// this method is used internally only
|
||||||
// and should never be called more than once
|
// and should never be called more than once
|
||||||
@ -266,7 +309,7 @@ namespace ASE
|
|||||||
clear ();
|
clear ();
|
||||||
}
|
}
|
||||||
|
|
||||||
ase_awk_val_t* Awk::Return::toVal () const
|
Awk::val_t* Awk::Return::toVal () const
|
||||||
{
|
{
|
||||||
switch (this->type)
|
switch (this->type)
|
||||||
{
|
{
|
||||||
@ -537,8 +580,9 @@ namespace ASE
|
|||||||
|
|
||||||
size_t i, nargs = ase_awk_getnargs(run);
|
size_t i, nargs = ase_awk_getnargs(run);
|
||||||
|
|
||||||
Argument* args = ASE_NULL;
|
//Argument* args = ASE_NULL;
|
||||||
try { args = new Argument [nargs]; } catch (...) {}
|
//try { args = new Argument [nargs]; } catch (...) {}
|
||||||
|
Argument* args = new(awk) Argument[nargs];
|
||||||
if (args == ASE_NULL)
|
if (args == ASE_NULL)
|
||||||
{
|
{
|
||||||
// TODO: SET ERROR INFO
|
// TODO: SET ERROR INFO
|
||||||
@ -547,7 +591,7 @@ namespace ASE
|
|||||||
|
|
||||||
for (i = 0; i < nargs; i++)
|
for (i = 0; i < nargs; i++)
|
||||||
{
|
{
|
||||||
ase_awk_val_t* v = ase_awk_getarg (run, i);
|
val_t* v = ase_awk_getarg (run, i);
|
||||||
if (args[i].init (run, v) == -1)
|
if (args[i].init (run, v) == -1)
|
||||||
{
|
{
|
||||||
delete[] args;
|
delete[] args;
|
||||||
@ -568,7 +612,7 @@ namespace ASE
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ase_awk_val_t* r = ret.toVal ();
|
val_t* r = ret.toVal ();
|
||||||
if (r == ASE_NULL)
|
if (r == ASE_NULL)
|
||||||
{
|
{
|
||||||
// TODO: SET ERROR INFO
|
// TODO: SET ERROR INFO
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: Awk.hpp,v 1.26 2007/05/14 08:40:13 bacon Exp $
|
* $Id: Awk.hpp,v 1.27 2007/05/16 06:43:32 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _ASE_AWK_AWK_HPP_
|
#ifndef _ASE_AWK_AWK_HPP_
|
||||||
@ -23,6 +23,7 @@ namespace ASE
|
|||||||
typedef ase_long_t long_t;
|
typedef ase_long_t long_t;
|
||||||
typedef ase_real_t real_t;
|
typedef ase_real_t real_t;
|
||||||
|
|
||||||
|
typedef ase_awk_val_t val_t;
|
||||||
typedef ase_awk_map_t map_t;
|
typedef ase_awk_map_t map_t;
|
||||||
typedef ase_awk_pair_t pair_t;
|
typedef ase_awk_pair_t pair_t;
|
||||||
typedef ase_awk_extio_t extio_t;
|
typedef ase_awk_extio_t extio_t;
|
||||||
@ -134,12 +135,24 @@ namespace ASE
|
|||||||
Argument ();
|
Argument ();
|
||||||
~Argument ();
|
~Argument ();
|
||||||
|
|
||||||
|
// initialization
|
||||||
|
void* operator new (size_t n, awk_t* awk);
|
||||||
|
void* operator new[] (size_t n, awk_t* awk);
|
||||||
|
|
||||||
|
// deletion when initialization fails
|
||||||
|
void operator delete (void* p, awk_t* awk);
|
||||||
|
void operator delete[] (void* p, awk_t* awk);
|
||||||
|
|
||||||
|
// normal deletion
|
||||||
|
void operator delete (void* p);
|
||||||
|
void operator delete[] (void* p);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Argument (const Argument&);
|
Argument (const Argument&);
|
||||||
Argument& operator= (const Argument&);
|
Argument& operator= (const Argument&);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
int init (run_t* run, ase_awk_val_t* v);
|
int init (run_t* run, val_t* v);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
long_t toInt () const;
|
long_t toInt () const;
|
||||||
@ -151,7 +164,7 @@ namespace ASE
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
run_t* run;
|
run_t* run;
|
||||||
ase_awk_val_t* val;
|
val_t* val;
|
||||||
|
|
||||||
ase_long_t inum;
|
ase_long_t inum;
|
||||||
ase_real_t rnum;
|
ase_real_t rnum;
|
||||||
@ -171,7 +184,7 @@ namespace ASE
|
|||||||
Return (run_t* run);
|
Return (run_t* run);
|
||||||
~Return ();
|
~Return ();
|
||||||
|
|
||||||
ase_awk_val_t* toVal () const;
|
val_t* toVal () const;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
run_t* getRun () const;
|
run_t* getRun () const;
|
||||||
|
Loading…
Reference in New Issue
Block a user