X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2FLibraries%2Flibspiderscript.so_src%2Fbytecode_gen.h;h=0d901ebd0adbd7bafaf6c3ba28f30f8201f4dd21;hb=a01827f4eeade250266325ce61f829175de2dba8;hp=19d240c8fa966cee2c703fc82bc07c07a936f4eb;hpb=2c8989ea0849b0e207e6c357626d41c991dc423f;p=tpg%2Facess2.git diff --git a/Usermode/Libraries/libspiderscript.so_src/bytecode_gen.h b/Usermode/Libraries/libspiderscript.so_src/bytecode_gen.h index 19d240c8..0d901ebd 100644 --- a/Usermode/Libraries/libspiderscript.so_src/bytecode_gen.h +++ b/Usermode/Libraries/libspiderscript.so_src/bytecode_gen.h @@ -8,12 +8,12 @@ #ifndef _BYTECODE_GEN_H_ #define _BYTECODE_GEN_H_ +#include "common.h" #include "ast.h" #include "bytecode.h" typedef struct sStringList tStringList; typedef struct sString tString; -//typedef struct sAST_Function tAST_Function; struct sString { @@ -32,13 +32,13 @@ struct sStringList extern int Bytecode_ConvertScript(tSpiderScript *Script, const char *DestFile); -extern tBC_Function *Bytecode_ConvertFunction(tAST_Function *ASTFcn); +extern tBC_Function *Bytecode_ConvertFunction(tScript_Function *Fcn); extern tBC_Function *Bytecode_NewBlankFunction(void); extern void Bytecode_DeleteFunction(tBC_Function *Fcn); extern char *Bytecode_SerialiseFunction(const tBC_Function *Function, int *Length, tStringList *Strings); extern int StringList_GetString(tStringList *List, const char *String, int Length); -extern tBC_Function *Bytecode_CreateFunction(const char *Name, int ArgCount, char **ArgNames, int *ArgTypes); +extern tBC_Function *Bytecode_CreateFunction(tScript_Function *Fcn); extern int Bytecode_AllocateLabel(tBC_Function *Handle); extern void Bytecode_SetLabel(tBC_Function *Handle, int Label); @@ -46,6 +46,7 @@ extern void Bytecode_SetLabel(tBC_Function *Handle, int Label); // - Flow Control extern void Bytecode_AppendJump(tBC_Function *Handle, int Label); extern void Bytecode_AppendCondJump(tBC_Function *Handle, int Label); +extern void Bytecode_AppendCondJumpNot(tBC_Function *Handle, int Label); extern void Bytecode_AppendReturn(tBC_Function *Handle); // - Operation Stack // > Load/Store @@ -55,7 +56,6 @@ extern void Bytecode_AppendConstInt(tBC_Function *Handle, uint64_t Value); extern void Bytecode_AppendConstReal(tBC_Function *Handle, double Value); extern void Bytecode_AppendConstString(tBC_Function *Handle, const void *Data, size_t Length); // > Scoping -extern void Bytecode_AppendSubNamespace(tBC_Function *Handle, const char *Name); // Pop NS from stack, go to child, push ("" = root) extern void Bytecode_AppendElement(tBC_Function *Handle, const char *Name); // Obj->SubObj extern void Bytecode_AppendIndex(tBC_Function *Handle); // Index into an array // > Function Calls @@ -66,6 +66,8 @@ extern void Bytecode_AppendFunctionCall(tBC_Function *Handle, const char *Name, extern void Bytecode_AppendBinOp(tBC_Function *Handle, int Operation); extern void Bytecode_AppendUniOp(tBC_Function *Handle, int Operation); extern void Bytecode_AppendCast(tBC_Function *Handlde, int Type); +extern void Bytecode_AppendDuplicate(tBC_Function *Handlde); +extern void Bytecode_AppendDelete(tBC_Function *Handle); // - Context // TODO: Are contexts needed? Should variables be allocated like labels? extern void Bytecode_AppendEnterContext(tBC_Function *Handle);