Files
SingularityViewer/indra/lscript/lscript_compile/lscript_tree.h
2011-06-16 23:56:56 -05:00

2333 lines
84 KiB
C++

/**
* @file lscript_tree.h
* @brief provides the classes required to build lscript's abstract syntax tree and symbol table
*
* $LicenseInfo:firstyear=2002&license=viewergpl$
*
* Copyright (c) 2002-2009, Linden Research, Inc.
*
* Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
* ("Other License"), formally executed by you and Linden Lab. Terms of
* the GPL can be found in doc/GPL-license.txt in this distribution, or
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
*
* There are special exceptions to the terms and conditions of the GPL as
* it is applied to this Source Code. View the full text of the exception
* in the file doc/FLOSS-exception.txt in this software distribution, or
* online at
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
*
* By copying, modifying or distributing this software, you acknowledge
* that you have read and understood your obligations described above,
* and agree to abide by those obligations.
*
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
* COMPLETENESS OR PERFORMANCE.
* $/LicenseInfo$
*/
#ifndef LL_LSCRIPT_TREE_H
#define LL_LSCRIPT_TREE_H
#include "v3math.h"
#include "llquaternion.h"
#include "linked_lists.h"
#include "lscript_error.h"
#include "lscript_typecheck.h"
#include "lscript_byteformat.h"
// Nota Bene: Class destructors don't delete pointed to classes because it isn't guaranteed that lex/yacc will build
// complete data structures. Instead various chunks that are allocated are stored and deleted by allocation lists
class LLScriptType : public LLScriptFilePosition
{
public:
LLScriptType(S32 line, S32 col, LSCRIPTType type)
: LLScriptFilePosition(line, col), mType(type)
{
}
~LLScriptType() {}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LSCRIPTType mType;
};
// contains a literal or constant value
class LLScriptConstant : public LLScriptFilePosition
{
public:
LLScriptConstant(S32 line, S32 col, LSCRIPTType type)
: LLScriptFilePosition(line, col), mType(type)
{
}
virtual ~LLScriptConstant() {}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LSCRIPTType mType;
};
class LLScriptConstantInteger : public LLScriptConstant
{
public:
LLScriptConstantInteger(S32 line, S32 col, S32 value)
: LLScriptConstant(line, col, LST_INTEGER), mValue(value)
{
}
~LLScriptConstantInteger() {}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
S32 mValue;
};
class LLScriptConstantFloat : public LLScriptConstant
{
public:
LLScriptConstantFloat(S32 line, S32 col, F32 value)
: LLScriptConstant(line, col, LST_FLOATINGPOINT), mValue(value)
{
}
~LLScriptConstantFloat() {}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
F32 mValue;
};
class LLScriptConstantString : public LLScriptConstant
{
public:
LLScriptConstantString(S32 line, S32 col, char *value)
: LLScriptConstant(line, col, LST_STRING), mValue(value)
{
}
~LLScriptConstantString()
{
delete [] mValue;
mValue = NULL;
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
char *mValue;
};
// container for individual identifiers
class LLScriptIdentifier : public LLScriptFilePosition
{
public:
LLScriptIdentifier(S32 line, S32 col, char *name, LLScriptType *type = NULL)
: LLScriptFilePosition(line, col), mName(name), mScopeEntry(NULL), mType(type)
{
}
~LLScriptIdentifier()
{
delete [] mName;
mName = NULL;
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
char *mName;
LLScriptScopeEntry *mScopeEntry;
LLScriptType *mType;
};
typedef enum e_lscript_simple_assignable_type
{
LSSAT_NULL,
LSSAT_IDENTIFIER,
LSSAT_CONSTANT,
LSSAT_VECTOR_CONSTANT,
LSSAT_QUATERNION_CONSTANT,
LSSAT_LIST_CONSTANT,
LSSAT_EOF
} LSCRIPTSimpleAssignableType;
class LLScriptSimpleAssignable : public LLScriptFilePosition
{
public:
LLScriptSimpleAssignable(S32 line, S32 col, LSCRIPTSimpleAssignableType type)
: LLScriptFilePosition(line, col), mType(type), mNextp(NULL)
{
}
void addAssignable(LLScriptSimpleAssignable *assign);
virtual ~LLScriptSimpleAssignable()
{
// don't delete next pointer because we're going to store allocation lists and delete from those
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LSCRIPTSimpleAssignableType mType;
LLScriptSimpleAssignable *mNextp;
};
class LLScriptSAIdentifier : public LLScriptSimpleAssignable
{
public:
LLScriptSAIdentifier(S32 line, S32 col, LLScriptIdentifier *identifier)
: LLScriptSimpleAssignable(line, col, LSSAT_IDENTIFIER), mIdentifier(identifier)
{
}
~LLScriptSAIdentifier()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptIdentifier *mIdentifier;
};
class LLScriptSAConstant : public LLScriptSimpleAssignable
{
public:
LLScriptSAConstant(S32 line, S32 col, LLScriptConstant *constant)
: LLScriptSimpleAssignable(line, col, LSSAT_CONSTANT), mConstant(constant)
{
}
~LLScriptSAConstant()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptConstant *mConstant;
};
class LLScriptSAVector : public LLScriptSimpleAssignable
{
public:
LLScriptSAVector(S32 line, S32 col, LLScriptSimpleAssignable *e1,
LLScriptSimpleAssignable *e2,
LLScriptSimpleAssignable *e3)
: LLScriptSimpleAssignable(line, col, LSSAT_VECTOR_CONSTANT),
mEntry1(e1), mEntry2(e2), mEntry3(e3)
{
}
~LLScriptSAVector()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptSimpleAssignable *mEntry1;
LLScriptSimpleAssignable *mEntry2;
LLScriptSimpleAssignable *mEntry3;
};
class LLScriptSAQuaternion : public LLScriptSimpleAssignable
{
public:
LLScriptSAQuaternion(S32 line, S32 col, LLScriptSimpleAssignable *e1,
LLScriptSimpleAssignable *e2,
LLScriptSimpleAssignable *e3,
LLScriptSimpleAssignable *e4)
: LLScriptSimpleAssignable(line, col, LSSAT_QUATERNION_CONSTANT),
mEntry1(e1), mEntry2(e2), mEntry3(e3), mEntry4(e4)
{
}
~LLScriptSAQuaternion()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptSimpleAssignable *mEntry1;
LLScriptSimpleAssignable *mEntry2;
LLScriptSimpleAssignable *mEntry3;
LLScriptSimpleAssignable *mEntry4;
};
class LLScriptSAList : public LLScriptSimpleAssignable
{
public:
LLScriptSAList(S32 line, S32 col, LLScriptSimpleAssignable *elist)
: LLScriptSimpleAssignable(line, col, LSSAT_QUATERNION_CONSTANT), mEntryList(elist)
{
}
~LLScriptSAList()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptSimpleAssignable *mEntryList;
};
// global variables
class LLScriptGlobalVariable : public LLScriptFilePosition
{
public:
LLScriptGlobalVariable(S32 line, S32 col, LLScriptType *type,
LLScriptIdentifier *identifier,
LLScriptSimpleAssignable *assignable)
: LLScriptFilePosition(line, col), mType(type), mIdentifier(identifier), mAssignable(assignable), mNextp(NULL), mAssignableType(LST_NULL)
{
}
void addGlobal(LLScriptGlobalVariable *global);
~LLScriptGlobalVariable()
{
}
void gonext(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptType *mType;
LLScriptIdentifier *mIdentifier;
LLScriptSimpleAssignable *mAssignable;
LLScriptGlobalVariable *mNextp;
LSCRIPTType mAssignableType;
};
// events
class LLScriptEvent : public LLScriptFilePosition
{
public:
LLScriptEvent(S32 line, S32 col, LSCRIPTStateEventType type)
: LLScriptFilePosition(line, col), mType(type)
{
}
virtual ~LLScriptEvent()
{
// don't delete next pointer because we're going to store allocation lists and delete from those
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LSCRIPTStateEventType mType;
};
class LLScriptStateEntryEvent : public LLScriptEvent
{
public:
LLScriptStateEntryEvent(S32 line, S32 col)
: LLScriptEvent(line, col, LSTT_STATE_ENTRY)
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
~LLScriptStateEntryEvent() {}
};
class LLScriptStateExitEvent : public LLScriptEvent
{
public:
LLScriptStateExitEvent(S32 line, S32 col)
: LLScriptEvent(line, col, LSTT_STATE_EXIT)
{
}
~LLScriptStateExitEvent() {}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
};
class LLScriptTouchStartEvent : public LLScriptEvent
{
public:
LLScriptTouchStartEvent(S32 line, S32 col, LLScriptIdentifier *count)
: LLScriptEvent(line, col, LSTT_TOUCH_START), mCount(count)
{
}
~LLScriptTouchStartEvent()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptIdentifier *mCount;
};
class LLScriptTouchEvent : public LLScriptEvent
{
public:
LLScriptTouchEvent(S32 line, S32 col, LLScriptIdentifier *count)
: LLScriptEvent(line, col, LSTT_TOUCH), mCount(count)
{
}
~LLScriptTouchEvent()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptIdentifier *mCount;
};
class LLScriptTouchEndEvent : public LLScriptEvent
{
public:
LLScriptTouchEndEvent(S32 line, S32 col, LLScriptIdentifier *count)
: LLScriptEvent(line, col, LSTT_TOUCH_END), mCount(count)
{
}
~LLScriptTouchEndEvent()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptIdentifier *mCount;
};
class LLScriptCollisionStartEvent : public LLScriptEvent
{
public:
LLScriptCollisionStartEvent(S32 line, S32 col, LLScriptIdentifier *count)
: LLScriptEvent(line, col, LSTT_COLLISION_START), mCount(count)
{
}
~LLScriptCollisionStartEvent()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptIdentifier *mCount;
};
class LLScriptCollisionEvent : public LLScriptEvent
{
public:
LLScriptCollisionEvent(S32 line, S32 col, LLScriptIdentifier *count)
: LLScriptEvent(line, col, LSTT_COLLISION), mCount(count)
{
}
~LLScriptCollisionEvent()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptIdentifier *mCount;
};
class LLScriptCollisionEndEvent : public LLScriptEvent
{
public:
LLScriptCollisionEndEvent(S32 line, S32 col, LLScriptIdentifier *count)
: LLScriptEvent(line, col, LSTT_COLLISION_END), mCount(count)
{
}
~LLScriptCollisionEndEvent()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptIdentifier *mCount;
};
class LLScriptLandCollisionStartEvent : public LLScriptEvent
{
public:
LLScriptLandCollisionStartEvent(S32 line, S32 col, LLScriptIdentifier *pos)
: LLScriptEvent(line, col, LSTT_LAND_COLLISION_START), mPosition(pos)
{
}
~LLScriptLandCollisionStartEvent()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptIdentifier *mPosition;
};
class LLScriptLandCollisionEvent : public LLScriptEvent
{
public:
LLScriptLandCollisionEvent(S32 line, S32 col, LLScriptIdentifier *pos)
: LLScriptEvent(line, col, LSTT_LAND_COLLISION), mPosition(pos)
{
}
~LLScriptLandCollisionEvent()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptIdentifier *mPosition;
};
class LLScriptLandCollisionEndEvent : public LLScriptEvent
{
public:
LLScriptLandCollisionEndEvent(S32 line, S32 col, LLScriptIdentifier *pos)
: LLScriptEvent(line, col, LSTT_LAND_COLLISION_END), mPosition(pos)
{
}
~LLScriptLandCollisionEndEvent()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptIdentifier *mPosition;
};
class LLScriptInventoryEvent : public LLScriptEvent
{
public:
LLScriptInventoryEvent(S32 line, S32 col, LLScriptIdentifier *change)
: LLScriptEvent(line, col, LSTT_INVENTORY), mChange(change)
{
}
~LLScriptInventoryEvent() {}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptIdentifier *mChange;
};
class LLScriptAttachEvent : public LLScriptEvent
{
public:
LLScriptAttachEvent(S32 line, S32 col, LLScriptIdentifier *attach)
: LLScriptEvent(line, col, LSTT_ATTACH), mAttach(attach)
{
}
~LLScriptAttachEvent() {}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptIdentifier *mAttach;
};
class LLScriptDataserverEvent : public LLScriptEvent
{
public:
LLScriptDataserverEvent(S32 line, S32 col, LLScriptIdentifier *id, LLScriptIdentifier *data)
: LLScriptEvent(line, col, LSTT_DATASERVER), mID(id), mData(data)
{
}
~LLScriptDataserverEvent() {}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptIdentifier *mID;
LLScriptIdentifier *mData;
};
class LLScriptTimerEvent : public LLScriptEvent
{
public:
LLScriptTimerEvent(S32 line, S32 col)
: LLScriptEvent(line, col, LSTT_TIMER)
{
}
~LLScriptTimerEvent() {}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
};
class LLScriptMovingStartEvent : public LLScriptEvent
{
public:
LLScriptMovingStartEvent(S32 line, S32 col)
: LLScriptEvent(line, col, LSTT_MOVING_START)
{
}
~LLScriptMovingStartEvent() {}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
};
class LLScriptMovingEndEvent : public LLScriptEvent
{
public:
LLScriptMovingEndEvent(S32 line, S32 col)
: LLScriptEvent(line, col, LSTT_MOVING_END)
{
}
~LLScriptMovingEndEvent() {}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
};
class LLScriptRTPEvent : public LLScriptEvent
{
public:
LLScriptRTPEvent(S32 line, S32 col, LLScriptIdentifier *rtperm)
: LLScriptEvent(line, col, LSTT_RTPERMISSIONS), mRTPermissions(rtperm)
{
}
~LLScriptRTPEvent() {}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptIdentifier *mRTPermissions;
};
class LLScriptChatEvent : public LLScriptEvent
{
public:
LLScriptChatEvent(S32 line, S32 col, LLScriptIdentifier *channel, LLScriptIdentifier *name, LLScriptIdentifier *id, LLScriptIdentifier *message)
: LLScriptEvent(line, col, LSTT_CHAT), mChannel(channel), mName(name), mID(id), mMessage(message)
{
}
~LLScriptChatEvent()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptIdentifier *mChannel;
LLScriptIdentifier *mName;
LLScriptIdentifier *mID;
LLScriptIdentifier *mMessage;
};
class LLScriptObjectRezEvent : public LLScriptEvent
{
public:
LLScriptObjectRezEvent(S32 line, S32 col, LLScriptIdentifier *id)
: LLScriptEvent(line, col, LSTT_OBJECT_REZ), mID(id)
{
}
~LLScriptObjectRezEvent()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptIdentifier *mID;
};
class LLScriptSensorEvent : public LLScriptEvent
{
public:
LLScriptSensorEvent(S32 line, S32 col, LLScriptIdentifier *number)
: LLScriptEvent(line, col, LSTT_SENSOR), mNumber(number)
{
}
~LLScriptSensorEvent()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptIdentifier *mNumber;
};
class LLScriptControlEvent : public LLScriptEvent
{
public:
LLScriptControlEvent(S32 line, S32 col, LLScriptIdentifier *name, LLScriptIdentifier *levels, LLScriptIdentifier *edges)
: LLScriptEvent(line, col, LSTT_CONTROL), mName(name), mLevels(levels), mEdges(edges)
{
}
~LLScriptControlEvent()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptIdentifier *mName;
LLScriptIdentifier *mLevels;
LLScriptIdentifier *mEdges;
};
class LLScriptLinkMessageEvent : public LLScriptEvent
{
public:
LLScriptLinkMessageEvent(S32 line, S32 col, LLScriptIdentifier *sender, LLScriptIdentifier *num, LLScriptIdentifier *str, LLScriptIdentifier *id)
: LLScriptEvent(line, col, LSTT_LINK_MESSAGE), mSender(sender), mNum(num), mStr(str), mID(id)
{
}
~LLScriptLinkMessageEvent()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptIdentifier *mSender;
LLScriptIdentifier *mNum;
LLScriptIdentifier *mStr;
LLScriptIdentifier *mID;
};
class LLScriptRemoteEvent : public LLScriptEvent
{
public:
LLScriptRemoteEvent(S32 line, S32 col, LLScriptIdentifier *type, LLScriptIdentifier *channel, LLScriptIdentifier *message_id, LLScriptIdentifier *sender, LLScriptIdentifier *int_val, LLScriptIdentifier *str_val)
: LLScriptEvent(line, col, LSTT_REMOTE_DATA), mType(type), mChannel(channel), mMessageID(message_id), mSender(sender), mIntVal(int_val), mStrVal(str_val)
{
}
~LLScriptRemoteEvent()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptIdentifier *mType;
LLScriptIdentifier *mChannel;
LLScriptIdentifier *mMessageID;
LLScriptIdentifier *mSender;
LLScriptIdentifier *mIntVal;
LLScriptIdentifier *mStrVal;
};
class LLScriptHTTPResponseEvent : public LLScriptEvent
{
public:
LLScriptHTTPResponseEvent(S32 line, S32 col,
LLScriptIdentifier *request_id,
LLScriptIdentifier *status,
LLScriptIdentifier *metadata,
LLScriptIdentifier *body)
: LLScriptEvent(line, col, LSTT_HTTP_RESPONSE),
mRequestId(request_id), mStatus(status), mMetadata(metadata), mBody(body)
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass,
LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope,
LSCRIPTType &type, LSCRIPTType basetype, U64 &count,
LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap,
S32 stacksize, LLScriptScopeEntry *entry,
S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptIdentifier *mRequestId;
LLScriptIdentifier *mStatus;
LLScriptIdentifier *mMetadata;
LLScriptIdentifier *mBody;
};
class LLScriptHTTPRequestEvent : public LLScriptEvent
{
public:
LLScriptHTTPRequestEvent(S32 line, S32 col,
LLScriptIdentifier *request_id,
LLScriptIdentifier *method,
LLScriptIdentifier *body)
: LLScriptEvent(line, col, LSTT_HTTP_REQUEST),
mRequestId(request_id), mMethod(method), mBody(body)
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass,
LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope,
LSCRIPTType &type, LSCRIPTType basetype, U64 &count,
LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap,
S32 stacksize, LLScriptScopeEntry *entry,
S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptIdentifier *mRequestId;
LLScriptIdentifier *mMethod;
LLScriptIdentifier *mBody;
};
class LLScriptRezEvent : public LLScriptEvent
{
public:
LLScriptRezEvent(S32 line, S32 col, LLScriptIdentifier *start_param)
: LLScriptEvent(line, col, LSTT_REZ), mStartParam(start_param)
{
}
~LLScriptRezEvent() {}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptIdentifier *mStartParam;
};
class LLScriptNoSensorEvent : public LLScriptEvent
{
public:
LLScriptNoSensorEvent(S32 line, S32 col)
: LLScriptEvent(line, col, LSTT_NO_SENSOR)
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
~LLScriptNoSensorEvent() {}
};
class LLScriptAtTarget : public LLScriptEvent
{
public:
LLScriptAtTarget(S32 line, S32 col, LLScriptIdentifier *tnumber, LLScriptIdentifier *tpos, LLScriptIdentifier *ourpos)
: LLScriptEvent(line, col, LSTT_AT_TARGET), mTargetNumber(tnumber), mTargetPosition(tpos), mOurPosition(ourpos)
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
~LLScriptAtTarget() {}
LLScriptIdentifier *mTargetNumber;
LLScriptIdentifier *mTargetPosition;
LLScriptIdentifier *mOurPosition;
};
class LLScriptNotAtTarget : public LLScriptEvent
{
public:
LLScriptNotAtTarget(S32 line, S32 col)
: LLScriptEvent(line, col, LSTT_NOT_AT_TARGET)
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
~LLScriptNotAtTarget() {}
};
class LLScriptAtRotTarget : public LLScriptEvent
{
public:
LLScriptAtRotTarget(S32 line, S32 col, LLScriptIdentifier *tnumber, LLScriptIdentifier *trot, LLScriptIdentifier *ourrot)
: LLScriptEvent(line, col, LSTT_AT_ROT_TARGET), mTargetNumber(tnumber), mTargetRotation(trot), mOurRotation(ourrot)
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
~LLScriptAtRotTarget() {}
LLScriptIdentifier *mTargetNumber;
LLScriptIdentifier *mTargetRotation;
LLScriptIdentifier *mOurRotation;
};
class LLScriptNotAtRotTarget : public LLScriptEvent
{
public:
LLScriptNotAtRotTarget(S32 line, S32 col)
: LLScriptEvent(line, col, LSTT_NOT_AT_ROT_TARGET)
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
~LLScriptNotAtRotTarget() {}
};
class LLScriptMoneyEvent : public LLScriptEvent
{
public:
LLScriptMoneyEvent(S32 line, S32 col, LLScriptIdentifier *name, LLScriptIdentifier *amount)
: LLScriptEvent(line, col, LSTT_MONEY), mName(name), mAmount(amount)
{
}
~LLScriptMoneyEvent()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptIdentifier *mName;
LLScriptIdentifier *mAmount;
};
class LLScriptEmailEvent : public LLScriptEvent
{
public:
LLScriptEmailEvent(S32 line, S32 col, LLScriptIdentifier *time, LLScriptIdentifier *address, LLScriptIdentifier *subject, LLScriptIdentifier *body, LLScriptIdentifier *number)
: LLScriptEvent(line, col, LSTT_EMAIL), mTime(time), mAddress(address), mSubject(subject), mBody(body), mNumber(number)
{
}
~LLScriptEmailEvent()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptIdentifier *mTime;
LLScriptIdentifier *mAddress;
LLScriptIdentifier *mSubject;
LLScriptIdentifier *mBody;
LLScriptIdentifier *mNumber;
};
class LLScriptExpression : public LLScriptFilePosition
{
public:
LLScriptExpression(S32 line, S32 col, LSCRIPTExpressionType type)
: LLScriptFilePosition(line, col), mType(type), mNextp(NULL), mLeftType(LST_NULL), mRightType(LST_NULL), mReturnType(LST_NULL)
{
}
void addExpression(LLScriptExpression *expression);
virtual ~LLScriptExpression()
{
// don't delete next pointer because we're going to store allocation lists and delete from those
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
void gonext(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LSCRIPTExpressionType mType;
LLScriptExpression *mNextp;
LSCRIPTType mLeftType, mRightType, mReturnType;
};
class LLScriptForExpressionList : public LLScriptExpression
{
public:
LLScriptForExpressionList(S32 line, S32 col, LLScriptExpression *first, LLScriptExpression *second)
: LLScriptExpression(line, col, LET_FOR_EXPRESSION_LIST), mFirstp(first), mSecondp(second)
{
}
~LLScriptForExpressionList()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptExpression *mFirstp;
LLScriptExpression *mSecondp;
};
class LLScriptFuncExpressionList : public LLScriptExpression
{
public:
LLScriptFuncExpressionList(S32 line, S32 col, LLScriptExpression *first, LLScriptExpression *second)
: LLScriptExpression(line, col, LET_FUNC_EXPRESSION_LIST), mFirstp(first), mSecondp(second)
{
}
~LLScriptFuncExpressionList()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptExpression *mFirstp;
LLScriptExpression *mSecondp;
};
class LLScriptListExpressionList : public LLScriptExpression
{
public:
LLScriptListExpressionList(S32 line, S32 col, LLScriptExpression *first, LLScriptExpression *second)
: LLScriptExpression(line, col, LET_LIST_EXPRESSION_LIST), mFirstp(first), mSecondp(second)
{
}
~LLScriptListExpressionList()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptExpression *mFirstp;
LLScriptExpression *mSecondp;
};
class LLScriptLValue : public LLScriptExpression
{
public:
LLScriptLValue(S32 line, S32 col, LLScriptIdentifier *identifier, LLScriptIdentifier *accessor)
: LLScriptExpression(line, col, LET_LVALUE), mOffset(0), mIdentifier(identifier), mAccessor(accessor)
{
}
~LLScriptLValue()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
S32 mOffset;
LLScriptIdentifier *mIdentifier;
LLScriptIdentifier *mAccessor;
};
class LLScriptAssignment : public LLScriptExpression
{
public:
LLScriptAssignment(S32 line, S32 col, LLScriptExpression *lvalue, LLScriptExpression *rightside)
: LLScriptExpression(line, col, LET_ASSIGNMENT), mLValue(lvalue), mRightSide(rightside)
{
}
~LLScriptAssignment()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptExpression *mLValue;
LLScriptExpression *mRightSide;
};
class LLScriptAddAssignment : public LLScriptExpression
{
public:
LLScriptAddAssignment(S32 line, S32 col, LLScriptExpression *lvalue, LLScriptExpression *rightside)
: LLScriptExpression(line, col, LET_ADD_ASSIGN), mLValue(lvalue), mRightSide(rightside)
{
}
~LLScriptAddAssignment()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptExpression *mLValue;
LLScriptExpression *mRightSide;
};
class LLScriptSubAssignment : public LLScriptExpression
{
public:
LLScriptSubAssignment(S32 line, S32 col, LLScriptExpression *lvalue, LLScriptExpression *rightside)
: LLScriptExpression(line, col, LET_SUB_ASSIGN), mLValue(lvalue), mRightSide(rightside)
{
}
~LLScriptSubAssignment()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptExpression *mLValue;
LLScriptExpression *mRightSide;
};
class LLScriptMulAssignment : public LLScriptExpression
{
public:
LLScriptMulAssignment(S32 line, S32 col, LLScriptExpression *lvalue, LLScriptExpression *rightside)
: LLScriptExpression(line, col, LET_MUL_ASSIGN), mLValue(lvalue), mRightSide(rightside)
{
}
~LLScriptMulAssignment()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptExpression *mLValue;
LLScriptExpression *mRightSide;
};
class LLScriptDivAssignment : public LLScriptExpression
{
public:
LLScriptDivAssignment(S32 line, S32 col, LLScriptExpression *lvalue, LLScriptExpression *rightside)
: LLScriptExpression(line, col, LET_DIV_ASSIGN), mLValue(lvalue), mRightSide(rightside)
{
}
~LLScriptDivAssignment()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptExpression *mLValue;
LLScriptExpression *mRightSide;
};
class LLScriptModAssignment : public LLScriptExpression
{
public:
LLScriptModAssignment(S32 line, S32 col, LLScriptExpression *lvalue, LLScriptExpression *rightside)
: LLScriptExpression(line, col, LET_MOD_ASSIGN), mLValue(lvalue), mRightSide(rightside)
{
}
~LLScriptModAssignment()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptExpression *mLValue;
LLScriptExpression *mRightSide;
};
class LLScriptEquality : public LLScriptExpression
{
public:
LLScriptEquality(S32 line, S32 col, LLScriptExpression *leftside, LLScriptExpression *rightside)
: LLScriptExpression(line, col, LET_EQUALITY), mLeftSide(leftside), mRightSide(rightside)
{
}
~LLScriptEquality()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptExpression *mLeftSide;
LLScriptExpression *mRightSide;
};
class LLScriptNotEquals : public LLScriptExpression
{
public:
LLScriptNotEquals(S32 line, S32 col, LLScriptExpression *leftside, LLScriptExpression *rightside)
: LLScriptExpression(line, col, LET_NOT_EQUALS), mLeftSide(leftside), mRightSide(rightside)
{
}
~LLScriptNotEquals()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptExpression *mLeftSide;
LLScriptExpression *mRightSide;
};
class LLScriptLessEquals : public LLScriptExpression
{
public:
LLScriptLessEquals(S32 line, S32 col, LLScriptExpression *leftside, LLScriptExpression *rightside)
: LLScriptExpression(line, col, LET_LESS_EQUALS), mLeftSide(leftside), mRightSide(rightside)
{
}
~LLScriptLessEquals()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptExpression *mLeftSide;
LLScriptExpression *mRightSide;
};
class LLScriptGreaterEquals : public LLScriptExpression
{
public:
LLScriptGreaterEquals(S32 line, S32 col, LLScriptExpression *leftside, LLScriptExpression *rightside)
: LLScriptExpression(line, col, LET_GREATER_EQUALS), mLeftSide(leftside), mRightSide(rightside)
{
}
~LLScriptGreaterEquals()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptExpression *mLeftSide;
LLScriptExpression *mRightSide;
};
class LLScriptLessThan : public LLScriptExpression
{
public:
LLScriptLessThan(S32 line, S32 col, LLScriptExpression *leftside, LLScriptExpression *rightside)
: LLScriptExpression(line, col, LET_LESS_THAN), mLeftSide(leftside), mRightSide(rightside)
{
}
~LLScriptLessThan()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptExpression *mLeftSide;
LLScriptExpression *mRightSide;
};
class LLScriptGreaterThan : public LLScriptExpression
{
public:
LLScriptGreaterThan(S32 line, S32 col, LLScriptExpression *leftside, LLScriptExpression *rightside)
: LLScriptExpression(line, col, LET_GREATER_THAN), mLeftSide(leftside), mRightSide(rightside)
{
}
~LLScriptGreaterThan()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptExpression *mLeftSide;
LLScriptExpression *mRightSide;
};
class LLScriptPlus : public LLScriptExpression
{
public:
LLScriptPlus(S32 line, S32 col, LLScriptExpression *leftside, LLScriptExpression *rightside)
: LLScriptExpression(line, col, LET_PLUS), mLeftSide(leftside), mRightSide(rightside)
{
}
~LLScriptPlus()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptExpression *mLeftSide;
LLScriptExpression *mRightSide;
};
class LLScriptMinus : public LLScriptExpression
{
public:
LLScriptMinus(S32 line, S32 col, LLScriptExpression *leftside, LLScriptExpression *rightside)
: LLScriptExpression(line, col, LET_MINUS), mLeftSide(leftside), mRightSide(rightside)
{
}
~LLScriptMinus()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptExpression *mLeftSide;
LLScriptExpression *mRightSide;
};
class LLScriptTimes : public LLScriptExpression
{
public:
LLScriptTimes(S32 line, S32 col, LLScriptExpression *leftside, LLScriptExpression *rightside)
: LLScriptExpression(line, col, LET_TIMES), mLeftSide(leftside), mRightSide(rightside)
{
}
~LLScriptTimes()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptExpression *mLeftSide;
LLScriptExpression *mRightSide;
};
class LLScriptDivide : public LLScriptExpression
{
public:
LLScriptDivide(S32 line, S32 col, LLScriptExpression *leftside, LLScriptExpression *rightside)
: LLScriptExpression(line, col, LET_DIVIDE), mLeftSide(leftside), mRightSide(rightside)
{
}
~LLScriptDivide()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptExpression *mLeftSide;
LLScriptExpression *mRightSide;
};
class LLScriptMod : public LLScriptExpression
{
public:
LLScriptMod(S32 line, S32 col, LLScriptExpression *leftside, LLScriptExpression *rightside)
: LLScriptExpression(line, col, LET_MOD), mLeftSide(leftside), mRightSide(rightside)
{
}
~LLScriptMod()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptExpression *mLeftSide;
LLScriptExpression *mRightSide;
};
class LLScriptBitAnd : public LLScriptExpression
{
public:
LLScriptBitAnd(S32 line, S32 col, LLScriptExpression *leftside, LLScriptExpression *rightside)
: LLScriptExpression(line, col, LET_BIT_AND), mLeftSide(leftside), mRightSide(rightside)
{
}
~LLScriptBitAnd()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptExpression *mLeftSide;
LLScriptExpression *mRightSide;
};
class LLScriptBitOr : public LLScriptExpression
{
public:
LLScriptBitOr(S32 line, S32 col, LLScriptExpression *leftside, LLScriptExpression *rightside)
: LLScriptExpression(line, col, LET_BIT_OR), mLeftSide(leftside), mRightSide(rightside)
{
}
~LLScriptBitOr()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptExpression *mLeftSide;
LLScriptExpression *mRightSide;
};
class LLScriptBitXor : public LLScriptExpression
{
public:
LLScriptBitXor(S32 line, S32 col, LLScriptExpression *leftside, LLScriptExpression *rightside)
: LLScriptExpression(line, col, LET_BIT_XOR), mLeftSide(leftside), mRightSide(rightside)
{
}
~LLScriptBitXor()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptExpression *mLeftSide;
LLScriptExpression *mRightSide;
};
class LLScriptBooleanAnd : public LLScriptExpression
{
public:
LLScriptBooleanAnd(S32 line, S32 col, LLScriptExpression *leftside, LLScriptExpression *rightside)
: LLScriptExpression(line, col, LET_BOOLEAN_AND), mLeftSide(leftside), mRightSide(rightside)
{
}
~LLScriptBooleanAnd()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptExpression *mLeftSide;
LLScriptExpression *mRightSide;
};
class LLScriptBooleanOr : public LLScriptExpression
{
public:
LLScriptBooleanOr(S32 line, S32 col, LLScriptExpression *leftside, LLScriptExpression *rightside)
: LLScriptExpression(line, col, LET_BOOLEAN_OR), mLeftSide(leftside), mRightSide(rightside)
{
}
~LLScriptBooleanOr()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptExpression *mLeftSide;
LLScriptExpression *mRightSide;
};
class LLScriptShiftLeft : public LLScriptExpression
{
public:
LLScriptShiftLeft(S32 line, S32 col, LLScriptExpression *leftside, LLScriptExpression *rightside)
: LLScriptExpression(line, col, LET_SHIFT_LEFT), mLeftSide(leftside), mRightSide(rightside)
{
}
~LLScriptShiftLeft()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptExpression *mLeftSide;
LLScriptExpression *mRightSide;
};
class LLScriptShiftRight : public LLScriptExpression
{
public:
LLScriptShiftRight(S32 line, S32 col, LLScriptExpression *leftside, LLScriptExpression *rightside)
: LLScriptExpression(line, col, LET_SHIFT_RIGHT), mLeftSide(leftside), mRightSide(rightside)
{
}
~LLScriptShiftRight()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptExpression *mLeftSide;
LLScriptExpression *mRightSide;
};
class LLScriptParenthesis : public LLScriptExpression
{
public:
LLScriptParenthesis(S32 line, S32 col, LLScriptExpression *expression)
: LLScriptExpression(line, col, LET_PARENTHESIS), mExpression(expression)
{
}
~LLScriptParenthesis()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptExpression *mExpression;
};
class LLScriptUnaryMinus : public LLScriptExpression
{
public:
LLScriptUnaryMinus(S32 line, S32 col, LLScriptExpression *expression)
: LLScriptExpression(line, col, LET_UNARY_MINUS), mExpression(expression)
{
}
~LLScriptUnaryMinus()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptExpression *mExpression;
};
class LLScriptBooleanNot : public LLScriptExpression
{
public:
LLScriptBooleanNot(S32 line, S32 col, LLScriptExpression *expression)
: LLScriptExpression(line, col, LET_BOOLEAN_NOT), mExpression(expression)
{
}
~LLScriptBooleanNot()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptExpression *mExpression;
};
class LLScriptBitNot : public LLScriptExpression
{
public:
LLScriptBitNot(S32 line, S32 col, LLScriptExpression *expression)
: LLScriptExpression(line, col, LET_BIT_NOT), mExpression(expression)
{
}
~LLScriptBitNot()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptExpression *mExpression;
};
class LLScriptPreIncrement : public LLScriptExpression
{
public:
LLScriptPreIncrement(S32 line, S32 col, LLScriptExpression *expression)
: LLScriptExpression(line, col, LET_PRE_INCREMENT), mExpression(expression)
{
}
~LLScriptPreIncrement()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptExpression *mExpression;
};
class LLScriptPreDecrement : public LLScriptExpression
{
public:
LLScriptPreDecrement(S32 line, S32 col, LLScriptExpression *expression)
: LLScriptExpression(line, col, LET_PRE_DECREMENT), mExpression(expression)
{
}
~LLScriptPreDecrement()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptExpression *mExpression;
};
class LLScriptTypeCast : public LLScriptExpression
{
public:
LLScriptTypeCast(S32 line, S32 col, LLScriptType *type, LLScriptExpression *expression)
: LLScriptExpression(line, col, LET_CAST), mType(type), mExpression(expression)
{
}
~LLScriptTypeCast()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptType *mType;
LLScriptExpression *mExpression;
};
class LLScriptVectorInitializer : public LLScriptExpression
{
public:
LLScriptVectorInitializer(S32 line, S32 col, LLScriptExpression *expression1,
LLScriptExpression *expression2,
LLScriptExpression *expression3)
: LLScriptExpression(line, col, LET_VECTOR_INITIALIZER),
mExpression1(expression1),
mExpression2(expression2),
mExpression3(expression3)
{
}
~LLScriptVectorInitializer()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptExpression *mExpression1;
LLScriptExpression *mExpression2;
LLScriptExpression *mExpression3;
};
class LLScriptQuaternionInitializer : public LLScriptExpression
{
public:
LLScriptQuaternionInitializer(S32 line, S32 col, LLScriptExpression *expression1,
LLScriptExpression *expression2,
LLScriptExpression *expression3,
LLScriptExpression *expression4)
: LLScriptExpression(line, col, LET_VECTOR_INITIALIZER),
mExpression1(expression1),
mExpression2(expression2),
mExpression3(expression3),
mExpression4(expression4)
{
}
~LLScriptQuaternionInitializer()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptExpression *mExpression1;
LLScriptExpression *mExpression2;
LLScriptExpression *mExpression3;
LLScriptExpression *mExpression4;
};
class LLScriptListInitializer : public LLScriptExpression
{
public:
LLScriptListInitializer(S32 line, S32 col, LLScriptExpression *expressionlist)
: LLScriptExpression(line, col, LET_LIST_INITIALIZER), mExpressionList(expressionlist)
{
}
~LLScriptListInitializer()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptExpression *mExpressionList;
};
class LLScriptPostIncrement : public LLScriptExpression
{
public:
LLScriptPostIncrement(S32 line, S32 col, LLScriptExpression *expression)
: LLScriptExpression(line, col, LET_POST_INCREMENT), mExpression(expression)
{
}
~LLScriptPostIncrement()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptExpression *mExpression;
};
class LLScriptPostDecrement : public LLScriptExpression
{
public:
LLScriptPostDecrement(S32 line, S32 col, LLScriptExpression *expression)
: LLScriptExpression(line, col, LET_POST_DECREMENT), mExpression(expression)
{
}
~LLScriptPostDecrement()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptExpression *mExpression;
};
class LLScriptFunctionCall : public LLScriptExpression
{
public:
LLScriptFunctionCall(S32 line, S32 col, LLScriptIdentifier *identifier, LLScriptExpression *expressionlist)
: LLScriptExpression(line, col, LET_FUNCTION_CALL), mIdentifier(identifier), mExpressionList(expressionlist)
{
}
~LLScriptFunctionCall()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptIdentifier *mIdentifier;
LLScriptExpression *mExpressionList;
};
class LLScriptPrint : public LLScriptExpression
{
public:
LLScriptPrint(S32 line, S32 col, LLScriptExpression *expression)
: LLScriptExpression(line, col, LET_PRINT), mExpression(expression)
{
}
~LLScriptPrint()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptExpression *mExpression;
};
class LLScriptConstantExpression : public LLScriptExpression
{
public:
LLScriptConstantExpression(S32 line, S32 col, LLScriptConstant *constant)
: LLScriptExpression(line, col, LET_CONSTANT), mConstant(constant)
{
}
~LLScriptConstantExpression()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptConstant *mConstant;
};
// statement
typedef enum e_lscript_statement_types
{
LSSMT_NULL,
LSSMT_SEQUENCE,
LSSMT_NOOP,
LSSMT_STATE_CHANGE,
LSSMT_JUMP,
LSSMT_LABEL,
LSSMT_RETURN,
LSSMT_EXPRESSION,
LSSMT_IF,
LSSMT_IF_ELSE,
LSSMT_FOR,
LSSMT_DO_WHILE,
LSSMT_WHILE,
LSSMT_DECLARATION,
LSSMT_COMPOUND_STATEMENT,
LSSMT_EOF
} LSCRIPTStatementType;
class LLScriptStatement : public LLScriptFilePosition
{
public:
LLScriptStatement(S32 line, S32 col, LSCRIPTStatementType type)
: LLScriptFilePosition(line, col), mType(type), mNextp(NULL), mStatementScope(NULL), mAllowDeclarations(TRUE)
{
}
virtual ~LLScriptStatement()
{
delete mStatementScope;
}
void addStatement(LLScriptStatement *event);
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
void gonext(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LSCRIPTStatementType mType;
LLScriptStatement *mNextp;
LLScriptScope *mStatementScope;
BOOL mAllowDeclarations;
};
class LLScriptStatementSequence : public LLScriptStatement
{
public:
LLScriptStatementSequence(S32 line, S32 col, LLScriptStatement *first, LLScriptStatement *second)
: LLScriptStatement(line, col, LSSMT_SEQUENCE), mFirstp(first), mSecondp(second)
{
}
~LLScriptStatementSequence()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptStatement *mFirstp;
LLScriptStatement *mSecondp;
};
class LLScriptNOOP : public LLScriptStatement
{
public:
LLScriptNOOP(S32 line, S32 col)
: LLScriptStatement(line, col, LSSMT_NOOP)
{
}
~LLScriptNOOP() {}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
};
class LLScriptStateChange : public LLScriptStatement
{
public:
LLScriptStateChange(S32 line, S32 col, LLScriptIdentifier *identifier)
: LLScriptStatement(line, col, LSSMT_STATE_CHANGE), mIdentifier(identifier), mReturnType(LST_NULL)
{
}
~LLScriptStateChange()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptIdentifier *mIdentifier;
LSCRIPTType mReturnType;
};
class LLScriptJump : public LLScriptStatement
{
public:
LLScriptJump(S32 line, S32 col, LLScriptIdentifier *identifier)
: LLScriptStatement(line, col, LSSMT_JUMP), mIdentifier(identifier)
{
}
~LLScriptJump()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptIdentifier *mIdentifier;
};
class LLScriptLabel : public LLScriptStatement
{
public:
LLScriptLabel(S32 line, S32 col, LLScriptIdentifier *identifier)
: LLScriptStatement(line, col, LSSMT_LABEL), mIdentifier(identifier)
{
}
~LLScriptLabel()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptIdentifier *mIdentifier;
};
class LLScriptReturn : public LLScriptStatement
{
public:
LLScriptReturn(S32 line, S32 col, LLScriptExpression *expression)
: LLScriptStatement(line, col, LSSMT_RETURN), mExpression(expression), mType(LST_NULL)
{
}
~LLScriptReturn()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptExpression *mExpression;
LSCRIPTType mType;
};
class LLScriptExpressionStatement : public LLScriptStatement
{
public:
LLScriptExpressionStatement(S32 line, S32 col, LLScriptExpression *expression)
: LLScriptStatement(line, col, LSSMT_EXPRESSION), mExpression(expression)
{
}
~LLScriptExpressionStatement()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptExpression *mExpression;
};
class LLScriptIf : public LLScriptStatement
{
public:
LLScriptIf(S32 line, S32 col, LLScriptExpression *expression, LLScriptStatement *statement)
: LLScriptStatement(line, col, LSSMT_IF), mType(LST_NULL), mExpression(expression), mStatement(statement)
{
}
~LLScriptIf()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LSCRIPTType mType;
LLScriptExpression *mExpression;
LLScriptStatement *mStatement;
};
class LLScriptIfElse : public LLScriptStatement
{
public:
LLScriptIfElse(S32 line, S32 col, LLScriptExpression *expression, LLScriptStatement *statement1, LLScriptStatement *statement2)
: LLScriptStatement(line, col, LSSMT_IF_ELSE), mExpression(expression), mStatement1(statement1), mStatement2(statement2), mType(LST_NULL)
{
}
~LLScriptIfElse()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptExpression *mExpression;
LLScriptStatement *mStatement1;
LLScriptStatement *mStatement2;
LSCRIPTType mType;
};
class LLScriptFor : public LLScriptStatement
{
public:
LLScriptFor(S32 line, S32 col, LLScriptExpression *sequence, LLScriptExpression *expression, LLScriptExpression *expressionlist, LLScriptStatement *statement)
: LLScriptStatement(line, col, LSSMT_FOR), mSequence(sequence), mExpression(expression), mExpressionList(expressionlist), mStatement(statement), mType(LST_NULL)
{
}
~LLScriptFor()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptExpression *mSequence;
LLScriptExpression *mExpression;
LLScriptExpression *mExpressionList;
LLScriptStatement *mStatement;
LSCRIPTType mType;
};
class LLScriptDoWhile : public LLScriptStatement
{
public:
LLScriptDoWhile(S32 line, S32 col, LLScriptStatement *statement, LLScriptExpression *expression)
: LLScriptStatement(line, col, LSSMT_DO_WHILE), mStatement(statement), mExpression(expression), mType(LST_NULL)
{
}
~LLScriptDoWhile()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptStatement *mStatement;
LLScriptExpression *mExpression;
LSCRIPTType mType;
};
class LLScriptWhile : public LLScriptStatement
{
public:
LLScriptWhile(S32 line, S32 col, LLScriptExpression *expression, LLScriptStatement *statement)
: LLScriptStatement(line, col, LSSMT_WHILE), mExpression(expression), mStatement(statement), mType(LST_NULL)
{
}
~LLScriptWhile()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptExpression *mExpression;
LLScriptStatement *mStatement;
LSCRIPTType mType;
};
// local variables
class LLScriptDeclaration : public LLScriptStatement
{
public:
LLScriptDeclaration(S32 line, S32 col, LLScriptType *type, LLScriptIdentifier *identifier, LLScriptExpression *expression)
: LLScriptStatement(line, col, LSSMT_DECLARATION), mType(type), mIdentifier(identifier), mExpression(expression)
{
}
~LLScriptDeclaration()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptType *mType;
LLScriptIdentifier *mIdentifier;
LLScriptExpression *mExpression;
};
class LLScriptCompoundStatement : public LLScriptStatement
{
public:
LLScriptCompoundStatement(S32 line, S32 col, LLScriptStatement *statement)
: LLScriptStatement(line, col, LSSMT_COMPOUND_STATEMENT), mStatement(statement)
{
}
~LLScriptCompoundStatement()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptStatement *mStatement;
};
class LLScriptEventHandler : public LLScriptFilePosition
{
public:
LLScriptEventHandler(S32 line, S32 col, LLScriptEvent *event, LLScriptStatement *statement)
: LLScriptFilePosition(line, col), mEventp(event), mStatement(statement), mNextp(NULL), mEventScope(NULL), mbNeedTrailingReturn(FALSE), mScopeEntry(NULL), mStackSpace(0)
{
}
~LLScriptEventHandler()
{
delete mEventScope;
delete mScopeEntry;
}
void addEvent(LLScriptEventHandler *event);
void gonext(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptEvent *mEventp;
LLScriptStatement *mStatement;
LLScriptEventHandler *mNextp;
LLScriptScope *mEventScope;
BOOL mbNeedTrailingReturn;
LLScriptScopeEntry *mScopeEntry;
S32 mStackSpace;
};
// global functions
class LLScriptFunctionDec : public LLScriptFilePosition
{
public:
LLScriptFunctionDec(S32 line, S32 col, LLScriptType *type, LLScriptIdentifier *identifier)
: LLScriptFilePosition(line, col), mType(type), mIdentifier(identifier), mNextp(NULL)
{
}
~LLScriptFunctionDec()
{
}
void addFunctionParameter(LLScriptFunctionDec *dec);
void gonext(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptType *mType;
LLScriptIdentifier *mIdentifier;
LLScriptFunctionDec *mNextp;
};
class LLScriptGlobalFunctions : public LLScriptFilePosition
{
public:
LLScriptGlobalFunctions(S32 line, S32 col, LLScriptType *type,
LLScriptIdentifier *identifier,
LLScriptFunctionDec *parameters,
LLScriptStatement *statements)
: LLScriptFilePosition(line, col), mType(type), mIdentifier(identifier), mParameters(parameters), mStatements(statements), mNextp(NULL), mFunctionScope(NULL), mbNeedTrailingReturn(FALSE)
{
}
void addGlobalFunction(LLScriptGlobalFunctions *global);
~LLScriptGlobalFunctions()
{
delete mFunctionScope;
}
void gonext(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LLScriptType *mType;
LLScriptIdentifier *mIdentifier;
LLScriptFunctionDec *mParameters;
LLScriptStatement *mStatements;
LLScriptGlobalFunctions *mNextp;
LLScriptScope *mFunctionScope;
BOOL mbNeedTrailingReturn;
};
typedef enum e_lscript_state_type
{
LSSTYPE_NULL,
LSSTYPE_DEFAULT,
LSSTYPE_USER,
LSSTYPE_EOF
} LSCRIPTStateType;
// info on state
class LLScriptState : public LLScriptFilePosition
{
public:
LLScriptState(S32 line, S32 col, LSCRIPTStateType type, LLScriptIdentifier *identifier, LLScriptEventHandler *event)
: LLScriptFilePosition(line, col), mType(type), mIdentifier(identifier), mEvent(event), mNextp(NULL), mStateScope(NULL)
{
}
void addState(LLScriptState *state);
~LLScriptState()
{
}
void gonext(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
LSCRIPTStateType mType;
LLScriptIdentifier *mIdentifier;
LLScriptEventHandler *mEvent;
LLScriptState *mNextp;
LLScriptScope *mStateScope;
};
class LLScritpGlobalStorage : public LLScriptFilePosition
{
public:
LLScritpGlobalStorage(LLScriptGlobalVariable *var)
: LLScriptFilePosition(0, 0), mGlobal(var), mbGlobalFunction(FALSE), mNextp(NULL)
{
}
LLScritpGlobalStorage(LLScriptGlobalFunctions *func)
: LLScriptFilePosition(0, 0), mGlobal(func), mbGlobalFunction(TRUE), mNextp(NULL)
{
}
~LLScritpGlobalStorage()
{
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
{
}
S32 getSize()
{
return 0;
}
void addGlobal(LLScritpGlobalStorage *global)
{
if (mNextp)
{
global->mNextp = mNextp;
}
mNextp = global;
}
LLScriptFilePosition *mGlobal;
BOOL mbGlobalFunction;
LLScritpGlobalStorage *mNextp;
};
// top level container for entire script
class LLScriptScript : public LLScriptFilePosition
{
public:
LLScriptScript(LLScritpGlobalStorage *globals,
LLScriptState *states);
~LLScriptScript()
{
delete mGlobalScope;
}
void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
S32 getSize();
void setBytecodeDest(const char* dst_filename);
void setClassName(const char* class_name);
const char* getClassName() {return mClassName;}
LLScriptState *mStates;
LLScriptScope *mGlobalScope;
LLScriptGlobalVariable *mGlobals;
LLScriptGlobalFunctions *mGlobalFunctions;
BOOL mGodLike;
private:
std::string mBytecodeDest;
char mClassName[MAX_STRING];
};
class LLScriptAllocationManager
{
public:
LLScriptAllocationManager() {}
~LLScriptAllocationManager()
{
mAllocationList.deleteAllData();
}
void addAllocation(LLScriptFilePosition *ptr)
{
mAllocationList.addData(ptr);
}
void deleteAllocations()
{
mAllocationList.deleteAllData();
}
LLLinkedList<LLScriptFilePosition> mAllocationList;
};
extern LLScriptAllocationManager *gAllocationManager;
extern LLScriptScript *gScriptp;
#endif