X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2FLibraries%2Flibspiderscript.so_src%2Fast.h;h=1c4ab4b623df6eea10ed9adae3df72a4f1f26f94;hb=144f6dd1de5f134aeb2f7e212408c7b76a22f354;hp=05ed68bf7a5554c43d4febd1f777124c1004aac4;hpb=ec6f426069129f0a3d207f743ecddceddb57db8e;p=tpg%2Facess2.git diff --git a/Usermode/Libraries/libspiderscript.so_src/ast.h b/Usermode/Libraries/libspiderscript.so_src/ast.h index 05ed68bf..1c4ab4b6 100644 --- a/Usermode/Libraries/libspiderscript.so_src/ast.h +++ b/Usermode/Libraries/libspiderscript.so_src/ast.h @@ -4,6 +4,7 @@ #define _AST_H_ #include +#include "tokens.h" typedef enum eAST_NodeTypes tAST_NodeType; typedef struct sAST_Script tAST_Script; @@ -89,6 +90,9 @@ struct sAST_Node tAST_Node *NextSibling; tAST_NodeType Type; + const char *File; + int Line; + union { struct { @@ -111,11 +115,6 @@ struct sAST_Node tAST_Node *Right; } BinOp; - struct { - int Length; - char Data[]; - } String; - struct { tAST_Node *FirstArg; tAST_Node *LastArg; @@ -157,6 +156,11 @@ struct sAST_Node tAST_Node *Value; } Cast; + struct { + int Length; + char Data[]; + } String; + uint64_t Integer; double Real; }; @@ -187,27 +191,29 @@ extern tAST_Script *AST_NewScript(void); extern tAST_Function *AST_AppendFunction(tAST_Script *Script, const char *Name); extern void AST_AppendFunctionArg(tAST_Function *Function, tAST_Node *Arg); extern void AST_SetFunctionCode(tAST_Function *Function, tAST_Node *Root); - -extern tAST_Node *AST_NewString(const char *String, int Length); -extern tAST_Node *AST_NewInteger(uint64_t Value); -extern tAST_Node *AST_NewVariable(const char *Name); -extern tAST_Node *AST_NewDefineVar(int Type, const char *Name); -extern tAST_Node *AST_NewConstant(const char *Name); -extern tAST_Node *AST_NewFunctionCall(const char *Name); +extern tAST_Node *AST_NewString(tParser *Parser, const char *String, int Length); +extern tAST_Node *AST_NewInteger(tParser *Parser, uint64_t Value); +extern tAST_Node *AST_NewVariable(tParser *Parser, const char *Name); +extern tAST_Node *AST_NewDefineVar(tParser *Parser, int Type, const char *Name); +extern tAST_Node *AST_NewConstant(tParser *Parser, const char *Name); +extern tAST_Node *AST_NewFunctionCall(tParser *Parser, const char *Name); extern void AST_AppendFunctionCallArg(tAST_Node *Node, tAST_Node *Arg); extern tAST_Node *AST_NewCodeBlock(void); extern void AST_AppendNode(tAST_Node *Parent, tAST_Node *Child); -extern tAST_Node *AST_NewIf(tAST_Node *Condition, tAST_Node *True, tAST_Node *False); +extern tAST_Node *AST_NewIf(tParser *Parser, tAST_Node *Condition, tAST_Node *True, tAST_Node *False); -extern tAST_Node *AST_NewAssign(int Operation, tAST_Node *Dest, tAST_Node *Value); -extern tAST_Node *AST_NewBinOp(int Operation, tAST_Node *Left, tAST_Node *Right); -extern tAST_Node *AST_NewUniOp(int Operation, tAST_Node *Value); +extern tAST_Node *AST_NewAssign(tParser *Parser, int Operation, tAST_Node *Dest, tAST_Node *Value); +extern tAST_Node *AST_NewCast(tParser *Parser, int Target, tAST_Node *Value); +extern tAST_Node *AST_NewBinOp(tParser *Parser, int Operation, tAST_Node *Left, tAST_Node *Right); +extern tAST_Node *AST_NewUniOp(tParser *Parser, int Operation, tAST_Node *Value); extern void AST_FreeNode(tAST_Node *Node); // exec_ast.h +extern void Object_Dereference(tSpiderValue *Object); +extern void Object_Reference(tSpiderValue *Object); extern tSpiderValue *AST_ExecuteNode(tAST_BlockState *Block, tAST_Node *Node); #endif