Uh, Updates?
This commit is contained in:
@@ -57,7 +57,7 @@ IDR_MAINFRAME MENU DISCARDABLE
|
|||||||
BEGIN
|
BEGIN
|
||||||
POPUP "&File"
|
POPUP "&File"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "&New\tCtrl+N", ID_NEW
|
MENUITEM "&New\tCtrl+N", Inew
|
||||||
MENUITEM "&Open...\tCtrl+O", ID_OPEN
|
MENUITEM "&Open...\tCtrl+O", ID_OPEN
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Close\tCtrl+F4", ID_CLOSE
|
MENUITEM "&Close\tCtrl+F4", ID_CLOSE
|
||||||
@@ -118,7 +118,7 @@ IDR_MAINFRAME ACCELERATORS DISCARDABLE
|
|||||||
BEGIN
|
BEGIN
|
||||||
"F", ID_FIND, VIRTKEY, CONTROL, NOINVERT
|
"F", ID_FIND, VIRTKEY, CONTROL, NOINVERT
|
||||||
"H", ID_HOME, VIRTKEY, CONTROL, NOINVERT
|
"H", ID_HOME, VIRTKEY, CONTROL, NOINVERT
|
||||||
"N", ID_NEW, VIRTKEY, CONTROL, NOINVERT
|
"N", Inew, VIRTKEY, CONTROL, NOINVERT
|
||||||
"O", ID_OPEN, VIRTKEY, CONTROL, NOINVERT
|
"O", ID_OPEN, VIRTKEY, CONTROL, NOINVERT
|
||||||
"P", ID_PRINT, VIRTKEY, CONTROL, NOINVERT
|
"P", ID_PRINT, VIRTKEY, CONTROL, NOINVERT
|
||||||
"R", ID_REPLACE, VIRTKEY, CONTROL, NOINVERT
|
"R", ID_REPLACE, VIRTKEY, CONTROL, NOINVERT
|
||||||
@@ -228,7 +228,7 @@ BEGIN
|
|||||||
ID_STEP "Strp program\nStep"
|
ID_STEP "Strp program\nStep"
|
||||||
ID_TRACE "Trace program\nTrace"
|
ID_TRACE "Trace program\nTrace"
|
||||||
ID_END "End program\nEnd"
|
ID_END "End program\nEnd"
|
||||||
ID_NEW "Start a new program\nNew"
|
Inew "Start a new program\nNew"
|
||||||
ID_FINDNEXT "Find next\nFind next"
|
ID_FINDNEXT "Find next\nFind next"
|
||||||
ID_RUN "Continue Program\nContinue"
|
ID_RUN "Continue Program\nContinue"
|
||||||
ID_STOP "Pause program\nPause"
|
ID_STOP "Pause program\nPause"
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ BEGIN_MESSAGE_MAP( MainFrame,CFrameWnd )
|
|||||||
ON_WM_SIZE()
|
ON_WM_SIZE()
|
||||||
ON_WM_ACTIVATE()
|
ON_WM_ACTIVATE()
|
||||||
|
|
||||||
ON_COMMAND( ID_NEW,fileNew )
|
ON_COMMAND( Inew,fileNew )
|
||||||
ON_COMMAND( ID_OPEN,fileOpen )
|
ON_COMMAND( ID_OPEN,fileOpen )
|
||||||
ON_COMMAND( ID_SAVE,fileSave )
|
ON_COMMAND( ID_SAVE,fileSave )
|
||||||
ON_COMMAND( ID_SAVEAS,fileSaveAs )
|
ON_COMMAND( ID_SAVEAS,fileSaveAs )
|
||||||
@@ -54,7 +54,7 @@ BEGIN_MESSAGE_MAP( MainFrame,CFrameWnd )
|
|||||||
ON_COMMAND( ID_FORWARD,helpForward )
|
ON_COMMAND( ID_FORWARD,helpForward )
|
||||||
ON_COMMAND( ID_ABOUT,helpAbout )
|
ON_COMMAND( ID_ABOUT,helpAbout )
|
||||||
|
|
||||||
ON_UPDATE_COMMAND_UI( ID_NEW,updateCmdUI )
|
ON_UPDATE_COMMAND_UI( Inew,updateCmdUI )
|
||||||
ON_UPDATE_COMMAND_UI( ID_OPEN,updateCmdUI )
|
ON_UPDATE_COMMAND_UI( ID_OPEN,updateCmdUI )
|
||||||
ON_UPDATE_COMMAND_UI( ID_SAVE,updateCmdUI )
|
ON_UPDATE_COMMAND_UI( ID_SAVE,updateCmdUI )
|
||||||
ON_UPDATE_COMMAND_UI( ID_SAVEAS,updateCmdUI )
|
ON_UPDATE_COMMAND_UI( ID_SAVEAS,updateCmdUI )
|
||||||
@@ -112,7 +112,7 @@ int MainFrame::OnCreate( LPCREATESTRUCT lpCreateStruct ){
|
|||||||
static HBITMAP toolbmp;
|
static HBITMAP toolbmp;
|
||||||
static SIZE imgsz,butsz;
|
static SIZE imgsz,butsz;
|
||||||
static UINT toolbuts[]={
|
static UINT toolbuts[]={
|
||||||
ID_NEW,ID_OPEN,ID_SAVE,ID_CLOSE,ID_SEPARATOR,
|
Inew,ID_OPEN,ID_SAVE,ID_CLOSE,ID_SEPARATOR,
|
||||||
ID_CUT,ID_COPY,ID_PASTE,ID_SEPARATOR,
|
ID_CUT,ID_COPY,ID_PASTE,ID_SEPARATOR,
|
||||||
ID_FIND,ID_SEPARATOR,
|
ID_FIND,ID_SEPARATOR,
|
||||||
ID_EXECUTE,ID_SEPARATOR,
|
ID_EXECUTE,ID_SEPARATOR,
|
||||||
@@ -835,7 +835,7 @@ void MainFrame::updateCmdUI( CCmdUI *ui ){
|
|||||||
Editor *e=getEditor();
|
Editor *e=getEditor();
|
||||||
|
|
||||||
switch( ui->m_nID ){
|
switch( ui->m_nID ){
|
||||||
case ID_NEW:case ID_OPEN:case ID_HOME:
|
case Inew:case ID_OPEN:case ID_HOME:
|
||||||
ui->Enable( true );
|
ui->Enable( true );
|
||||||
break;
|
break;
|
||||||
case ID_DEBUG:
|
case ID_DEBUG:
|
||||||
|
|||||||
+11
-11
@@ -107,7 +107,7 @@ static void openRsrcDir( Section *s,int off,Rsrc *p ){
|
|||||||
Rdir *dir=(Rdir*)(data+off);
|
Rdir *dir=(Rdir*)(data+off);
|
||||||
Rent *ent=(Rent*)(dir+1);
|
Rent *ent=(Rent*)(dir+1);
|
||||||
for( int k=0;k<dir->num_ids;++ent,++k ){
|
for( int k=0;k<dir->num_ids;++ent,++k ){
|
||||||
Rsrc *r=d_new Rsrc( ent->id,p );
|
Rsrc *r=new Rsrc( ent->id,p );
|
||||||
if( ent->data<0 ){ //a node - offset is another dir
|
if( ent->data<0 ){ //a node - offset is another dir
|
||||||
openRsrcDir( s,ent->data&0x7fffffff,r );
|
openRsrcDir( s,ent->data&0x7fffffff,r );
|
||||||
}else{ //a leaf
|
}else{ //a leaf
|
||||||
@@ -115,7 +115,7 @@ static void openRsrcDir( Section *s,int off,Rsrc *p ){
|
|||||||
// cout<<"dat addr:"<<dat->addr<<" size:"<<dat->size<<endl;
|
// cout<<"dat addr:"<<dat->addr<<" size:"<<dat->size<<endl;
|
||||||
int sz=dat->size;
|
int sz=dat->size;
|
||||||
void *src=dat->addr-s->sect.virt_addr+data;
|
void *src=dat->addr-s->sect.virt_addr+data;
|
||||||
void *dest=d_new char[sz];
|
void *dest=new char[sz];
|
||||||
memcpy( dest,src,sz );
|
memcpy( dest,src,sz );
|
||||||
r->data=dest;
|
r->data=dest;
|
||||||
r->data_sz=sz;
|
r->data_sz=sz;
|
||||||
@@ -124,7 +124,7 @@ static void openRsrcDir( Section *s,int off,Rsrc *p ){
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void openRsrcTree( Section *s ){
|
static void openRsrcTree( Section *s ){
|
||||||
rsrc_root=d_new Rsrc( 0,0 );
|
rsrc_root=new Rsrc( 0,0 );
|
||||||
openRsrcDir( s,0,rsrc_root );
|
openRsrcDir( s,0,rsrc_root );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -217,7 +217,7 @@ static void closeRsrcTree( Section *s ){
|
|||||||
s->sect.data_size=data_sz;
|
s->sect.data_size=data_sz;
|
||||||
|
|
||||||
delete[] s->data;
|
delete[] s->data;
|
||||||
s->data=d_new char[data_sz];
|
s->data=new char[data_sz];
|
||||||
closeRsrcDir( s,0,rsrc_root );
|
closeRsrcDir( s,0,rsrc_root );
|
||||||
|
|
||||||
delete rsrc_root;
|
delete rsrc_root;
|
||||||
@@ -244,27 +244,27 @@ static void loadImage( istream &in ){
|
|||||||
//read stub
|
//read stub
|
||||||
in.seekg( 0x3c );
|
in.seekg( 0x3c );
|
||||||
in.read( (char*)&stub_sz,4 );
|
in.read( (char*)&stub_sz,4 );
|
||||||
stub_sz+=4;stub=d_new char[stub_sz];
|
stub_sz+=4;stub=new char[stub_sz];
|
||||||
in.seekg( 0 );in.read( stub,stub_sz );
|
in.seekg( 0 );in.read( stub,stub_sz );
|
||||||
|
|
||||||
//read head
|
//read head
|
||||||
head=d_new Head;
|
head=new Head;
|
||||||
head_sz=sizeof(Head);
|
head_sz=sizeof(Head);
|
||||||
in.read( (char*)head,head_sz );
|
in.read( (char*)head,head_sz );
|
||||||
|
|
||||||
//read opts
|
//read opts
|
||||||
opts=d_new Opts;
|
opts=new Opts;
|
||||||
opts_sz=sizeof(Opts);
|
opts_sz=sizeof(Opts);
|
||||||
in.read( (char*)opts,opts_sz );
|
in.read( (char*)opts,opts_sz );
|
||||||
|
|
||||||
//read data dirs
|
//read data dirs
|
||||||
ddir_sz=opts->dir_entries * sizeof(DDir);
|
ddir_sz=opts->dir_entries * sizeof(DDir);
|
||||||
ddir=(DDir*)d_new char[ddir_sz];
|
ddir=(DDir*)new char[ddir_sz];
|
||||||
in.read( (char*)ddir,ddir_sz );
|
in.read( (char*)ddir,ddir_sz );
|
||||||
|
|
||||||
//read sects...
|
//read sects...
|
||||||
for( k=0;k<head->num_sects;++k ){
|
for( k=0;k<head->num_sects;++k ){
|
||||||
Section *s=d_new Section;
|
Section *s=new Section;
|
||||||
in.read( (char*)&s->sect,sizeof(Sect) );
|
in.read( (char*)&s->sect,sizeof(Sect) );
|
||||||
sections.push_back( s );
|
sections.push_back( s );
|
||||||
}
|
}
|
||||||
@@ -273,7 +273,7 @@ static void loadImage( istream &in ){
|
|||||||
Section *s=sections[k];
|
Section *s=sections[k];
|
||||||
if( !s->sect.data_addr ) continue;
|
if( !s->sect.data_addr ) continue;
|
||||||
int data_sz=s->sect.data_size;
|
int data_sz=s->sect.data_size;
|
||||||
s->data=d_new char[data_sz];//char[s->sect.virt_size];
|
s->data=new char[data_sz];//char[s->sect.virt_size];
|
||||||
//memset( s->data,0,s->sect.virt_size );
|
//memset( s->data,0,s->sect.virt_size );
|
||||||
in.seekg( s->sect.data_addr );
|
in.seekg( s->sect.data_addr );
|
||||||
in.read( s->data,data_sz );
|
in.read( s->data,data_sz );
|
||||||
@@ -336,7 +336,7 @@ bool replaceRsrc( int type,int id,int lang,void *data,int data_sz ){
|
|||||||
if( Rsrc *r=findRsrc( type,id,lang ) ){
|
if( Rsrc *r=findRsrc( type,id,lang ) ){
|
||||||
delete[] r->data;
|
delete[] r->data;
|
||||||
r->data_sz=data_sz;
|
r->data_sz=data_sz;
|
||||||
r->data=d_new char[data_sz];
|
r->data=new char[data_sz];
|
||||||
memcpy( r->data,data,data_sz );
|
memcpy( r->data,data,data_sz );
|
||||||
closeRsrcTree( s );
|
closeRsrcTree( s );
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ private:
|
|||||||
data_sz=data_sz/2+data_sz;
|
data_sz=data_sz/2+data_sz;
|
||||||
if( data_sz<pc+n ) data_sz=pc+n;
|
if( data_sz<pc+n ) data_sz=pc+n;
|
||||||
char *old_data=data;
|
char *old_data=data;
|
||||||
data=d_new char[data_sz];
|
data=new char[data_sz];
|
||||||
memcpy( data,old_data,pc );
|
memcpy( data,old_data,pc );
|
||||||
delete old_data;
|
delete old_data;
|
||||||
}
|
}
|
||||||
@@ -138,7 +138,7 @@ bool Linker::canCreateExe(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
Module *Linker::createModule(){
|
Module *Linker::createModule(){
|
||||||
return d_new BBModule();
|
return new BBModule();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Linker::deleteModule( Module *mod ){
|
void Linker::deleteModule( Module *mod ){
|
||||||
|
|||||||
+12
-12
@@ -40,7 +40,7 @@ static BBType _bbCStrType(BBTYPE_CSTR);
|
|||||||
static void *bbMalloc(int size) {
|
static void *bbMalloc(int size) {
|
||||||
return malloc(size);
|
return malloc(size);
|
||||||
/*
|
/*
|
||||||
char *c=d_new char[ size ];
|
char *c=new char[ size ];
|
||||||
memBlks.push_back( c );
|
memBlks.push_back( c );
|
||||||
return c;
|
return c;
|
||||||
*/
|
*/
|
||||||
@@ -121,7 +121,7 @@ BBStr::~BBStr() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
BBStr *_bbStrLoad(BBStr **var) {
|
BBStr *_bbStrLoad(BBStr **var) {
|
||||||
return *var ? d_new BBStr(**var) : d_new BBStr();
|
return *var ? new BBStr(**var) : new BBStr();
|
||||||
}
|
}
|
||||||
|
|
||||||
void _bbStrRelease(BBStr *str) {
|
void _bbStrRelease(BBStr *str) {
|
||||||
@@ -147,7 +147,7 @@ int _bbStrToInt(BBStr *s) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
BBStr *_bbStrFromInt(int n) {
|
BBStr *_bbStrFromInt(int n) {
|
||||||
return d_new BBStr(itoa(n));
|
return new BBStr(itoa(n));
|
||||||
}
|
}
|
||||||
|
|
||||||
float _bbStrToFloat(BBStr *s) {
|
float _bbStrToFloat(BBStr *s) {
|
||||||
@@ -156,11 +156,11 @@ float _bbStrToFloat(BBStr *s) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
BBStr *_bbStrFromFloat(float n) {
|
BBStr *_bbStrFromFloat(float n) {
|
||||||
return d_new BBStr(ftoa(n));
|
return new BBStr(ftoa(n));
|
||||||
}
|
}
|
||||||
|
|
||||||
BBStr *_bbStrConst(const char *s) {
|
BBStr *_bbStrConst(const char *s) {
|
||||||
return d_new BBStr(s);
|
return new BBStr(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
void * _bbVecAlloc(BBVecType *type) {
|
void * _bbVecAlloc(BBVecType *type) {
|
||||||
@@ -378,13 +378,13 @@ int _bbObjEachNext2(BBObj **var) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
BBStr *_bbObjToStr(BBObj *obj) {
|
BBStr *_bbObjToStr(BBObj *obj) {
|
||||||
if (!obj || !obj->fields) return d_new BBStr("[NULL]");
|
if (!obj || !obj->fields) return new BBStr("[NULL]");
|
||||||
|
|
||||||
static BBObj *root;
|
static BBObj *root;
|
||||||
static int recurs_cnt;
|
static int recurs_cnt;
|
||||||
|
|
||||||
if (obj == root) return d_new BBStr("[ROOT]");
|
if (obj == root) return new BBStr("[ROOT]");
|
||||||
if (recurs_cnt == 8) return d_new BBStr("....");
|
if (recurs_cnt == 8) return new BBStr("....");
|
||||||
|
|
||||||
++recurs_cnt;
|
++recurs_cnt;
|
||||||
BBObj *oldRoot = root;
|
BBObj *oldRoot = root;
|
||||||
@@ -392,7 +392,7 @@ BBStr *_bbObjToStr(BBObj *obj) {
|
|||||||
|
|
||||||
BBObjType *type = obj->type;
|
BBObjType *type = obj->type;
|
||||||
BBField *fields = obj->fields;
|
BBField *fields = obj->fields;
|
||||||
BBStr *s = d_new BBStr("["), *t;
|
BBStr *s = new BBStr("["), *t;
|
||||||
for (int k = 0; k < type->fieldCnt; ++k) {
|
for (int k = 0; k < type->fieldCnt; ++k) {
|
||||||
if (k) *s += ',';
|
if (k) *s += ',';
|
||||||
switch (type->fieldTypes[k]->type) {
|
switch (type->fieldTypes[k]->type) {
|
||||||
@@ -467,9 +467,9 @@ float _bbReadFloat() {
|
|||||||
BBStr *_bbReadStr() {
|
BBStr *_bbReadStr() {
|
||||||
switch (dataPtr->fieldType) {
|
switch (dataPtr->fieldType) {
|
||||||
case BBTYPE_END:ThrowRuntimeException("Out of data"); return 0;
|
case BBTYPE_END:ThrowRuntimeException("Out of data"); return 0;
|
||||||
case BBTYPE_INT:return d_new BBStr(itoa(dataPtr++->field.INT));
|
case BBTYPE_INT:return new BBStr(itoa(dataPtr++->field.INT));
|
||||||
case BBTYPE_FLT:return d_new BBStr(ftoa(dataPtr++->field.FLT));
|
case BBTYPE_FLT:return new BBStr(ftoa(dataPtr++->field.FLT));
|
||||||
case BBTYPE_CSTR:return d_new BBStr(dataPtr++->field.CSTR);
|
case BBTYPE_CSTR:return new BBStr(dataPtr++->field.CSTR);
|
||||||
default:ThrowRuntimeException("Bad data type"); return 0;
|
default:ThrowRuntimeException("Bad data type"); return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ struct bbBank{
|
|||||||
|
|
||||||
bbBank( int sz ):size(sz){
|
bbBank( int sz ):size(sz){
|
||||||
capacity=(size+15)&~15;
|
capacity=(size+15)&~15;
|
||||||
data=d_new char[capacity];
|
data=new char[capacity];
|
||||||
memset( data,0,size );
|
memset( data,0,size );
|
||||||
}
|
}
|
||||||
virtual ~bbBank(){
|
virtual ~bbBank(){
|
||||||
@@ -21,7 +21,7 @@ struct bbBank{
|
|||||||
capacity=capacity*3/2;
|
capacity=capacity*3/2;
|
||||||
if( n>capacity ) capacity=n;
|
if( n>capacity ) capacity=n;
|
||||||
capacity=(capacity+15)&~15;
|
capacity=(capacity+15)&~15;
|
||||||
char *p=d_new char[capacity];
|
char *p=new char[capacity];
|
||||||
memcpy( p,data,size );
|
memcpy( p,data,size );
|
||||||
delete[] data;
|
delete[] data;
|
||||||
data=p;
|
data=p;
|
||||||
@@ -47,7 +47,7 @@ static inline void debugBank( bbBank *b,int offset ){
|
|||||||
}
|
}
|
||||||
|
|
||||||
bbBank *bbCreateBank( int size ){
|
bbBank *bbCreateBank( int size ){
|
||||||
bbBank *b=d_new bbBank( size );
|
bbBank *b=new bbBank( size );
|
||||||
bank_set.insert( b );
|
bank_set.insert( b );
|
||||||
return b;
|
return b;
|
||||||
}
|
}
|
||||||
|
|||||||
+28
-28
@@ -312,7 +312,7 @@ void bbRenderWorld( float tween ){
|
|||||||
if( bbKeyHit( 0x58 ) ){
|
if( bbKeyHit( 0x58 ) ){
|
||||||
static int n;
|
static int n;
|
||||||
string t="screenshot"+itoa(++n)+".bmp";
|
string t="screenshot"+itoa(++n)+".bmp";
|
||||||
bbSaveBuffer( bbBackBuffer(),d_new BBStr(t) );
|
bbSaveBuffer( bbBackBuffer(),new BBStr(t) );
|
||||||
}
|
}
|
||||||
|
|
||||||
if( !stats_mode ) return;
|
if( !stats_mode ) return;
|
||||||
@@ -334,7 +334,7 @@ void bbRenderWorld( float tween ){
|
|||||||
|
|
||||||
string t="FPS:"+t_fps+" UPS:"+t_ups+" RPS:"+t_rps+" TRIS:"+t_tris;
|
string t="FPS:"+t_fps+" UPS:"+t_ups+" RPS:"+t_rps+" TRIS:"+t_tris;
|
||||||
|
|
||||||
bbText( 0,bbGraphicsHeight()-bbFontHeight(),d_new BBStr(t),0,0 );
|
bbText( 0,bbGraphicsHeight()-bbFontHeight(),new BBStr(t),0,0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
int bbTrisRendered(){
|
int bbTrisRendered(){
|
||||||
@@ -353,7 +353,7 @@ float bbStats3D( int n ){
|
|||||||
//
|
//
|
||||||
Texture * bbLoadTexture( BBStr *file,int flags ){
|
Texture * bbLoadTexture( BBStr *file,int flags ){
|
||||||
debug3d();
|
debug3d();
|
||||||
Texture *t=d_new Texture( *file,flags );delete file;
|
Texture *t=new Texture( *file,flags );delete file;
|
||||||
if( !t->getCanvas(0) ){ delete t;return 0; }
|
if( !t->getCanvas(0) ){ delete t;return 0; }
|
||||||
texture_set.insert( t );
|
texture_set.insert( t );
|
||||||
return t;
|
return t;
|
||||||
@@ -361,7 +361,7 @@ Texture * bbLoadTexture( BBStr *file,int flags ){
|
|||||||
|
|
||||||
Texture * bbLoadAnimTexture( BBStr *file,int flags,int w,int h,int first,int cnt ){
|
Texture * bbLoadAnimTexture( BBStr *file,int flags,int w,int h,int first,int cnt ){
|
||||||
debug3d();
|
debug3d();
|
||||||
Texture *t=d_new Texture( *file,flags,w,h,first,cnt );
|
Texture *t=new Texture( *file,flags,w,h,first,cnt );
|
||||||
delete file;
|
delete file;
|
||||||
if( !t->getCanvas(0) ){
|
if( !t->getCanvas(0) ){
|
||||||
delete t;
|
delete t;
|
||||||
@@ -378,7 +378,7 @@ Texture * bbCreateTexture( int w,int h,int flags,int frames ){
|
|||||||
ThrowRuntimeException( "Illegal number of texture frames" );
|
ThrowRuntimeException( "Illegal number of texture frames" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Texture *t=d_new Texture( w,h,flags,frames );
|
Texture *t=new Texture( w,h,flags,frames );
|
||||||
texture_set.insert( t );
|
texture_set.insert( t );
|
||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
@@ -427,7 +427,7 @@ int bbTextureHeight( Texture *t ){
|
|||||||
BBStr *bbTextureName( Texture *t ){
|
BBStr *bbTextureName( Texture *t ){
|
||||||
debugTexture(t);
|
debugTexture(t);
|
||||||
CachedTexture *c=t->getCachedTexture();
|
CachedTexture *c=t->getCachedTexture();
|
||||||
return c ? d_new BBStr( c->getName().c_str() ) : d_new BBStr("");
|
return c ? new BBStr( c->getName().c_str() ) : new BBStr("");
|
||||||
}
|
}
|
||||||
|
|
||||||
void bbSetCubeFace( Texture *t,int face ){
|
void bbSetCubeFace( Texture *t,int face ){
|
||||||
@@ -476,7 +476,7 @@ void bbTextureFilter( BBStr *t,int flags ){
|
|||||||
////////////////////
|
////////////////////
|
||||||
Brush * bbCreateBrush( float r,float g,float b ){
|
Brush * bbCreateBrush( float r,float g,float b ){
|
||||||
debug3d();
|
debug3d();
|
||||||
Brush *br=d_new Brush();
|
Brush *br=new Brush();
|
||||||
br->setColor( Vector( r*ctof,g*ctof,b*ctof ) );
|
br->setColor( Vector( r*ctof,g*ctof,b*ctof ) );
|
||||||
brush_set.insert( br );
|
brush_set.insert( br );
|
||||||
return br;
|
return br;
|
||||||
@@ -522,7 +522,7 @@ void bbBrushTexture( Brush *b,Texture *t,int frame,int index ){
|
|||||||
|
|
||||||
Texture *bbGetBrushTexture( Brush *b,int index ){
|
Texture *bbGetBrushTexture( Brush *b,int index ){
|
||||||
debugBrush(b);
|
debugBrush(b);
|
||||||
Texture *tex=d_new Texture(b->getTexture(index));
|
Texture *tex=new Texture(b->getTexture(index));
|
||||||
texture_set.insert( tex );
|
texture_set.insert( tex );
|
||||||
return tex;
|
return tex;
|
||||||
}
|
}
|
||||||
@@ -542,7 +542,7 @@ void bbBrushFX( Brush *b,int fx ){
|
|||||||
///////////////////
|
///////////////////
|
||||||
Entity * bbCreateMesh( Entity *p ){
|
Entity * bbCreateMesh( Entity *p ){
|
||||||
debugParent(p);
|
debugParent(p);
|
||||||
MeshModel *m=d_new MeshModel();
|
MeshModel *m=new MeshModel();
|
||||||
return insertEntity( m,p );
|
return insertEntity( m,p );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -552,7 +552,7 @@ Entity * bbLoadMesh( BBStr *f,Entity *p ){
|
|||||||
delete f;
|
delete f;
|
||||||
|
|
||||||
if( !e ) return 0;
|
if( !e ) return 0;
|
||||||
MeshModel *m=d_new MeshModel();
|
MeshModel *m=new MeshModel();
|
||||||
collapseMesh( m,e );
|
collapseMesh( m,e );
|
||||||
return insertEntity( m,p );
|
return insertEntity( m,p );
|
||||||
}
|
}
|
||||||
@@ -597,7 +597,7 @@ Entity * bbCopyMesh( MeshModel *m,Entity *p ){
|
|||||||
debugMesh(m);
|
debugMesh(m);
|
||||||
debugParent(p);
|
debugParent(p);
|
||||||
|
|
||||||
MeshModel *t=d_new MeshModel();
|
MeshModel *t=new MeshModel();
|
||||||
t->add( *m );
|
t->add( *m );
|
||||||
return insertEntity( t,p );
|
return insertEntity( t,p );
|
||||||
}
|
}
|
||||||
@@ -729,14 +729,14 @@ Surface * bbCreateSurface( MeshModel *m,Brush *b ){
|
|||||||
}
|
}
|
||||||
|
|
||||||
Brush *bbGetSurfaceBrush( Surface *s ){
|
Brush *bbGetSurfaceBrush( Surface *s ){
|
||||||
Brush *br=d_new Brush( s->getBrush() );
|
Brush *br=new Brush( s->getBrush() );
|
||||||
brush_set.insert( br );
|
brush_set.insert( br );
|
||||||
return br;
|
return br;
|
||||||
}
|
}
|
||||||
|
|
||||||
Brush *bbGetEntityBrush( Model *m ){
|
Brush *bbGetEntityBrush( Model *m ){
|
||||||
debugModel(m);
|
debugModel(m);
|
||||||
Brush *br=d_new Brush( m->getBrush() );
|
Brush *br=new Brush( m->getBrush() );
|
||||||
brush_set.insert( br );
|
brush_set.insert( br );
|
||||||
return br;
|
return br;
|
||||||
}
|
}
|
||||||
@@ -858,7 +858,7 @@ Entity * bbCreateCamera( Entity *p ){
|
|||||||
debugParent(p);
|
debugParent(p);
|
||||||
int x,y,w,h;
|
int x,y,w,h;
|
||||||
gx_canvas->getViewport( &x,&y,&w,&h );
|
gx_canvas->getViewport( &x,&y,&w,&h );
|
||||||
Camera *c=d_new Camera();
|
Camera *c=new Camera();
|
||||||
c->setViewport( x,y,w,h );
|
c->setViewport( x,y,w,h );
|
||||||
return insertEntity( c,p );
|
return insertEntity( c,p );
|
||||||
}
|
}
|
||||||
@@ -1066,7 +1066,7 @@ int bbPickedTriangle(){
|
|||||||
////////////////////
|
////////////////////
|
||||||
Entity * bbCreateLight( int type,Entity *p ){
|
Entity * bbCreateLight( int type,Entity *p ){
|
||||||
debugParent(p);
|
debugParent(p);
|
||||||
Light *t=d_new Light( type );
|
Light *t=new Light( type );
|
||||||
return insertEntity( t,p );
|
return insertEntity( t,p );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1096,7 +1096,7 @@ void bbLightConeAngles( Light *light,float inner,float outer ){
|
|||||||
////////////////////
|
////////////////////
|
||||||
Entity * bbCreatePivot( Entity *p ){
|
Entity * bbCreatePivot( Entity *p ){
|
||||||
debugParent(p);
|
debugParent(p);
|
||||||
Pivot *t=d_new Pivot();
|
Pivot *t=new Pivot();
|
||||||
return insertEntity( t,p );
|
return insertEntity( t,p );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1105,7 +1105,7 @@ Entity * bbCreatePivot( Entity *p ){
|
|||||||
/////////////////////
|
/////////////////////
|
||||||
Entity * bbCreateSprite( Entity *p ){
|
Entity * bbCreateSprite( Entity *p ){
|
||||||
debugParent(p);
|
debugParent(p);
|
||||||
Sprite *s=d_new Sprite();
|
Sprite *s=new Sprite();
|
||||||
s->setFX( gxScene::FX_FULLBRIGHT );
|
s->setFX( gxScene::FX_FULLBRIGHT );
|
||||||
return insertEntity( s,p );
|
return insertEntity( s,p );
|
||||||
}
|
}
|
||||||
@@ -1114,7 +1114,7 @@ Entity * bbLoadSprite( BBStr *file,int flags,Entity *p ){
|
|||||||
debugParent(p);
|
debugParent(p);
|
||||||
Texture t( *file,flags );
|
Texture t( *file,flags );
|
||||||
delete file;if( !t.getCanvas(0) ) return 0;
|
delete file;if( !t.getCanvas(0) ) return 0;
|
||||||
Sprite *s=d_new Sprite();
|
Sprite *s=new Sprite();
|
||||||
s->setTexture( 0,t,0 );
|
s->setTexture( 0,t,0 );
|
||||||
s->setFX( gxScene::FX_FULLBRIGHT );
|
s->setFX( gxScene::FX_FULLBRIGHT );
|
||||||
|
|
||||||
@@ -1150,7 +1150,7 @@ void bbSpriteViewMode( Sprite *s,int mode ){
|
|||||||
/////////////////////
|
/////////////////////
|
||||||
Entity * bbCreateMirror( Entity *p ){
|
Entity * bbCreateMirror( Entity *p ){
|
||||||
debugParent(p);
|
debugParent(p);
|
||||||
Mirror *t=d_new Mirror();
|
Mirror *t=new Mirror();
|
||||||
return insertEntity( t,p );
|
return insertEntity( t,p );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1162,7 +1162,7 @@ Entity * bbCreatePlane( int segs,Entity *p ){
|
|||||||
debugParent(p);
|
debugParent(p);
|
||||||
if( segs<1 || segs>20 ) ThrowRuntimeException( "Illegal number of segments" );
|
if( segs<1 || segs>20 ) ThrowRuntimeException( "Illegal number of segments" );
|
||||||
}
|
}
|
||||||
PlaneModel *t=d_new PlaneModel( segs );
|
PlaneModel *t=new PlaneModel( segs );
|
||||||
return insertEntity( t,p );
|
return insertEntity( t,p );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1171,7 +1171,7 @@ Entity * bbCreatePlane( int segs,Entity *p ){
|
|||||||
//////////////////
|
//////////////////
|
||||||
Entity * bbLoadMD2( BBStr *file,Entity *p ){
|
Entity * bbLoadMD2( BBStr *file,Entity *p ){
|
||||||
debugParent(p);
|
debugParent(p);
|
||||||
MD2Model *t=d_new MD2Model( *file );delete file;
|
MD2Model *t=new MD2Model( *file );delete file;
|
||||||
if( !t->getValid() ){ delete t;return 0; }
|
if( !t->getValid() ){ delete t;return 0; }
|
||||||
return insertEntity( t,p );
|
return insertEntity( t,p );
|
||||||
}
|
}
|
||||||
@@ -1202,7 +1202,7 @@ int bbMD2Animating( MD2Model *m ){
|
|||||||
Entity * bbLoadBSP( BBStr *file,float gam,Entity *p ){
|
Entity * bbLoadBSP( BBStr *file,float gam,Entity *p ){
|
||||||
debugParent(p);
|
debugParent(p);
|
||||||
CachedTexture::setPath( filenamepath( *file ) );
|
CachedTexture::setPath( filenamepath( *file ) );
|
||||||
Q3BSPModel *t=d_new Q3BSPModel( *file,gam );delete file;
|
Q3BSPModel *t=new Q3BSPModel( *file,gam );delete file;
|
||||||
CachedTexture::setPath( "" );
|
CachedTexture::setPath( "" );
|
||||||
|
|
||||||
if( !t->isValid() ){ delete t;return 0; }
|
if( !t->isValid() ){ delete t;return 0; }
|
||||||
@@ -1246,7 +1246,7 @@ Entity * bbCreateTerrain( int n,Entity *p ){
|
|||||||
int shift=0;
|
int shift=0;
|
||||||
while( (1<<shift)<n ) ++shift;
|
while( (1<<shift)<n ) ++shift;
|
||||||
if( (1<<shift)!=n ) ThrowRuntimeException( "Illegal terrain size" );
|
if( (1<<shift)!=n ) ThrowRuntimeException( "Illegal terrain size" );
|
||||||
Terrain *t=d_new Terrain( shift );
|
Terrain *t=new Terrain( shift );
|
||||||
return insertEntity( t,p );
|
return insertEntity( t,p );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1259,7 +1259,7 @@ Entity * bbLoadTerrain( BBStr *file,Entity *p ){
|
|||||||
int shift=0;
|
int shift=0;
|
||||||
while( (1<<shift)<w ) ++shift;
|
while( (1<<shift)<w ) ++shift;
|
||||||
if( (1<<shift)!=w ) ThrowRuntimeException( "Illegal terrain size" );
|
if( (1<<shift)!=w ) ThrowRuntimeException( "Illegal terrain size" );
|
||||||
Terrain *t=d_new Terrain( shift );
|
Terrain *t=new Terrain( shift );
|
||||||
c->lock();
|
c->lock();
|
||||||
for( int y=0;y<h;++y ){
|
for( int y=0;y<h;++y ){
|
||||||
for( int x=0;x<w;++x ){
|
for( int x=0;x<w;++x ){
|
||||||
@@ -1322,7 +1322,7 @@ Entity * bbCreateListener( Entity *p,float roll,float dopp,float dist ){
|
|||||||
debugParent(p);
|
debugParent(p);
|
||||||
if( listener ) ThrowRuntimeException( "Listener already created" );
|
if( listener ) ThrowRuntimeException( "Listener already created" );
|
||||||
}
|
}
|
||||||
listener=d_new Listener( roll,dopp,dist );
|
listener=new Listener( roll,dopp,dist );
|
||||||
return insertEntity( listener,p );
|
return insertEntity( listener,p );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1478,7 +1478,7 @@ int bbAddAnimSeq( Object *o,int length ){
|
|||||||
if( anim ){
|
if( anim ){
|
||||||
anim->addSeq( length );
|
anim->addSeq( length );
|
||||||
}else{
|
}else{
|
||||||
anim=d_new Animator( o,length );
|
anim=new Animator( o,length );
|
||||||
o->setAnimator( anim );
|
o->setAnimator( anim );
|
||||||
}
|
}
|
||||||
return anim->numSeqs()-1;
|
return anim->numSeqs()-1;
|
||||||
@@ -1886,7 +1886,7 @@ void bbNameEntity( Entity *e,BBStr *t ){
|
|||||||
|
|
||||||
BBStr * bbEntityName( Entity *e ){
|
BBStr * bbEntityName( Entity *e ){
|
||||||
debugEntity(e);
|
debugEntity(e);
|
||||||
return d_new BBStr( e->getName() );
|
return new BBStr( e->getName() );
|
||||||
}
|
}
|
||||||
|
|
||||||
BBStr *bbEntityClass( Entity *e ){
|
BBStr *bbEntityClass( Entity *e ){
|
||||||
@@ -1928,7 +1928,7 @@ int bbActiveTextures(){
|
|||||||
void blitz3d_open(){
|
void blitz3d_open(){
|
||||||
gx_scene=gx_graphics->createScene( 0 );
|
gx_scene=gx_graphics->createScene( 0 );
|
||||||
if( !gx_scene ) ThrowRuntimeException( "Unable to create 3D Scene" );
|
if( !gx_scene ) ThrowRuntimeException( "Unable to create 3D Scene" );
|
||||||
world=d_new World();
|
world=new World();
|
||||||
projected=Vector();
|
projected=Vector();
|
||||||
picked.collision=Collision();
|
picked.collision=Collision();
|
||||||
picked.with=0;picked.coords=Vector();
|
picked.with=0;picked.coords=Vector();
|
||||||
|
|||||||
@@ -43,9 +43,9 @@ static inline void debugDir( gxDir *d ){
|
|||||||
|
|
||||||
static bbFile *open( BBStr *f,int n ){
|
static bbFile *open( BBStr *f,int n ){
|
||||||
string t=*f;
|
string t=*f;
|
||||||
filebuf *buf=d_new filebuf();
|
filebuf *buf=new filebuf();
|
||||||
if( buf->open( t.c_str(),n|ios_base::binary ) ){
|
if( buf->open( t.c_str(),n|ios_base::binary ) ){
|
||||||
bbFile *f=d_new bbFile( buf );
|
bbFile *f=new bbFile( buf );
|
||||||
file_set.insert( f );
|
file_set.insert( f );
|
||||||
return f;
|
return f;
|
||||||
}
|
}
|
||||||
@@ -90,11 +90,11 @@ void bbCloseDir( gxDir *d ){
|
|||||||
|
|
||||||
BBStr *bbNextFile( gxDir *d ){
|
BBStr *bbNextFile( gxDir *d ){
|
||||||
debugDir( d );
|
debugDir( d );
|
||||||
return d_new BBStr( d->getNextFile() );
|
return new BBStr( d->getNextFile() );
|
||||||
}
|
}
|
||||||
|
|
||||||
BBStr *bbCurrentDir(){
|
BBStr *bbCurrentDir(){
|
||||||
return d_new BBStr( gx_filesys->getCurrentDir() );
|
return new BBStr( gx_filesys->getCurrentDir() );
|
||||||
}
|
}
|
||||||
|
|
||||||
void bbChangeDir( BBStr *d ){
|
void bbChangeDir( BBStr *d ){
|
||||||
|
|||||||
+11
-11
@@ -199,7 +199,7 @@ static bool saveCanvas(gxCanvas *c, const string &f) {
|
|||||||
out.write((char*)&bf, sizeof(bf));
|
out.write((char*)&bf, sizeof(bf));
|
||||||
out.write((char*)&bi, sizeof(bi));
|
out.write((char*)&bi, sizeof(bi));
|
||||||
|
|
||||||
unsigned char *temp = d_new unsigned char[tempsize];
|
unsigned char *temp = new unsigned char[tempsize];
|
||||||
memset(temp, 0, tempsize);
|
memset(temp, 0, tempsize);
|
||||||
|
|
||||||
c->lock();
|
c->lock();
|
||||||
@@ -228,7 +228,7 @@ BBStr * bbGfxDriverName(int n) {
|
|||||||
debugDriver(n);
|
debugDriver(n);
|
||||||
string t; int caps;
|
string t; int caps;
|
||||||
gx_runtime->graphicsDriverInfo(n - 1, &t, &caps);
|
gx_runtime->graphicsDriverInfo(n - 1, &t, &caps);
|
||||||
return d_new BBStr(t);
|
return new BBStr(t);
|
||||||
}
|
}
|
||||||
|
|
||||||
void bbSetGfxDriver(int n) {
|
void bbSetGfxDriver(int n) {
|
||||||
@@ -696,7 +696,7 @@ bbImage *bbLoadImage(BBStr *s) {
|
|||||||
if (auto_midhandle) c->setHandle(c->getWidth() / 2, c->getHeight() / 2);
|
if (auto_midhandle) c->setHandle(c->getWidth() / 2, c->getHeight() / 2);
|
||||||
vector<gxCanvas*> frames;
|
vector<gxCanvas*> frames;
|
||||||
frames.push_back(c);
|
frames.push_back(c);
|
||||||
bbImage *i = d_new bbImage(frames);
|
bbImage *i = new bbImage(frames);
|
||||||
image_set.insert(i);
|
image_set.insert(i);
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
@@ -736,7 +736,7 @@ bbImage *bbLoadAnimImage(BBStr *s, int w, int h, int first, int cnt) {
|
|||||||
src_x += w; if (src_x + w > pic->getWidth()) { src_x = 0; src_y += h; }
|
src_x += w; if (src_x + w > pic->getWidth()) { src_x = 0; src_y += h; }
|
||||||
}
|
}
|
||||||
gx_graphics->freeCanvas(pic);
|
gx_graphics->freeCanvas(pic);
|
||||||
bbImage *i = d_new bbImage(frames);
|
bbImage *i = new bbImage(frames);
|
||||||
image_set.insert(i);
|
image_set.insert(i);
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
@@ -762,7 +762,7 @@ bbImage *bbCopyImage(bbImage *i) {
|
|||||||
c->setMask(t->getMask());
|
c->setMask(t->getMask());
|
||||||
frames.push_back(c);
|
frames.push_back(c);
|
||||||
}
|
}
|
||||||
bbImage *t = d_new bbImage(frames);
|
bbImage *t = new bbImage(frames);
|
||||||
image_set.insert(t);
|
image_set.insert(t);
|
||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
@@ -779,7 +779,7 @@ bbImage *bbCreateImage(int w, int h, int n) {
|
|||||||
if (auto_midhandle) c->setHandle(c->getWidth() / 2, c->getHeight() / 2);
|
if (auto_midhandle) c->setHandle(c->getWidth() / 2, c->getHeight() / 2);
|
||||||
frames.push_back(c);
|
frames.push_back(c);
|
||||||
}
|
}
|
||||||
bbImage *i = d_new bbImage(frames);
|
bbImage *i = new bbImage(frames);
|
||||||
image_set.insert(i);
|
image_set.insert(i);
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
@@ -1067,7 +1067,7 @@ BBStr *bbInput(BBStr *prompt) {
|
|||||||
p_canvas = gx_graphics->createCanvas(c->getWidth(), curr_font->getHeight() * 2, 0);
|
p_canvas = gx_graphics->createCanvas(c->getWidth(), curr_font->getHeight() * 2, 0);
|
||||||
if (!p_canvas) {
|
if (!p_canvas) {
|
||||||
endPrinting(c);
|
endPrinting(c);
|
||||||
return d_new BBStr();
|
return new BBStr();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//draw prompt
|
//draw prompt
|
||||||
@@ -1177,7 +1177,7 @@ BBStr *bbInput(BBStr *prompt) {
|
|||||||
curs_x = 0;
|
curs_x = 0;
|
||||||
curs_y += curr_font->getHeight();
|
curs_y += curr_font->getHeight();
|
||||||
endPrinting(c);
|
endPrinting(c);
|
||||||
return d_new BBStr(str);
|
return new BBStr(str);
|
||||||
}
|
}
|
||||||
|
|
||||||
void bbLocate(int x, int y) {
|
void bbLocate(int x, int y) {
|
||||||
@@ -1360,9 +1360,9 @@ void graphics_link(void(*rtSym)(const char *sym, void *pc)) {
|
|||||||
|
|
||||||
rtSym("ShowPointer", bbShowPointer);
|
rtSym("ShowPointer", bbShowPointer);
|
||||||
rtSym("HidePointer", bbHidePointer);
|
rtSym("HidePointer", bbHidePointer);
|
||||||
}
|
}
|
||||||
|
|
||||||
// NVidia Optimus
|
// NVidia Optimus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
_declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001;
|
_declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001;
|
||||||
}
|
}
|
||||||
@@ -40,17 +40,17 @@ int bbMilliSecs() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
BBStr * bbCommandLine() {
|
BBStr * bbCommandLine() {
|
||||||
return d_new BBStr(gx_runtime->commandLine());
|
return new BBStr(gx_runtime->commandLine());
|
||||||
}
|
}
|
||||||
|
|
||||||
BBStr * bbSystemProperty(BBStr *p) {
|
BBStr * bbSystemProperty(BBStr *p) {
|
||||||
string t = gx_runtime->systemProperty(*p);
|
string t = gx_runtime->systemProperty(*p);
|
||||||
delete p; return d_new BBStr(t);
|
delete p; return new BBStr(t);
|
||||||
}
|
}
|
||||||
|
|
||||||
BBStr * bbGetEnv(BBStr *env_var) {
|
BBStr * bbGetEnv(BBStr *env_var) {
|
||||||
char *p = getenv(env_var->c_str());
|
char *p = getenv(env_var->c_str());
|
||||||
BBStr *val = d_new BBStr(p ? p : "");
|
BBStr *val = new BBStr(p ? p : "");
|
||||||
delete env_var;
|
delete env_var;
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -262,7 +262,7 @@ TCPStream *TCPServer::accept() {
|
|||||||
if (n != 1) { e = -1; return 0; }
|
if (n != 1) { e = -1; return 0; }
|
||||||
SOCKET t = ::accept(sock, 0, 0);
|
SOCKET t = ::accept(sock, 0, 0);
|
||||||
if (t == INVALID_SOCKET) { e = -1; return 0; }
|
if (t == INVALID_SOCKET) { e = -1; return 0; }
|
||||||
TCPStream *s = d_new TCPStream(t, this);
|
TCPStream *s = new TCPStream(t, this);
|
||||||
accepted_set.insert(s);
|
accepted_set.insert(s);
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
@@ -315,7 +315,7 @@ UDPStream *bbCreateUDPStream(int port) {
|
|||||||
if (s != INVALID_SOCKET) {
|
if (s != INVALID_SOCKET) {
|
||||||
sockaddr_in addr = { AF_INET,htons(port) };
|
sockaddr_in addr = { AF_INET,htons(port) };
|
||||||
if (!::bind(s, (sockaddr*)&addr, sizeof(addr))) {
|
if (!::bind(s, (sockaddr*)&addr, sizeof(addr))) {
|
||||||
UDPStream *p = d_new UDPStream(s);
|
UDPStream *p = new UDPStream(s);
|
||||||
udp_set.insert(p);
|
udp_set.insert(p);
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
@@ -365,7 +365,7 @@ void bbUDPTimeouts(int rt) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
BBStr *bbDottedIP(int ip) {
|
BBStr *bbDottedIP(int ip) {
|
||||||
return d_new BBStr(
|
return new BBStr(
|
||||||
itoa((ip >> 24) & 255) + "." + itoa((ip >> 16) & 255) + "." +
|
itoa((ip >> 24) & 255) + "." + itoa((ip >> 16) & 255) + "." +
|
||||||
itoa((ip >> 8) & 255) + "." + itoa(ip & 255));
|
itoa((ip >> 8) & 255) + "." + itoa(ip & 255));
|
||||||
}
|
}
|
||||||
@@ -401,7 +401,7 @@ TCPStream *bbOpenTCPStream(BBStr *server, int port, int local_port) {
|
|||||||
sockaddr_in addr = { AF_INET,htons(port) };
|
sockaddr_in addr = { AF_INET,htons(port) };
|
||||||
addr.sin_addr.S_un.S_addr = ip;
|
addr.sin_addr.S_un.S_addr = ip;
|
||||||
if (!::connect(s, (sockaddr*)&addr, sizeof(addr))) {
|
if (!::connect(s, (sockaddr*)&addr, sizeof(addr))) {
|
||||||
TCPStream *p = d_new TCPStream(s, 0);
|
TCPStream *p = new TCPStream(s, 0);
|
||||||
tcp_set.insert(p);
|
tcp_set.insert(p);
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
@@ -422,7 +422,7 @@ TCPServer * bbCreateTCPServer(int port) {
|
|||||||
sockaddr_in addr = { AF_INET,htons(port) };
|
sockaddr_in addr = { AF_INET,htons(port) };
|
||||||
if (!::bind(s, (sockaddr*)&addr, sizeof(addr))) {
|
if (!::bind(s, (sockaddr*)&addr, sizeof(addr))) {
|
||||||
if (!::listen(s, SOMAXCONN)) {
|
if (!::listen(s, SOMAXCONN)) {
|
||||||
TCPServer *p = d_new TCPServer(s);
|
TCPServer *p = new TCPServer(s);
|
||||||
server_set.insert(p);
|
server_set.insert(p);
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -58,9 +58,9 @@ float bbReadFloat( bbStream *s ){
|
|||||||
BBStr *bbReadString( bbStream *s ){
|
BBStr *bbReadString( bbStream *s ){
|
||||||
if( debug ) debugStream( s );
|
if( debug ) debugStream( s );
|
||||||
int len;
|
int len;
|
||||||
BBStr *str=d_new BBStr();
|
BBStr *str=new BBStr();
|
||||||
if( s->read( (char*)&len,4 ) ){
|
if( s->read( (char*)&len,4 ) ){
|
||||||
char *buff=d_new char[len];
|
char *buff=new char[len];
|
||||||
if( s->read( buff,len ) ){
|
if( s->read( buff,len ) ){
|
||||||
*str=string( buff,len );
|
*str=string( buff,len );
|
||||||
}
|
}
|
||||||
@@ -72,7 +72,7 @@ BBStr *bbReadString( bbStream *s ){
|
|||||||
BBStr *bbReadLine( bbStream *s ){
|
BBStr *bbReadLine( bbStream *s ){
|
||||||
if( debug ) debugStream( s );
|
if( debug ) debugStream( s );
|
||||||
unsigned char c;
|
unsigned char c;
|
||||||
BBStr *str=d_new BBStr();
|
BBStr *str=new BBStr();
|
||||||
for(;;){
|
for(;;){
|
||||||
if( s->read( (char*)&c,1 )!=1 ) break;
|
if( s->read( (char*)&c,1 )!=1 ) break;
|
||||||
if( c=='\n' ) break;
|
if( c=='\n' ) break;
|
||||||
@@ -121,7 +121,7 @@ void bbCopyStream( bbStream *s,bbStream *d,int buff_size ){
|
|||||||
debugStream( s );debugStream( d );
|
debugStream( s );debugStream( d );
|
||||||
if( buff_size<1 || buff_size>1024*1024 ) ThrowRuntimeException( "Illegal buffer size" );
|
if( buff_size<1 || buff_size>1024*1024 ) ThrowRuntimeException( "Illegal buffer size" );
|
||||||
}
|
}
|
||||||
char *buff=d_new char[buff_size];
|
char *buff=new char[buff_size];
|
||||||
while( s->eof()==0 && d->eof()==0 ){
|
while( s->eof()==0 && d->eof()==0 ){
|
||||||
int n=s->read( buff,buff_size );
|
int n=s->read( buff,buff_size );
|
||||||
d->write( buff,n );
|
d->write( buff,n );
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
#define CHKOFF(x) if( (x)<=0 ) ThrowRuntimeException( "parameter must be greater than 0" );
|
#define CHKOFF(x) if( (x)<=0 ) ThrowRuntimeException( "parameter must be greater than 0" );
|
||||||
|
|
||||||
BBStr *bbString( BBStr *s,int n ){
|
BBStr *bbString( BBStr *s,int n ){
|
||||||
BBStr *t=d_new BBStr();
|
BBStr *t=new BBStr();
|
||||||
while( n-->0 ) *t+=*s;
|
while( n-->0 ) *t+=*s;
|
||||||
delete s;return t;
|
delete s;return t;
|
||||||
}
|
}
|
||||||
@@ -83,7 +83,7 @@ BBStr *bbRSet( BBStr *s,int n ){
|
|||||||
}
|
}
|
||||||
|
|
||||||
BBStr *bbChr( int n ){
|
BBStr *bbChr( int n ){
|
||||||
BBStr *t=d_new BBStr();
|
BBStr *t=new BBStr();
|
||||||
*t+=(char)n;return t;
|
*t+=(char)n;return t;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -94,7 +94,7 @@ BBStr *bbHex( int n ){
|
|||||||
buff[k]=t>'9' ? t+='A'-'9'-1 : t;
|
buff[k]=t>'9' ? t+='A'-'9'-1 : t;
|
||||||
}
|
}
|
||||||
buff[8]=0;
|
buff[8]=0;
|
||||||
return d_new BBStr( buff );
|
return new BBStr( buff );
|
||||||
}
|
}
|
||||||
|
|
||||||
BBStr *bbBin( int n ){
|
BBStr *bbBin( int n ){
|
||||||
@@ -103,7 +103,7 @@ BBStr *bbBin( int n ){
|
|||||||
buff[k]=n&1 ? '1' : '0';
|
buff[k]=n&1 ? '1' : '0';
|
||||||
}
|
}
|
||||||
buff[32]=0;
|
buff[32]=0;
|
||||||
return d_new BBStr( buff );
|
return new BBStr( buff );
|
||||||
}
|
}
|
||||||
|
|
||||||
int bbAsc( BBStr *s ){
|
int bbAsc( BBStr *s ){
|
||||||
@@ -121,7 +121,7 @@ BBStr *bbCurrentDate(){
|
|||||||
time( &t );
|
time( &t );
|
||||||
char buff[256];
|
char buff[256];
|
||||||
strftime( buff,256,"%d %b %Y",localtime( &t ) );
|
strftime( buff,256,"%d %b %Y",localtime( &t ) );
|
||||||
return d_new BBStr( buff );
|
return new BBStr( buff );
|
||||||
}
|
}
|
||||||
|
|
||||||
BBStr *bbCurrentTime(){
|
BBStr *bbCurrentTime(){
|
||||||
@@ -129,7 +129,7 @@ BBStr *bbCurrentTime(){
|
|||||||
time( &t );
|
time( &t );
|
||||||
char buff[256];
|
char buff[256];
|
||||||
strftime( buff,256,"%H:%M:%S",localtime( &t ) );
|
strftime( buff,256,"%H:%M:%S",localtime( &t ) );
|
||||||
return d_new BBStr( buff );
|
return new BBStr( buff );
|
||||||
}
|
}
|
||||||
|
|
||||||
bool string_create(){
|
bool string_create(){
|
||||||
|
|||||||
+10
-10
@@ -76,7 +76,7 @@
|
|||||||
//
|
//
|
||||||
//static BOOL FAR PASCAL enumPlayer( DPID id,DWORD type,LPCDPNAME name,DWORD flags,LPVOID context ){
|
//static BOOL FAR PASCAL enumPlayer( DPID id,DWORD type,LPCDPNAME name,DWORD flags,LPVOID context ){
|
||||||
// Player *p=findPlayer( id );if( p ) return TRUE;
|
// Player *p=findPlayer( id );if( p ) return TRUE;
|
||||||
// p=d_new Player( id,string( name->lpszShortNameA ),true );
|
// p=new Player( id,string( name->lpszShortNameA ),true );
|
||||||
// return TRUE;
|
// return TRUE;
|
||||||
//}
|
//}
|
||||||
//
|
//
|
||||||
@@ -103,8 +103,8 @@
|
|||||||
//bool multiplay_create(){
|
//bool multiplay_create(){
|
||||||
//
|
//
|
||||||
// recv_buff_sz=send_buff_sz=1024;
|
// recv_buff_sz=send_buff_sz=1024;
|
||||||
// recv_buff=d_new char[recv_buff_sz];
|
// recv_buff=new char[recv_buff_sz];
|
||||||
// send_buff=d_new char[send_buff_sz];
|
// send_buff=new char[send_buff_sz];
|
||||||
//
|
//
|
||||||
// multiplay_setup_create();
|
// multiplay_setup_create();
|
||||||
//
|
//
|
||||||
@@ -176,7 +176,7 @@
|
|||||||
//
|
//
|
||||||
// if( dirPlay->CreatePlayer( &id,&name,0,0,0,0 )<0 ) return 0;
|
// if( dirPlay->CreatePlayer( &id,&name,0,0,0,0 )<0 ) return 0;
|
||||||
//
|
//
|
||||||
// Player *p=d_new Player( id,t,false );
|
// Player *p=new Player( id,t,false );
|
||||||
//
|
//
|
||||||
// if( players.size()==1 ){
|
// if( players.size()==1 ){
|
||||||
// if( dirPlay->EnumPlayers( 0,enumPlayer,0,0 )<0 ){
|
// if( dirPlay->EnumPlayers( 0,enumPlayer,0,0 )<0 ){
|
||||||
@@ -198,9 +198,9 @@
|
|||||||
//}
|
//}
|
||||||
//
|
//
|
||||||
//BBStr *bbNetPlayerName( DPID player ){
|
//BBStr *bbNetPlayerName( DPID player ){
|
||||||
// if( !player ) return d_new BBStr( "<all>" );
|
// if( !player ) return new BBStr( "<all>" );
|
||||||
// Player *p=findPlayer( player );
|
// Player *p=findPlayer( player );
|
||||||
// return d_new BBStr( p ? p->name : "<unknown>" );
|
// return new BBStr( p ? p->name : "<unknown>" );
|
||||||
//}
|
//}
|
||||||
//
|
//
|
||||||
//int bbNetPlayerLocal( DPID player ){
|
//int bbNetPlayerLocal( DPID player ){
|
||||||
@@ -230,7 +230,7 @@
|
|||||||
//
|
//
|
||||||
// if( n==DPERR_BUFFERTOOSMALL ){
|
// if( n==DPERR_BUFFERTOOSMALL ){
|
||||||
// sz=recv_buff_sz=sz/2+sz;
|
// sz=recv_buff_sz=sz/2+sz;
|
||||||
// delete[] recv_buff;recv_buff=d_new char[recv_buff_sz];
|
// delete[] recv_buff;recv_buff=new char[recv_buff_sz];
|
||||||
// n=dirPlay->Receive( &from,&to,0,recv_buff,&sz );
|
// n=dirPlay->Receive( &from,&to,0,recv_buff,&sz );
|
||||||
// }
|
// }
|
||||||
//
|
//
|
||||||
@@ -241,7 +241,7 @@
|
|||||||
// case DPSYS_CREATEPLAYERORGROUP:
|
// case DPSYS_CREATEPLAYERORGROUP:
|
||||||
// if( DPMSG_CREATEPLAYERORGROUP *msg=(DPMSG_CREATEPLAYERORGROUP*)recv_buff ){
|
// if( DPMSG_CREATEPLAYERORGROUP *msg=(DPMSG_CREATEPLAYERORGROUP*)recv_buff ){
|
||||||
// if( findPlayer( from=msg->dpId ) ) continue;
|
// if( findPlayer( from=msg->dpId ) ) continue;
|
||||||
// d_new Player( from,string( msg->dpnName.lpszShortNameA ),true );
|
// new Player( from,string( msg->dpnName.lpszShortNameA ),true );
|
||||||
// continue;
|
// continue;
|
||||||
// }
|
// }
|
||||||
// break;
|
// break;
|
||||||
@@ -277,7 +277,7 @@
|
|||||||
//}
|
//}
|
||||||
//
|
//
|
||||||
//BBStr *bbNetMsgData(){
|
//BBStr *bbNetMsgData(){
|
||||||
// return d_new BBStr( msg_data );
|
// return new BBStr( msg_data );
|
||||||
//}
|
//}
|
||||||
//
|
//
|
||||||
//DPID bbNetMsgFrom(){
|
//DPID bbNetMsgFrom(){
|
||||||
@@ -294,7 +294,7 @@
|
|||||||
// int sz=msg->size()+sizeof(bbMsg);
|
// int sz=msg->size()+sizeof(bbMsg);
|
||||||
// if( sz>send_buff_sz ){
|
// if( sz>send_buff_sz ){
|
||||||
// send_buff_sz=sz/2+sz;
|
// send_buff_sz=sz/2+sz;
|
||||||
// delete send_buff;send_buff=d_new char[send_buff_sz];
|
// delete send_buff;send_buff=new char[send_buff_sz];
|
||||||
// }
|
// }
|
||||||
// bbMsg *m=(bbMsg*)send_buff;
|
// bbMsg *m=(bbMsg*)send_buff;
|
||||||
// m->type=type;m->from=from;m->to=to;
|
// m->type=type;m->from=from;m->to=to;
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
// void *data;
|
// void *data;
|
||||||
//
|
//
|
||||||
// Connection( const GUID &g,const string &n,void *d,int sz ):guid(g),name(n){
|
// Connection( const GUID &g,const string &n,void *d,int sz ):guid(g),name(n){
|
||||||
// data=d_new char[sz];memcpy( data,d,sz );
|
// data=new char[sz];memcpy( data,d,sz );
|
||||||
// }
|
// }
|
||||||
//
|
//
|
||||||
// ~Connection(){
|
// ~Connection(){
|
||||||
@@ -67,7 +67,7 @@
|
|||||||
// int n=dp->InitializeConnection( conn,0 );
|
// int n=dp->InitializeConnection( conn,0 );
|
||||||
// dp->Release();if( n<0 ) return TRUE;
|
// dp->Release();if( n<0 ) return TRUE;
|
||||||
//
|
//
|
||||||
// Connection *c=d_new Connection( *guid,string( strdup( name->lpszShortNameA ) ),conn,size );
|
// Connection *c=new Connection( *guid,string( strdup( name->lpszShortNameA ) ),conn,size );
|
||||||
// connections.push_back( c );
|
// connections.push_back( c );
|
||||||
//
|
//
|
||||||
// return TRUE;
|
// return TRUE;
|
||||||
@@ -76,7 +76,7 @@
|
|||||||
//static BOOL FAR PASCAL enumSession( LPCDPSESSIONDESC2 desc,LPDWORD timeout,DWORD flags,LPVOID lpContext ){
|
//static BOOL FAR PASCAL enumSession( LPCDPSESSIONDESC2 desc,LPDWORD timeout,DWORD flags,LPVOID lpContext ){
|
||||||
//
|
//
|
||||||
// if( !desc ) return FALSE;
|
// if( !desc ) return FALSE;
|
||||||
// sessions.push_back( d_new Session( desc ) );
|
// sessions.push_back( new Session( desc ) );
|
||||||
// return TRUE;
|
// return TRUE;
|
||||||
//}
|
//}
|
||||||
//
|
//
|
||||||
@@ -196,7 +196,7 @@
|
|||||||
// case WM_INITDIALOG:
|
// case WM_INITDIALOG:
|
||||||
// SetForegroundWindow( hwnd );
|
// SetForegroundWindow( hwnd );
|
||||||
// clearConnections();
|
// clearConnections();
|
||||||
// connections.push_back( d_new Connection( GUID_NULL,"<no connection>","",0 ) );
|
// connections.push_back( new Connection( GUID_NULL,"<no connection>","",0 ) );
|
||||||
// if( openDirPlay( hwnd ) ){
|
// if( openDirPlay( hwnd ) ){
|
||||||
// if( dirPlay->EnumConnections( 0,enumConnection,0,0 )<0 ){
|
// if( dirPlay->EnumConnections( 0,enumConnection,0,0 )<0 ){
|
||||||
// MessageBox( hwnd,"Failed to enumerate connections","DirectPlay Error",MB_SETFOREGROUND|MB_TOPMOST|MB_ICONWARNING|MB_OK );
|
// MessageBox( hwnd,"Failed to enumerate connections","DirectPlay Error",MB_SETFOREGROUND|MB_TOPMOST|MB_ICONWARNING|MB_OK );
|
||||||
|
|||||||
+8
-8
@@ -88,7 +88,7 @@ static const char *linkRuntime() {
|
|||||||
for (k = 1; k < s.size(); ++k, end = k) {
|
for (k = 1; k < s.size(); ++k, end = k) {
|
||||||
if (!isalnum(s[k]) && s[k] != '_') break;
|
if (!isalnum(s[k]) && s[k] != '_') break;
|
||||||
}
|
}
|
||||||
DeclSeq *params = d_new DeclSeq();
|
DeclSeq *params = new DeclSeq();
|
||||||
string n = s.substr(start, end - start);
|
string n = s.substr(start, end - start);
|
||||||
while (k < s.size()) {
|
while (k < s.size()) {
|
||||||
Type *t = typeof(s[k++]);
|
Type *t = typeof(s[k++]);
|
||||||
@@ -101,23 +101,23 @@ static const char *linkRuntime() {
|
|||||||
if (s[k] == '\"') {
|
if (s[k] == '\"') {
|
||||||
for (++k; s[k] != '\"'; ++k) {}
|
for (++k; s[k] != '\"'; ++k) {}
|
||||||
string t = s.substr(from + 1, k - from - 1);
|
string t = s.substr(from + 1, k - from - 1);
|
||||||
defType = d_new ConstType(t); ++k;
|
defType = new ConstType(t); ++k;
|
||||||
} else {
|
} else {
|
||||||
if (s[k] == '-') ++k;
|
if (s[k] == '-') ++k;
|
||||||
for (; isdigit(s[k]); ++k) {}
|
for (; isdigit(s[k]); ++k) {}
|
||||||
if (t == Type::int_type) {
|
if (t == Type::int_type) {
|
||||||
int n = atoi(s.substr(from, k - from));
|
int n = atoi(s.substr(from, k - from));
|
||||||
defType = d_new ConstType(n);
|
defType = new ConstType(n);
|
||||||
} else {
|
} else {
|
||||||
float n = atof(s.substr(from, k - from));
|
float n = atof(s.substr(from, k - from));
|
||||||
defType = d_new ConstType(n);
|
defType = new ConstType(n);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Decl *d = params->insertDecl(str, t, DECL_PARAM, defType);
|
Decl *d = params->insertDecl(str, t, DECL_PARAM, defType);
|
||||||
}
|
}
|
||||||
|
|
||||||
FuncType *f = d_new FuncType(t, params, false, cfunc);
|
FuncType *f = new FuncType(t, params, false, cfunc);
|
||||||
n = tolower(n);
|
n = tolower(n);
|
||||||
runtimeEnviron->funcDecls->insertDecl(n, f, DECL_FUNC);
|
runtimeEnviron->funcDecls->insertDecl(n, f, DECL_FUNC);
|
||||||
runtimeModule->addSymbol(("_f" + n).c_str(), pc);
|
runtimeModule->addSymbol(("_f" + n).c_str(), pc);
|
||||||
@@ -169,7 +169,7 @@ static const char *loadUserLib(const string &userlib) {
|
|||||||
if (ty) next(in);
|
if (ty) next(in);
|
||||||
else ty = Type::void_type;
|
else ty = Type::void_type;
|
||||||
|
|
||||||
DeclSeq *params = d_new DeclSeq();
|
DeclSeq *params = new DeclSeq();
|
||||||
|
|
||||||
if (curr != '(') return "expecting '(' after function identifier";
|
if (curr != '(') return "expecting '(' after function identifier";
|
||||||
next(in);
|
next(in);
|
||||||
@@ -200,7 +200,7 @@ static const char *loadUserLib(const string &userlib) {
|
|||||||
|
|
||||||
keyWords.push_back(id);
|
keyWords.push_back(id);
|
||||||
|
|
||||||
FuncType *fn = d_new FuncType(ty, params, true, true);
|
FuncType *fn = new FuncType(ty, params, true, true);
|
||||||
|
|
||||||
runtimeEnviron->funcDecls->insertDecl(lower_id, fn, DECL_FUNC);
|
runtimeEnviron->funcDecls->insertDecl(lower_id, fn, DECL_FUNC);
|
||||||
|
|
||||||
@@ -285,7 +285,7 @@ const char *openLibs() {
|
|||||||
runtimeLib->startup(GetModuleHandle(0));
|
runtimeLib->startup(GetModuleHandle(0));
|
||||||
|
|
||||||
runtimeModule = linkerLib->createModule();
|
runtimeModule = linkerLib->createModule();
|
||||||
runtimeEnviron = d_new Environ("", Type::int_type, 0, 0);
|
runtimeEnviron = new Environ("", Type::int_type, 0, 0);
|
||||||
|
|
||||||
keyWords.clear();
|
keyWords.clear();
|
||||||
userFuncs.clear();
|
userFuncs.clear();
|
||||||
|
|||||||
@@ -197,7 +197,7 @@ struct Animation::Rep{
|
|||||||
};
|
};
|
||||||
|
|
||||||
Animation::Animation():
|
Animation::Animation():
|
||||||
rep( d_new Rep() ){
|
rep( new Rep() ){
|
||||||
}
|
}
|
||||||
|
|
||||||
Animation::Animation( const Animation &t ):
|
Animation::Animation( const Animation &t ):
|
||||||
@@ -206,7 +206,7 @@ rep( t.rep ){
|
|||||||
}
|
}
|
||||||
|
|
||||||
Animation::Animation( const Animation &t,int first,int last ):
|
Animation::Animation( const Animation &t,int first,int last ):
|
||||||
rep( d_new Rep() ){
|
rep( new Rep() ){
|
||||||
Rep::KeyList::const_iterator it;
|
Rep::KeyList::const_iterator it;
|
||||||
for( it=t.rep->pos_anim.begin();it!=t.rep->pos_anim.end();++it ){
|
for( it=t.rep->pos_anim.begin();it!=t.rep->pos_anim.end();++it ){
|
||||||
const Rep::Key &key=*it;
|
const Rep::Key &key=*it;
|
||||||
@@ -239,7 +239,7 @@ Animation &Animation::operator=( const Animation &t ){
|
|||||||
Animation::Rep *Animation::write(){
|
Animation::Rep *Animation::write(){
|
||||||
if( rep->ref_cnt>1 ){
|
if( rep->ref_cnt>1 ){
|
||||||
--rep->ref_cnt;
|
--rep->ref_cnt;
|
||||||
rep=d_new Rep( *rep );
|
rep=new Rep( *rep );
|
||||||
}
|
}
|
||||||
return rep;
|
return rep;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -105,7 +105,7 @@ CachedTexture::Rep *CachedTexture::findRep( const string &f,int flags,int w,int
|
|||||||
}
|
}
|
||||||
|
|
||||||
CachedTexture::CachedTexture( int w,int h,int flags,int cnt ):
|
CachedTexture::CachedTexture( int w,int h,int flags,int cnt ):
|
||||||
rep(d_new Rep(w,h,flags,cnt)){
|
rep(new Rep(w,h,flags,cnt)){
|
||||||
}
|
}
|
||||||
|
|
||||||
CachedTexture::CachedTexture( const string &f_,int flags,int w,int h,int first,int cnt ){
|
CachedTexture::CachedTexture( const string &f_,int flags,int w,int h,int first,int cnt ){
|
||||||
@@ -114,7 +114,7 @@ CachedTexture::CachedTexture( const string &f_,int flags,int w,int h,int first,i
|
|||||||
if( path.size() ){
|
if( path.size() ){
|
||||||
string t=path+tolower( filenamefile( f ) );
|
string t=path+tolower( filenamefile( f ) );
|
||||||
if( rep=findRep( t,flags,w,h,first,cnt ) ) return;
|
if( rep=findRep( t,flags,w,h,first,cnt ) ) return;
|
||||||
rep=d_new Rep( t,flags,w,h,first,cnt );
|
rep=new Rep( t,flags,w,h,first,cnt );
|
||||||
if( rep->frames.size() ){
|
if( rep->frames.size() ){
|
||||||
rep_set.insert( rep );
|
rep_set.insert( rep );
|
||||||
return;
|
return;
|
||||||
@@ -123,7 +123,7 @@ CachedTexture::CachedTexture( const string &f_,int flags,int w,int h,int first,i
|
|||||||
}
|
}
|
||||||
string t=tolower( fullfilename( f ) );
|
string t=tolower( fullfilename( f ) );
|
||||||
if( rep=findRep( t,flags,w,h,first,cnt ) ) return;
|
if( rep=findRep( t,flags,w,h,first,cnt ) ) return;
|
||||||
rep=d_new Rep( t,flags,w,h,first,cnt );
|
rep=new Rep( t,flags,w,h,first,cnt );
|
||||||
rep_set.insert( rep );
|
rep_set.insert( rep );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,8 +14,6 @@ static float PI = 3.14159265359f; //180 degrees
|
|||||||
static float TWOPI = PI*2.0f; //360 degrees
|
static float TWOPI = PI*2.0f; //360 degrees
|
||||||
static float HALFPI = PI*.5f; //90 degrees
|
static float HALFPI = PI*.5f; //90 degrees
|
||||||
static float QUARTERPI = PI*.25f; //45 degrees
|
static float QUARTERPI = PI*.25f; //45 degrees
|
||||||
//static float FLT_EPSILON=.000001f; //small value
|
|
||||||
//static float INFINITY=10000000.0f; //big value
|
|
||||||
|
|
||||||
class Vector {
|
class Vector {
|
||||||
public:
|
public:
|
||||||
|
|||||||
+1
-1
@@ -11,7 +11,7 @@ public:
|
|||||||
~Listener();
|
~Listener();
|
||||||
|
|
||||||
//Entity interface
|
//Entity interface
|
||||||
Entity *clone(){ return d_new Listener( *this ); }
|
Entity *clone(){ return new Listener( *this ); }
|
||||||
Listener *getListener(){ return this; }
|
Listener *getListener(){ return this; }
|
||||||
|
|
||||||
//Listener interface
|
//Listener interface
|
||||||
|
|||||||
@@ -244,7 +244,7 @@ static void parseObject( MeshModel *root ){
|
|||||||
while( int id=nextChunk() ){
|
while( int id=nextChunk() ){
|
||||||
switch( id ){
|
switch( id ){
|
||||||
case CHUNK_TRIMESH:
|
case CHUNK_TRIMESH:
|
||||||
mesh=d_new MeshModel();
|
mesh=new MeshModel();
|
||||||
mesh->setName( name );
|
mesh->setName( name );
|
||||||
mesh->setParent( root );
|
mesh->setParent( root );
|
||||||
name_map[name]=mesh;
|
name_map[name]=mesh;
|
||||||
@@ -419,7 +419,7 @@ static void parseMeshInfo( MeshModel *root,float curr_time ){
|
|||||||
}
|
}
|
||||||
MeshModel *mesh=0;
|
MeshModel *mesh=0;
|
||||||
if( name=="$$$DUMMY" ){
|
if( name=="$$$DUMMY" ){
|
||||||
mesh=d_new MeshModel();
|
mesh=new MeshModel();
|
||||||
mesh->setName( inst );
|
mesh->setName( inst );
|
||||||
mesh->setParent( p );
|
mesh->setParent( p );
|
||||||
}else{
|
}else{
|
||||||
@@ -465,7 +465,7 @@ static void parseKeyFramer( MeshModel *root ){
|
|||||||
}
|
}
|
||||||
|
|
||||||
if( !collapse ){
|
if( !collapse ){
|
||||||
root->setAnimator( d_new Animator( root,anim_len ) );
|
root->setAnimator( new Animator( root,anim_len ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
leaveChunk();
|
leaveChunk();
|
||||||
@@ -479,7 +479,7 @@ static MeshModel *parseFile(){
|
|||||||
chunk_end=(int)in.pubseekoff( 0,ios_base::cur )+len-6;
|
chunk_end=(int)in.pubseekoff( 0,ios_base::cur )+len-6;
|
||||||
|
|
||||||
enterChunk();
|
enterChunk();
|
||||||
MeshModel *root=d_new MeshModel();
|
MeshModel *root=new MeshModel();
|
||||||
while( int id=nextChunk() ){
|
while( int id=nextChunk() ){
|
||||||
switch( id ){
|
switch( id ){
|
||||||
case CHUNK_SCENE:
|
case CHUNK_SCENE:
|
||||||
|
|||||||
@@ -210,7 +210,7 @@ static Object *readBone(){
|
|||||||
t.m.k.z=.1f;
|
t.m.k.z=.1f;
|
||||||
bone->transform( t );
|
bone->transform( t );
|
||||||
#else
|
#else
|
||||||
Pivot *bone=d_new Pivot();
|
Pivot *bone=new Pivot();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bones.push_back( bone );
|
bones.push_back( bone );
|
||||||
@@ -264,7 +264,7 @@ static Object *readObject( Object *parent ){
|
|||||||
switch( readChunk() ){
|
switch( readChunk() ){
|
||||||
case 'MESH':
|
case 'MESH':
|
||||||
MeshLoader::beginMesh();
|
MeshLoader::beginMesh();
|
||||||
obj=mesh=d_new MeshModel();
|
obj=mesh=new MeshModel();
|
||||||
mesh_brush=readInt();
|
mesh_brush=readInt();
|
||||||
mesh_flags=readMesh();
|
mesh_flags=readMesh();
|
||||||
break;
|
break;
|
||||||
@@ -280,14 +280,14 @@ static Object *readObject( Object *parent ){
|
|||||||
readFloat();
|
readFloat();
|
||||||
break;
|
break;
|
||||||
case 'NODE':
|
case 'NODE':
|
||||||
if( !obj ) obj=d_new MeshModel();
|
if( !obj ) obj=new MeshModel();
|
||||||
readObject( obj );
|
readObject( obj );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
exitChunk();
|
exitChunk();
|
||||||
}
|
}
|
||||||
|
|
||||||
if( !obj ) obj=d_new MeshModel();
|
if( !obj ) obj=new MeshModel();
|
||||||
|
|
||||||
obj->setName( name );
|
obj->setName( name );
|
||||||
obj->setLocalPosition( Vector( pos[0],pos[1],pos[2] ) );
|
obj->setLocalPosition( Vector( pos[0],pos[1],pos[2] ) );
|
||||||
@@ -303,11 +303,11 @@ static Object *readObject( Object *parent ){
|
|||||||
|
|
||||||
if( mesh && bones.size() ){
|
if( mesh && bones.size() ){
|
||||||
bones.insert( bones.begin(),mesh );
|
bones.insert( bones.begin(),mesh );
|
||||||
mesh->setAnimator( d_new Animator( bones,anim_len ) );
|
mesh->setAnimator( new Animator( bones,anim_len ) );
|
||||||
mesh->createBones();
|
mesh->createBones();
|
||||||
bones.clear();
|
bones.clear();
|
||||||
}else if( anim_len ){
|
}else if( anim_len ){
|
||||||
obj->setAnimator( d_new Animator( obj,anim_len ) );
|
obj->setAnimator( new Animator( obj,anim_len ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
if( parent ) obj->setParent( parent );
|
if( parent ) obj->setParent( parent );
|
||||||
|
|||||||
@@ -290,7 +290,7 @@ static void parseMesh( IDirectXFileData *fileData,MeshModel *mesh ){
|
|||||||
|
|
||||||
static MeshModel *parseFrame( IDirectXFileData *fileData ){
|
static MeshModel *parseFrame( IDirectXFileData *fileData ){
|
||||||
|
|
||||||
MeshModel *e=d_new MeshModel();
|
MeshModel *e=new MeshModel();
|
||||||
|
|
||||||
const GUID *guid;
|
const GUID *guid;
|
||||||
IDirectXFileObject *childObj;
|
IDirectXFileObject *childObj;
|
||||||
@@ -346,7 +346,7 @@ static MeshModel *parseFile( const string &file ){
|
|||||||
}
|
}
|
||||||
|
|
||||||
anim_len=0;
|
anim_len=0;
|
||||||
MeshModel *e=d_new MeshModel();
|
MeshModel *e=new MeshModel();
|
||||||
for( ;enumObj->GetNextDataObject( &fileData )>=0;fileData->Release() ){
|
for( ;enumObj->GetNextDataObject( &fileData )>=0;fileData->Release() ){
|
||||||
if( fileData->GetType( &guid )<0 ) continue;
|
if( fileData->GetType( &guid )<0 ) continue;
|
||||||
|
|
||||||
@@ -361,7 +361,7 @@ static MeshModel *parseFile( const string &file ){
|
|||||||
}
|
}
|
||||||
|
|
||||||
if( !collapse ){
|
if( !collapse ){
|
||||||
e->setAnimator( d_new Animator( e,anim_len ) );
|
e->setAnimator( new Animator( e,anim_len ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
enumObj->Release();
|
enumObj->Release();
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ struct MD2Model::Rep : public MD2Rep{
|
|||||||
};
|
};
|
||||||
|
|
||||||
MD2Model::MD2Model( const string &f ):
|
MD2Model::MD2Model( const string &f ):
|
||||||
rep( d_new Rep( f ) ),
|
rep( new Rep( f ) ),
|
||||||
anim_mode(0),anim_time(0),
|
anim_mode(0),anim_time(0),
|
||||||
render_a(0),render_b(0),render_t(0),trans_verts(0){
|
render_a(0),render_b(0),render_t(0),trans_verts(0){
|
||||||
}
|
}
|
||||||
@@ -40,7 +40,7 @@ void MD2Model::startMD2Anim( int first,int last,int mode,float speed,float trans
|
|||||||
else if( last>=rep->numFrames() ) last=rep->numFrames()-1;
|
else if( last>=rep->numFrames() ) last=rep->numFrames()-1;
|
||||||
|
|
||||||
if( trans>0 ){
|
if( trans>0 ){
|
||||||
if( !trans_verts ) trans_verts=d_new MD2Rep::Vert[rep->numVertices()];
|
if( !trans_verts ) trans_verts=new MD2Rep::Vert[rep->numVertices()];
|
||||||
|
|
||||||
if( anim_mode & 0x8000 ) rep->render( trans_verts,anim_time,trans_time );
|
if( anim_mode & 0x8000 ) rep->render( trans_verts,anim_time,trans_time );
|
||||||
else rep->render( trans_verts,render_a,render_b,render_t );
|
else rep->render( trans_verts,render_a,render_b,render_t );
|
||||||
|
|||||||
+1
-1
@@ -12,7 +12,7 @@ public:
|
|||||||
~MD2Model();
|
~MD2Model();
|
||||||
|
|
||||||
//Entity interface
|
//Entity interface
|
||||||
Entity *clone(){ return d_new MD2Model( *this ); }
|
Entity *clone(){ return new MD2Model( *this ); }
|
||||||
MD2Model *getMD2Model(){ return this; }
|
MD2Model *getMD2Model(){ return this; }
|
||||||
|
|
||||||
//Object interface
|
//Object interface
|
||||||
|
|||||||
@@ -111,7 +111,7 @@ Box MeshCollider::nodeBox( const vector<int> &tris ){
|
|||||||
|
|
||||||
MeshCollider::Node *MeshCollider::createLeaf( const vector<int> &tris ){
|
MeshCollider::Node *MeshCollider::createLeaf( const vector<int> &tris ){
|
||||||
|
|
||||||
Node *c=d_new Node;
|
Node *c=new Node;
|
||||||
c->box=nodeBox( tris );
|
c->box=nodeBox( tris );
|
||||||
c->triangles=tris;
|
c->triangles=tris;
|
||||||
leaves.push_back( c );
|
leaves.push_back( c );
|
||||||
@@ -122,7 +122,7 @@ MeshCollider::Node *MeshCollider::createNode( const vector<int> &tris ){
|
|||||||
|
|
||||||
if( tris.size()<=MAX_COLL_TRIS ) return createLeaf( tris );
|
if( tris.size()<=MAX_COLL_TRIS ) return createLeaf( tris );
|
||||||
|
|
||||||
Node *c=d_new Node;
|
Node *c=new Node;
|
||||||
c->box=nodeBox( tris );
|
c->box=nodeBox( tris );
|
||||||
|
|
||||||
//find longest axis
|
//find longest axis
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ static vector<MLMesh*> mesh_stack;
|
|||||||
|
|
||||||
void MeshLoader::beginMesh(){
|
void MeshLoader::beginMesh(){
|
||||||
mesh_stack.push_back( ml_mesh );
|
mesh_stack.push_back( ml_mesh );
|
||||||
ml_mesh=d_new MLMesh();
|
ml_mesh=new MLMesh();
|
||||||
}
|
}
|
||||||
|
|
||||||
int MeshLoader::numVertices(){
|
int MeshLoader::numVertices(){
|
||||||
@@ -71,7 +71,7 @@ void MeshLoader::addTriangle( int v0,int v1,int v2,const Brush &b ){
|
|||||||
map<Brush,Surf*>::const_iterator it=ml_mesh->brush_map.find( b );
|
map<Brush,Surf*>::const_iterator it=ml_mesh->brush_map.find( b );
|
||||||
if( it!=ml_mesh->brush_map.end() ) surf=it->second;
|
if( it!=ml_mesh->brush_map.end() ) surf=it->second;
|
||||||
else{
|
else{
|
||||||
surf=d_new Surf;
|
surf=new Surf;
|
||||||
ml_mesh->brush_map.insert( make_pair( b,surf ) );
|
ml_mesh->brush_map.insert( make_pair( b,surf ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ struct MeshModel::Rep : public Surface::Monitor{
|
|||||||
}
|
}
|
||||||
|
|
||||||
Surface *createSurface( const Brush &b ){
|
Surface *createSurface( const Brush &b ){
|
||||||
Surface *t=d_new Surface( this );
|
Surface *t=new Surface( this );
|
||||||
surfaces.push_back( t );
|
surfaces.push_back( t );
|
||||||
t->setBrush( b );
|
t->setBrush( b );
|
||||||
return t;
|
return t;
|
||||||
@@ -153,7 +153,7 @@ struct MeshModel::Rep : public Surface::Monitor{
|
|||||||
verts.push_back( q );
|
verts.push_back( q );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
collider=d_new MeshCollider( verts,tris );
|
collider=new MeshCollider( verts,tris );
|
||||||
coll_valid=geom_changes;
|
coll_valid=geom_changes;
|
||||||
}
|
}
|
||||||
return collider;
|
return collider;
|
||||||
@@ -161,7 +161,7 @@ struct MeshModel::Rep : public Surface::Monitor{
|
|||||||
};
|
};
|
||||||
|
|
||||||
MeshModel::MeshModel():
|
MeshModel::MeshModel():
|
||||||
rep( d_new Rep() ),brush_changes(0){
|
rep( new Rep() ),brush_changes(0){
|
||||||
}
|
}
|
||||||
|
|
||||||
MeshModel::MeshModel( const MeshModel &t ):Model( t ),
|
MeshModel::MeshModel( const MeshModel &t ):Model( t ),
|
||||||
|
|||||||
+1
-1
@@ -17,7 +17,7 @@ public:
|
|||||||
|
|
||||||
//Entity interface
|
//Entity interface
|
||||||
virtual MeshModel *getMeshModel(){ return this; }
|
virtual MeshModel *getMeshModel(){ return this; }
|
||||||
virtual Entity *clone(){ return d_new MeshModel( *this ); }
|
virtual Entity *clone(){ return new MeshModel( *this ); }
|
||||||
|
|
||||||
//Object interface
|
//Object interface
|
||||||
virtual bool collide( const Line &line,float radius,Collision *curr_coll,const Transform &t );
|
virtual bool collide( const Line &line,float radius,Collision *curr_coll,const Transform &t );
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ MeshModel *MeshUtil::createCube( const Brush &b ){
|
|||||||
};
|
};
|
||||||
static Box box( Vector(-1,-1,-1),Vector(1,1,1) );
|
static Box box( Vector(-1,-1,-1),Vector(1,1,1) );
|
||||||
|
|
||||||
MeshModel *m=d_new MeshModel();
|
MeshModel *m=new MeshModel();
|
||||||
Surface *s=m->createSurface( b );
|
Surface *s=m->createSurface( b );
|
||||||
Surface::Vertex v;
|
Surface::Vertex v;
|
||||||
Surface::Triangle t;
|
Surface::Triangle t;
|
||||||
@@ -38,7 +38,7 @@ MeshModel *MeshUtil::createSphere( const Brush &b,int segs ){
|
|||||||
|
|
||||||
int h_segs=segs*2,v_segs=segs;
|
int h_segs=segs*2,v_segs=segs;
|
||||||
|
|
||||||
MeshModel *m=d_new MeshModel();
|
MeshModel *m=new MeshModel();
|
||||||
Surface *s=m->createSurface( b );
|
Surface *s=m->createSurface( b );
|
||||||
|
|
||||||
Surface::Vertex v;
|
Surface::Vertex v;
|
||||||
@@ -96,7 +96,7 @@ MeshModel *MeshUtil::createSphere( const Brush &b,int segs ){
|
|||||||
|
|
||||||
MeshModel *MeshUtil::createCylinder( const Brush &b,int segs,bool solid ){
|
MeshModel *MeshUtil::createCylinder( const Brush &b,int segs,bool solid ){
|
||||||
|
|
||||||
MeshModel *m=d_new MeshModel();
|
MeshModel *m=new MeshModel();
|
||||||
Surface::Vertex v;
|
Surface::Vertex v;
|
||||||
Surface::Triangle t;
|
Surface::Triangle t;
|
||||||
|
|
||||||
@@ -154,7 +154,7 @@ MeshModel *MeshUtil::createCylinder( const Brush &b,int segs,bool solid ){
|
|||||||
}
|
}
|
||||||
|
|
||||||
MeshModel *MeshUtil::createCone( const Brush &b,int segs,bool solid ){
|
MeshModel *MeshUtil::createCone( const Brush &b,int segs,bool solid ){
|
||||||
MeshModel *m=d_new MeshModel();
|
MeshModel *m=new MeshModel();
|
||||||
Surface::Vertex v;
|
Surface::Vertex v;
|
||||||
Surface::Triangle t;
|
Surface::Triangle t;
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -11,7 +11,7 @@ public:
|
|||||||
~Mirror();
|
~Mirror();
|
||||||
|
|
||||||
//Entity interface
|
//Entity interface
|
||||||
Entity *clone(){ return d_new Mirror( *this ); }
|
Entity *clone(){ return new Mirror( *this ); }
|
||||||
Mirror *getMirror(){ return this; }
|
Mirror *getMirror(){ return this; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -31,7 +31,7 @@ Object *Object::copy(){
|
|||||||
Object *cpy=e->getObject()->copy();
|
Object *cpy=e->getObject()->copy();
|
||||||
cpy->setParent( last_copy );
|
cpy->setParent( last_copy );
|
||||||
}
|
}
|
||||||
if( animator ) last_copy->setAnimator( d_new Animator( animator ) );
|
if( animator ) last_copy->setAnimator( new Animator( animator ) );
|
||||||
return last_copy;
|
return last_copy;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -26,7 +26,7 @@ public:
|
|||||||
|
|
||||||
//Entity interface
|
//Entity interface
|
||||||
Object *getObject(){ return this; }
|
Object *getObject(){ return this; }
|
||||||
Entity *clone(){ return d_new Object( *this ); }
|
Entity *clone(){ return new Object( *this ); }
|
||||||
|
|
||||||
//deep object copy!
|
//deep object copy!
|
||||||
Object *copy();
|
Object *copy();
|
||||||
|
|||||||
+1
-1
@@ -10,7 +10,7 @@ public:
|
|||||||
Pivot( const Object &t );
|
Pivot( const Object &t );
|
||||||
|
|
||||||
//Entity interface
|
//Entity interface
|
||||||
Entity *clone(){ return d_new Pivot( *this ); }
|
Entity *clone(){ return new Pivot( *this ); }
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -100,7 +100,7 @@ struct PlaneModel::Rep{
|
|||||||
};
|
};
|
||||||
|
|
||||||
PlaneModel::PlaneModel( int sub_divs ):
|
PlaneModel::PlaneModel( int sub_divs ):
|
||||||
rep( d_new Rep(sub_divs) ){
|
rep( new Rep(sub_divs) ){
|
||||||
}
|
}
|
||||||
|
|
||||||
PlaneModel::PlaneModel( const PlaneModel &t ):
|
PlaneModel::PlaneModel( const PlaneModel &t ):
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ public:
|
|||||||
PlaneModel( int sub_divs );
|
PlaneModel( int sub_divs );
|
||||||
PlaneModel( const PlaneModel &t );
|
PlaneModel( const PlaneModel &t );
|
||||||
~PlaneModel();
|
~PlaneModel();
|
||||||
Entity *clone(){ return d_new PlaneModel( *this ); }
|
Entity *clone(){ return new PlaneModel( *this ); }
|
||||||
|
|
||||||
//model interface
|
//model interface
|
||||||
bool render( const RenderContext &rc );
|
bool render( const RenderContext &rc );
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ struct Q3BSPModel::Rep : public Q3BSPRep{
|
|||||||
};
|
};
|
||||||
|
|
||||||
Q3BSPModel::Q3BSPModel( const string &f,float gam ):
|
Q3BSPModel::Q3BSPModel( const string &f,float gam ):
|
||||||
rep( d_new Rep( f,gam ) ){
|
rep( new Rep( f,gam ) ){
|
||||||
}
|
}
|
||||||
|
|
||||||
Q3BSPModel::Q3BSPModel( const Q3BSPModel &t ):Model(t),
|
Q3BSPModel::Q3BSPModel( const Q3BSPModel &t ):Model(t),
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ public:
|
|||||||
~Q3BSPModel();
|
~Q3BSPModel();
|
||||||
|
|
||||||
//Entity interface
|
//Entity interface
|
||||||
Entity *clone(){ return d_new Q3BSPModel( *this ); }
|
Entity *clone(){ return new Q3BSPModel( *this ); }
|
||||||
|
|
||||||
//Object interface
|
//Object interface
|
||||||
virtual bool collide( const Line &line,float radius,Collision *curr_coll,const Transform &t );
|
virtual bool collide( const Line &line,float radius,Collision *curr_coll,const Transform &t );
|
||||||
|
|||||||
@@ -176,7 +176,7 @@ static void debuglog(const string &t) {}
|
|||||||
static Surf *findSurf(q3_face *f) {
|
static Surf *findSurf(q3_face *f) {
|
||||||
FaceMap::const_iterator it = face_map.find(f);
|
FaceMap::const_iterator it = face_map.find(f);
|
||||||
if (it != face_map.end()) return it->second;
|
if (it != face_map.end()) return it->second;
|
||||||
Surf *s = d_new Surf;
|
Surf *s = new Surf;
|
||||||
s->texture = f->texture;
|
s->texture = f->texture;
|
||||||
s->lm_index = f->lm_index;
|
s->lm_index = f->lm_index;
|
||||||
face_map.insert(make_pair(f, s));
|
face_map.insert(make_pair(f, s));
|
||||||
@@ -263,7 +263,7 @@ void Q3BSPRep::createCollider() {
|
|||||||
std::swap(coll_tris[k].verts[1], coll_tris[k].verts[2]);
|
std::swap(coll_tris[k].verts[1], coll_tris[k].verts[2]);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
collider = d_new MeshCollider(coll_verts, coll_tris);
|
collider = new MeshCollider(coll_verts, coll_tris);
|
||||||
p_coll_verts.clear();
|
p_coll_verts.clear();
|
||||||
coll_verts.clear();
|
coll_verts.clear();
|
||||||
coll_tris.clear();
|
coll_tris.clear();
|
||||||
@@ -298,7 +298,7 @@ void Q3BSPRep::createSurfs() {
|
|||||||
}
|
}
|
||||||
mesh->unlock();
|
mesh->unlock();
|
||||||
|
|
||||||
Q3BSPSurf *surf = d_new Q3BSPSurf;
|
Q3BSPSurf *surf = new Q3BSPSurf;
|
||||||
surf->texture = s->texture;
|
surf->texture = s->texture;
|
||||||
surf->lm_index = s->lm_index;
|
surf->lm_index = s->lm_index;
|
||||||
surf->mesh = mesh;
|
surf->mesh = mesh;
|
||||||
@@ -468,7 +468,7 @@ static void meshFace(Q3BSPFace *face, q3_face *q3face, bool draw, bool solid) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static Q3BSPBrush *createBrush(int n) {
|
static Q3BSPBrush *createBrush(int n) {
|
||||||
Q3BSPBrush *brush = d_new Q3BSPBrush;
|
Q3BSPBrush *brush = new Q3BSPBrush;
|
||||||
q3_brush *q3brush = (q3_brush*)header.dir[8].lump + n;
|
q3_brush *q3brush = (q3_brush*)header.dir[8].lump + n;
|
||||||
q3_brushside *q3brushside = (q3_brushside*)header.dir[9].lump + q3brush->brushside;
|
q3_brushside *q3brushside = (q3_brushside*)header.dir[9].lump + q3brush->brushside;
|
||||||
Plane p;
|
Plane p;
|
||||||
@@ -484,7 +484,7 @@ static Q3BSPBrush *createBrush(int n) {
|
|||||||
Q3BSPLeaf *Q3BSPRep::createLeaf(int n) {
|
Q3BSPLeaf *Q3BSPRep::createLeaf(int n) {
|
||||||
q3_leaf *q3leaf = (q3_leaf*)header.dir[4].lump + n;
|
q3_leaf *q3leaf = (q3_leaf*)header.dir[4].lump + n;
|
||||||
|
|
||||||
Q3BSPLeaf *leaf = d_new Q3BSPLeaf;
|
Q3BSPLeaf *leaf = new Q3BSPLeaf;
|
||||||
|
|
||||||
leaf->cluster = q3leaf->cluster;
|
leaf->cluster = q3leaf->cluster;
|
||||||
|
|
||||||
@@ -523,7 +523,7 @@ Q3BSPLeaf *Q3BSPRep::createLeaf(int n) {
|
|||||||
Q3BSPFace *face = 0;
|
Q3BSPFace *face = 0;
|
||||||
if (draw) {
|
if (draw) {
|
||||||
Surf *surf = findSurf(q3face);
|
Surf *surf = findSurf(q3face);
|
||||||
face = d_new Q3BSPFace;
|
face = new Q3BSPFace;
|
||||||
face->t_surf = surf;
|
face->t_surf = surf;
|
||||||
face->vert = surf->verts.size();
|
face->vert = surf->verts.size();
|
||||||
face->tri = surf->tris.size();
|
face->tri = surf->tris.size();
|
||||||
@@ -588,7 +588,7 @@ Q3BSPRep::Q3BSPRep(const string &f, float gam) :root_node(0), vis_sz(0), vis_dat
|
|||||||
for (k = 0; k < 17; ++k) {
|
for (k = 0; k < 17; ++k) {
|
||||||
if (header.dir[k].offset && header.dir[k].length) {
|
if (header.dir[k].offset && header.dir[k].length) {
|
||||||
fseek(buf, header.dir[k].offset, SEEK_SET);
|
fseek(buf, header.dir[k].offset, SEEK_SET);
|
||||||
header.dir[k].lump = d_new char[header.dir[k].length];
|
header.dir[k].lump = new char[header.dir[k].length];
|
||||||
fread(header.dir[k].lump, header.dir[k].length, 1, buf);
|
fread(header.dir[k].lump, header.dir[k].length, 1, buf);
|
||||||
} else {
|
} else {
|
||||||
header.dir[k].lump = 0;
|
header.dir[k].lump = 0;
|
||||||
|
|||||||
+1
-1
@@ -21,7 +21,7 @@ public:
|
|||||||
|
|
||||||
Sprite *getSprite(){ return this; }
|
Sprite *getSprite(){ return this; }
|
||||||
|
|
||||||
Entity *clone(){ return d_new Sprite( *this ); }
|
Entity *clone(){ return new Sprite( *this ); }
|
||||||
|
|
||||||
void capture();
|
void capture();
|
||||||
bool beginRender( float tween );
|
bool beginRender( float tween );
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@
|
|||||||
#include "terrainrep.h"
|
#include "terrainrep.h"
|
||||||
|
|
||||||
Terrain::Terrain( int size_shift ):
|
Terrain::Terrain( int size_shift ):
|
||||||
rep( d_new TerrainRep( size_shift ) ){
|
rep( new TerrainRep( size_shift ) ){
|
||||||
}
|
}
|
||||||
|
|
||||||
Terrain::~Terrain(){
|
Terrain::~Terrain(){
|
||||||
|
|||||||
@@ -139,8 +139,8 @@ TerrainRep::TerrainRep( int n ):
|
|||||||
cell_shift(n),cell_size(1<<n),cell_mask((1<<n)-1),
|
cell_shift(n),cell_size(1<<n),cell_mask((1<<n)-1),
|
||||||
end_tri_id( (1<<n)*(1<<n)*2 ),
|
end_tri_id( (1<<n)*(1<<n)*2 ),
|
||||||
shading(false),mesh(0),detail(0),morph(true){
|
shading(false),mesh(0),detail(0),morph(true){
|
||||||
cells=d_new Cell[cell_size*cell_size];
|
cells=new Cell[cell_size*cell_size];
|
||||||
errors=d_new Error[end_tri_id];
|
errors=new Error[end_tri_id];
|
||||||
setDetail( 2000,false );
|
setDetail( 2000,false );
|
||||||
clear();
|
clear();
|
||||||
}
|
}
|
||||||
@@ -279,7 +279,7 @@ void TerrainRep::split( Tri *t ){
|
|||||||
if( tv>=max_verts ){
|
if( tv>=max_verts ){
|
||||||
max_verts+=max_verts/2+32;
|
max_verts+=max_verts/2+32;
|
||||||
Vert *t=verts;
|
Vert *t=verts;
|
||||||
verts=d_new Vert[max_verts];
|
verts=new Vert[max_verts];
|
||||||
memcpy( verts,t,sizeof(Vert)*tv );
|
memcpy( verts,t,sizeof(Vert)*tv );
|
||||||
next_vert=verts+tv;
|
next_vert=verts+tv;
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-3
@@ -79,19 +79,19 @@ Texture::Texture() :rep(0) {
|
|||||||
Texture::Texture(const string &f, int flags) {
|
Texture::Texture(const string &f, int flags) {
|
||||||
flags = filterFile(f, flags) | gxCanvas::CANVAS_TEXTURE;
|
flags = filterFile(f, flags) | gxCanvas::CANVAS_TEXTURE;
|
||||||
if (flags & gxCanvas::CANVAS_TEX_MASK) flags |= gxCanvas::CANVAS_TEX_RGB | gxCanvas::CANVAS_TEX_ALPHA;
|
if (flags & gxCanvas::CANVAS_TEX_MASK) flags |= gxCanvas::CANVAS_TEX_RGB | gxCanvas::CANVAS_TEX_ALPHA;
|
||||||
rep = d_new Rep(f, flags, 0, 0, 0, 1);
|
rep = new Rep(f, flags, 0, 0, 0, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
Texture::Texture(const string &f, int flags, int w, int h, int first, int cnt) {
|
Texture::Texture(const string &f, int flags, int w, int h, int first, int cnt) {
|
||||||
flags = filterFile(f, flags) | gxCanvas::CANVAS_TEXTURE;
|
flags = filterFile(f, flags) | gxCanvas::CANVAS_TEXTURE;
|
||||||
if (flags & gxCanvas::CANVAS_TEX_MASK) flags |= gxCanvas::CANVAS_TEX_RGB | gxCanvas::CANVAS_TEX_ALPHA;
|
if (flags & gxCanvas::CANVAS_TEX_MASK) flags |= gxCanvas::CANVAS_TEX_RGB | gxCanvas::CANVAS_TEX_ALPHA;
|
||||||
rep = d_new Rep(f, flags, w, h, first, cnt);
|
rep = new Rep(f, flags, w, h, first, cnt);
|
||||||
}
|
}
|
||||||
|
|
||||||
Texture::Texture(int w, int h, int flags, int cnt) {
|
Texture::Texture(int w, int h, int flags, int cnt) {
|
||||||
flags |= gxCanvas::CANVAS_TEXTURE;
|
flags |= gxCanvas::CANVAS_TEXTURE;
|
||||||
if (flags & gxCanvas::CANVAS_TEX_MASK) flags |= gxCanvas::CANVAS_TEX_RGB | gxCanvas::CANVAS_TEX_ALPHA;
|
if (flags & gxCanvas::CANVAS_TEX_MASK) flags |= gxCanvas::CANVAS_TEX_RGB | gxCanvas::CANVAS_TEX_ALPHA;
|
||||||
rep = d_new Rep(w, h, flags, cnt);
|
rep = new Rep(w, h, flags, cnt);
|
||||||
}
|
}
|
||||||
|
|
||||||
Texture::Texture(const Texture &t) :
|
Texture::Texture(const Texture &t) :
|
||||||
|
|||||||
@@ -107,7 +107,7 @@ Tile *Codegen_x86::genCompare( TNode *t,string &func,bool negate ){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return d_new Tile( q,ql ? munchReg( ql ) : 0,qr ? munchReg( qr ) : 0 );
|
return new Tile( q,ql ? munchReg( ql ) : 0,qr ? munchReg( qr ) : 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////
|
////////////////////////////////////////////////
|
||||||
@@ -119,7 +119,7 @@ Tile *Codegen_x86::munchUnary( TNode *t ){
|
|||||||
case IR_NEG:s="\tneg\t%l\n";break;
|
case IR_NEG:s="\tneg\t%l\n";break;
|
||||||
default:return 0;
|
default:return 0;
|
||||||
}
|
}
|
||||||
return d_new Tile( s,munchReg( t->l ) );
|
return new Tile( s,munchReg( t->l ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
Tile *Codegen_x86::munchLogical( TNode *t ){
|
Tile *Codegen_x86::munchLogical( TNode *t ){
|
||||||
@@ -130,7 +130,7 @@ Tile *Codegen_x86::munchLogical( TNode *t ){
|
|||||||
case IR_XOR:s="\txor\t%l,%r\n";break;
|
case IR_XOR:s="\txor\t%l,%r\n";break;
|
||||||
default:return 0;
|
default:return 0;
|
||||||
}
|
}
|
||||||
return d_new Tile( s,munchReg( t->l ),munchReg( t->r ) );
|
return new Tile( s,munchReg( t->l ),munchReg( t->r ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
Tile *Codegen_x86::munchArith( TNode *t ){
|
Tile *Codegen_x86::munchArith( TNode *t ){
|
||||||
@@ -139,10 +139,10 @@ Tile *Codegen_x86::munchArith( TNode *t ){
|
|||||||
int shift;
|
int shift;
|
||||||
if( t->r->op==IR_CONST ){
|
if( t->r->op==IR_CONST ){
|
||||||
if( getShift( t->r->iconst,shift ) ){
|
if( getShift( t->r->iconst,shift ) ){
|
||||||
return d_new Tile( "\tsar\t%l,byte "+itoa(shift)+"\n",munchReg( t->l ) );
|
return new Tile( "\tsar\t%l,byte "+itoa(shift)+"\n",munchReg( t->l ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Tile *q=d_new Tile( "\tcdq\n\tidiv\tecx\n",munchReg( t->l ),munchReg( t->r ) );
|
Tile *q=new Tile( "\tcdq\n\tidiv\tecx\n",munchReg( t->l ),munchReg( t->r ) );
|
||||||
q->want_l=EAX;q->want_r=ECX;q->hits=1<<EDX;
|
q->want_l=EAX;q->want_r=ECX;q->hits=1<<EDX;
|
||||||
return q;
|
return q;
|
||||||
}
|
}
|
||||||
@@ -151,11 +151,11 @@ Tile *Codegen_x86::munchArith( TNode *t ){
|
|||||||
int shift;
|
int shift;
|
||||||
if( t->r->op==IR_CONST ){
|
if( t->r->op==IR_CONST ){
|
||||||
if( getShift( t->r->iconst,shift ) ){
|
if( getShift( t->r->iconst,shift ) ){
|
||||||
return d_new Tile( "\tshl\t%l,byte "+itoa(shift)+"\n",munchReg( t->l ) );
|
return new Tile( "\tshl\t%l,byte "+itoa(shift)+"\n",munchReg( t->l ) );
|
||||||
}
|
}
|
||||||
}else if( t->l->op==IR_CONST ){
|
}else if( t->l->op==IR_CONST ){
|
||||||
if( getShift( t->l->iconst,shift ) ){
|
if( getShift( t->l->iconst,shift ) ){
|
||||||
return d_new Tile( "\tshl\t%l,byte "+itoa(shift)+"\n",munchReg( t->r ) );
|
return new Tile( "\tshl\t%l,byte "+itoa(shift)+"\n",munchReg( t->r ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -169,12 +169,12 @@ Tile *Codegen_x86::munchArith( TNode *t ){
|
|||||||
}
|
}
|
||||||
|
|
||||||
if( matchMEMCONST( t->r,s ) ){
|
if( matchMEMCONST( t->r,s ) ){
|
||||||
return d_new Tile( op+"%l,"+s+"\n",munchReg( t->l ) );
|
return new Tile( op+"%l,"+s+"\n",munchReg( t->l ) );
|
||||||
}
|
}
|
||||||
if( t->op!=IR_SUB && matchMEMCONST( t->l,s ) ){
|
if( t->op!=IR_SUB && matchMEMCONST( t->l,s ) ){
|
||||||
return d_new Tile( op+"%l,"+s+"\n",munchReg( t->r ) );
|
return new Tile( op+"%l,"+s+"\n",munchReg( t->r ) );
|
||||||
}
|
}
|
||||||
return d_new Tile( op+"%l,%r\n",munchReg( t->l ),munchReg( t->r ) );
|
return new Tile( op+"%l,%r\n",munchReg( t->l ),munchReg( t->r ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
Tile *Codegen_x86::munchShift( TNode *t ){
|
Tile *Codegen_x86::munchShift( TNode *t ){
|
||||||
@@ -187,10 +187,10 @@ Tile *Codegen_x86::munchShift( TNode *t ){
|
|||||||
}
|
}
|
||||||
|
|
||||||
if( matchCONST( t->r,s ) ){
|
if( matchCONST( t->r,s ) ){
|
||||||
return d_new Tile( op+"%l,byte "+s+"\n",munchReg( t->l ) );
|
return new Tile( op+"%l,byte "+s+"\n",munchReg( t->l ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
Tile *q=d_new Tile( op+"%l,cl\n",munchReg( t->l ),munchReg( t->r ) );
|
Tile *q=new Tile( op+"%l,cl\n",munchReg( t->l ),munchReg( t->r ) );
|
||||||
q->want_r=ECX;return q;
|
q->want_r=ECX;return q;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -198,7 +198,7 @@ Tile *Codegen_x86::munchRelop( TNode *t ){
|
|||||||
string func;
|
string func;
|
||||||
Tile *q=genCompare( t,func,false );
|
Tile *q=genCompare( t,func,false );
|
||||||
|
|
||||||
q=d_new Tile( "\tset"+func+"\tal\n\tmovzx\teax,al\n",q );
|
q=new Tile( "\tset"+func+"\tal\n\tmovzx\teax,al\n",q );
|
||||||
q->want_l=EAX;
|
q->want_l=EAX;
|
||||||
return q;
|
return q;
|
||||||
}
|
}
|
||||||
@@ -212,7 +212,7 @@ Tile *Codegen_x86::munchFPUnary( TNode *t ){
|
|||||||
case IR_FNEG:s="\tfchs\n";break;
|
case IR_FNEG:s="\tfchs\n";break;
|
||||||
default:return 0;
|
default:return 0;
|
||||||
}
|
}
|
||||||
return d_new Tile( s,munchFP( t->l ) );
|
return new Tile( s,munchFP( t->l ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
Tile *Codegen_x86::munchFPArith( TNode *t ){
|
Tile *Codegen_x86::munchFPArith( TNode *t ){
|
||||||
@@ -224,7 +224,7 @@ Tile *Codegen_x86::munchFPArith( TNode *t ){
|
|||||||
case IR_FDIV:s="\tfdivrp\tst(1)\n";s2="\tfdivp\tst(1)\n";break;
|
case IR_FDIV:s="\tfdivrp\tst(1)\n";s2="\tfdivp\tst(1)\n";break;
|
||||||
default:return 0;
|
default:return 0;
|
||||||
}
|
}
|
||||||
return d_new Tile( s,s2,munchFP( t->l ),munchFP( t->r ) );
|
return new Tile( s,s2,munchFP( t->l ),munchFP( t->r ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
Tile *Codegen_x86::munchFPRelop( TNode *t ){
|
Tile *Codegen_x86::munchFPRelop( TNode *t ){
|
||||||
@@ -240,7 +240,7 @@ Tile *Codegen_x86::munchFPRelop( TNode *t ){
|
|||||||
}
|
}
|
||||||
s="\tfucompp\n\tfnstsw\tax\n\tsahf\n\tset"+s+"\tal\n\tmovzx\t%l,al\n";
|
s="\tfucompp\n\tfnstsw\tax\n\tsahf\n\tset"+s+"\tal\n\tmovzx\t%l,al\n";
|
||||||
s2="\tfucompp\n\tfnstsw\tax\n\tsahf\n\tset"+s2+"\tal\n\tmovzx\t%l,al\n";
|
s2="\tfucompp\n\tfnstsw\tax\n\tsahf\n\tset"+s2+"\tal\n\tmovzx\t%l,al\n";
|
||||||
Tile *q=d_new Tile( s,s2,munchFP( t->l ),munchFP( t->r ) );
|
Tile *q=new Tile( s,s2,munchFP( t->l ),munchFP( t->r ) );
|
||||||
q->want_l=EAX;
|
q->want_l=EAX;
|
||||||
return q;
|
return q;
|
||||||
}
|
}
|
||||||
@@ -251,9 +251,9 @@ Tile *Codegen_x86::munchFPRelop( TNode *t ){
|
|||||||
Tile *Codegen_x86::munchCall( TNode *t ){
|
Tile *Codegen_x86::munchCall( TNode *t ){
|
||||||
Tile *q;
|
Tile *q;
|
||||||
if( t->l->op==IR_GLOBAL ){
|
if( t->l->op==IR_GLOBAL ){
|
||||||
q=d_new Tile( "\tcall\t"+t->l->sconst+"\n",t->r ? munchReg( t->r ) : 0 );
|
q=new Tile( "\tcall\t"+t->l->sconst+"\n",t->r ? munchReg( t->r ) : 0 );
|
||||||
}else{
|
}else{
|
||||||
q=d_new Tile( "\tcall\t%l\n",munchReg( t->l ),t->r ? munchReg( t->r ) : 0 );
|
q=new Tile( "\tcall\t%l\n",munchReg( t->l ),t->r ? munchReg( t->r ) : 0 );
|
||||||
}
|
}
|
||||||
q->argFrame=t->iconst;
|
q->argFrame=t->iconst;
|
||||||
q->want_l=EAX;
|
q->want_l=EAX;
|
||||||
@@ -270,26 +270,26 @@ Tile *Codegen_x86::munch( TNode *t ){
|
|||||||
string s;
|
string s;
|
||||||
switch( t->op ){
|
switch( t->op ){
|
||||||
case IR_JSR:
|
case IR_JSR:
|
||||||
q=d_new Tile( "\tcall\t"+t->sconst+'\n' );
|
q=new Tile( "\tcall\t"+t->sconst+'\n' );
|
||||||
break;
|
break;
|
||||||
case IR_RET:
|
case IR_RET:
|
||||||
q=d_new Tile( "\tret\n" );
|
q=new Tile( "\tret\n" );
|
||||||
break;
|
break;
|
||||||
case IR_RETURN:
|
case IR_RETURN:
|
||||||
q=munchReg( t->l );q->want_l=EAX;
|
q=munchReg( t->l );q->want_l=EAX;
|
||||||
s="\tjmp\t"+t->sconst+'\n';
|
s="\tjmp\t"+t->sconst+'\n';
|
||||||
q=d_new Tile( s,q );
|
q=new Tile( s,q );
|
||||||
break;
|
break;
|
||||||
case IR_FRETURN:
|
case IR_FRETURN:
|
||||||
q=munchFP( t->l );
|
q=munchFP( t->l );
|
||||||
s="\tjmp\t"+t->sconst+'\n';
|
s="\tjmp\t"+t->sconst+'\n';
|
||||||
q=d_new Tile( s,q );
|
q=new Tile( s,q );
|
||||||
break;
|
break;
|
||||||
case IR_CALL:
|
case IR_CALL:
|
||||||
q=munchCall( t );
|
q=munchCall( t );
|
||||||
break;
|
break;
|
||||||
case IR_JUMP:
|
case IR_JUMP:
|
||||||
q=d_new Tile( "\tjmp\t"+t->sconst+'\n' );
|
q=new Tile( "\tjmp\t"+t->sconst+'\n' );
|
||||||
break;
|
break;
|
||||||
case IR_JUMPT:
|
case IR_JUMPT:
|
||||||
if( TNode *p=t->l ){
|
if( TNode *p=t->l ){
|
||||||
@@ -297,7 +297,7 @@ Tile *Codegen_x86::munch( TNode *t ){
|
|||||||
if( isRelop( p->op ) ){
|
if( isRelop( p->op ) ){
|
||||||
string func;
|
string func;
|
||||||
q=genCompare( p,func,neg );
|
q=genCompare( p,func,neg );
|
||||||
q=d_new Tile( "\tj"+func+"\t"+t->sconst+"\n",q );
|
q=new Tile( "\tj"+func+"\t"+t->sconst+"\n",q );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -307,7 +307,7 @@ Tile *Codegen_x86::munch( TNode *t ){
|
|||||||
if( isRelop( p->op ) ){
|
if( isRelop( p->op ) ){
|
||||||
string func;
|
string func;
|
||||||
q=genCompare( p,func,neg );
|
q=genCompare( p,func,neg );
|
||||||
q=d_new Tile( "\tj"+func+"\t"+t->sconst+"\n",q );
|
q=new Tile( "\tj"+func+"\t"+t->sconst+"\n",q );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -315,7 +315,7 @@ Tile *Codegen_x86::munch( TNode *t ){
|
|||||||
if( matchMEM( t->r,s ) ){
|
if( matchMEM( t->r,s ) ){
|
||||||
string c;
|
string c;
|
||||||
if( matchCONST( t->l,c ) ){
|
if( matchCONST( t->l,c ) ){
|
||||||
q=d_new Tile( "\tmov\t"+s+","+c+"\n" );
|
q=new Tile( "\tmov\t"+s+","+c+"\n" );
|
||||||
}else if( t->l->op==IR_ADD || t->l->op==IR_SUB ){
|
}else if( t->l->op==IR_ADD || t->l->op==IR_SUB ){
|
||||||
TNode *p=0;
|
TNode *p=0;
|
||||||
if( nodesEqual( t->l->l,t->r ) ) p=t->l->r;
|
if( nodesEqual( t->l->l,t->r ) ) p=t->l->r;
|
||||||
@@ -327,13 +327,13 @@ Tile *Codegen_x86::munch( TNode *t ){
|
|||||||
case IR_SUB:op="\tsub\t";break;
|
case IR_SUB:op="\tsub\t";break;
|
||||||
}
|
}
|
||||||
if( matchCONST( p,c ) ){
|
if( matchCONST( p,c ) ){
|
||||||
q=d_new Tile( op+s+","+c+"\n" );
|
q=new Tile( op+s+","+c+"\n" );
|
||||||
}else{
|
}else{
|
||||||
q=d_new Tile( op+s+",%l\n",munchReg( p ) );
|
q=new Tile( op+s+",%l\n",munchReg( p ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if( !q ) q=d_new Tile( "\tmov\t"+s+",%l\n",munchReg( t->l ) );
|
if( !q ) q=new Tile( "\tmov\t"+s+",%l\n",munchReg( t->l ) );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -352,13 +352,13 @@ Tile *Codegen_x86::munchReg( TNode *t ){
|
|||||||
|
|
||||||
switch( t->op ){
|
switch( t->op ){
|
||||||
case IR_JUMPT:
|
case IR_JUMPT:
|
||||||
q=d_new Tile( "\tand\t%l,%l\n\tjnz\t"+t->sconst+'\n',munchReg( t->l ) );
|
q=new Tile( "\tand\t%l,%l\n\tjnz\t"+t->sconst+'\n',munchReg( t->l ) );
|
||||||
break;
|
break;
|
||||||
case IR_JUMPF:
|
case IR_JUMPF:
|
||||||
q=d_new Tile( "\tand\t%l,%l\n\tjz\t"+t->sconst+'\n',munchReg( t->l ) );
|
q=new Tile( "\tand\t%l,%l\n\tjz\t"+t->sconst+'\n',munchReg( t->l ) );
|
||||||
break;
|
break;
|
||||||
case IR_JUMPGE:
|
case IR_JUMPGE:
|
||||||
q=d_new Tile( "\tcmp\t%l,%r\n\tjnc\t"+t->sconst+'\n',munchReg( t->l ),munchReg( t->r ) );
|
q=new Tile( "\tcmp\t%l,%r\n\tjnc\t"+t->sconst+'\n',munchReg( t->l ),munchReg( t->r ) );
|
||||||
break;
|
break;
|
||||||
case IR_CALL:
|
case IR_CALL:
|
||||||
q=munchCall( t );
|
q=munchCall( t );
|
||||||
@@ -366,37 +366,37 @@ Tile *Codegen_x86::munchReg( TNode *t ){
|
|||||||
case IR_MOVE:
|
case IR_MOVE:
|
||||||
//MUST BE MOVE TO MEM!
|
//MUST BE MOVE TO MEM!
|
||||||
if( matchMEM( t->r,s ) ){
|
if( matchMEM( t->r,s ) ){
|
||||||
q=d_new Tile( "\tmov\t"+s+",%l\n",munchReg( t->l ) );
|
q=new Tile( "\tmov\t"+s+",%l\n",munchReg( t->l ) );
|
||||||
}else if( t->r->op==IR_MEM ){
|
}else if( t->r->op==IR_MEM ){
|
||||||
q=d_new Tile( "\tmov\t[%r],%l\n",munchReg( t->l ),munchReg( t->r->l ) );
|
q=new Tile( "\tmov\t[%r],%l\n",munchReg( t->l ),munchReg( t->r->l ) );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case IR_MEM:
|
case IR_MEM:
|
||||||
if( matchMEM( t,s ) ){
|
if( matchMEM( t,s ) ){
|
||||||
q=d_new Tile( "\tmov\t%l,"+s+"\n" );
|
q=new Tile( "\tmov\t%l,"+s+"\n" );
|
||||||
}else{
|
}else{
|
||||||
q=d_new Tile( "\tmov\t%l,[%l]\n",munchReg( t->l ) );
|
q=new Tile( "\tmov\t%l,[%l]\n",munchReg( t->l ) );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case IR_SEQ:
|
case IR_SEQ:
|
||||||
q=d_new Tile( "",munch(t->l),munch(t->r) );
|
q=new Tile( "",munch(t->l),munch(t->r) );
|
||||||
break;
|
break;
|
||||||
case IR_ARG:
|
case IR_ARG:
|
||||||
q=d_new Tile( "\tlea\t%l,[esp"+itoa_sgn(t->iconst)+"]\n" );
|
q=new Tile( "\tlea\t%l,[esp"+itoa_sgn(t->iconst)+"]\n" );
|
||||||
break;
|
break;
|
||||||
case IR_LOCAL:
|
case IR_LOCAL:
|
||||||
q=d_new Tile( "\tlea\t%l,[ebp"+itoa_sgn(t->iconst)+"]\n" );
|
q=new Tile( "\tlea\t%l,[ebp"+itoa_sgn(t->iconst)+"]\n" );
|
||||||
break;
|
break;
|
||||||
case IR_GLOBAL:
|
case IR_GLOBAL:
|
||||||
q=d_new Tile( string( "\tmov\t%l," )+t->sconst+'\n' );
|
q=new Tile( string( "\tmov\t%l," )+t->sconst+'\n' );
|
||||||
break;
|
break;
|
||||||
case IR_CAST:
|
case IR_CAST:
|
||||||
q=munchFP( t->l );
|
q=munchFP( t->l );
|
||||||
s="\tpush\t%l\n\tfistp\t[esp]\n\tpop\t%l\n";
|
s="\tpush\t%l\n\tfistp\t[esp]\n\tpop\t%l\n";
|
||||||
q=d_new Tile( s,q );
|
q=new Tile( s,q );
|
||||||
break;
|
break;
|
||||||
case IR_CONST:
|
case IR_CONST:
|
||||||
q=d_new Tile( "\tmov\t%l,"+itoa(t->iconst)+"\n" );
|
q=new Tile( "\tmov\t%l,"+itoa(t->iconst)+"\n" );
|
||||||
break;
|
break;
|
||||||
case IR_NEG:
|
case IR_NEG:
|
||||||
q=munchUnary( t );
|
q=munchUnary( t );
|
||||||
@@ -419,7 +419,7 @@ Tile *Codegen_x86::munchReg( TNode *t ){
|
|||||||
default:
|
default:
|
||||||
q=munchFP( t );if( !q ) return 0;
|
q=munchFP( t );if( !q ) return 0;
|
||||||
s="\tpush\t%l\n\tfstp\t[esp]\n\tpop\t%l\n";
|
s="\tpush\t%l\n\tfstp\t[esp]\n\tpop\t%l\n";
|
||||||
q=d_new Tile( s,q );
|
q=new Tile( s,q );
|
||||||
}
|
}
|
||||||
return q;
|
return q;
|
||||||
}
|
}
|
||||||
@@ -439,7 +439,7 @@ Tile *Codegen_x86::munchFP( TNode *t ){
|
|||||||
break;
|
break;
|
||||||
case IR_FCAST:
|
case IR_FCAST:
|
||||||
s="\tpush\t%l\n\tfild\t[esp]\n\tpop\t%l\n";
|
s="\tpush\t%l\n\tfild\t[esp]\n\tpop\t%l\n";
|
||||||
q=d_new Tile( s,munchReg( t->l ) );
|
q=new Tile( s,munchReg( t->l ) );
|
||||||
break;
|
break;
|
||||||
case IR_FNEG:
|
case IR_FNEG:
|
||||||
q=munchFPUnary( t );
|
q=munchFPUnary( t );
|
||||||
@@ -450,7 +450,7 @@ Tile *Codegen_x86::munchFP( TNode *t ){
|
|||||||
default:
|
default:
|
||||||
q=munchReg( t );if( !q ) return 0;
|
q=munchReg( t );if( !q ) return 0;
|
||||||
s="\tpush\t%l\n\tfld\t[esp]\n\tpop\t%l\n";
|
s="\tpush\t%l\n\tfld\t[esp]\n\tpop\t%l\n";
|
||||||
q=d_new Tile( s,q );
|
q=new Tile( s,q );
|
||||||
}
|
}
|
||||||
return q;
|
return q;
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -29,7 +29,7 @@ Decl *DeclSeq::findDecl( const string &s ){
|
|||||||
|
|
||||||
Decl *DeclSeq::insertDecl( const string &s,Type *t,int kind,ConstType *d ){
|
Decl *DeclSeq::insertDecl( const string &s,Type *t,int kind,ConstType *d ){
|
||||||
if( findDecl( s ) ) return 0;
|
if( findDecl( s ) ) return 0;
|
||||||
decls.push_back( d_new Decl( s,t,kind,d ) );
|
decls.push_back( new Decl( s,t,kind,d ) );
|
||||||
return decls.back();
|
return decls.back();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+10
-10
@@ -69,9 +69,9 @@ void VarDeclNode::proto(DeclSeq *d, Environ *e) {
|
|||||||
|
|
||||||
|
|
||||||
if (!c) ex("Expression must be constant");
|
if (!c) ex("Expression must be constant");
|
||||||
if (ty == Type::int_type) ty = d_new ConstType(c->intValue());
|
if (ty == Type::int_type) ty = new ConstType(c->intValue());
|
||||||
else if (ty == Type::float_type) ty = d_new ConstType(c->floatValue());
|
else if (ty == Type::float_type) ty = new ConstType(c->floatValue());
|
||||||
else ty = d_new ConstType(c->stringValue());
|
else ty = new ConstType(c->stringValue());
|
||||||
e->types.push_back(ty);
|
e->types.push_back(ty);
|
||||||
delete expr; expr = 0;
|
delete expr; expr = 0;
|
||||||
}
|
}
|
||||||
@@ -87,7 +87,7 @@ void VarDeclNode::proto(DeclSeq *d, Environ *e) {
|
|||||||
|
|
||||||
Decl *decl = d->insertDecl(ident, ty, kind, defType);
|
Decl *decl = d->insertDecl(ident, ty, kind, defType);
|
||||||
if (!decl) ex("Duplicate variable name");
|
if (!decl) ex("Duplicate variable name");
|
||||||
if (expr) sem_var = d_new DeclVarNode(decl);
|
if (expr) sem_var = new DeclVarNode(decl);
|
||||||
}
|
}
|
||||||
|
|
||||||
void VarDeclNode::semant(Environ *e) {
|
void VarDeclNode::semant(Environ *e) {
|
||||||
@@ -106,9 +106,9 @@ void VarDeclNode::translate(Codegen *g) {
|
|||||||
//////////////////////////
|
//////////////////////////
|
||||||
void FuncDeclNode::proto(DeclSeq *d, Environ *e) {
|
void FuncDeclNode::proto(DeclSeq *d, Environ *e) {
|
||||||
Type *t = tagType(tag, e); if (!t) t = Type::int_type;
|
Type *t = tagType(tag, e); if (!t) t = Type::int_type;
|
||||||
a_ptr<DeclSeq> decls(d_new DeclSeq());
|
a_ptr<DeclSeq> decls(new DeclSeq());
|
||||||
params->proto(decls, e);
|
params->proto(decls, e);
|
||||||
sem_type = d_new FuncType(t, decls.release(), false, false);
|
sem_type = new FuncType(t, decls.release(), false, false);
|
||||||
if (!d->insertDecl(ident, sem_type, DECL_FUNC)) {
|
if (!d->insertDecl(ident, sem_type, DECL_FUNC)) {
|
||||||
delete sem_type; ex("duplicate identifier");
|
delete sem_type; ex("duplicate identifier");
|
||||||
}
|
}
|
||||||
@@ -117,7 +117,7 @@ void FuncDeclNode::proto(DeclSeq *d, Environ *e) {
|
|||||||
|
|
||||||
void FuncDeclNode::semant(Environ *e) {
|
void FuncDeclNode::semant(Environ *e) {
|
||||||
|
|
||||||
sem_env = d_new Environ(genLabel(), sem_type->returnType, 1, e);
|
sem_env = new Environ(genLabel(), sem_type->returnType, 1, e);
|
||||||
DeclSeq *decls = sem_env->decls;
|
DeclSeq *decls = sem_env->decls;
|
||||||
|
|
||||||
int k;
|
int k;
|
||||||
@@ -156,7 +156,7 @@ void FuncDeclNode::translate(Codegen *g) {
|
|||||||
//leave the function
|
//leave the function
|
||||||
g->label(sem_env->funcLabel + "_leave");
|
g->label(sem_env->funcLabel + "_leave");
|
||||||
t = deleteVars(sem_env);
|
t = deleteVars(sem_env);
|
||||||
if (g->debug) t = d_new TNode(IR_SEQ, call("__bbDebugLeave"), t);
|
if (g->debug) t = new TNode(IR_SEQ, call("__bbDebugLeave"), t);
|
||||||
g->leave(t, sem_type->params->size() * 4);
|
g->leave(t, sem_type->params->size() * 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -164,7 +164,7 @@ void FuncDeclNode::translate(Codegen *g) {
|
|||||||
// Type Declaration //
|
// Type Declaration //
|
||||||
//////////////////////
|
//////////////////////
|
||||||
void StructDeclNode::proto(DeclSeq *d, Environ *e) {
|
void StructDeclNode::proto(DeclSeq *d, Environ *e) {
|
||||||
sem_type = d_new StructType(ident, d_new DeclSeq());
|
sem_type = new StructType(ident, new DeclSeq());
|
||||||
if (!d->insertDecl(ident, sem_type, DECL_STRUCT)) {
|
if (!d->insertDecl(ident, sem_type, DECL_STRUCT)) {
|
||||||
delete sem_type; ex("Duplicate identifier");
|
delete sem_type; ex("Duplicate identifier");
|
||||||
}
|
}
|
||||||
@@ -262,7 +262,7 @@ void VectorDeclNode::proto(DeclSeq *d, Environ *env) {
|
|||||||
sizes.push_back(n + 1);
|
sizes.push_back(n + 1);
|
||||||
}
|
}
|
||||||
string label = genLabel();
|
string label = genLabel();
|
||||||
sem_type = d_new VectorType(label, ty, sizes);
|
sem_type = new VectorType(label, ty, sizes);
|
||||||
if (!d->insertDecl(ident, sem_type, kind)) {
|
if (!d->insertDecl(ident, sem_type, kind)) {
|
||||||
delete sem_type; ex("Duplicate identifier");
|
delete sem_type; ex("Duplicate identifier");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,9 +4,9 @@
|
|||||||
|
|
||||||
Environ::Environ( const string &f,Type *r,int l,Environ *gs )
|
Environ::Environ( const string &f,Type *r,int l,Environ *gs )
|
||||||
:funcLabel(f),returnType(r),level(l),globals(gs){
|
:funcLabel(f),returnType(r),level(l),globals(gs){
|
||||||
decls=d_new DeclSeq();
|
decls=new DeclSeq();
|
||||||
typeDecls=d_new DeclSeq();
|
typeDecls=new DeclSeq();
|
||||||
funcDecls=d_new DeclSeq();
|
funcDecls=new DeclSeq();
|
||||||
if( globals ) globals->children.push_back( this );
|
if( globals ) globals->children.push_back( this );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -57,7 +57,7 @@ Label *Environ::findLabel( const string &s ){
|
|||||||
}
|
}
|
||||||
|
|
||||||
Label *Environ::insertLabel( const string &s,int def,int src,int sz ){
|
Label *Environ::insertLabel( const string &s,int def,int src,int sz ){
|
||||||
Label *l=d_new Label( s,def,src,sz );
|
Label *l=new Label( s,def,src,sz );
|
||||||
labels.push_back( l );return l;
|
labels.push_back( l );return l;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+65
-65
@@ -13,7 +13,7 @@ ExprNode *ExprNode::castTo(Type *ty, Environ *e) {
|
|||||||
ex("Illegal type conversion");
|
ex("Illegal type conversion");
|
||||||
}
|
}
|
||||||
|
|
||||||
ExprNode *cast = d_new CastNode(this, ty);
|
ExprNode *cast = new CastNode(this, ty);
|
||||||
cast->semant(e);
|
cast->semant(e);
|
||||||
return cast;
|
return cast;
|
||||||
}
|
}
|
||||||
@@ -25,9 +25,9 @@ ExprNode *CastNode::semant(Environ *e) {
|
|||||||
|
|
||||||
if (ConstNode *c = expr->constNode()) {
|
if (ConstNode *c = expr->constNode()) {
|
||||||
ExprNode *e;
|
ExprNode *e;
|
||||||
if (type == Type::int_type) e = d_new IntConstNode(c->intValue());
|
if (type == Type::int_type) e = new IntConstNode(c->intValue());
|
||||||
else if (type == Type::float_type) e = d_new FloatConstNode(c->floatValue());
|
else if (type == Type::float_type) e = new FloatConstNode(c->floatValue());
|
||||||
else e = d_new StringConstNode(c->stringValue());
|
else e = new StringConstNode(c->stringValue());
|
||||||
delete this;
|
delete this;
|
||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
@@ -43,11 +43,11 @@ TNode *CastNode::translate(Codegen *g) {
|
|||||||
TNode *t = expr->translate(g);
|
TNode *t = expr->translate(g);
|
||||||
if (expr->sem_type == Type::float_type && sem_type == Type::int_type) {
|
if (expr->sem_type == Type::float_type && sem_type == Type::int_type) {
|
||||||
//float->int
|
//float->int
|
||||||
return d_new TNode(IR_CAST, t, 0);
|
return new TNode(IR_CAST, t, 0);
|
||||||
}
|
}
|
||||||
if (expr->sem_type == Type::int_type && sem_type == Type::float_type) {
|
if (expr->sem_type == Type::int_type && sem_type == Type::float_type) {
|
||||||
//int->float
|
//int->float
|
||||||
return d_new TNode(IR_FCAST, t, 0);
|
return new TNode(IR_FCAST, t, 0);
|
||||||
}
|
}
|
||||||
if (expr->sem_type == Type::string_type && sem_type == Type::int_type) {
|
if (expr->sem_type == Type::string_type && sem_type == Type::int_type) {
|
||||||
//str->int
|
//str->int
|
||||||
@@ -92,17 +92,17 @@ TNode *ExprSeqNode::translate(Codegen *g, bool cfunc) {
|
|||||||
if (ty->stringType()) {
|
if (ty->stringType()) {
|
||||||
q = call("__bbStrToCStr", q);
|
q = call("__bbStrToCStr", q);
|
||||||
} else if (ty->structType()) {
|
} else if (ty->structType()) {
|
||||||
q = d_new TNode(IR_MEM, q);
|
q = new TNode(IR_MEM, q);
|
||||||
} else if (ty == Type::void_type) {
|
} else if (ty == Type::void_type) {
|
||||||
q = d_new TNode(IR_MEM, add(q, iconst(4)));
|
q = new TNode(IR_MEM, add(q, iconst(4)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TNode *p;
|
TNode *p;
|
||||||
p = d_new TNode(IR_ARG, 0, 0, k * 4);
|
p = new TNode(IR_ARG, 0, 0, k * 4);
|
||||||
p = d_new TNode(IR_MEM, p, 0);
|
p = new TNode(IR_MEM, p, 0);
|
||||||
p = d_new TNode(IR_MOVE, q, p);
|
p = new TNode(IR_MOVE, q, p);
|
||||||
p = d_new TNode(IR_SEQ, p, 0);
|
p = new TNode(IR_SEQ, p, 0);
|
||||||
if (l) l->r = p;
|
if (l) l->r = p;
|
||||||
else t = p;
|
else t = p;
|
||||||
l = p;
|
l = p;
|
||||||
@@ -167,14 +167,14 @@ TNode *CallNode::translate(Codegen *g) {
|
|||||||
TNode *r = exprs->translate(g, f->cfunc);
|
TNode *r = exprs->translate(g, f->cfunc);
|
||||||
|
|
||||||
if (f->userlib) {
|
if (f->userlib) {
|
||||||
l = d_new TNode(IR_MEM, l);
|
l = new TNode(IR_MEM, l);
|
||||||
usedfuncs.insert(ident);
|
usedfuncs.insert(ident);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sem_type == Type::float_type) {
|
if (sem_type == Type::float_type) {
|
||||||
t = d_new TNode(IR_FCALL, l, r, exprs->size() * 4);
|
t = new TNode(IR_FCALL, l, r, exprs->size() * 4);
|
||||||
} else {
|
} else {
|
||||||
t = d_new TNode(IR_CALL, l, r, exprs->size() * 4);
|
t = new TNode(IR_CALL, l, r, exprs->size() * 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (f->returnType->stringType()) {
|
if (f->returnType->stringType()) {
|
||||||
@@ -209,7 +209,7 @@ IntConstNode::IntConstNode(int n) :value(n) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TNode *IntConstNode::translate(Codegen *g) {
|
TNode *IntConstNode::translate(Codegen *g) {
|
||||||
return d_new TNode(IR_CONST, 0, 0, value);
|
return new TNode(IR_CONST, 0, 0, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
int IntConstNode::intValue() {
|
int IntConstNode::intValue() {
|
||||||
@@ -232,7 +232,7 @@ FloatConstNode::FloatConstNode(float f) :value(f) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TNode *FloatConstNode::translate(Codegen *g) {
|
TNode *FloatConstNode::translate(Codegen *g) {
|
||||||
return d_new TNode(IR_CONST, 0, 0, *(int*)&value);
|
return new TNode(IR_CONST, 0, 0, *(int*)&value);
|
||||||
}
|
}
|
||||||
|
|
||||||
int FloatConstNode::intValue() {
|
int FloatConstNode::intValue() {
|
||||||
@@ -291,17 +291,17 @@ ExprNode *UniExprNode::semant(Environ *e) {
|
|||||||
ExprNode *e;
|
ExprNode *e;
|
||||||
if (sem_type == Type::int_type) {
|
if (sem_type == Type::int_type) {
|
||||||
switch (op) {
|
switch (op) {
|
||||||
case '+':e = d_new IntConstNode(+c->intValue()); break;
|
case '+':e = new IntConstNode(+c->intValue()); break;
|
||||||
case '-':e = d_new IntConstNode(-c->intValue()); break;
|
case '-':e = new IntConstNode(-c->intValue()); break;
|
||||||
case ABS:e = d_new IntConstNode(c->intValue() >= 0 ? c->intValue() : -c->intValue()); break;
|
case ABS:e = new IntConstNode(c->intValue() >= 0 ? c->intValue() : -c->intValue()); break;
|
||||||
case SGN:e = d_new IntConstNode(c->intValue() > 0 ? 1 : (c->intValue() < 0 ? -1 : 0)); break;
|
case SGN:e = new IntConstNode(c->intValue() > 0 ? 1 : (c->intValue() < 0 ? -1 : 0)); break;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
switch (op) {
|
switch (op) {
|
||||||
case '+':e = d_new FloatConstNode(+c->floatValue()); break;
|
case '+':e = new FloatConstNode(+c->floatValue()); break;
|
||||||
case '-':e = d_new FloatConstNode(-c->floatValue()); break;
|
case '-':e = new FloatConstNode(-c->floatValue()); break;
|
||||||
case ABS:e = d_new FloatConstNode(c->floatValue() >= 0 ? c->floatValue() : -c->floatValue()); break;
|
case ABS:e = new FloatConstNode(c->floatValue() >= 0 ? c->floatValue() : -c->floatValue()); break;
|
||||||
case SGN:e = d_new FloatConstNode(c->floatValue() > 0 ? 1 : (c->floatValue() < 0 ? -1 : 0)); break;
|
case SGN:e = new FloatConstNode(c->floatValue() > 0 ? 1 : (c->floatValue() < 0 ? -1 : 0)); break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
delete this;
|
delete this;
|
||||||
@@ -328,7 +328,7 @@ TNode *UniExprNode::translate(Codegen *g) {
|
|||||||
case SGN:return fcall("__bbFSgn", l);
|
case SGN:return fcall("__bbFSgn", l);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return d_new TNode(n, l, 0);
|
return new TNode(n, l, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////
|
||||||
@@ -341,12 +341,12 @@ ExprNode *BinExprNode::semant(Environ *e) {
|
|||||||
if (lc && rc) {
|
if (lc && rc) {
|
||||||
ExprNode *expr = nullptr;
|
ExprNode *expr = nullptr;
|
||||||
switch (op) {
|
switch (op) {
|
||||||
case AND:expr = d_new IntConstNode(lc->intValue() & rc->intValue()); break;
|
case AND:expr = new IntConstNode(lc->intValue() & rc->intValue()); break;
|
||||||
case OR: expr = d_new IntConstNode(lc->intValue() | rc->intValue()); break;
|
case OR: expr = new IntConstNode(lc->intValue() | rc->intValue()); break;
|
||||||
case XOR:expr = d_new IntConstNode(lc->intValue() ^ rc->intValue()); break;
|
case XOR:expr = new IntConstNode(lc->intValue() ^ rc->intValue()); break;
|
||||||
case SHL:expr = d_new IntConstNode(lc->intValue() << rc->intValue()); break;
|
case SHL:expr = new IntConstNode(lc->intValue() << rc->intValue()); break;
|
||||||
case SHR:expr = d_new IntConstNode((unsigned)lc->intValue() >> rc->intValue()); break;
|
case SHR:expr = new IntConstNode((unsigned)lc->intValue() >> rc->intValue()); break;
|
||||||
case SAR:expr = d_new IntConstNode(lc->intValue() >> rc->intValue()); break;
|
case SAR:expr = new IntConstNode(lc->intValue() >> rc->intValue()); break;
|
||||||
}
|
}
|
||||||
delete this;
|
delete this;
|
||||||
return expr;
|
return expr;
|
||||||
@@ -363,7 +363,7 @@ TNode *BinExprNode::translate(Codegen *g) {
|
|||||||
case AND:n = IR_AND; break; case OR:n = IR_OR; break; case XOR:n = IR_XOR; break;
|
case AND:n = IR_AND; break; case OR:n = IR_OR; break; case XOR:n = IR_XOR; break;
|
||||||
case SHL:n = IR_SHL; break; case SHR:n = IR_SHR; break; case SAR:n = IR_SAR; break;
|
case SHL:n = IR_SHL; break; case SHR:n = IR_SHR; break; case SAR:n = IR_SAR; break;
|
||||||
}
|
}
|
||||||
return d_new TNode(n, l, r);
|
return new TNode(n, l, r);
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////
|
///////////////////////////
|
||||||
@@ -397,23 +397,23 @@ ExprNode *ArithExprNode::semant(Environ *e) {
|
|||||||
if (lc && rc) {
|
if (lc && rc) {
|
||||||
ExprNode *expr = nullptr;
|
ExprNode *expr = nullptr;
|
||||||
if (sem_type == Type::string_type) {
|
if (sem_type == Type::string_type) {
|
||||||
expr = d_new StringConstNode(lc->stringValue() + rc->stringValue());
|
expr = new StringConstNode(lc->stringValue() + rc->stringValue());
|
||||||
} else if (sem_type == Type::int_type) {
|
} else if (sem_type == Type::int_type) {
|
||||||
switch (op) {
|
switch (op) {
|
||||||
case '+':expr = d_new IntConstNode(lc->intValue() + rc->intValue()); break;
|
case '+':expr = new IntConstNode(lc->intValue() + rc->intValue()); break;
|
||||||
case '-':expr = d_new IntConstNode(lc->intValue() - rc->intValue()); break;
|
case '-':expr = new IntConstNode(lc->intValue() - rc->intValue()); break;
|
||||||
case '*':expr = d_new IntConstNode(lc->intValue()*rc->intValue()); break;
|
case '*':expr = new IntConstNode(lc->intValue()*rc->intValue()); break;
|
||||||
case '/':expr = d_new IntConstNode(lc->intValue() / rc->intValue()); break;
|
case '/':expr = new IntConstNode(lc->intValue() / rc->intValue()); break;
|
||||||
case MOD:expr = d_new IntConstNode(lc->intValue() % rc->intValue()); break;
|
case MOD:expr = new IntConstNode(lc->intValue() % rc->intValue()); break;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
switch (op) {
|
switch (op) {
|
||||||
case '+':expr = d_new FloatConstNode(lc->floatValue() + rc->floatValue()); break;
|
case '+':expr = new FloatConstNode(lc->floatValue() + rc->floatValue()); break;
|
||||||
case '-':expr = d_new FloatConstNode(lc->floatValue() - rc->floatValue()); break;
|
case '-':expr = new FloatConstNode(lc->floatValue() - rc->floatValue()); break;
|
||||||
case '*':expr = d_new FloatConstNode(lc->floatValue()*rc->floatValue()); break;
|
case '*':expr = new FloatConstNode(lc->floatValue()*rc->floatValue()); break;
|
||||||
case '/':expr = d_new FloatConstNode(lc->floatValue() / rc->floatValue()); break;
|
case '/':expr = new FloatConstNode(lc->floatValue() / rc->floatValue()); break;
|
||||||
case MOD:expr = d_new FloatConstNode(fmod(lc->floatValue(), rc->floatValue())); break;
|
case MOD:expr = new FloatConstNode(fmod(lc->floatValue(), rc->floatValue())); break;
|
||||||
case '^':expr = d_new FloatConstNode(pow(lc->floatValue(), rc->floatValue())); break;
|
case '^':expr = new FloatConstNode(pow(lc->floatValue(), rc->floatValue())); break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
delete this;
|
delete this;
|
||||||
@@ -443,7 +443,7 @@ TNode *ArithExprNode::translate(Codegen *g) {
|
|||||||
case '^':return fcall("__bbFPow", l, r);
|
case '^':return fcall("__bbFPow", l, r);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return d_new TNode(n, l, r);
|
return new TNode(n, l, r);
|
||||||
}
|
}
|
||||||
|
|
||||||
/////////////////////////
|
/////////////////////////
|
||||||
@@ -470,30 +470,30 @@ ExprNode *RelExprNode::semant(Environ *e) {
|
|||||||
ExprNode *expr = nullptr;
|
ExprNode *expr = nullptr;
|
||||||
if (opType == Type::string_type) {
|
if (opType == Type::string_type) {
|
||||||
switch (op) {
|
switch (op) {
|
||||||
case '<':expr = d_new IntConstNode(lc->stringValue() < rc->stringValue()); break;
|
case '<':expr = new IntConstNode(lc->stringValue() < rc->stringValue()); break;
|
||||||
case '=':expr = d_new IntConstNode(lc->stringValue() == rc->stringValue()); break;
|
case '=':expr = new IntConstNode(lc->stringValue() == rc->stringValue()); break;
|
||||||
case '>':expr = d_new IntConstNode(lc->stringValue() > rc->stringValue()); break;
|
case '>':expr = new IntConstNode(lc->stringValue() > rc->stringValue()); break;
|
||||||
case LE: expr = d_new IntConstNode(lc->stringValue() <= rc->stringValue()); break;
|
case LE: expr = new IntConstNode(lc->stringValue() <= rc->stringValue()); break;
|
||||||
case NE: expr = d_new IntConstNode(lc->stringValue() != rc->stringValue()); break;
|
case NE: expr = new IntConstNode(lc->stringValue() != rc->stringValue()); break;
|
||||||
case GE: expr = d_new IntConstNode(lc->stringValue() >= rc->stringValue()); break;
|
case GE: expr = new IntConstNode(lc->stringValue() >= rc->stringValue()); break;
|
||||||
}
|
}
|
||||||
} else if (opType == Type::float_type) {
|
} else if (opType == Type::float_type) {
|
||||||
switch (op) {
|
switch (op) {
|
||||||
case '<':expr = d_new IntConstNode(lc->floatValue() < rc->floatValue()); break;
|
case '<':expr = new IntConstNode(lc->floatValue() < rc->floatValue()); break;
|
||||||
case '=':expr = d_new IntConstNode(lc->floatValue() == rc->floatValue()); break;
|
case '=':expr = new IntConstNode(lc->floatValue() == rc->floatValue()); break;
|
||||||
case '>':expr = d_new IntConstNode(lc->floatValue() > rc->floatValue()); break;
|
case '>':expr = new IntConstNode(lc->floatValue() > rc->floatValue()); break;
|
||||||
case LE: expr = d_new IntConstNode(lc->floatValue() <= rc->floatValue()); break;
|
case LE: expr = new IntConstNode(lc->floatValue() <= rc->floatValue()); break;
|
||||||
case NE: expr = d_new IntConstNode(lc->floatValue() != rc->floatValue()); break;
|
case NE: expr = new IntConstNode(lc->floatValue() != rc->floatValue()); break;
|
||||||
case GE: expr = d_new IntConstNode(lc->floatValue() >= rc->floatValue()); break;
|
case GE: expr = new IntConstNode(lc->floatValue() >= rc->floatValue()); break;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
switch (op) {
|
switch (op) {
|
||||||
case '<':expr = d_new IntConstNode(lc->intValue() < rc->intValue()); break;
|
case '<':expr = new IntConstNode(lc->intValue() < rc->intValue()); break;
|
||||||
case '=':expr = d_new IntConstNode(lc->intValue() == rc->intValue()); break;
|
case '=':expr = new IntConstNode(lc->intValue() == rc->intValue()); break;
|
||||||
case '>':expr = d_new IntConstNode(lc->intValue() > rc->intValue()); break;
|
case '>':expr = new IntConstNode(lc->intValue() > rc->intValue()); break;
|
||||||
case LE: expr = d_new IntConstNode(lc->intValue() <= rc->intValue()); break;
|
case LE: expr = new IntConstNode(lc->intValue() <= rc->intValue()); break;
|
||||||
case NE: expr = d_new IntConstNode(lc->intValue() != rc->intValue()); break;
|
case NE: expr = new IntConstNode(lc->intValue() != rc->intValue()); break;
|
||||||
case GE: expr = d_new IntConstNode(lc->intValue() >= rc->intValue()); break;
|
case GE: expr = new IntConstNode(lc->intValue() >= rc->intValue()); break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
delete this;
|
delete this;
|
||||||
@@ -591,7 +591,7 @@ ExprNode *NullNode::semant(Environ *e) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TNode *NullNode::translate(Codegen *g) {
|
TNode *NullNode::translate(Codegen *g) {
|
||||||
return d_new TNode(IR_CONST, 0, 0, 0);
|
return new TNode(IR_CONST, 0, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/////////////////
|
/////////////////
|
||||||
|
|||||||
+31
-31
@@ -29,7 +29,7 @@ void Node::ex( const string &e,int pos,const string &f ){
|
|||||||
VarNode *Node::genLocal( Environ *e,Type *ty ){
|
VarNode *Node::genLocal( Environ *e,Type *ty ){
|
||||||
string t=genLabel();
|
string t=genLabel();
|
||||||
Decl *d=e->decls->insertDecl( t,ty,DECL_LOCAL );
|
Decl *d=e->decls->insertDecl( t,ty,DECL_LOCAL );
|
||||||
return d_new DeclVarNode( d );
|
return new DeclVarNode( d );
|
||||||
}
|
}
|
||||||
|
|
||||||
/////////////////////////////////////////////////
|
/////////////////////////////////////////////////
|
||||||
@@ -39,9 +39,9 @@ ConstNode *Node::constValue( Type *ty ){
|
|||||||
ConstType *c=ty->constType();
|
ConstType *c=ty->constType();
|
||||||
if( !c ) return 0;
|
if( !c ) return 0;
|
||||||
ty=c->valueType;
|
ty=c->valueType;
|
||||||
if( ty==Type::int_type ) return d_new IntConstNode( c->intValue );
|
if( ty==Type::int_type ) return new IntConstNode( c->intValue );
|
||||||
if( ty==Type::float_type ) return d_new FloatConstNode( c->floatValue );
|
if( ty==Type::float_type ) return new FloatConstNode( c->floatValue );
|
||||||
return d_new StringConstNode( c->stringValue );
|
return new StringConstNode( c->stringValue );
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////
|
||||||
@@ -74,10 +74,10 @@ TNode *Node::createVars( Environ *e ){
|
|||||||
Decl *d=e->decls->decls[k];
|
Decl *d=e->decls->decls[k];
|
||||||
if( d->kind!=DECL_LOCAL ) continue;
|
if( d->kind!=DECL_LOCAL ) continue;
|
||||||
if( d->type->vectorType() ) continue;
|
if( d->type->vectorType() ) continue;
|
||||||
if( !t ) t=d_new TNode( IR_CONST,0,0,0 );
|
if( !t ) t=new TNode( IR_CONST,0,0,0 );
|
||||||
TNode *p=d_new TNode( IR_LOCAL,0,0,d->offset );
|
TNode *p=new TNode( IR_LOCAL,0,0,d->offset );
|
||||||
p=d_new TNode( IR_MEM,p,0 );
|
p=new TNode( IR_MEM,p,0 );
|
||||||
t=d_new TNode( IR_MOVE,t,p );
|
t=new TNode( IR_MOVE,t,p );
|
||||||
}
|
}
|
||||||
//initialize vectors
|
//initialize vectors
|
||||||
for( k=0;k<e->decls->size();++k ){
|
for( k=0;k<e->decls->size();++k ){
|
||||||
@@ -123,7 +123,7 @@ TNode *Node::deleteVars( Environ *e ){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if( !func.size() ) continue;
|
if( !func.size() ) continue;
|
||||||
p=d_new TNode( IR_SEQ,call( func,p1,p2 ),0 );
|
p=new TNode( IR_SEQ,call( func,p1,p2 ),0 );
|
||||||
(l ? l->r : t)=p;
|
(l ? l->r : t)=p;
|
||||||
l=p;
|
l=p;
|
||||||
}
|
}
|
||||||
@@ -150,12 +150,12 @@ TNode *Node::compare( int op,TNode *l,TNode *r,Type *ty ){
|
|||||||
}
|
}
|
||||||
if( ty==Type::string_type ){
|
if( ty==Type::string_type ){
|
||||||
l=call( "__bbStrCompare",l,r );
|
l=call( "__bbStrCompare",l,r );
|
||||||
r=d_new TNode( IR_CONST,0,0,0 );
|
r=new TNode( IR_CONST,0,0,0 );
|
||||||
}else if( ty->structType() ){
|
}else if( ty->structType() ){
|
||||||
l=call( "__bbObjCompare",l,r );
|
l=call( "__bbObjCompare",l,r );
|
||||||
r=d_new TNode( IR_CONST,0,0,0 );
|
r=new TNode( IR_CONST,0,0,0 );
|
||||||
}
|
}
|
||||||
return d_new TNode( n,l,r );
|
return new TNode( n,l,r );
|
||||||
}
|
}
|
||||||
|
|
||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
@@ -196,8 +196,8 @@ TNode *Node::call( const string &func,TNode *a0,TNode *a1,TNode *a2 ){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
TNode *l=d_new TNode( IR_GLOBAL,0,0,func );
|
TNode *l=new TNode( IR_GLOBAL,0,0,func );
|
||||||
return d_new TNode( IR_CALL,l,t,size );
|
return new TNode( IR_CALL,l,t,size );
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////
|
||||||
@@ -218,67 +218,67 @@ TNode *Node::fcall( const string &func,TNode *a0,TNode *a1,TNode *a2 ){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
TNode *l=d_new TNode( IR_GLOBAL,0,0,func );
|
TNode *l=new TNode( IR_GLOBAL,0,0,func );
|
||||||
return d_new TNode( IR_FCALL,l,t,size );
|
return new TNode( IR_FCALL,l,t,size );
|
||||||
}
|
}
|
||||||
|
|
||||||
TNode *Node::seq( TNode *l,TNode *r ){
|
TNode *Node::seq( TNode *l,TNode *r ){
|
||||||
return d_new TNode( IR_SEQ,l,r );
|
return new TNode( IR_SEQ,l,r );
|
||||||
}
|
}
|
||||||
|
|
||||||
TNode *Node::move( TNode *src,TNode *dest ){
|
TNode *Node::move( TNode *src,TNode *dest ){
|
||||||
return d_new TNode( IR_MOVE,src,dest );
|
return new TNode( IR_MOVE,src,dest );
|
||||||
}
|
}
|
||||||
|
|
||||||
TNode *Node::global( const string &s ){
|
TNode *Node::global( const string &s ){
|
||||||
return d_new TNode( IR_GLOBAL,0,0,s );
|
return new TNode( IR_GLOBAL,0,0,s );
|
||||||
}
|
}
|
||||||
|
|
||||||
TNode *Node::local( int offset ){
|
TNode *Node::local( int offset ){
|
||||||
return d_new TNode( IR_LOCAL,0,0,offset );
|
return new TNode( IR_LOCAL,0,0,offset );
|
||||||
}
|
}
|
||||||
|
|
||||||
TNode *Node::arg( int offset ){
|
TNode *Node::arg( int offset ){
|
||||||
return d_new TNode( IR_ARG,0,0,offset );
|
return new TNode( IR_ARG,0,0,offset );
|
||||||
}
|
}
|
||||||
|
|
||||||
TNode *Node::mem( TNode *ref ){
|
TNode *Node::mem( TNode *ref ){
|
||||||
return d_new TNode( IR_MEM,ref,0 );
|
return new TNode( IR_MEM,ref,0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
TNode *Node::add( TNode *l,TNode *r ){
|
TNode *Node::add( TNode *l,TNode *r ){
|
||||||
return d_new TNode( IR_ADD,l,r );
|
return new TNode( IR_ADD,l,r );
|
||||||
}
|
}
|
||||||
|
|
||||||
TNode *Node::mul( TNode *l,TNode *r ){
|
TNode *Node::mul( TNode *l,TNode *r ){
|
||||||
return d_new TNode( IR_MUL,l,r );
|
return new TNode( IR_MUL,l,r );
|
||||||
}
|
}
|
||||||
|
|
||||||
TNode *Node::iconst( int n ){
|
TNode *Node::iconst( int n ){
|
||||||
return d_new TNode( IR_CONST,0,0,n );
|
return new TNode( IR_CONST,0,0,n );
|
||||||
}
|
}
|
||||||
|
|
||||||
TNode *Node::ret(){
|
TNode *Node::ret(){
|
||||||
return d_new TNode( IR_RET,0,0 );
|
return new TNode( IR_RET,0,0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
TNode *Node::jsr( const string &s ){
|
TNode *Node::jsr( const string &s ){
|
||||||
return d_new TNode( IR_JSR,0,0,s );
|
return new TNode( IR_JSR,0,0,s );
|
||||||
}
|
}
|
||||||
|
|
||||||
TNode *Node::jump( const string &s ){
|
TNode *Node::jump( const string &s ){
|
||||||
return d_new TNode( IR_JUMP,0,0,s );
|
return new TNode( IR_JUMP,0,0,s );
|
||||||
}
|
}
|
||||||
|
|
||||||
TNode *Node::jumpt( TNode *expr,const string &s ){
|
TNode *Node::jumpt( TNode *expr,const string &s ){
|
||||||
return d_new TNode( IR_JUMPT,expr,0,s );
|
return new TNode( IR_JUMPT,expr,0,s );
|
||||||
}
|
}
|
||||||
|
|
||||||
TNode *Node::jumpf( TNode *expr,const string &s ){
|
TNode *Node::jumpf( TNode *expr,const string &s ){
|
||||||
return d_new TNode( IR_JUMPF,expr,0,s );
|
return new TNode( IR_JUMPF,expr,0,s );
|
||||||
}
|
}
|
||||||
|
|
||||||
TNode *Node::jumpge( TNode *l,TNode *r,const string &s ){
|
TNode *Node::jumpge( TNode *l,TNode *r,const string &s ){
|
||||||
return d_new TNode( IR_JUMPGE,l,r,s );
|
return new TNode( IR_JUMPGE,l,r,s );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+78
-78
@@ -22,10 +22,10 @@ ProgNode *Parser::parse( const string &main ){
|
|||||||
|
|
||||||
incfile=main;
|
incfile=main;
|
||||||
|
|
||||||
consts=d_new DeclSeqNode();
|
consts=new DeclSeqNode();
|
||||||
structs=d_new DeclSeqNode();
|
structs=new DeclSeqNode();
|
||||||
funcs=d_new DeclSeqNode();
|
funcs=new DeclSeqNode();
|
||||||
datas=d_new DeclSeqNode();
|
datas=new DeclSeqNode();
|
||||||
StmtSeqNode *stmts=0;
|
StmtSeqNode *stmts=0;
|
||||||
|
|
||||||
try{
|
try{
|
||||||
@@ -36,7 +36,7 @@ ProgNode *Parser::parse( const string &main ){
|
|||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
|
|
||||||
return d_new ProgNode( consts,structs,funcs,datas,stmts );
|
return new ProgNode( consts,structs,funcs,datas,stmts );
|
||||||
}
|
}
|
||||||
|
|
||||||
void Parser::ex( const string &s ){
|
void Parser::ex( const string &s ){
|
||||||
@@ -71,7 +71,7 @@ void Parser::parseChar( int c ){
|
|||||||
}
|
}
|
||||||
|
|
||||||
StmtSeqNode *Parser::parseStmtSeq( int scope ){
|
StmtSeqNode *Parser::parseStmtSeq( int scope ){
|
||||||
a_ptr<StmtSeqNode> stmts( d_new StmtSeqNode( incfile ) );
|
a_ptr<StmtSeqNode> stmts( new StmtSeqNode( incfile ) );
|
||||||
parseStmtSeq( stmts,scope );
|
parseStmtSeq( stmts,scope );
|
||||||
return stmts.release();
|
return stmts.release();
|
||||||
}
|
}
|
||||||
@@ -116,7 +116,7 @@ void Parser::parseStmtSeq( StmtSeqNode *stmts,int scope ){
|
|||||||
a_ptr<StmtSeqNode> ss( parseStmtSeq( scope ) );
|
a_ptr<StmtSeqNode> ss( parseStmtSeq( scope ) );
|
||||||
if( toker->curr()!=EOF ) exp( "end-of-file" );
|
if( toker->curr()!=EOF ) exp( "end-of-file" );
|
||||||
|
|
||||||
result=d_new IncludeNode( incfile,ss.release() );
|
result=new IncludeNode( incfile,ss.release() );
|
||||||
|
|
||||||
toker=t_toker;
|
toker=t_toker;
|
||||||
incfile=t_inc;
|
incfile=t_inc;
|
||||||
@@ -146,14 +146,14 @@ void Parser::parseStmtSeq( StmtSeqNode *stmts,int scope ){
|
|||||||
toker->next();
|
toker->next();
|
||||||
}else exprs=parseExprSeq();
|
}else exprs=parseExprSeq();
|
||||||
}else exprs=parseExprSeq();
|
}else exprs=parseExprSeq();
|
||||||
CallNode *call=d_new CallNode( ident,tag,exprs );
|
CallNode *call=new CallNode( ident,tag,exprs );
|
||||||
result=d_new ExprStmtNode( call );
|
result=new ExprStmtNode( call );
|
||||||
}else{
|
}else{
|
||||||
//must be a var
|
//must be a var
|
||||||
a_ptr<VarNode> var( parseVar( ident,tag ) );
|
a_ptr<VarNode> var( parseVar( ident,tag ) );
|
||||||
if( toker->curr()!='=' ) exp( "variable assignment" );
|
if( toker->curr()!='=' ) exp( "variable assignment" );
|
||||||
toker->next();ExprNode *expr=parseExpr( false );
|
toker->next();ExprNode *expr=parseExpr( false );
|
||||||
result=d_new AssNode( var.release(),expr );
|
result=new AssNode( var.release(),expr );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -171,7 +171,7 @@ void Parser::parseStmtSeq( StmtSeqNode *stmts,int scope ){
|
|||||||
int pos=toker->pos();
|
int pos=toker->pos();
|
||||||
if( toker->curr()!=WEND ) exp( "'Wend'" );
|
if( toker->curr()!=WEND ) exp( "'Wend'" );
|
||||||
toker->next();
|
toker->next();
|
||||||
result=d_new WhileNode( expr.release(),stmts.release(),pos );
|
result=new WhileNode( expr.release(),stmts.release(),pos );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case REPEAT:
|
case REPEAT:
|
||||||
@@ -182,13 +182,13 @@ void Parser::parseStmtSeq( StmtSeqNode *stmts,int scope ){
|
|||||||
int pos=toker->pos();
|
int pos=toker->pos();
|
||||||
if( curr!=UNTIL && curr!=FOREVER ) exp( "'Until' or 'Forever'" );
|
if( curr!=UNTIL && curr!=FOREVER ) exp( "'Until' or 'Forever'" );
|
||||||
toker->next();if( curr==UNTIL ) expr=parseExpr( false );
|
toker->next();if( curr==UNTIL ) expr=parseExpr( false );
|
||||||
result=d_new RepeatNode( stmts.release(),expr,pos );
|
result=new RepeatNode( stmts.release(),expr,pos );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case SELECT:
|
case SELECT:
|
||||||
{
|
{
|
||||||
toker->next();ExprNode *expr=parseExpr( false );
|
toker->next();ExprNode *expr=parseExpr( false );
|
||||||
a_ptr<SelectNode> selNode( d_new SelectNode( expr ) );
|
a_ptr<SelectNode> selNode( new SelectNode( expr ) );
|
||||||
for(;;){
|
for(;;){
|
||||||
while( isTerm( toker->curr() ) ) toker->next();
|
while( isTerm( toker->curr() ) ) toker->next();
|
||||||
if( toker->curr()==CASE ){
|
if( toker->curr()==CASE ){
|
||||||
@@ -196,7 +196,7 @@ void Parser::parseStmtSeq( StmtSeqNode *stmts,int scope ){
|
|||||||
a_ptr<ExprSeqNode> exprs( parseExprSeq() );
|
a_ptr<ExprSeqNode> exprs( parseExprSeq() );
|
||||||
if( !exprs->size() ) exp( "expression sequence" );
|
if( !exprs->size() ) exp( "expression sequence" );
|
||||||
a_ptr<StmtSeqNode> stmts( parseStmtSeq( STMTS_BLOCK ) );
|
a_ptr<StmtSeqNode> stmts( parseStmtSeq( STMTS_BLOCK ) );
|
||||||
selNode->push_back( d_new CaseNode( exprs.release(),stmts.release() ) );
|
selNode->push_back( new CaseNode( exprs.release(),stmts.release() ) );
|
||||||
continue;
|
continue;
|
||||||
}else if( toker->curr()==DEFAULT ){
|
}else if( toker->curr()==DEFAULT ){
|
||||||
toker->next();
|
toker->next();
|
||||||
@@ -226,7 +226,7 @@ void Parser::parseStmtSeq( StmtSeqNode *stmts,int scope ){
|
|||||||
int pos=toker->pos();
|
int pos=toker->pos();
|
||||||
if( toker->curr()!=NEXT ) exp( "'Next'" );
|
if( toker->curr()!=NEXT ) exp( "'Next'" );
|
||||||
toker->next();
|
toker->next();
|
||||||
result=d_new ForEachNode( var.release(),ident,stmts.release(),pos );
|
result=new ForEachNode( var.release(),ident,stmts.release(),pos );
|
||||||
}else{
|
}else{
|
||||||
a_ptr<ExprNode> from,to,step;
|
a_ptr<ExprNode> from,to,step;
|
||||||
from=parseExpr( false );
|
from=parseExpr( false );
|
||||||
@@ -235,43 +235,43 @@ void Parser::parseStmtSeq( StmtSeqNode *stmts,int scope ){
|
|||||||
//step...
|
//step...
|
||||||
if( toker->curr()==STEP ){
|
if( toker->curr()==STEP ){
|
||||||
toker->next();step=parseExpr( false );
|
toker->next();step=parseExpr( false );
|
||||||
}else step=d_new IntConstNode( 1 );
|
}else step=new IntConstNode( 1 );
|
||||||
stmts=parseStmtSeq( STMTS_BLOCK );
|
stmts=parseStmtSeq( STMTS_BLOCK );
|
||||||
int pos=toker->pos();
|
int pos=toker->pos();
|
||||||
if( toker->curr()!=NEXT ) exp( "'Next'" );
|
if( toker->curr()!=NEXT ) exp( "'Next'" );
|
||||||
toker->next();
|
toker->next();
|
||||||
result=d_new ForNode( var.release(),from.release(),to.release(),step.release(),stmts.release(),pos );
|
result=new ForNode( var.release(),from.release(),to.release(),step.release(),stmts.release(),pos );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case EXIT:
|
case EXIT:
|
||||||
{
|
{
|
||||||
toker->next();result=d_new ExitNode();
|
toker->next();result=new ExitNode();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GOTO:
|
case GOTO:
|
||||||
{
|
{
|
||||||
toker->next();string t=parseIdent();result=d_new GotoNode( t );
|
toker->next();string t=parseIdent();result=new GotoNode( t );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GOSUB:
|
case GOSUB:
|
||||||
{
|
{
|
||||||
toker->next();string t=parseIdent();result=d_new GosubNode( t );
|
toker->next();string t=parseIdent();result=new GosubNode( t );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case RETURN:
|
case RETURN:
|
||||||
{
|
{
|
||||||
toker->next();result=d_new ReturnNode( parseExpr( true ) );
|
toker->next();result=new ReturnNode( parseExpr( true ) );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case BBDELETE:
|
case BBDELETE:
|
||||||
{
|
{
|
||||||
if( toker->next()==EACH ){
|
if( toker->next()==EACH ){
|
||||||
toker->next();string t=parseIdent();
|
toker->next();string t=parseIdent();
|
||||||
result=d_new DeleteEachNode( t );
|
result=new DeleteEachNode( t );
|
||||||
}else{
|
}else{
|
||||||
ExprNode *expr=parseExpr( false );
|
ExprNode *expr=parseExpr( false );
|
||||||
result=d_new DeleteNode( expr );
|
result=new DeleteNode( expr );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -282,28 +282,28 @@ void Parser::parseStmtSeq( StmtSeqNode *stmts,int scope ){
|
|||||||
if( toker->curr()!=BEFORE && toker->curr()!=AFTER ) exp( "'Before' or 'After'" );
|
if( toker->curr()!=BEFORE && toker->curr()!=AFTER ) exp( "'Before' or 'After'" );
|
||||||
bool before=toker->curr()==BEFORE;toker->next();
|
bool before=toker->curr()==BEFORE;toker->next();
|
||||||
a_ptr<ExprNode> expr2( parseExpr( false ) );
|
a_ptr<ExprNode> expr2( parseExpr( false ) );
|
||||||
result=d_new InsertNode( expr1.release(),expr2.release(),before );
|
result=new InsertNode( expr1.release(),expr2.release(),before );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case READ:
|
case READ:
|
||||||
do{
|
do{
|
||||||
toker->next();VarNode *var=parseVar();
|
toker->next();VarNode *var=parseVar();
|
||||||
StmtNode *stmt=d_new ReadNode( var );
|
StmtNode *stmt=new ReadNode( var );
|
||||||
stmt->pos=pos;pos=toker->pos();
|
stmt->pos=pos;pos=toker->pos();
|
||||||
stmts->push_back( stmt );
|
stmts->push_back( stmt );
|
||||||
}while( toker->curr()==',' );
|
}while( toker->curr()==',' );
|
||||||
break;
|
break;
|
||||||
case RESTORE:
|
case RESTORE:
|
||||||
if( toker->next()==IDENT ){
|
if( toker->next()==IDENT ){
|
||||||
result=d_new RestoreNode( toker->text() );toker->next();
|
result=new RestoreNode( toker->text() );toker->next();
|
||||||
}else result=d_new RestoreNode( "" );
|
}else result=new RestoreNode( "" );
|
||||||
break;
|
break;
|
||||||
case DATA:
|
case DATA:
|
||||||
if( scope!=STMTS_PROG ) ex( "'Data' can only appear in main program" );
|
if( scope!=STMTS_PROG ) ex( "'Data' can only appear in main program" );
|
||||||
do{
|
do{
|
||||||
toker->next();
|
toker->next();
|
||||||
ExprNode *expr=parseExpr( false );
|
ExprNode *expr=parseExpr( false );
|
||||||
datas->push_back( d_new DataDeclNode( expr ) );
|
datas->push_back( new DataDeclNode( expr ) );
|
||||||
}while( toker->curr()==',' );
|
}while( toker->curr()==',' );
|
||||||
break;
|
break;
|
||||||
case TYPE:
|
case TYPE:
|
||||||
@@ -332,7 +332,7 @@ void Parser::parseStmtSeq( StmtSeqNode *stmts,int scope ){
|
|||||||
do{
|
do{
|
||||||
toker->next();
|
toker->next();
|
||||||
DeclNode *d=parseVarDecl( DECL_LOCAL,false );
|
DeclNode *d=parseVarDecl( DECL_LOCAL,false );
|
||||||
StmtNode *stmt=d_new DeclStmtNode( d );
|
StmtNode *stmt=new DeclStmtNode( d );
|
||||||
stmt->pos=pos;pos=toker->pos();
|
stmt->pos=pos;pos=toker->pos();
|
||||||
stmts->push_back( stmt );
|
stmts->push_back( stmt );
|
||||||
}while( toker->curr()==',' );
|
}while( toker->curr()==',' );
|
||||||
@@ -342,7 +342,7 @@ void Parser::parseStmtSeq( StmtSeqNode *stmts,int scope ){
|
|||||||
do{
|
do{
|
||||||
toker->next();
|
toker->next();
|
||||||
DeclNode *d=parseVarDecl( DECL_GLOBAL,false );
|
DeclNode *d=parseVarDecl( DECL_GLOBAL,false );
|
||||||
StmtNode *stmt=d_new DeclStmtNode( d );
|
StmtNode *stmt=new DeclStmtNode( d );
|
||||||
stmt->pos=pos;pos=toker->pos();
|
stmt->pos=pos;pos=toker->pos();
|
||||||
stmts->push_back( stmt );
|
stmts->push_back( stmt );
|
||||||
}while( toker->curr()==',' );
|
}while( toker->curr()==',' );
|
||||||
@@ -350,7 +350,7 @@ void Parser::parseStmtSeq( StmtSeqNode *stmts,int scope ){
|
|||||||
case '.':
|
case '.':
|
||||||
{
|
{
|
||||||
toker->next();string t=parseIdent();
|
toker->next();string t=parseIdent();
|
||||||
result=d_new LabelNode( t,datas->size() );
|
result=new LabelNode( t,datas->size() );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@@ -387,23 +387,23 @@ VarNode *Parser::parseVar( const string &ident,const string &tag ){
|
|||||||
a_ptr<ExprSeqNode> exprs( parseExprSeq() );
|
a_ptr<ExprSeqNode> exprs( parseExprSeq() );
|
||||||
if( toker->curr()!=')' ) exp( "')'" );
|
if( toker->curr()!=')' ) exp( "')'" );
|
||||||
toker->next();
|
toker->next();
|
||||||
var=d_new ArrayVarNode( ident,tag,exprs.release() );
|
var=new ArrayVarNode( ident,tag,exprs.release() );
|
||||||
}else var=d_new IdentVarNode( ident,tag );
|
}else var=new IdentVarNode( ident,tag );
|
||||||
|
|
||||||
for(;;){
|
for(;;){
|
||||||
if( toker->curr()=='\\' ){
|
if( toker->curr()=='\\' ){
|
||||||
toker->next();
|
toker->next();
|
||||||
string ident=parseIdent();
|
string ident=parseIdent();
|
||||||
string tag=parseTypeTag();
|
string tag=parseTypeTag();
|
||||||
ExprNode *expr=d_new VarExprNode( var.release() );
|
ExprNode *expr=new VarExprNode( var.release() );
|
||||||
var=d_new FieldVarNode( expr,ident,tag );
|
var=new FieldVarNode( expr,ident,tag );
|
||||||
}else if( toker->curr()=='[' ){
|
}else if( toker->curr()=='[' ){
|
||||||
toker->next();
|
toker->next();
|
||||||
a_ptr<ExprSeqNode> exprs( parseExprSeq() );
|
a_ptr<ExprSeqNode> exprs( parseExprSeq() );
|
||||||
if( exprs->exprs.size()!=1 || toker->curr()!=']' ) exp( "']'" );
|
if( exprs->exprs.size()!=1 || toker->curr()!=']' ) exp( "']'" );
|
||||||
toker->next();
|
toker->next();
|
||||||
ExprNode *expr=d_new VarExprNode( var.release() );
|
ExprNode *expr=new VarExprNode( var.release() );
|
||||||
var=d_new VectorVarNode( expr,exprs.release() );
|
var=new VectorVarNode( expr,exprs.release() );
|
||||||
}else{
|
}else{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -422,13 +422,13 @@ DeclNode *Parser::parseVarDecl( int kind,bool constant ){
|
|||||||
a_ptr<ExprSeqNode> exprs( parseExprSeq() );
|
a_ptr<ExprSeqNode> exprs( parseExprSeq() );
|
||||||
if( exprs->size()!=1 || toker->curr()!=']' ) exp( "']'" );
|
if( exprs->size()!=1 || toker->curr()!=']' ) exp( "']'" );
|
||||||
toker->next();
|
toker->next();
|
||||||
d=d_new VectorDeclNode( ident,tag,exprs.release(),kind );
|
d=new VectorDeclNode( ident,tag,exprs.release(),kind );
|
||||||
}else{
|
}else{
|
||||||
ExprNode *expr=0;
|
ExprNode *expr=0;
|
||||||
if( toker->curr()=='=' ){
|
if( toker->curr()=='=' ){
|
||||||
toker->next();expr=parseExpr( false );
|
toker->next();expr=parseExpr( false );
|
||||||
}else if( constant ) ex( "Constants must be initialized" );
|
}else if( constant ) ex( "Constants must be initialized" );
|
||||||
d=d_new VarDeclNode( ident,tag,kind,constant,expr );
|
d=new VarDeclNode( ident,tag,kind,constant,expr );
|
||||||
}
|
}
|
||||||
d->pos=pos;d->file=incfile;
|
d->pos=pos;d->file=incfile;
|
||||||
return d;
|
return d;
|
||||||
@@ -443,7 +443,7 @@ DimNode *Parser::parseArrayDecl(){
|
|||||||
if( toker->curr()!=')' ) exp( "')'" );
|
if( toker->curr()!=')' ) exp( "')'" );
|
||||||
if( !exprs->size() ) ex( "can't have a 0 dimensional array" );
|
if( !exprs->size() ) ex( "can't have a 0 dimensional array" );
|
||||||
toker->next();
|
toker->next();
|
||||||
DimNode *d=d_new DimNode( ident,tag,exprs.release() );
|
DimNode *d=new DimNode( ident,tag,exprs.release() );
|
||||||
arrayDecls[ident]=d;
|
arrayDecls[ident]=d;
|
||||||
d->pos=pos;
|
d->pos=pos;
|
||||||
return d;
|
return d;
|
||||||
@@ -454,7 +454,7 @@ DeclNode *Parser::parseFuncDecl(){
|
|||||||
string ident=parseIdent();
|
string ident=parseIdent();
|
||||||
string tag=parseTypeTag();
|
string tag=parseTypeTag();
|
||||||
if( toker->curr()!='(' ) exp( "'('" );
|
if( toker->curr()!='(' ) exp( "'('" );
|
||||||
a_ptr<DeclSeqNode> params( d_new DeclSeqNode() );
|
a_ptr<DeclSeqNode> params( new DeclSeqNode() );
|
||||||
if( toker->next()!=')' ){
|
if( toker->next()!=')' ){
|
||||||
for(;;){
|
for(;;){
|
||||||
params->push_back( parseVarDecl( DECL_PARAM,false ) );
|
params->push_back( parseVarDecl( DECL_PARAM,false ) );
|
||||||
@@ -466,9 +466,9 @@ DeclNode *Parser::parseFuncDecl(){
|
|||||||
toker->next();
|
toker->next();
|
||||||
a_ptr<StmtSeqNode> stmts( parseStmtSeq( STMTS_BLOCK ) );
|
a_ptr<StmtSeqNode> stmts( parseStmtSeq( STMTS_BLOCK ) );
|
||||||
if( toker->curr()!=ENDFUNCTION ) exp( "'End Function'" );
|
if( toker->curr()!=ENDFUNCTION ) exp( "'End Function'" );
|
||||||
StmtNode *ret=d_new ReturnNode(0);ret->pos=toker->pos();
|
StmtNode *ret=new ReturnNode(0);ret->pos=toker->pos();
|
||||||
stmts->push_back( ret );toker->next();
|
stmts->push_back( ret );toker->next();
|
||||||
DeclNode *d=d_new FuncDeclNode( ident,tag,params.release(),stmts.release() );
|
DeclNode *d=new FuncDeclNode( ident,tag,params.release(),stmts.release() );
|
||||||
d->pos=pos;d->file=incfile;
|
d->pos=pos;d->file=incfile;
|
||||||
return d;
|
return d;
|
||||||
}
|
}
|
||||||
@@ -477,7 +477,7 @@ DeclNode *Parser::parseStructDecl(){
|
|||||||
int pos=toker->pos();
|
int pos=toker->pos();
|
||||||
string ident=parseIdent();
|
string ident=parseIdent();
|
||||||
while( toker->curr()=='\n' ) toker->next();
|
while( toker->curr()=='\n' ) toker->next();
|
||||||
a_ptr<DeclSeqNode> fields( d_new DeclSeqNode() );
|
a_ptr<DeclSeqNode> fields( new DeclSeqNode() );
|
||||||
while( toker->curr()==FIELD ){
|
while( toker->curr()==FIELD ){
|
||||||
do{
|
do{
|
||||||
toker->next();
|
toker->next();
|
||||||
@@ -487,7 +487,7 @@ DeclNode *Parser::parseStructDecl(){
|
|||||||
}
|
}
|
||||||
if( toker->curr()!=ENDTYPE ) exp( "'Field' or 'End Type'" );
|
if( toker->curr()!=ENDTYPE ) exp( "'Field' or 'End Type'" );
|
||||||
toker->next();
|
toker->next();
|
||||||
DeclNode *d=d_new StructDeclNode( ident,fields.release() );
|
DeclNode *d=new StructDeclNode( ident,fields.release() );
|
||||||
d->pos=pos;d->file=incfile;
|
d->pos=pos;d->file=incfile;
|
||||||
return d;
|
return d;
|
||||||
}
|
}
|
||||||
@@ -507,7 +507,7 @@ IfNode *Parser::parseIf(){
|
|||||||
toker->next();
|
toker->next();
|
||||||
IfNode *ifnode=parseIf();
|
IfNode *ifnode=parseIf();
|
||||||
ifnode->pos=pos;
|
ifnode->pos=pos;
|
||||||
elseOpt=d_new StmtSeqNode( incfile );
|
elseOpt=new StmtSeqNode( incfile );
|
||||||
elseOpt->push_back( ifnode );
|
elseOpt->push_back( ifnode );
|
||||||
}else if( toker->curr()==ELSE ){
|
}else if( toker->curr()==ELSE ){
|
||||||
toker->next();
|
toker->next();
|
||||||
@@ -517,11 +517,11 @@ IfNode *Parser::parseIf(){
|
|||||||
if( toker->curr()!=ENDIF ) exp( "'EndIf'" );
|
if( toker->curr()!=ENDIF ) exp( "'EndIf'" );
|
||||||
}else if( toker->curr()!='\n' ) exp( "end-of-line" );
|
}else if( toker->curr()!='\n' ) exp( "end-of-line" );
|
||||||
|
|
||||||
return d_new IfNode( expr.release(),stmts.release(),elseOpt.release() );
|
return new IfNode( expr.release(),stmts.release(),elseOpt.release() );
|
||||||
}
|
}
|
||||||
|
|
||||||
ExprSeqNode *Parser::parseExprSeq(){
|
ExprSeqNode *Parser::parseExprSeq(){
|
||||||
a_ptr<ExprSeqNode> exprs( d_new ExprSeqNode() );
|
a_ptr<ExprSeqNode> exprs( new ExprSeqNode() );
|
||||||
bool opt=true;
|
bool opt=true;
|
||||||
while( ExprNode *e=parseExpr( opt ) ){
|
while( ExprNode *e=parseExpr( opt ) ){
|
||||||
exprs->push_back( e );
|
exprs->push_back( e );
|
||||||
@@ -535,7 +535,7 @@ ExprNode *Parser::parseExpr( bool opt ){
|
|||||||
if( toker->curr()==NOT ){
|
if( toker->curr()==NOT ){
|
||||||
toker->next();
|
toker->next();
|
||||||
ExprNode *expr=parseExpr1( false );
|
ExprNode *expr=parseExpr1( false );
|
||||||
return d_new RelExprNode( '=',expr,d_new IntConstNode( 0 ) );
|
return new RelExprNode( '=',expr,new IntConstNode( 0 ) );
|
||||||
}
|
}
|
||||||
return parseExpr1( opt );
|
return parseExpr1( opt );
|
||||||
}
|
}
|
||||||
@@ -548,7 +548,7 @@ ExprNode *Parser::parseExpr1( bool opt ){
|
|||||||
int c=toker->curr();
|
int c=toker->curr();
|
||||||
if( c!=AND && c!=OR && c!=XOR ) return lhs.release();
|
if( c!=AND && c!=OR && c!=XOR ) return lhs.release();
|
||||||
toker->next();ExprNode *rhs=parseExpr2( false );
|
toker->next();ExprNode *rhs=parseExpr2( false );
|
||||||
lhs=d_new BinExprNode( c,lhs.release(),rhs );
|
lhs=new BinExprNode( c,lhs.release(),rhs );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -560,7 +560,7 @@ ExprNode *Parser::parseExpr2( bool opt ){
|
|||||||
int c=toker->curr();
|
int c=toker->curr();
|
||||||
if( c!='<' && c!='>' && c!='=' && c!=LE && c!=GE && c!=NE ) return lhs.release();
|
if( c!='<' && c!='>' && c!='=' && c!=LE && c!=GE && c!=NE ) return lhs.release();
|
||||||
toker->next();ExprNode *rhs=parseExpr3( false );
|
toker->next();ExprNode *rhs=parseExpr3( false );
|
||||||
lhs=d_new RelExprNode( c,lhs.release(),rhs );
|
lhs=new RelExprNode( c,lhs.release(),rhs );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -572,7 +572,7 @@ ExprNode *Parser::parseExpr3( bool opt ){
|
|||||||
int c=toker->curr();
|
int c=toker->curr();
|
||||||
if( c!='+' && c!='-' ) return lhs.release();
|
if( c!='+' && c!='-' ) return lhs.release();
|
||||||
toker->next();ExprNode *rhs=parseExpr4( false );
|
toker->next();ExprNode *rhs=parseExpr4( false );
|
||||||
lhs=d_new ArithExprNode( c,lhs.release(),rhs );
|
lhs=new ArithExprNode( c,lhs.release(),rhs );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -583,7 +583,7 @@ ExprNode *Parser::parseExpr4( bool opt ){
|
|||||||
int c=toker->curr();
|
int c=toker->curr();
|
||||||
if( c!=SHL && c!=SHR && c!=SAR ) return lhs.release();
|
if( c!=SHL && c!=SHR && c!=SAR ) return lhs.release();
|
||||||
toker->next();ExprNode *rhs=parseExpr5( false );
|
toker->next();ExprNode *rhs=parseExpr5( false );
|
||||||
lhs=d_new BinExprNode( c,lhs.release(),rhs );
|
lhs=new BinExprNode( c,lhs.release(),rhs );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -595,7 +595,7 @@ ExprNode *Parser::parseExpr5( bool opt ){
|
|||||||
int c=toker->curr();
|
int c=toker->curr();
|
||||||
if( c!='*' && c!='/' && c!=MOD ) return lhs.release();
|
if( c!='*' && c!='/' && c!=MOD ) return lhs.release();
|
||||||
toker->next();ExprNode *rhs=parseExpr6( false );
|
toker->next();ExprNode *rhs=parseExpr6( false );
|
||||||
lhs=d_new ArithExprNode( c,lhs.release(),rhs );
|
lhs=new ArithExprNode( c,lhs.release(),rhs );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -607,7 +607,7 @@ ExprNode *Parser::parseExpr6( bool opt ){
|
|||||||
int c=toker->curr();
|
int c=toker->curr();
|
||||||
if( c!='^' ) return lhs.release();
|
if( c!='^' ) return lhs.release();
|
||||||
toker->next();ExprNode *rhs=parseUniExpr( false );
|
toker->next();ExprNode *rhs=parseUniExpr( false );
|
||||||
lhs=d_new ArithExprNode( c,lhs.release(),rhs );
|
lhs=new ArithExprNode( c,lhs.release(),rhs );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -621,46 +621,46 @@ ExprNode *Parser::parseUniExpr( bool opt ){
|
|||||||
case BBINT:
|
case BBINT:
|
||||||
if( toker->next()=='%' ) toker->next();
|
if( toker->next()=='%' ) toker->next();
|
||||||
result=parseUniExpr( false );
|
result=parseUniExpr( false );
|
||||||
result=d_new CastNode( result,Type::int_type );
|
result=new CastNode( result,Type::int_type );
|
||||||
break;
|
break;
|
||||||
case BBFLOAT:
|
case BBFLOAT:
|
||||||
if( toker->next()=='#' ) toker->next();
|
if( toker->next()=='#' ) toker->next();
|
||||||
result=parseUniExpr( false );
|
result=parseUniExpr( false );
|
||||||
result=d_new CastNode( result,Type::float_type );
|
result=new CastNode( result,Type::float_type );
|
||||||
break;
|
break;
|
||||||
case BBSTR:
|
case BBSTR:
|
||||||
if( toker->next()=='$' ) toker->next();
|
if( toker->next()=='$' ) toker->next();
|
||||||
result=parseUniExpr( false );
|
result=parseUniExpr( false );
|
||||||
result=d_new CastNode( result,Type::string_type );
|
result=new CastNode( result,Type::string_type );
|
||||||
break;
|
break;
|
||||||
case OBJECT:
|
case OBJECT:
|
||||||
if( toker->next()=='.' ) toker->next();
|
if( toker->next()=='.' ) toker->next();
|
||||||
t=parseIdent();
|
t=parseIdent();
|
||||||
result=parseUniExpr( false );
|
result=parseUniExpr( false );
|
||||||
result=d_new ObjectCastNode( result,t );
|
result=new ObjectCastNode( result,t );
|
||||||
break;
|
break;
|
||||||
case BBHANDLE:
|
case BBHANDLE:
|
||||||
toker->next();
|
toker->next();
|
||||||
result=parseUniExpr( false );
|
result=parseUniExpr( false );
|
||||||
result=d_new ObjectHandleNode( result );
|
result=new ObjectHandleNode( result );
|
||||||
break;
|
break;
|
||||||
case BEFORE:
|
case BEFORE:
|
||||||
toker->next();
|
toker->next();
|
||||||
result=parseUniExpr( false );
|
result=parseUniExpr( false );
|
||||||
result=d_new BeforeNode( result );
|
result=new BeforeNode( result );
|
||||||
break;
|
break;
|
||||||
case AFTER:
|
case AFTER:
|
||||||
toker->next();
|
toker->next();
|
||||||
result=parseUniExpr( false );
|
result=parseUniExpr( false );
|
||||||
result=d_new AfterNode( result );
|
result=new AfterNode( result );
|
||||||
break;
|
break;
|
||||||
case '+':case '-':case '~':case ABS:case SGN:
|
case '+':case '-':case '~':case ABS:case SGN:
|
||||||
toker->next();
|
toker->next();
|
||||||
result=parseUniExpr( false );
|
result=parseUniExpr( false );
|
||||||
if( c=='~' ){
|
if( c=='~' ){
|
||||||
result=d_new BinExprNode( XOR,result,d_new IntConstNode( -1 ) );
|
result=new BinExprNode( XOR,result,new IntConstNode( -1 ) );
|
||||||
}else{
|
}else{
|
||||||
result=d_new UniExprNode( c,result );
|
result=new UniExprNode( c,result );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@@ -686,53 +686,53 @@ ExprNode *Parser::parsePrimary( bool opt ){
|
|||||||
break;
|
break;
|
||||||
case BBNEW:
|
case BBNEW:
|
||||||
toker->next();t=parseIdent();
|
toker->next();t=parseIdent();
|
||||||
result=d_new NewNode( t );
|
result=new NewNode( t );
|
||||||
break;
|
break;
|
||||||
case FIRST:
|
case FIRST:
|
||||||
toker->next();t=parseIdent();
|
toker->next();t=parseIdent();
|
||||||
result=d_new FirstNode( t );
|
result=new FirstNode( t );
|
||||||
break;
|
break;
|
||||||
case LAST:
|
case LAST:
|
||||||
toker->next();t=parseIdent();
|
toker->next();t=parseIdent();
|
||||||
result=d_new LastNode( t );
|
result=new LastNode( t );
|
||||||
break;
|
break;
|
||||||
case BBNULL:
|
case BBNULL:
|
||||||
result=d_new NullNode();
|
result=new NullNode();
|
||||||
toker->next();
|
toker->next();
|
||||||
break;
|
break;
|
||||||
case INTCONST:
|
case INTCONST:
|
||||||
result=d_new IntConstNode( atoi( toker->text() ) );
|
result=new IntConstNode( atoi( toker->text() ) );
|
||||||
toker->next();
|
toker->next();
|
||||||
break;
|
break;
|
||||||
case FLOATCONST:
|
case FLOATCONST:
|
||||||
result=d_new FloatConstNode( atof( toker->text() ) );
|
result=new FloatConstNode( atof( toker->text() ) );
|
||||||
toker->next();
|
toker->next();
|
||||||
break;
|
break;
|
||||||
case STRINGCONST:
|
case STRINGCONST:
|
||||||
t=toker->text();
|
t=toker->text();
|
||||||
result=d_new StringConstNode( t.substr( 1,t.size()-2 ) );
|
result=new StringConstNode( t.substr( 1,t.size()-2 ) );
|
||||||
toker->next();
|
toker->next();
|
||||||
break;
|
break;
|
||||||
case BINCONST:
|
case BINCONST:
|
||||||
n=0;t=toker->text();
|
n=0;t=toker->text();
|
||||||
for( k=1;k<t.size();++k ) n=(n<<1)|(t[k]=='1');
|
for( k=1;k<t.size();++k ) n=(n<<1)|(t[k]=='1');
|
||||||
result=d_new IntConstNode( n );
|
result=new IntConstNode( n );
|
||||||
toker->next();
|
toker->next();
|
||||||
break;
|
break;
|
||||||
case HEXCONST:
|
case HEXCONST:
|
||||||
n=0;t=toker->text();
|
n=0;t=toker->text();
|
||||||
for( k=1;k<t.size();++k ) n=(n<<4)|( isdigit(t[k]) ? t[k]&0xf : (t[k]&7)+9 );
|
for( k=1;k<t.size();++k ) n=(n<<4)|( isdigit(t[k]) ? t[k]&0xf : (t[k]&7)+9 );
|
||||||
result=d_new IntConstNode( n );
|
result=new IntConstNode( n );
|
||||||
toker->next();
|
toker->next();
|
||||||
break;
|
break;
|
||||||
case PI:
|
case PI:
|
||||||
result=d_new FloatConstNode( 3.1415926535897932384626433832795f );
|
result=new FloatConstNode( 3.1415926535897932384626433832795f );
|
||||||
toker->next();break;
|
toker->next();break;
|
||||||
case BBTRUE:
|
case BBTRUE:
|
||||||
result=d_new IntConstNode( 1 );
|
result=new IntConstNode( 1 );
|
||||||
toker->next();break;
|
toker->next();break;
|
||||||
case BBFALSE:
|
case BBFALSE:
|
||||||
result=d_new IntConstNode( 0 );
|
result=new IntConstNode( 0 );
|
||||||
toker->next();break;
|
toker->next();break;
|
||||||
case IDENT:
|
case IDENT:
|
||||||
ident=toker->text();
|
ident=toker->text();
|
||||||
@@ -743,11 +743,11 @@ ExprNode *Parser::parsePrimary( bool opt ){
|
|||||||
a_ptr<ExprSeqNode> exprs( parseExprSeq() );
|
a_ptr<ExprSeqNode> exprs( parseExprSeq() );
|
||||||
if( toker->curr()!=')' ) exp( "')'" );
|
if( toker->curr()!=')' ) exp( "')'" );
|
||||||
toker->next();
|
toker->next();
|
||||||
result=d_new CallNode( ident,tag,exprs.release() );
|
result=new CallNode( ident,tag,exprs.release() );
|
||||||
}else{
|
}else{
|
||||||
//must be a var
|
//must be a var
|
||||||
VarNode *var=parseVar( ident,tag );
|
VarNode *var=parseVar( ident,tag );
|
||||||
result=d_new VarExprNode( var );
|
result=new VarExprNode( var );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ Environ *ProgNode::semant( Environ *e ){
|
|||||||
|
|
||||||
StmtSeqNode::reset( stmts->file,file_lab );
|
StmtSeqNode::reset( stmts->file,file_lab );
|
||||||
|
|
||||||
a_ptr<Environ> env( d_new Environ( genLabel(),Type::int_type,0,e ) );
|
a_ptr<Environ> env( new Environ( genLabel(),Type::int_type,0,e ) );
|
||||||
|
|
||||||
consts->proto( env->decls,env );
|
consts->proto( env->decls,env );
|
||||||
structs->proto( env->typeDecls,env );
|
structs->proto( env->typeDecls,env );
|
||||||
@@ -75,7 +75,7 @@ void ProgNode::translate( Codegen *g,const vector<UserFunc> &usrfuncs ){
|
|||||||
//leave main program
|
//leave main program
|
||||||
g->label( sem_env->funcLabel+"_leave" );
|
g->label( sem_env->funcLabel+"_leave" );
|
||||||
t=deleteVars( sem_env );
|
t=deleteVars( sem_env );
|
||||||
if( g->debug ) t=d_new TNode( IR_SEQ,call( "__bbDebugLeave" ),t );
|
if( g->debug ) t=new TNode( IR_SEQ,call( "__bbDebugLeave" ),t );
|
||||||
g->leave( t,0 );
|
g->leave( t,0 );
|
||||||
|
|
||||||
//structs
|
//structs
|
||||||
|
|||||||
+11
-11
@@ -94,7 +94,7 @@ void DimNode::semant(Environ *e) {
|
|||||||
} else {
|
} else {
|
||||||
if (e->level > 0) ex("Array not found in main program");
|
if (e->level > 0) ex("Array not found in main program");
|
||||||
if (!t) t = Type::int_type;
|
if (!t) t = Type::int_type;
|
||||||
sem_type = d_new ArrayType(t, exprs->size());
|
sem_type = new ArrayType(t, exprs->size());
|
||||||
sem_decl = e->decls->insertDecl(ident, sem_type, DECL_ARRAY);
|
sem_decl = e->decls->insertDecl(ident, sem_type, DECL_ARRAY);
|
||||||
e->types.push_back(sem_type);
|
e->types.push_back(sem_type);
|
||||||
}
|
}
|
||||||
@@ -255,7 +255,7 @@ void ExitNode::semant(Environ *e) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ExitNode::translate(Codegen *g) {
|
void ExitNode::translate(Codegen *g) {
|
||||||
g->code(d_new TNode(IR_JUMP, 0, 0, sem_brk));
|
g->code(new TNode(IR_JUMP, 0, 0, sem_brk));
|
||||||
}
|
}
|
||||||
|
|
||||||
/////////////////////
|
/////////////////////
|
||||||
@@ -340,7 +340,7 @@ void ForNode::translate(Codegen *g) {
|
|||||||
//execute the step part
|
//execute the step part
|
||||||
debug(nextPos, g);
|
debug(nextPos, g);
|
||||||
int op = ty == Type::int_type ? IR_ADD : IR_FADD;
|
int op = ty == Type::int_type ? IR_ADD : IR_FADD;
|
||||||
t = d_new TNode(op, var->load(g), stepExpr->translate(g));
|
t = new TNode(op, var->load(g), stepExpr->translate(g));
|
||||||
g->code(var->store(g, t));
|
g->code(var->store(g, t));
|
||||||
|
|
||||||
//test for loop cond
|
//test for loop cond
|
||||||
@@ -408,13 +408,13 @@ void ReturnNode::semant(Environ *e) {
|
|||||||
if (e->level > 0) {
|
if (e->level > 0) {
|
||||||
if (!expr) {
|
if (!expr) {
|
||||||
if (e->returnType == Type::float_type) {
|
if (e->returnType == Type::float_type) {
|
||||||
expr = d_new FloatConstNode(0);
|
expr = new FloatConstNode(0);
|
||||||
} else if (e->returnType == Type::string_type) {
|
} else if (e->returnType == Type::string_type) {
|
||||||
expr = d_new StringConstNode("");
|
expr = new StringConstNode("");
|
||||||
} else if (e->returnType->structType()) {
|
} else if (e->returnType->structType()) {
|
||||||
expr = d_new NullNode();
|
expr = new NullNode();
|
||||||
} else {
|
} else {
|
||||||
expr = d_new IntConstNode(0);
|
expr = new IntConstNode(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
expr = expr->semant(e);
|
expr = expr->semant(e);
|
||||||
@@ -425,16 +425,16 @@ void ReturnNode::semant(Environ *e) {
|
|||||||
|
|
||||||
void ReturnNode::translate(Codegen *g) {
|
void ReturnNode::translate(Codegen *g) {
|
||||||
if (!expr) {
|
if (!expr) {
|
||||||
g->code(d_new TNode(IR_RET, 0, 0));
|
g->code(new TNode(IR_RET, 0, 0));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
TNode *t = expr->translate(g);
|
TNode *t = expr->translate(g);
|
||||||
|
|
||||||
if (expr->sem_type == Type::float_type) {
|
if (expr->sem_type == Type::float_type) {
|
||||||
g->code(d_new TNode(IR_FRETURN, t, 0, returnLabel));
|
g->code(new TNode(IR_FRETURN, t, 0, returnLabel));
|
||||||
} else {
|
} else {
|
||||||
g->code(d_new TNode(IR_RETURN, t, 0, returnLabel));
|
g->code(new TNode(IR_RETURN, t, 0, returnLabel));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -494,7 +494,7 @@ void SelectNode::semant(Environ *e) {
|
|||||||
|
|
||||||
//we need a temp var
|
//we need a temp var
|
||||||
Decl *d = e->decls->insertDecl(genLabel(), expr->sem_type, DECL_LOCAL);
|
Decl *d = e->decls->insertDecl(genLabel(), expr->sem_type, DECL_LOCAL);
|
||||||
sem_temp = d_new DeclVarNode(d);
|
sem_temp = new DeclVarNode(d);
|
||||||
|
|
||||||
for (int k = 0; k < cases.size(); ++k) {
|
for (int k = 0; k < cases.size(); ++k) {
|
||||||
CaseNode *c = cases[k];
|
CaseNode *c = cases[k];
|
||||||
|
|||||||
@@ -149,7 +149,7 @@ static gxChannel *allocSoundChannel( int n ){
|
|||||||
for( int k=0;k<soundChannels.size();++k ){
|
for( int k=0;k<soundChannels.size();++k ){
|
||||||
chan=soundChannels[next_chan];
|
chan=soundChannels[next_chan];
|
||||||
if( !chan ){
|
if( !chan ){
|
||||||
chan=soundChannels[next_chan]=d_new SoundChannel();
|
chan=soundChannels[next_chan]=new SoundChannel();
|
||||||
channels.push_back(chan);
|
channels.push_back(chan);
|
||||||
}else if( chan->isPlaying() ){
|
}else if( chan->isPlaying() ){
|
||||||
chan=0;
|
chan=0;
|
||||||
@@ -162,7 +162,7 @@ static gxChannel *allocSoundChannel( int n ){
|
|||||||
next_chan=soundChannels.size();
|
next_chan=soundChannels.size();
|
||||||
soundChannels.resize(soundChannels.size()*2);
|
soundChannels.resize(soundChannels.size()*2);
|
||||||
for( int k=next_chan;k<soundChannels.size();++k ) soundChannels[k]=0;
|
for( int k=next_chan;k<soundChannels.size();++k ) soundChannels[k]=0;
|
||||||
chan=soundChannels[next_chan++]=d_new SoundChannel();
|
chan=soundChannels[next_chan++]=new SoundChannel();
|
||||||
channels.push_back( chan );
|
channels.push_back( chan );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -176,7 +176,7 @@ runtime(r){
|
|||||||
soundChannels.resize( 4096 );
|
soundChannels.resize( 4096 );
|
||||||
for( int k=0;k<4096;++k ) soundChannels[k]=0;
|
for( int k=0;k<4096;++k ) soundChannels[k]=0;
|
||||||
|
|
||||||
cdChannel=d_new CDChannel();
|
cdChannel=new CDChannel();
|
||||||
channels.push_back( cdChannel );
|
channels.push_back( cdChannel );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -219,7 +219,7 @@ gxSound *gxAudio::loadSound( const string &f,bool use3d ){
|
|||||||
FSOUND_SAMPLE *sample=FSOUND_Sample_Load( FSOUND_FREE,f.c_str(),flags,0,0 );
|
FSOUND_SAMPLE *sample=FSOUND_Sample_Load( FSOUND_FREE,f.c_str(),flags,0,0 );
|
||||||
if( !sample ) return 0;
|
if( !sample ) return 0;
|
||||||
|
|
||||||
gxSound *sound=d_new gxSound( this,sample );
|
gxSound *sound=new gxSound( this,sample );
|
||||||
sound_set.insert( sound );
|
sound_set.insert( sound );
|
||||||
return sound;
|
return sound;
|
||||||
}
|
}
|
||||||
@@ -268,11 +268,11 @@ gxChannel *gxAudio::playFile( const string &t,bool use_3d ){
|
|||||||
f.find( ".asf" )!=string::npos ){
|
f.find( ".asf" )!=string::npos ){
|
||||||
FSOUND_STREAM *stream=FSOUND_Stream_Open( f.c_str(),use_3d,0,0 );
|
FSOUND_STREAM *stream=FSOUND_Stream_Open( f.c_str(),use_3d,0,0 );
|
||||||
if( !stream ) return 0;
|
if( !stream ) return 0;
|
||||||
chan=d_new StreamChannel( stream );
|
chan=new StreamChannel( stream );
|
||||||
}else{
|
}else{
|
||||||
FMUSIC_MODULE *module=FMUSIC_LoadSong( f.c_str() );
|
FMUSIC_MODULE *module=FMUSIC_LoadSong( f.c_str() );
|
||||||
if( !module ) return 0;
|
if( !module ) return 0;
|
||||||
chan=d_new MusicChannel( module );
|
chan=new MusicChannel( module );
|
||||||
}
|
}
|
||||||
channels.push_back( chan );
|
channels.push_back( chan );
|
||||||
songs[f]=chan;
|
songs[f]=chan;
|
||||||
|
|||||||
@@ -528,11 +528,11 @@ bool gxCanvas::collide(int x1, int y1, const gxCanvas *i2, int x2, int y2, bool
|
|||||||
if (solid) return true;
|
if (solid) return true;
|
||||||
|
|
||||||
if (!cm_mask) {
|
if (!cm_mask) {
|
||||||
cm_mask = d_new unsigned[cm_pitch*clip_rect.bottom];
|
cm_mask = new unsigned[cm_pitch*clip_rect.bottom];
|
||||||
updateBitMask(clip_rect);
|
updateBitMask(clip_rect);
|
||||||
}
|
}
|
||||||
if (!i2->cm_mask) {
|
if (!i2->cm_mask) {
|
||||||
i2->cm_mask = d_new unsigned[i2->cm_pitch*i2->clip_rect.bottom];
|
i2->cm_mask = new unsigned[i2->cm_pitch*i2->clip_rect.bottom];
|
||||||
i2->updateBitMask(i2->clip_rect);
|
i2->updateBitMask(i2->clip_rect);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -616,7 +616,7 @@ bool gxCanvas::rect_collide(int x1, int y1, int x2, int y2, int w2, int h2, bool
|
|||||||
ir.bottom = r1.bottom < r2.bottom ? r1.bottom : r2.bottom;
|
ir.bottom = r1.bottom < r2.bottom ? r1.bottom : r2.bottom;
|
||||||
|
|
||||||
if (!cm_mask) {
|
if (!cm_mask) {
|
||||||
cm_mask = d_new unsigned[cm_pitch*clip_rect.bottom];
|
cm_mask = new unsigned[cm_pitch*clip_rect.bottom];
|
||||||
updateBitMask(clip_rect);
|
updateBitMask(clip_rect);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ gxDir *gxFileSystem::openDir( const std::string &name,int flags ){
|
|||||||
WIN32_FIND_DATA f;
|
WIN32_FIND_DATA f;
|
||||||
HANDLE h=FindFirstFile( t.c_str(),&f );
|
HANDLE h=FindFirstFile( t.c_str(),&f );
|
||||||
if( h!=INVALID_HANDLE_VALUE ){
|
if( h!=INVALID_HANDLE_VALUE ){
|
||||||
gxDir *d=d_new gxDir( h,f );
|
gxDir *d=new gxDir( h,f );
|
||||||
dir_set.insert( d );
|
dir_set.insert( d );
|
||||||
return d;
|
return d;
|
||||||
}
|
}
|
||||||
|
|||||||
+12
-12
@@ -10,8 +10,8 @@ gxGraphics::gxGraphics(gxRuntime *rt, IDirectDraw7 *dd, IDirectDrawSurface7 *fs,
|
|||||||
|
|
||||||
dirDraw->QueryInterface(IID_IDirectDraw, (void**)&ds_dirDraw);
|
dirDraw->QueryInterface(IID_IDirectDraw, (void**)&ds_dirDraw);
|
||||||
|
|
||||||
front_canvas = d_new gxCanvas(this, fs, 0);
|
front_canvas = new gxCanvas(this, fs, 0);
|
||||||
back_canvas = d_new gxCanvas(this, bs, 0);
|
back_canvas = new gxCanvas(this, bs, 0);
|
||||||
|
|
||||||
front_canvas->cls();
|
front_canvas->cls();
|
||||||
back_canvas->cls();
|
back_canvas->cls();
|
||||||
@@ -170,7 +170,7 @@ gxMovie *gxGraphics::openMovie(const string &file, int flags) {
|
|||||||
delete path;
|
delete path;
|
||||||
|
|
||||||
if (n == S_OK) {
|
if (n == S_OK) {
|
||||||
gxMovie *movie = d_new gxMovie(this, iam_stream);
|
gxMovie *movie = new gxMovie(this, iam_stream);
|
||||||
movie_set.insert(movie);
|
movie_set.insert(movie);
|
||||||
return movie;
|
return movie;
|
||||||
}
|
}
|
||||||
@@ -192,7 +192,7 @@ void gxGraphics::closeMovie(gxMovie *m) {
|
|||||||
gxCanvas *gxGraphics::createCanvas(int w, int h, int flags) {
|
gxCanvas *gxGraphics::createCanvas(int w, int h, int flags) {
|
||||||
ddSurf *s = ddUtil::createSurface(w, h, flags, this);
|
ddSurf *s = ddUtil::createSurface(w, h, flags, this);
|
||||||
if (!s) return 0;
|
if (!s) return 0;
|
||||||
gxCanvas *c = d_new gxCanvas(this, s, flags);
|
gxCanvas *c = new gxCanvas(this, s, flags);
|
||||||
canvas_set.insert(c);
|
canvas_set.insert(c);
|
||||||
c->cls();
|
c->cls();
|
||||||
return c;
|
return c;
|
||||||
@@ -201,7 +201,7 @@ gxCanvas *gxGraphics::createCanvas(int w, int h, int flags) {
|
|||||||
gxCanvas *gxGraphics::loadCanvas(const string &f, int flags) {
|
gxCanvas *gxGraphics::loadCanvas(const string &f, int flags) {
|
||||||
ddSurf *s = ddUtil::loadSurface(f, flags, this);
|
ddSurf *s = ddUtil::loadSurface(f, flags, this);
|
||||||
if (!s) return 0;
|
if (!s) return 0;
|
||||||
gxCanvas *c = d_new gxCanvas(this, s, flags);
|
gxCanvas *c = new gxCanvas(this, s, flags);
|
||||||
canvas_set.insert(c);
|
canvas_set.insert(c);
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
@@ -275,9 +275,9 @@ gxFont *gxGraphics::loadFont(const string &f, int height, int flags) {
|
|||||||
|
|
||||||
int first = tm.tmFirstChar, last = tm.tmLastChar;
|
int first = tm.tmFirstChar, last = tm.tmLastChar;
|
||||||
int sz = last - first + 1;
|
int sz = last - first + 1;
|
||||||
int *offs = d_new int[sz];
|
int *offs = new int[sz];
|
||||||
int *widths = d_new int[sz];
|
int *widths = new int[sz];
|
||||||
int *as = d_new int[sz];
|
int *as = new int[sz];
|
||||||
|
|
||||||
//calc size of canvas to hold font.
|
//calc size of canvas to hold font.
|
||||||
int x = 0, y = 0, max_x = 0;
|
int x = 0, y = 0, max_x = 0;
|
||||||
@@ -333,7 +333,7 @@ gxFont *gxGraphics::loadFont(const string &f, int height, int flags) {
|
|||||||
delete[] as;
|
delete[] as;
|
||||||
|
|
||||||
c->backup();
|
c->backup();
|
||||||
gxFont *font = d_new gxFont(this, c, tm.tmMaxCharWidth, height, first, last + 1, tm.tmDefaultChar, offs, widths);
|
gxFont *font = new gxFont(this, c, tm.tmMaxCharWidth, height, first, last + 1, tm.tmDefaultChar, offs, widths);
|
||||||
font_set.insert(font);
|
font_set.insert(font);
|
||||||
|
|
||||||
//restore font smoothing
|
//restore font smoothing
|
||||||
@@ -545,7 +545,7 @@ gxScene *gxGraphics::createScene(int flags) {
|
|||||||
string ts = "ZBuffer Bit Depth:" + itoa(zbuffFmt.dwZBufferBitDepth);
|
string ts = "ZBuffer Bit Depth:" + itoa(zbuffFmt.dwZBufferBitDepth);
|
||||||
gx_runtime->debugLog(ts.c_str());
|
gx_runtime->debugLog(ts.c_str());
|
||||||
#endif
|
#endif
|
||||||
gxScene *scene = d_new gxScene(this, back_canvas);
|
gxScene *scene = new gxScene(this, back_canvas);
|
||||||
scene_set.insert(scene);
|
scene_set.insert(scene);
|
||||||
|
|
||||||
dummy_mesh = createMesh(8, 12, 0);
|
dummy_mesh = createMesh(8, 12, 0);
|
||||||
@@ -596,8 +596,8 @@ gxMesh *gxGraphics::createMesh(int max_verts, int max_tris, int flags) {
|
|||||||
|
|
||||||
IDirect3DVertexBuffer7 *buff;
|
IDirect3DVertexBuffer7 *buff;
|
||||||
if (dir3d->CreateVertexBuffer(&desc, &buff, 0) < 0) return 0;
|
if (dir3d->CreateVertexBuffer(&desc, &buff, 0) < 0) return 0;
|
||||||
WORD *indices = d_new WORD[max_tris * 3];
|
WORD *indices = new WORD[max_tris * 3];
|
||||||
gxMesh *mesh = d_new gxMesh(this, buff, indices, max_verts, max_tris);
|
gxMesh *mesh = new gxMesh(this, buff, indices, max_verts, max_tris);
|
||||||
mesh_set.insert(mesh);
|
mesh_set.insert(mesh);
|
||||||
return mesh;
|
return mesh;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -145,14 +145,14 @@ static Keyboard *createKeyboard(gxInput *input) {
|
|||||||
dword.diph.dwHow = DIPH_DEVICE;
|
dword.diph.dwHow = DIPH_DEVICE;
|
||||||
dword.dwData = 32;
|
dword.dwData = 32;
|
||||||
if (dev->SetProperty(DIPROP_BUFFERSIZE, &dword.diph) >= 0) {
|
if (dev->SetProperty(DIPROP_BUFFERSIZE, &dword.diph) >= 0) {
|
||||||
return d_new Keyboard(input, dev);
|
return new Keyboard(input, dev);
|
||||||
} else {
|
} else {
|
||||||
// input->runtime->debugInfo( "keyboard: SetProperty failed" );
|
// input->runtime->debugInfo( "keyboard: SetProperty failed" );
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// input->runtime->debugInfo( "keyboard: SetDataFormat failed" );
|
// input->runtime->debugInfo( "keyboard: SetDataFormat failed" );
|
||||||
}
|
}
|
||||||
return d_new Keyboard(input, dev);
|
return new Keyboard(input, dev);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
input->runtime->debugInfo("keyboard: SetCooperativeLevel failed");
|
input->runtime->debugInfo("keyboard: SetCooperativeLevel failed");
|
||||||
@@ -170,11 +170,11 @@ static Mouse *createMouse(gxInput *input) {
|
|||||||
if (dev->SetCooperativeLevel(input->runtime->hwnd, DISCL_FOREGROUND | DISCL_EXCLUSIVE) >= 0) {
|
if (dev->SetCooperativeLevel(input->runtime->hwnd, DISCL_FOREGROUND | DISCL_EXCLUSIVE) >= 0) {
|
||||||
|
|
||||||
if (dev->SetDataFormat(&c_dfDIMouse) >= 0) {
|
if (dev->SetDataFormat(&c_dfDIMouse) >= 0) {
|
||||||
return d_new Mouse(input, dev);
|
return new Mouse(input, dev);
|
||||||
} else {
|
} else {
|
||||||
// input->runtime->debugInfo( "mouse: SetDataFormat failed" );
|
// input->runtime->debugInfo( "mouse: SetDataFormat failed" );
|
||||||
}
|
}
|
||||||
return d_new Mouse(input, dev);
|
return new Mouse(input, dev);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
input->runtime->debugInfo("mouse: SetCooperativeLevel failed");
|
input->runtime->debugInfo("mouse: SetCooperativeLevel failed");
|
||||||
@@ -192,7 +192,7 @@ static Joystick *createJoystick(gxInput *input, LPCDIDEVICEINSTANCE devinst) {
|
|||||||
if (dev->SetCooperativeLevel(input->runtime->hwnd, DISCL_FOREGROUND | DISCL_EXCLUSIVE) >= 0) {
|
if (dev->SetCooperativeLevel(input->runtime->hwnd, DISCL_FOREGROUND | DISCL_EXCLUSIVE) >= 0) {
|
||||||
if (dev->SetDataFormat(&c_dfDIJoystick) >= 0) {
|
if (dev->SetDataFormat(&c_dfDIJoystick) >= 0) {
|
||||||
int t = ((devinst->dwDevType >> 8) & 0xff) == DI8DEVCLASS_GAMECTRL ? 1 : 2;
|
int t = ((devinst->dwDevType >> 8) & 0xff) == DI8DEVCLASS_GAMECTRL ? 1 : 2;
|
||||||
return d_new Joystick(input, dev, t);
|
return new Joystick(input, dev, t);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dev->Release();
|
dev->Release();
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ void gxMesh::backup(){
|
|||||||
|
|
||||||
dxVertex *verts;
|
dxVertex *verts;
|
||||||
if( vertex_buff->Lock( DDLOCK_READONLY|DDLOCK_WAIT,(void**)&verts,0 )>=0 ){
|
if( vertex_buff->Lock( DDLOCK_READONLY|DDLOCK_WAIT,(void**)&verts,0 )>=0 ){
|
||||||
backup_verts=d_new dxVertex[ max_verts ];
|
backup_verts=new dxVertex[ max_verts ];
|
||||||
memcpy( backup_verts,verts,sizeof(dxVertex)*max_verts );
|
memcpy( backup_verts,verts,sizeof(dxVertex)*max_verts );
|
||||||
vertex_buff->Unlock();
|
vertex_buff->Unlock();
|
||||||
}
|
}
|
||||||
|
|||||||
+11
-11
@@ -95,7 +95,7 @@ gxRuntime *gxRuntime::openRuntime(HINSTANCE hinst, const string &cmd_line, Debug
|
|||||||
|
|
||||||
UpdateWindow(hwnd);
|
UpdateWindow(hwnd);
|
||||||
|
|
||||||
runtime = d_new gxRuntime(hinst, cmd_line, hwnd);
|
runtime = new gxRuntime(hinst, cmd_line, hwnd);
|
||||||
return runtime;
|
return runtime;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -676,7 +676,7 @@ gxAudio *gxRuntime::openAudio(int flags) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
audio = d_new gxAudio(this);
|
audio = new gxAudio(this);
|
||||||
return audio;
|
return audio;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -694,7 +694,7 @@ gxInput *gxRuntime::openInput(int flags) {
|
|||||||
LPDIRECTINPUT8 di;
|
LPDIRECTINPUT8 di;
|
||||||
if (DirectInput8Create(hinst, DIRECTINPUT_VERSION, IID_IDirectInput8, (void**)&di, NULL) >= 0) {
|
if (DirectInput8Create(hinst, DIRECTINPUT_VERSION, IID_IDirectInput8, (void**)&di, NULL) >= 0) {
|
||||||
//if (DirectInput8Create(hinst, DIRECTINPUT_VERSION, (void**)&di, NULL) >= 0) {
|
//if (DirectInput8Create(hinst, DIRECTINPUT_VERSION, (void**)&di, NULL) >= 0) {
|
||||||
input = d_new gxInput(this, di);
|
input = new gxInput(this, di);
|
||||||
acquireInput();
|
acquireInput();
|
||||||
} else {
|
} else {
|
||||||
debugInfo("Create DirectInput failed");
|
debugInfo("Create DirectInput failed");
|
||||||
@@ -807,7 +807,7 @@ gxGraphics *gxRuntime::openWindowedGraphics(int w, int h, int d, bool d3d) {
|
|||||||
primSurf = ps;
|
primSurf = ps;
|
||||||
mod_cnt = 0;
|
mod_cnt = 0;
|
||||||
fs->AddRef();
|
fs->AddRef();
|
||||||
return d_new gxGraphics(this, dd, fs, fs, d3d);
|
return new gxGraphics(this, dd, fs, fs, d3d);
|
||||||
}
|
}
|
||||||
fs->Release();
|
fs->Release();
|
||||||
}
|
}
|
||||||
@@ -846,7 +846,7 @@ gxGraphics *gxRuntime::openExclusiveGraphics(int w, int h, int d, bool d3d) {
|
|||||||
DDSCAPS2 caps = { sizeof caps };
|
DDSCAPS2 caps = { sizeof caps };
|
||||||
caps.dwCaps = DDSCAPS_BACKBUFFER;
|
caps.dwCaps = DDSCAPS_BACKBUFFER;
|
||||||
if (ps->GetAttachedSurface(&caps, &bs) >= 0) {
|
if (ps->GetAttachedSurface(&caps, &bs) >= 0) {
|
||||||
return d_new gxGraphics(this, dd, ps, bs, d3d);
|
return new gxGraphics(this, dd, ps, bs, d3d);
|
||||||
}
|
}
|
||||||
ps->Release();
|
ps->Release();
|
||||||
}
|
}
|
||||||
@@ -960,7 +960,7 @@ bool gxRuntime::graphicsLost() {
|
|||||||
gxFileSystem *gxRuntime::openFileSystem(int flags) {
|
gxFileSystem *gxRuntime::openFileSystem(int flags) {
|
||||||
if (fileSystem) return 0;
|
if (fileSystem) return 0;
|
||||||
|
|
||||||
fileSystem = d_new gxFileSystem();
|
fileSystem = new gxFileSystem();
|
||||||
return fileSystem;
|
return fileSystem;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -977,7 +977,7 @@ void gxRuntime::closeFileSystem(gxFileSystem *f) {
|
|||||||
static HRESULT WINAPI enumMode(DDSURFACEDESC2 *desc, void *context) {
|
static HRESULT WINAPI enumMode(DDSURFACEDESC2 *desc, void *context) {
|
||||||
int dp = desc->ddpfPixelFormat.dwRGBBitCount;
|
int dp = desc->ddpfPixelFormat.dwRGBBitCount;
|
||||||
if (dp == 16 || dp == 24 || dp == 32) {
|
if (dp == 16 || dp == 24 || dp == 32) {
|
||||||
gxRuntime::GfxMode *m = d_new gxRuntime::GfxMode;
|
gxRuntime::GfxMode *m = new gxRuntime::GfxMode;
|
||||||
m->desc = *desc;
|
m->desc = *desc;
|
||||||
gxRuntime::GfxDriver *d = (gxRuntime::GfxDriver*)context;
|
gxRuntime::GfxDriver *d = (gxRuntime::GfxDriver*)context;
|
||||||
d->modes.push_back(m);
|
d->modes.push_back(m);
|
||||||
@@ -1009,9 +1009,9 @@ static BOOL WINAPI enumDriver(GUID FAR *guid, LPSTR desc, LPSTR name, LPVOID con
|
|||||||
dd->GetDisplayMode(&desktop_desc);
|
dd->GetDisplayMode(&desktop_desc);
|
||||||
}
|
}
|
||||||
|
|
||||||
gxRuntime::GfxDriver *d = d_new gxRuntime::GfxDriver;
|
gxRuntime::GfxDriver *d = new gxRuntime::GfxDriver;
|
||||||
|
|
||||||
d->guid = guid ? d_new GUID(*guid) : 0;
|
d->guid = guid ? new GUID(*guid) : 0;
|
||||||
d->name = desc;//string( name )+" "+string( desc );
|
d->name = desc;//string( name )+" "+string( desc );
|
||||||
|
|
||||||
memset(&d->d3d_desc, 0, sizeof(d->d3d_desc));
|
memset(&d->d3d_desc, 0, sizeof(d->d3d_desc));
|
||||||
@@ -1097,7 +1097,7 @@ void gxRuntime::windowedModeInfo(int *c) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
gxTimer *gxRuntime::createTimer(int hertz) {
|
gxTimer *gxRuntime::createTimer(int hertz) {
|
||||||
gxTimer *t = d_new gxTimer(this, hertz);
|
gxTimer *t = new gxTimer(this, hertz);
|
||||||
timers.insert(t);
|
timers.insert(t);
|
||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
@@ -1164,7 +1164,7 @@ int gxRuntime::callDll(const std::string &dll, const std::string &func, const vo
|
|||||||
if (lib_it == libs.end()) {
|
if (lib_it == libs.end()) {
|
||||||
HINSTANCE h = LoadLibrary(dll.c_str());
|
HINSTANCE h = LoadLibrary(dll.c_str());
|
||||||
if (!h) return 0;
|
if (!h) return 0;
|
||||||
gxDll *t = d_new gxDll;
|
gxDll *t = new gxDll;
|
||||||
t->hinst = h;
|
t->hinst = h;
|
||||||
lib_it = libs.insert(make_pair(dll, t)).first;
|
lib_it = libs.insert(make_pair(dll, t)).first;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -605,7 +605,7 @@ void gxScene::end(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
gxLight *gxScene::createLight( int flags ){
|
gxLight *gxScene::createLight( int flags ){
|
||||||
gxLight *l=d_new gxLight( this,flags );
|
gxLight *l=new gxLight( this,flags );
|
||||||
_allLights.insert(l);
|
_allLights.insert(l);
|
||||||
return l;
|
return l;
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-4
@@ -46,7 +46,7 @@ static void check(Mem *m) {
|
|||||||
MessageBox(GetDesktopWindow(), "mem_check: pre_tag!='DNEW'", "Memory error", MB_OK | MB_ICONWARNING);
|
MessageBox(GetDesktopWindow(), "mem_check: pre_tag!='DNEW'", "Memory error", MB_OK | MB_ICONWARNING);
|
||||||
if (m->tag == 'NDWE') {
|
if (m->tag == 'NDWE') {
|
||||||
string t = "Probable double delete";
|
string t = "Probable double delete";
|
||||||
t += "- d_new file: " + string(m->file) + " line:" + itoa(m->line);
|
t += "- new file: " + string(m->file) + " line:" + itoa(m->line);
|
||||||
MessageBox(GetDesktopWindow(), t.c_str(), "Memory error", MB_OK | MB_ICONWARNING);
|
MessageBox(GetDesktopWindow(), t.c_str(), "Memory error", MB_OK | MB_ICONWARNING);
|
||||||
}
|
}
|
||||||
ExitProcess(0);
|
ExitProcess(0);
|
||||||
@@ -54,7 +54,7 @@ static void check(Mem *m) {
|
|||||||
int *t = (int*)((char*)(m + 1) + m->size);
|
int *t = (int*)((char*)(m + 1) + m->size);
|
||||||
if (*t != 'dnew') {
|
if (*t != 'dnew') {
|
||||||
MessageBox(GetDesktopWindow(), "mem_check: post_tag!='dnew'", "Memory error", MB_OK | MB_ICONWARNING);
|
MessageBox(GetDesktopWindow(), "mem_check: post_tag!='dnew'", "Memory error", MB_OK | MB_ICONWARNING);
|
||||||
string t = "Probable memory overwrite - d_new file: " + string(m->file) + " line:" + itoa(m->line);
|
string t = "Probable memory overwrite - new file: " + string(m->file) + " line:" + itoa(m->line);
|
||||||
MessageBox(GetDesktopWindow(), t.c_str(), "Memory error", MB_OK | MB_ICONWARNING);
|
MessageBox(GetDesktopWindow(), t.c_str(), "Memory error", MB_OK | MB_ICONWARNING);
|
||||||
ExitProcess(0);
|
ExitProcess(0);
|
||||||
}
|
}
|
||||||
@@ -317,7 +317,7 @@ string filenamefile(const string &t) {
|
|||||||
const int MIN_SIZE = 256;
|
const int MIN_SIZE = 256;
|
||||||
|
|
||||||
qstreambuf::qstreambuf() {
|
qstreambuf::qstreambuf() {
|
||||||
buf = d_new char[MIN_SIZE];
|
buf = new char[MIN_SIZE];
|
||||||
setg(buf, buf, buf);
|
setg(buf, buf, buf);
|
||||||
setp(buf, buf, buf + MIN_SIZE);
|
setp(buf, buf, buf + MIN_SIZE);
|
||||||
}
|
}
|
||||||
@@ -349,7 +349,7 @@ qstreambuf::int_type qstreambuf::overflow(qstreambuf::int_type c) {
|
|||||||
if (pptr() == epptr()) {
|
if (pptr() == epptr()) {
|
||||||
int sz = size();
|
int sz = size();
|
||||||
int n_sz = sz * 2; if (n_sz < MIN_SIZE) n_sz = MIN_SIZE;
|
int n_sz = sz * 2; if (n_sz < MIN_SIZE) n_sz = MIN_SIZE;
|
||||||
char *n_buf = d_new char[n_sz];
|
char *n_buf = new char[n_sz];
|
||||||
memcpy(n_buf, gptr(), sz);
|
memcpy(n_buf, gptr(), sz);
|
||||||
delete buf; buf = n_buf;
|
delete buf; buf = n_buf;
|
||||||
setg(buf, buf, buf + sz);
|
setg(buf, buf, buf + sz);
|
||||||
|
|||||||
+2
-20
@@ -9,24 +9,6 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
#ifdef MEMDEBUG
|
|
||||||
|
|
||||||
void * _cdecl operator new( size_t size );
|
|
||||||
void * _cdecl operator new[]( size_t size );
|
|
||||||
void * _cdecl operator new( size_t size,const char *file,int line );
|
|
||||||
void * _cdecl operator new[]( size_t size,const char *file,int line );
|
|
||||||
void _cdecl operator delete( void *q );
|
|
||||||
void _cdecl operator delete[]( void *q );
|
|
||||||
void _cdecl operator delete( void *q,const char *file,int line );
|
|
||||||
void _cdecl operator delete[]( void *q,const char *file,int line );
|
|
||||||
#define d_new new( __FILE__,__LINE__ )
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
#define d_new new
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void trackmem( bool enable );
|
void trackmem( bool enable );
|
||||||
void checkmem( std::ostream &out );
|
void checkmem( std::ostream &out );
|
||||||
|
|
||||||
@@ -87,9 +69,9 @@ public:
|
|||||||
pool():free(0){}
|
pool():free(0){}
|
||||||
pointer allocate( size_type n,const void *){
|
pointer allocate( size_type n,const void *){
|
||||||
clog<<"Allocating "<<n<<endl;
|
clog<<"Allocating "<<n<<endl;
|
||||||
if( n>1 ) return d_new T[n];
|
if( n>1 ) return new T[n];
|
||||||
if( !free ){
|
if( !free ){
|
||||||
free=(T*)d_new char[sizeof(T)*N];
|
free=(T*)new char[sizeof(T)*N];
|
||||||
for( int k=0;k<N-1;++k ) *(T**)(free+k)=free+k+1;
|
for( int k=0;k<N-1;++k ) *(T**)(free+k)=free+k+1;
|
||||||
*(T**)(free+N-1)=0;
|
*(T**)(free+N-1)=0;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user