mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-12-25 11:10:47 +00:00
- removed the remaining Doom-specific parts of the script compiler.
This commit is contained in:
parent
006916a0a6
commit
c0217c9152
6 changed files with 54 additions and 75 deletions
|
@ -228,26 +228,3 @@ void InitImports()
|
|||
}
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// SetImplicitArgs
|
||||
//
|
||||
// Adds the parameters implied by the function flags.
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
void SetImplicitArgs(TArray<PType *> *args, TArray<uint32_t> *argflags, TArray<FName> *argnames, PContainerType *cls, uint32_t funcflags, int useflags)
|
||||
{
|
||||
// Must be called before adding any other arguments.
|
||||
assert(args == nullptr || args->Size() == 0);
|
||||
assert(argflags == nullptr || argflags->Size() == 0);
|
||||
|
||||
if (funcflags & VARF_Method)
|
||||
{
|
||||
// implied self pointer
|
||||
if (args != nullptr) args->Push(NewPointer(cls, !!(funcflags & VARF_ReadOnly)));
|
||||
if (argflags != nullptr) argflags->Push(VARF_Implicit | VARF_ReadOnly);
|
||||
if (argnames != nullptr) argnames->Push(NAME_self);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -39,19 +39,18 @@
|
|||
#include "zcc_compile.h"
|
||||
#include "printf.h"
|
||||
#include "symbols.h"
|
||||
//#include "v_video.h"
|
||||
|
||||
FSharedStringArena VMStringConstants;
|
||||
|
||||
|
||||
static int GetIntConst(FxExpression *ex, FCompileContext &ctx)
|
||||
int GetIntConst(FxExpression *ex, FCompileContext &ctx)
|
||||
{
|
||||
ex = new FxIntCast(ex, false);
|
||||
ex = ex->Resolve(ctx);
|
||||
return ex ? static_cast<FxConstant*>(ex)->GetValue().GetInt() : 0;
|
||||
}
|
||||
|
||||
static double GetFloatConst(FxExpression *ex, FCompileContext &ctx)
|
||||
double GetFloatConst(FxExpression *ex, FCompileContext &ctx)
|
||||
{
|
||||
ex = new FxFloatCast(ex);
|
||||
ex = ex->Resolve(ctx);
|
||||
|
@ -641,6 +640,7 @@ void ZCCCompiler::MessageV(ZCC_TreeNode *node, const char *txtcolor, const char
|
|||
// ZCCCompiler :: Compile
|
||||
//
|
||||
// Compile everything defined at this level.
|
||||
// This can be overridden to add custom content.
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
|
@ -1347,15 +1347,13 @@ void ZCCCompiler::CompileAllFields()
|
|||
type->Size = Classes[i]->ClassType()->ParentClass->Size;
|
||||
}
|
||||
}
|
||||
/*if (type->TypeName == NAME_Actor)
|
||||
if (!PrepareMetaData(type))
|
||||
{
|
||||
assert(type->MetaSize == 0);
|
||||
AddActorInfo(type); // AActor needs the actor info manually added to its meta data before adding any scripted fields.
|
||||
if (Classes[i]->ClassType()->ParentClass)
|
||||
type->MetaSize = Classes[i]->ClassType()->ParentClass->MetaSize;
|
||||
else
|
||||
type->MetaSize = 0;
|
||||
}
|
||||
else*/ if (Classes[i]->ClassType()->ParentClass)
|
||||
type->MetaSize = Classes[i]->ClassType()->ParentClass->MetaSize;
|
||||
else
|
||||
type->MetaSize = 0;
|
||||
|
||||
if (CompileFields(type->VMType, Classes[i]->Fields, nullptr, &Classes[i]->TreeNodes, false, !!HasNativeChildren.CheckKey(type->TypeName)))
|
||||
{
|
||||
|
@ -1922,11 +1920,33 @@ PType *ZCCCompiler::ResolveArraySize(PType *baseType, ZCC_Expression *arraysize,
|
|||
|
||||
//==========================================================================
|
||||
//
|
||||
// SetImplicitArgs
|
||||
//
|
||||
// Adds the parameters implied by the function flags.
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
void ZCCCompiler::SetImplicitArgs(TArray<PType*>* args, TArray<uint32_t>* argflags, TArray<FName>* argnames, PContainerType* cls, uint32_t funcflags, int useflags)
|
||||
{
|
||||
// Must be called before adding any other arguments.
|
||||
assert(args == nullptr || args->Size() == 0);
|
||||
assert(argflags == nullptr || argflags->Size() == 0);
|
||||
|
||||
if (funcflags & VARF_Method)
|
||||
{
|
||||
// implied self pointer
|
||||
if (args != nullptr) args->Push(NewPointer(cls, !!(funcflags & VARF_ReadOnly)));
|
||||
if (argflags != nullptr) argflags->Push(VARF_Implicit | VARF_ReadOnly);
|
||||
if (argnames != nullptr) argnames->Push(NAME_self);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
//
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
void ZCCCompiler::CompileFunction(ZCC_StructWork *c, ZCC_FuncDeclarator *f, bool forclass)
|
||||
{
|
||||
|
@ -2041,14 +2061,14 @@ void ZCCCompiler::CompileFunction(ZCC_StructWork *c, ZCC_FuncDeclarator *f, bool
|
|||
}
|
||||
if (f->Flags & ZCC_Action)
|
||||
{
|
||||
/*
|
||||
if (compileEnvironment.processActionFunc)
|
||||
implicitargs = CheckActionKeyword(f,varflags, useflags, c);
|
||||
if (implicitargs < 0)
|
||||
{
|
||||
|
||||
Error(f, "'Action' not allowed as a function qualifier");
|
||||
// Set state to allow continued compilation to find more errors.
|
||||
varflags &= ~VARF_ReadOnly;
|
||||
implicitargs = 1;
|
||||
}
|
||||
else
|
||||
*/
|
||||
Error(f, "'Action' not allowed as a function qualifier");
|
||||
}
|
||||
if (f->Flags & ZCC_Static) varflags = (varflags & ~VARF_Method) | VARF_Final, implicitargs = 0; // Static implies Final.
|
||||
|
||||
|
|
|
@ -106,11 +106,14 @@ class ZCCCompiler
|
|||
{
|
||||
public:
|
||||
ZCCCompiler(ZCC_AST &tree, DObject *outer, PSymbolTable &symbols, PNamespace *outnamespace, int lumpnum, const VersionInfo & ver);
|
||||
~ZCCCompiler();
|
||||
int Compile();
|
||||
virtual ~ZCCCompiler();
|
||||
virtual int Compile();
|
||||
|
||||
private:
|
||||
protected:
|
||||
const char * GetStringConst(FxExpression *ex, FCompileContext &ctx);
|
||||
virtual int CheckActionKeyword(ZCC_FuncDeclarator* f, uint32_t &varflags, int useflags, ZCC_StructWork *c) { return -1; } // stock implementation does not support this.
|
||||
virtual bool PrepareMetaData(PClass *type) { return false; }
|
||||
virtual void SetImplicitArgs(TArray<PType*>* args, TArray<uint32_t>* argflags, TArray<FName>* argnames, PContainerType* cls, uint32_t funcflags, int useflags);
|
||||
|
||||
int IntConstFromNode(ZCC_TreeNode *node, PContainerType *cls);
|
||||
FString StringConstFromNode(ZCC_TreeNode *node, PContainerType *cls);
|
||||
|
|
|
@ -350,16 +350,20 @@ parse_end:
|
|||
|
||||
//**--------------------------------------------------------------------------
|
||||
|
||||
static void DoParse(int lumpnum)
|
||||
PNamespace *ParseOneScript(const int baselump, ZCCParseState &state)
|
||||
{
|
||||
FScanner sc;
|
||||
void *parser;
|
||||
ZCCToken value;
|
||||
auto baselump = lumpnum;
|
||||
int lumpnum = baselump;
|
||||
auto fileno = fileSystem.GetFileContainer(lumpnum);
|
||||
|
||||
if (TokenMap.CountUsed() == 0)
|
||||
{
|
||||
InitTokenMap();
|
||||
}
|
||||
|
||||
parser = ZCCParseAlloc(malloc);
|
||||
ZCCParseState state;
|
||||
|
||||
#ifndef NDEBUG
|
||||
FILE *f = nullptr;
|
||||
|
@ -471,37 +475,8 @@ static void DoParse(int lumpnum)
|
|||
}
|
||||
}
|
||||
|
||||
PSymbolTable symtable;
|
||||
auto newns = fileSystem.GetFileContainer(baselump) == 0 ? Namespaces.GlobalNamespace : Namespaces.NewNamespace(fileSystem.GetFileContainer(baselump));
|
||||
ZCCCompiler cc(state, NULL, symtable, newns, baselump, state.ParseVersion);
|
||||
cc.Compile();
|
||||
|
||||
if (FScriptPosition::ErrorCounter > 0)
|
||||
{
|
||||
// Abort if the compiler produced any errors. Also do not compile further lumps, because they very likely miss some stuff.
|
||||
I_Error("%d errors, %d warnings while compiling %s", FScriptPosition::ErrorCounter, FScriptPosition::WarnCounter, fileSystem.GetFileFullPath(baselump).GetChars());
|
||||
}
|
||||
else if (FScriptPosition::WarnCounter > 0)
|
||||
{
|
||||
// If we got warnings, but no errors, print the information but continue.
|
||||
Printf(TEXTCOLOR_ORANGE "%d warnings while compiling %s\n", FScriptPosition::WarnCounter, fileSystem.GetFileFullPath(baselump).GetChars());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void ParseScripts()
|
||||
{
|
||||
if (TokenMap.CountUsed() == 0)
|
||||
{
|
||||
InitTokenMap();
|
||||
}
|
||||
int lump, lastlump = 0;
|
||||
FScriptPosition::ResetErrorCounter();
|
||||
|
||||
while ((lump = fileSystem.FindLump("ZSCRIPT", &lastlump)) != -1)
|
||||
{
|
||||
DoParse(lump);
|
||||
}
|
||||
return newns;
|
||||
}
|
||||
|
||||
static FString ZCCTokenName(int terminal)
|
||||
|
|
|
@ -618,4 +618,7 @@ const char *GetMixinTypeString(EZCCMixinType type);
|
|||
|
||||
ZCC_TreeNode *TreeNodeDeepCopy(ZCC_AST *ast, ZCC_TreeNode *orig, bool copySiblings);
|
||||
|
||||
// Main entry point for the parser. Returns some data needed by the compiler.
|
||||
PNamespace* ParseOneScript(const int baselump, ZCCParseState& state);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
cmake_minimum_required( VERSION 2.8.7 )
|
||||
|
||||
add_subdirectory( re2c )
|
||||
add_subdirectory( lemon )
|
||||
add_subdirectory( zipdir )
|
||||
|
||||
set( CROSS_EXPORTS ${CROSS_EXPORTS} PARENT_SCOPE )
|
||||
|
|
Loading…
Reference in a new issue