db453c26f429ba8057ea92644ddd59279b9a918dvboxsync/** @file
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync *
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync * VBox HDD container test utility - scripting engine, AST related structures.
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync/*
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync * Copyright (C) 2013 Oracle Corporation
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync *
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync * available from http://www.virtualbox.org. This file is free software;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync * you can redistribute it and/or modify it under the terms of the GNU
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync * General Public License (GPL) as published by the Free Software
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync#ifndef _VDScriptAst_h__
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync#define _VDScriptAst_h__
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync#include <iprt/list.h>
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync/**
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync * Position information.
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsynctypedef struct VDSRCPOS
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync{
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Line in the source. */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync unsigned iLine;
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Current start character .*/
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync unsigned iChStart;
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Current end character. */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync unsigned iChEnd;
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync} VDSRCPOS;
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync/** Pointer to a source position. */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsynctypedef struct VDSRCPOS *PVDSRCPOS;
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync/**
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync * AST node classes.
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsynctypedef enum VDSCRIPTASTCLASS
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync{
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** Invalid. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync VDSCRIPTASTCLASS_INVALID = 0,
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** Function node. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync VDSCRIPTASTCLASS_FUNCTION,
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** Function argument. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync VDSCRIPTASTCLASS_FUNCTIONARG,
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** Identifier node. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync VDSCRIPTASTCLASS_IDENTIFIER,
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** Declaration node. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync VDSCRIPTASTCLASS_DECLARATION,
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** Statement node. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync VDSCRIPTASTCLASS_STATEMENT,
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** Expression node. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync VDSCRIPTASTCLASS_EXPRESSION,
c299849be8ae3544715e8806e1433cae67d93e2evboxsync /** Type name node. */
c299849be8ae3544715e8806e1433cae67d93e2evboxsync VDSCRIPTASTCLASS_TYPENAME,
c299849be8ae3544715e8806e1433cae67d93e2evboxsync /** Type specifier node. */
c299849be8ae3544715e8806e1433cae67d93e2evboxsync VDSCRIPTASTCLASS_TYPESPECIFIER,
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** 32bit blowup. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync VDSCRIPTASTCLASS_32BIT_HACK = 0x7fffffff
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync} VDSCRIPTASTCLASS;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync/** Pointer to an AST node class. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsynctypedef VDSCRIPTASTCLASS *PVDSCRIPTASTCLASS;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync/**
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync * Core AST structure.
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsynctypedef struct VDSCRIPTASTCORE
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync{
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** The node class, used for verification. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync VDSCRIPTASTCLASS enmClass;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** List which might be used. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync RTLISTNODE ListNode;
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Position in the source file of this node. */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync VDSRCPOS Pos;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync} VDSCRIPTASTCORE;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync/** Pointer to an AST core structure. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsynctypedef VDSCRIPTASTCORE *PVDSCRIPTASTCORE;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync/** Pointer to an statement node - forward declaration. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsynctypedef struct VDSCRIPTASTSTMT *PVDSCRIPTASTSTMT;
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync/** Pointer to an expression node - forward declaration. */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsynctypedef struct VDSCRIPTASTEXPR *PVDSCRIPTASTEXPR;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync/**
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync * AST identifier node.
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsynctypedef struct VDSCRIPTASTIDE
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync{
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** Core structure. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync VDSCRIPTASTCORE Core;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** Number of characters in the identifier, excluding the zero terminator. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync unsigned cchIde;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** Identifier, variable size. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync char aszIde[1];
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync} VDSCRIPTASTIDE;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync/** Pointer to an identifer node. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsynctypedef VDSCRIPTASTIDE *PVDSCRIPTASTIDE;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync
c299849be8ae3544715e8806e1433cae67d93e2evboxsync/**
c299849be8ae3544715e8806e1433cae67d93e2evboxsync * Type specifier.
c299849be8ae3544715e8806e1433cae67d93e2evboxsync */
c299849be8ae3544715e8806e1433cae67d93e2evboxsynctypedef enum VDSCRIPTASTTYPESPECIFIER
c299849be8ae3544715e8806e1433cae67d93e2evboxsync{
c299849be8ae3544715e8806e1433cae67d93e2evboxsync /** Invalid type specifier. */
c299849be8ae3544715e8806e1433cae67d93e2evboxsync VDSCRIPTASTTYPESPECIFIER_INVALID = 0,
c299849be8ae3544715e8806e1433cae67d93e2evboxsync /** Union type specifier. */
c299849be8ae3544715e8806e1433cae67d93e2evboxsync VDSCRIPTASTTYPESPECIFIER_UNION,
c299849be8ae3544715e8806e1433cae67d93e2evboxsync /** Struct type specifier. */
c299849be8ae3544715e8806e1433cae67d93e2evboxsync VDSCRIPTASTTYPESPECIFIER_STRUCT,
c299849be8ae3544715e8806e1433cae67d93e2evboxsync /** Identifier of a typedefed type. */
c299849be8ae3544715e8806e1433cae67d93e2evboxsync VDSCRIPTASTTYPESPECIFIER_IDE,
c299849be8ae3544715e8806e1433cae67d93e2evboxsync /** 32bit hack. */
c299849be8ae3544715e8806e1433cae67d93e2evboxsync VDSCRIPTASTTYPESPECIFIER_32BIT_HACK = 0x7fffffff
c299849be8ae3544715e8806e1433cae67d93e2evboxsync} VDSCRIPTASTTYPESPECIFIER;
c299849be8ae3544715e8806e1433cae67d93e2evboxsync/** Pointer to a typespecifier. */
c299849be8ae3544715e8806e1433cae67d93e2evboxsynctypedef VDSCRIPTASTTYPESPECIFIER *PVDSCRIPTASTTYPESPECIFIER;
c299849be8ae3544715e8806e1433cae67d93e2evboxsync
c299849be8ae3544715e8806e1433cae67d93e2evboxsync/**
c299849be8ae3544715e8806e1433cae67d93e2evboxsync * AST type specifier.
c299849be8ae3544715e8806e1433cae67d93e2evboxsync */
c299849be8ae3544715e8806e1433cae67d93e2evboxsynctypedef struct VDSCRIPTASTTYPESPEC
c299849be8ae3544715e8806e1433cae67d93e2evboxsync{
c299849be8ae3544715e8806e1433cae67d93e2evboxsync /** Core structure. */
c299849be8ae3544715e8806e1433cae67d93e2evboxsync VDSCRIPTASTCORE Core;
c299849be8ae3544715e8806e1433cae67d93e2evboxsync /** Specifier type. */
c299849be8ae3544715e8806e1433cae67d93e2evboxsync VDSCRIPTASTTYPESPECIFIER enmType;
c299849be8ae3544715e8806e1433cae67d93e2evboxsync /** Type dependent data .*/
c299849be8ae3544715e8806e1433cae67d93e2evboxsync union
c299849be8ae3544715e8806e1433cae67d93e2evboxsync {
c299849be8ae3544715e8806e1433cae67d93e2evboxsync /** Pointer to an identifier for typedefed types. */
c299849be8ae3544715e8806e1433cae67d93e2evboxsync PVDSCRIPTASTIDE pIde;
c299849be8ae3544715e8806e1433cae67d93e2evboxsync /** struct or union specifier. */
c299849be8ae3544715e8806e1433cae67d93e2evboxsync struct
c299849be8ae3544715e8806e1433cae67d93e2evboxsync {
c299849be8ae3544715e8806e1433cae67d93e2evboxsync /** Pointer to the identifier, optional. */
c299849be8ae3544715e8806e1433cae67d93e2evboxsync PVDSCRIPTASTIDE pIde;
c299849be8ae3544715e8806e1433cae67d93e2evboxsync /** Declaration list - VDSCRIPTAST. */
c299849be8ae3544715e8806e1433cae67d93e2evboxsync RTLISTANCHOR ListDecl;
c299849be8ae3544715e8806e1433cae67d93e2evboxsync } StructUnion;
c299849be8ae3544715e8806e1433cae67d93e2evboxsync };
c299849be8ae3544715e8806e1433cae67d93e2evboxsync} VDSCRIPTASTTYPESPEC;
c299849be8ae3544715e8806e1433cae67d93e2evboxsync/** Pointer to an AST type specifier. */
c299849be8ae3544715e8806e1433cae67d93e2evboxsynctypedef VDSCRIPTASTTYPESPEC *PVDSCRIPTASTTYPESPEC;
c299849be8ae3544715e8806e1433cae67d93e2evboxsync
c299849be8ae3544715e8806e1433cae67d93e2evboxsync/**
c299849be8ae3544715e8806e1433cae67d93e2evboxsync * Storage clase specifier.
c299849be8ae3544715e8806e1433cae67d93e2evboxsync */
c299849be8ae3544715e8806e1433cae67d93e2evboxsynctypedef enum VDSCRIPTASTSTORAGECLASS
c299849be8ae3544715e8806e1433cae67d93e2evboxsync{
c299849be8ae3544715e8806e1433cae67d93e2evboxsync /** Invalid storage class sepcifier. */
c299849be8ae3544715e8806e1433cae67d93e2evboxsync VDSCRIPTASTSTORAGECLASS_INVALID = 0,
c299849be8ae3544715e8806e1433cae67d93e2evboxsync /** A typedef type. */
c299849be8ae3544715e8806e1433cae67d93e2evboxsync VDSCRIPTASTSTORAGECLASS_TYPEDEF,
c299849be8ae3544715e8806e1433cae67d93e2evboxsync /** An external declared object. */
c299849be8ae3544715e8806e1433cae67d93e2evboxsync VDSCRIPTASTSTORAGECLASS_EXTERN,
c299849be8ae3544715e8806e1433cae67d93e2evboxsync /** A static declared object. */
c299849be8ae3544715e8806e1433cae67d93e2evboxsync VDSCRIPTASTSTORAGECLASS_STATIC,
c299849be8ae3544715e8806e1433cae67d93e2evboxsync /** Auto object. */
c299849be8ae3544715e8806e1433cae67d93e2evboxsync VDSCRIPTASTSTORAGECLASS_AUTO,
c299849be8ae3544715e8806e1433cae67d93e2evboxsync /** Object should be stored in a register. */
c299849be8ae3544715e8806e1433cae67d93e2evboxsync VDSCRIPTASTSTORAGECLASS_REGISTER,
c299849be8ae3544715e8806e1433cae67d93e2evboxsync /** 32bit hack. */
c299849be8ae3544715e8806e1433cae67d93e2evboxsync VDSCRIPTASTSTORAGECLASS_32BIT_HACK = 0x7fffffff
c299849be8ae3544715e8806e1433cae67d93e2evboxsync} VDSCRIPTASTSTORAGECLASS;
c299849be8ae3544715e8806e1433cae67d93e2evboxsync/** Pointer to a storage class. */
c299849be8ae3544715e8806e1433cae67d93e2evboxsynctypedef VDSCRIPTASTSTORAGECLASS *PVDSCRIPTASTSTORAGECLASS;
c299849be8ae3544715e8806e1433cae67d93e2evboxsync
c299849be8ae3544715e8806e1433cae67d93e2evboxsync/**
c299849be8ae3544715e8806e1433cae67d93e2evboxsync * Type qualifier.
c299849be8ae3544715e8806e1433cae67d93e2evboxsync */
c299849be8ae3544715e8806e1433cae67d93e2evboxsynctypedef enum VDSCRIPTASTTYPEQUALIFIER
c299849be8ae3544715e8806e1433cae67d93e2evboxsync{
c299849be8ae3544715e8806e1433cae67d93e2evboxsync /** Invalid type qualifier. */
c299849be8ae3544715e8806e1433cae67d93e2evboxsync VDSCRIPTASTTYPEQUALIFIER_INVALID = 0,
c299849be8ae3544715e8806e1433cae67d93e2evboxsync /** Const type qualifier. */
c299849be8ae3544715e8806e1433cae67d93e2evboxsync VDSCRIPTASTTYPEQUALIFIER_CONST,
c299849be8ae3544715e8806e1433cae67d93e2evboxsync /** Restrict type qualifier. */
c299849be8ae3544715e8806e1433cae67d93e2evboxsync VDSCRIPTASTTYPEQUALIFIER_RESTRICT,
c299849be8ae3544715e8806e1433cae67d93e2evboxsync /** Volatile type qualifier. */
c299849be8ae3544715e8806e1433cae67d93e2evboxsync VDSCRIPTASTTYPEQUALIFIER_VOLATILE,
c299849be8ae3544715e8806e1433cae67d93e2evboxsync /** 32bit hack. */
c299849be8ae3544715e8806e1433cae67d93e2evboxsync VDSCRIPTASTTYPEQUALIFIER_32BIT_HACK = 0x7fffffff
c299849be8ae3544715e8806e1433cae67d93e2evboxsync} VDSCRIPTASTTYPEQUALIFIER;
c299849be8ae3544715e8806e1433cae67d93e2evboxsync/** Pointer to a type qualifier. */
c299849be8ae3544715e8806e1433cae67d93e2evboxsynctypedef VDSCRIPTASTTYPEQUALIFIER *PVDSCRIPTASTTYPEQUALIFIER;
c299849be8ae3544715e8806e1433cae67d93e2evboxsync
c299849be8ae3544715e8806e1433cae67d93e2evboxsync/**
c299849be8ae3544715e8806e1433cae67d93e2evboxsync * AST type name node.
c299849be8ae3544715e8806e1433cae67d93e2evboxsync */
c299849be8ae3544715e8806e1433cae67d93e2evboxsynctypedef struct VDSCRIPTASTTYPENAME
c299849be8ae3544715e8806e1433cae67d93e2evboxsync{
c299849be8ae3544715e8806e1433cae67d93e2evboxsync /** Core structure. */
c299849be8ae3544715e8806e1433cae67d93e2evboxsync VDSCRIPTASTCORE Core;
c299849be8ae3544715e8806e1433cae67d93e2evboxsync} VDSCRIPTASTTYPENAME;
c299849be8ae3544715e8806e1433cae67d93e2evboxsync/** Pointer to a type name node. */
c299849be8ae3544715e8806e1433cae67d93e2evboxsynctypedef VDSCRIPTASTTYPENAME *PVDSCRIPTASTTYPENAME;
c299849be8ae3544715e8806e1433cae67d93e2evboxsync
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync/**
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync * AST declaration node.
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsynctypedef struct VDSCRIPTASTDECL
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync{
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** Core structure. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync VDSCRIPTASTCORE Core;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** @todo */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync} VDSCRIPTASTDECL;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync/** Pointer to an declaration node. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsynctypedef VDSCRIPTASTDECL *PVDSCRIPTASTDECL;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync/**
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync * Expression types.
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsynctypedef enum VDSCRIPTEXPRTYPE
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync{
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Invalid. */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync VDSCRIPTEXPRTYPE_INVALID = 0,
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Numerical constant. */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync VDSCRIPTEXPRTYPE_PRIMARY_NUMCONST,
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** String constant. */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync VDSCRIPTEXPRTYPE_PRIMARY_STRINGCONST,
5606210c3e3213a247418d91961ef5380fc87640vboxsync /** Boolean constant. */
5606210c3e3213a247418d91961ef5380fc87640vboxsync VDSCRIPTEXPRTYPE_PRIMARY_BOOLEAN,
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Identifier. */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync VDSCRIPTEXPRTYPE_PRIMARY_IDENTIFIER,
8bce22f6f04047918df71d70b614262e1d08dc61vboxsync /** List of assignment expressions as in a = b = c = ... . */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync VDSCRIPTEXPRTYPE_ASSIGNMENT_LIST,
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Postfix increment expression. */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync VDSCRIPTEXPRTYPE_POSTFIX_INCREMENT,
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Postfix decrement expression. */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync VDSCRIPTEXPRTYPE_POSTFIX_DECREMENT,
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Postfix function call expression. */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync VDSCRIPTEXPRTYPE_POSTFIX_FNCALL,
c299849be8ae3544715e8806e1433cae67d93e2evboxsync /** Postfix dereference expression. */
c299849be8ae3544715e8806e1433cae67d93e2evboxsync VDSCRIPTEXPRTYPE_POSTFIX_DEREFERENCE,
c299849be8ae3544715e8806e1433cae67d93e2evboxsync /** Dot operator (@todo: Is there a better name for it?). */
c299849be8ae3544715e8806e1433cae67d93e2evboxsync VDSCRIPTEXPRTYPE_POSTFIX_DOT,
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Unary increment expression. */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync VDSCRIPTEXPRTYPE_UNARY_INCREMENT,
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Unary decrement expression. */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync VDSCRIPTEXPRTYPE_UNARY_DECREMENT,
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Unary positive sign expression. */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync VDSCRIPTEXPRTYPE_UNARY_POSSIGN,
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Unary negtive sign expression. */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync VDSCRIPTEXPRTYPE_UNARY_NEGSIGN,
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Unary invert expression. */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync VDSCRIPTEXPRTYPE_UNARY_INVERT,
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Unary negate expression. */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync VDSCRIPTEXPRTYPE_UNARY_NEGATE,
c299849be8ae3544715e8806e1433cae67d93e2evboxsync /** Unary reference expression. */
c299849be8ae3544715e8806e1433cae67d93e2evboxsync VDSCRIPTEXPRTYPE_UNARY_REFERENCE,
c299849be8ae3544715e8806e1433cae67d93e2evboxsync /** Unary dereference expression. */
c299849be8ae3544715e8806e1433cae67d93e2evboxsync VDSCRIPTEXPRTYPE_UNARY_DEREFERENCE,
c299849be8ae3544715e8806e1433cae67d93e2evboxsync /** Cast expression. */
c299849be8ae3544715e8806e1433cae67d93e2evboxsync VDSCRIPTEXPRTYPE_CAST,
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Multiplicative expression. */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync VDSCRIPTEXPRTYPE_MULTIPLICATION,
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Division expression. */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync VDSCRIPTEXPRTYPE_DIVISION,
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Modulus expression. */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync VDSCRIPTEXPRTYPE_MODULUS,
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Addition expression. */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync VDSCRIPTEXPRTYPE_ADDITION,
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Subtraction expression. */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync VDSCRIPTEXPRTYPE_SUBTRACTION,
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Logical shift right. */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync VDSCRIPTEXPRTYPE_LSR,
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Logical shift left. */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync VDSCRIPTEXPRTYPE_LSL,
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Lower than expression */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync VDSCRIPTEXPRTYPE_LOWER,
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Higher than expression */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync VDSCRIPTEXPRTYPE_HIGHER,
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Lower or equal than expression */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync VDSCRIPTEXPRTYPE_LOWEREQUAL,
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Higher or equal than expression */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync VDSCRIPTEXPRTYPE_HIGHEREQUAL,
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Equals expression */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync VDSCRIPTEXPRTYPE_EQUAL,
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Not equal expression */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync VDSCRIPTEXPRTYPE_NOTEQUAL,
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Bitwise and expression */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync VDSCRIPTEXPRTYPE_BITWISE_AND,
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Bitwise xor expression */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync VDSCRIPTEXPRTYPE_BITWISE_XOR,
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Bitwise or expression */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync VDSCRIPTEXPRTYPE_BITWISE_OR,
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Logical and expression */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync VDSCRIPTEXPRTYPE_LOGICAL_AND,
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Logical or expression */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync VDSCRIPTEXPRTYPE_LOGICAL_OR,
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Assign expression */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync VDSCRIPTEXPRTYPE_ASSIGN,
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Multiplicative assign expression */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync VDSCRIPTEXPRTYPE_ASSIGN_MULT,
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Division assign expression */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync VDSCRIPTEXPRTYPE_ASSIGN_DIV,
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Modulus assign expression */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync VDSCRIPTEXPRTYPE_ASSIGN_MOD,
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Additive assign expression */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync VDSCRIPTEXPRTYPE_ASSIGN_ADD,
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Subtractive assign expression */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync VDSCRIPTEXPRTYPE_ASSIGN_SUB,
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Bitwise left shift assign expression */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync VDSCRIPTEXPRTYPE_ASSIGN_LSL,
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Bitwise right shift assign expression */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync VDSCRIPTEXPRTYPE_ASSIGN_LSR,
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Bitwise and assign expression */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync VDSCRIPTEXPRTYPE_ASSIGN_AND,
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Bitwise xor assign expression */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync VDSCRIPTEXPRTYPE_ASSIGN_XOR,
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Bitwise or assign expression */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync VDSCRIPTEXPRTYPE_ASSIGN_OR,
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** 32bit hack. */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync VDSCRIPTEXPRTYPE_32BIT_HACK = 0x7fffffff
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync} VDSCRIPTEXPRTYPE;
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync/** Pointer to an expression type. */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsynctypedef VDSCRIPTEXPRTYPE *PVDSCRIPTEXPRTYPE;
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync/**
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync * AST expression node.
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsynctypedef struct VDSCRIPTASTEXPR
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync{
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** Core structure. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync VDSCRIPTASTCORE Core;
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Expression type. */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync VDSCRIPTEXPRTYPE enmType;
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Expression type dependent data. */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync union
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync {
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Numerical constant. */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync uint64_t u64;
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Primary identifier. */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync PVDSCRIPTASTIDE pIde;
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** String literal */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync const char *pszStr;
5606210c3e3213a247418d91961ef5380fc87640vboxsync /** Boolean constant. */
5606210c3e3213a247418d91961ef5380fc87640vboxsync bool f;
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** List of expressions - VDSCRIPTASTEXPR. */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync RTLISTANCHOR ListExpr;
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Pointer to another expression. */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync PVDSCRIPTASTEXPR pExpr;
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Function call expression. */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync struct
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync {
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Other postfix expression used as the identifier for the function. */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync PVDSCRIPTASTEXPR pFnIde;
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Argument list if existing. */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync RTLISTANCHOR ListArgs;
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync } FnCall;
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Binary operation. */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync struct
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync {
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Left operator. */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync PVDSCRIPTASTEXPR pLeftExpr;
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync /** Right operator. */
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync PVDSCRIPTASTEXPR pRightExpr;
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync } BinaryOp;
c299849be8ae3544715e8806e1433cae67d93e2evboxsync /** Dereference or dot operation. */
c299849be8ae3544715e8806e1433cae67d93e2evboxsync struct
c299849be8ae3544715e8806e1433cae67d93e2evboxsync {
c299849be8ae3544715e8806e1433cae67d93e2evboxsync /** The identifier to access. */
c299849be8ae3544715e8806e1433cae67d93e2evboxsync PVDSCRIPTASTIDE pIde;
c299849be8ae3544715e8806e1433cae67d93e2evboxsync /** Postfix expression coming after this. */
c299849be8ae3544715e8806e1433cae67d93e2evboxsync PVDSCRIPTASTEXPR pExpr;
c299849be8ae3544715e8806e1433cae67d93e2evboxsync } Deref;
c299849be8ae3544715e8806e1433cae67d93e2evboxsync /** Cast expression. */
c299849be8ae3544715e8806e1433cae67d93e2evboxsync struct
c299849be8ae3544715e8806e1433cae67d93e2evboxsync {
c299849be8ae3544715e8806e1433cae67d93e2evboxsync /** Type name. */
c299849be8ae3544715e8806e1433cae67d93e2evboxsync PVDSCRIPTASTTYPENAME pTypeName;
c299849be8ae3544715e8806e1433cae67d93e2evboxsync /** Following cast expression. */
c299849be8ae3544715e8806e1433cae67d93e2evboxsync PVDSCRIPTASTEXPR pExpr;
c299849be8ae3544715e8806e1433cae67d93e2evboxsync } Cast;
212ccded142c57ca5b0ce90d5b116d2e5e4c0195vboxsync };
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync} VDSCRIPTASTEXPR;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync/**
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync * AST if node.
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsynctypedef struct VDSCRIPTASTIF
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync{
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** Conditional expression. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync PVDSCRIPTASTEXPR pCond;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** The true branch */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync PVDSCRIPTASTSTMT pTrueStmt;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** The else branch, can be NULL if no else branch. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync PVDSCRIPTASTSTMT pElseStmt;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync} VDSCRIPTASTIF;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync/** Pointer to an expression node. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsynctypedef VDSCRIPTASTIF *PVDSCRIPTASTIF;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync/**
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync * AST switch node.
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsynctypedef struct VDSCRIPTASTSWITCH
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync{
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** Conditional expression. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync PVDSCRIPTASTEXPR pCond;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** The statement to follow. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync PVDSCRIPTASTSTMT pStmt;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync} VDSCRIPTASTSWITCH;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync/** Pointer to an expression node. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsynctypedef VDSCRIPTASTSWITCH *PVDSCRIPTASTSWITCH;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync/**
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync * AST while or do ... while node.
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsynctypedef struct VDSCRIPTASTWHILE
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync{
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** Flag whether this is a do while loop. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync bool fDoWhile;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** Conditional expression. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync PVDSCRIPTASTEXPR pCond;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** The statement to follow. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync PVDSCRIPTASTSTMT pStmt;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync} VDSCRIPTASTWHILE;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync/** Pointer to an expression node. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsynctypedef VDSCRIPTASTWHILE *PVDSCRIPTASTWHILE;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync/**
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync * AST for node.
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsynctypedef struct VDSCRIPTASTFOR
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync{
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** Initializer expression. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync PVDSCRIPTASTEXPR pExprStart;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** The exit condition. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync PVDSCRIPTASTEXPR pExprCond;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** The third expression (normally used to increase/decrease loop variable). */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync PVDSCRIPTASTEXPR pExpr3;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** The for loop body. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync PVDSCRIPTASTSTMT pStmt;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync} VDSCRIPTASTFOR;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync/** Pointer to an expression node. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsynctypedef VDSCRIPTASTFOR *PVDSCRIPTASTFOR;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync/**
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync * Statement types.
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsynctypedef enum VDSCRIPTSTMTTYPE
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync{
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** Invalid. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync VDSCRIPTSTMTTYPE_INVALID = 0,
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** Compound statement. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync VDSCRIPTSTMTTYPE_COMPOUND,
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** Expression statement. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync VDSCRIPTSTMTTYPE_EXPRESSION,
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** if statement. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync VDSCRIPTSTMTTYPE_IF,
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** switch statement. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync VDSCRIPTSTMTTYPE_SWITCH,
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** while statement. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync VDSCRIPTSTMTTYPE_WHILE,
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** for statement. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync VDSCRIPTSTMTTYPE_FOR,
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** continue statement. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync VDSCRIPTSTMTTYPE_CONTINUE,
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** break statement. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync VDSCRIPTSTMTTYPE_BREAK,
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** return statement. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync VDSCRIPTSTMTTYPE_RETURN,
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** case statement. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync VDSCRIPTSTMTTYPE_CASE,
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** default statement. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync VDSCRIPTSTMTTYPE_DEFAULT,
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** 32bit hack. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync VDSCRIPTSTMTTYPE_32BIT_HACK = 0x7fffffff
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync} VDSCRIPTSTMTTYPE;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync/** Pointer to a statement type. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsynctypedef VDSCRIPTSTMTTYPE *PVDSCRIPTSTMTTYPE;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync/**
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync * AST statement node.
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsynctypedef struct VDSCRIPTASTSTMT
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync{
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** Core structure. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync VDSCRIPTASTCORE Core;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** Statement type */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync VDSCRIPTSTMTTYPE enmStmtType;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** Statement type dependent data. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync union
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync {
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** Compound statement. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync struct
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync {
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** List of declarations - VDSCRIPTASTDECL. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync RTLISTANCHOR ListDecls;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** List of statements - VDSCRIPTASTSTMT. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync RTLISTANCHOR ListStmts;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync } Compound;
8bce22f6f04047918df71d70b614262e1d08dc61vboxsync /** case, default statement. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync struct
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync {
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** Pointer to the expression. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync PVDSCRIPTASTEXPR pExpr;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** Pointer to the statement. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync PVDSCRIPTASTSTMT pStmt;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync } Case;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** "if" statement. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync VDSCRIPTASTIF If;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** "switch" statement. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync VDSCRIPTASTSWITCH Switch;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** "while" or "do ... while" loop. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync VDSCRIPTASTWHILE While;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** "for" loop. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync VDSCRIPTASTFOR For;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** Pointer to another statement. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync PVDSCRIPTASTSTMT pStmt;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** Expression statement. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync PVDSCRIPTASTEXPR pExpr;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync };
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync} VDSCRIPTASTSTMT;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync/**
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync * AST node for one function argument.
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsynctypedef struct VDSCRIPTASTFNARG
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync{
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** Core structure. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync VDSCRIPTASTCORE Core;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** Identifier describing the type of the argument. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync PVDSCRIPTASTIDE pType;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** The name of the argument. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync PVDSCRIPTASTIDE pArgIde;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync} VDSCRIPTASTFNARG;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync/** Pointer to a AST function argument node. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsynctypedef VDSCRIPTASTFNARG *PVDSCRIPTASTFNARG;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync/**
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync * AST node describing a function.
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsynctypedef struct VDSCRIPTASTFN
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync{
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** Core structure. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync VDSCRIPTASTCORE Core;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** Identifier describing the return type. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync PVDSCRIPTASTIDE pRetType;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** Name of the function. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync PVDSCRIPTASTIDE pFnIde;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** Number of arguments in the list. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync unsigned cArgs;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** Argument list - VDSCRIPTASTFNARG. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync RTLISTANCHOR ListArgs;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync /** Compound statement node. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync PVDSCRIPTASTSTMT pCompoundStmts;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync} VDSCRIPTASTFN;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync/** Pointer to a function AST node. */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsynctypedef VDSCRIPTASTFN *PVDSCRIPTASTFN;
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync/**
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync * Free the given AST node and all subsequent nodes pointed to
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync * by the given node.
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync *
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync * @returns nothing.
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync * @param pAstNode The AST node to free.
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsyncDECLHIDDEN(void) vdScriptAstNodeFree(PVDSCRIPTASTCORE pAstNode);
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync/**
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync * Allocate a non variable in size AST node of the given class.
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync *
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync * @returns Pointer to the allocated node.
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync * NULL if out of memory.
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync * @param enmClass The class of the AST node.
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsyncDECLHIDDEN(PVDSCRIPTASTCORE) vdScriptAstNodeAlloc(VDSCRIPTASTCLASS enmClass);
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync/**
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync * Allocate a IDE node which can hold the given number of characters.
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync *
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync * @returns Pointer to the allocated node.
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync * NULL if out of memory.
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync * @param cchIde Number of characters which can be stored in the node.
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync */
db453c26f429ba8057ea92644ddd59279b9a918dvboxsyncDECLHIDDEN(PVDSCRIPTASTIDE) vdScriptAstNodeIdeAlloc(unsigned cchIde);
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync
db453c26f429ba8057ea92644ddd59279b9a918dvboxsync#endif /* _VDScriptAst_h__ */