You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
376 lines
15 KiB
376 lines
15 KiB
#ifndef _KVI_KVS_TREENODE_H_
|
|
#define _KVI_KVS_TREENODE_H_
|
|
//=============================================================================
|
|
//
|
|
// File : kvi_kvs_treenode.h
|
|
// Creation date : Thu 25 Sep 2003 05.12 CEST by Szymon Stefanek
|
|
//
|
|
// This file is part of the KVirc irc client distribution
|
|
// Copyright (C) 2003 Szymon Stefanek (pragma at kvirc dot net)
|
|
//
|
|
// This program is FREE software. You can redistribute it and/or
|
|
// modify it under the terms of the GNU General Public License
|
|
// as published by the Free Software Foundation; either version 2
|
|
// of the License, or (at your opinion) any later version.
|
|
//
|
|
// This program is distributed in the HOPE that it will be USEFUL,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
// See the GNU General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with this program. If not, write to the Free Software Foundation,
|
|
// Inc. ,51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
//
|
|
//=============================================================================
|
|
|
|
#include "kvi_kvs_treenode_base.h"
|
|
|
|
#include "kvi_kvs_treenode_aliasfunctioncall.h"
|
|
#include "kvi_kvs_treenode_aliassimplecommand.h"
|
|
#include "kvi_kvs_treenode_arraycount.h"
|
|
#include "kvi_kvs_treenode_arrayelement.h"
|
|
#include "kvi_kvs_treenode_arrayorhashelement.h"
|
|
#include "kvi_kvs_treenode_arrayreferenceassert.h"
|
|
#include "kvi_kvs_treenode_baseobjectfunctioncall.h"
|
|
#include "kvi_kvs_treenode_callbackcommand.h"
|
|
#include "kvi_kvs_treenode_command.h"
|
|
#include "kvi_kvs_treenode_commandevaluation.h"
|
|
#include "kvi_kvs_treenode_commandwithparameters.h"
|
|
#include "kvi_kvs_treenode_compositedata.h"
|
|
#include "kvi_kvs_treenode_constantdata.h"
|
|
#include "kvi_kvs_treenode_corecallbackcommand.h"
|
|
#include "kvi_kvs_treenode_corefunctioncall.h"
|
|
#include "kvi_kvs_treenode_coresimplecommand.h"
|
|
#include "kvi_kvs_treenode_data.h"
|
|
#include "kvi_kvs_treenode_datalist.h"
|
|
#include "kvi_kvs_treenode_expression.h"
|
|
#include "kvi_kvs_treenode_expressionreturn.h"
|
|
#include "kvi_kvs_treenode_extendedscopevariable.h"
|
|
#include "kvi_kvs_treenode_functioncall.h"
|
|
#include "kvi_kvs_treenode_globalvariable.h"
|
|
#include "kvi_kvs_treenode_hashcount.h"
|
|
#include "kvi_kvs_treenode_hashelement.h"
|
|
#include "kvi_kvs_treenode_hashreferenceassert.h"
|
|
#include "kvi_kvs_treenode_indirectdata.h"
|
|
#include "kvi_kvs_treenode_instruction.h"
|
|
#include "kvi_kvs_treenode_instructionblock.h"
|
|
#include "kvi_kvs_treenode_localvariable.h"
|
|
#include "kvi_kvs_treenode_modulecallbackcommand.h"
|
|
#include "kvi_kvs_treenode_modulefunctioncall.h"
|
|
#include "kvi_kvs_treenode_modulesimplecommand.h"
|
|
#include "kvi_kvs_treenode_multipleparameteridentifier.h"
|
|
#include "kvi_kvs_treenode_objectfield.h"
|
|
#include "kvi_kvs_treenode_objectfunctioncall.h"
|
|
#include "kvi_kvs_treenode_operation.h"
|
|
#include "kvi_kvs_treenode_parameterreturn.h"
|
|
#include "kvi_kvs_treenode_rebindingswitch.h"
|
|
#include "kvi_kvs_treenode_scopeoperator.h"
|
|
#include "kvi_kvs_treenode_simplecommand.h"
|
|
#include "kvi_kvs_treenode_singleparameteridentifier.h"
|
|
#include "kvi_kvs_treenode_specialcommand.h"
|
|
#include "kvi_kvs_treenode_specialcommandbreak.h"
|
|
#include "kvi_kvs_treenode_specialcommandclass.h"
|
|
#include "kvi_kvs_treenode_specialcommanddefpopup.h"
|
|
#include "kvi_kvs_treenode_specialcommanddo.h"
|
|
#include "kvi_kvs_treenode_specialcommandfor.h"
|
|
#include "kvi_kvs_treenode_specialcommandforeach.h"
|
|
#include "kvi_kvs_treenode_specialcommandif.h"
|
|
#include "kvi_kvs_treenode_specialcommandswitch.h"
|
|
#include "kvi_kvs_treenode_specialcommandunset.h"
|
|
#include "kvi_kvs_treenode_specialcommandwhile.h"
|
|
#include "kvi_kvs_treenode_stringcast.h"
|
|
#include "kvi_kvs_treenode_switchlist.h"
|
|
#include "kvi_kvs_treenode_thisobjectfunctioncall.h"
|
|
#include "kvi_kvs_treenode_variable.h"
|
|
#include "kvi_kvs_treenode_voidfunctioncall.h"
|
|
|
|
//
|
|
// Hierarchy (the nodes that have some missing implementation have the leading '?' char)
|
|
//
|
|
//
|
|
// TreeNode(OK) (never instantiated)
|
|
// |
|
|
// +--Instruction(OK) (never instantiated) (used as interface by InstructionBlock) : instruction has bool execute() = 0;
|
|
// | |
|
|
// | +--InstructionBlock(OK)
|
|
// | |
|
|
// | +--ExpressionReturn(OK)
|
|
// | |
|
|
// | +--ParameterReturn(OK)
|
|
// | |
|
|
// | |--Command(OK) (never instantiated)
|
|
// | | |
|
|
// | | +--RebindingSwitch(OK)
|
|
// | | |
|
|
// | | +--CommandWithParameters(OK) (never instantiated)
|
|
// | | | |
|
|
// | | | +--SimpleCommand(OK) (never instantiated)
|
|
// | | | | |
|
|
// | | | | +--CoreSimpleCommand(OK)
|
|
// | | | | |
|
|
// | | | | +--ModuleSimpleCommand(OK)
|
|
// | | | | |
|
|
// | | | | +--AliasSimpleCommand(OK)
|
|
// | | | |
|
|
// | | | +--CallbackCommand(OK) (never instantiated)
|
|
// | | | |
|
|
// | | | +--CoreCallbackCommand(OK)
|
|
// | | | |
|
|
// | | | +--ModuleCallbackCommand(OK)
|
|
// | | |
|
|
// | | +--SpecialCommand(OK) (never instantiated)
|
|
// | | |
|
|
// | | +--SpecialCommandIf(OK)
|
|
// | | |
|
|
// | | +--SpecialCommandWhile(OK)
|
|
// | | |
|
|
// | | +--SpecialCommandDo(OK)
|
|
// | | |
|
|
// | | +--SpecialCommandForeach(OK)
|
|
// | | |
|
|
// | | +--SpecialCommandFor(OK)
|
|
// | | |
|
|
// | | +--SpecialCommandBreak(OK)
|
|
// | | |
|
|
// | | +--SpecialCommandSwitch(OK)
|
|
// | | |
|
|
// | | +--SpecialCommandDefpopup(OK)
|
|
// | | |
|
|
// | | +--SpecialCommandClass(OK)
|
|
// | |
|
|
// | +--VoidFunctionCall(OK)
|
|
// | |
|
|
// | +--Operation(OK) : has a m_pTargetData pointer (never instantiated)
|
|
// | |
|
|
// | +--OperationAssignment(OK)
|
|
// | |
|
|
// | +--OperationIncrement(OK)
|
|
// | |
|
|
// | +--OperationDecrement(OK)
|
|
// | |
|
|
// | +--OperationSelfSum(OK)
|
|
// | |
|
|
// | +--OperationSelfSubtraction(OK)
|
|
// | |
|
|
// | +--OperationSelfDivision(OK)
|
|
// | |
|
|
// | +--OperationSelfMultiplication(OK)
|
|
// | |
|
|
// | +--OperationSelfModulus(OK)
|
|
// | |
|
|
// | +--OperationSelfOr(OK)
|
|
// | |
|
|
// | +--OperationSelfAnd(OK)
|
|
// | |
|
|
// | +--OperationSelfXor(OK)
|
|
// | |
|
|
// | +--OperationSelfShl(OK)
|
|
// | |
|
|
// | +--OperationSelfShr(OK)
|
|
// | |
|
|
// | +--OperationStringAppend(OK)
|
|
// | |
|
|
// | +--OperationStringAppendWithComma(OK)
|
|
// | |
|
|
// | +--OperationStringAppendWithSpace(OK)
|
|
// | |
|
|
// | +--OperationStringTransliteration(OK)
|
|
// | |
|
|
// | +--OperationStringSubstitution(OK)
|
|
// |
|
|
// +--Data(OK) data has
|
|
// | | bool evaluateReadOnly(KviKvsRunTimeContext * c,KviKvsVariant * pBuffer) <-- this MUST be implemented
|
|
// | | KviKvsVariant * evaluateReadWrite(KviKvsRunTimeContext * c) <-- this MUST be implemented if isReadOnly returns false
|
|
// | |
|
|
// | | This class is NEVER instantiated directly
|
|
// | |
|
|
// | | isReadOnly(); true by default
|
|
// | | canEvaluateToObjectReference(); false by default
|
|
// | | isFunctionCall(); false by default
|
|
// | | canEvaluateInObjectScope(); false by default
|
|
// | | (DEAD)canReleaseResult(); false by default (can the result be simply "taken" ?)
|
|
// | |
|
|
// | +--StringCast(OK) has some kind of data inside that is converted to string "on the fly"
|
|
// | |
|
|
// | +--ConstantData(OK) have real constant data
|
|
// | | everything inherited from data
|
|
// | | only evaluateReadOnly is implemented and it never fails
|
|
// | |
|
|
// | +--CompositeData(OK) have real data composed of constants, it is an implicit StringCast too (it isn't inherited from StringCast since it operates in a different way)
|
|
// | | everything inherited from data
|
|
// | | only evaluateReadOnly is implemented and it never fails
|
|
// | |
|
|
// | +--ScopeOperator( ) Has a left side that must evaluate to ob reference
|
|
// | | Has a right side that must be a variable reference or function call
|
|
// | | isReadOnly() depends on the right child
|
|
// | | canEvaluateToObjectReference() depends on last child
|
|
// | | isFunctionCall() depends on last child
|
|
// | | canEvaluateInObjectScope() depends on last child
|
|
// | | (DEAD)canReleaseResult() depends on last child
|
|
// | |
|
|
// | +--SingleParameterIdentifier(OK) this is $n
|
|
// | | canEvaluateToObjectReference() = true
|
|
// | |
|
|
// | +--MultipleParameterIdentifier(OK) this is $n-[n]
|
|
// | |
|
|
// | +--CommandEvaluation(OK) this is ${ ... }
|
|
// | | canEvaluateToObjectReference() = true
|
|
// | |
|
|
// | +--Variable(OK) this is something related to %xxx (never instantiated)
|
|
// | | | canEvaluateInObjectScope() = true
|
|
// | | | isReadOnly() = false
|
|
// | | | canEvaluateToObjectReference() = true
|
|
// | | |
|
|
// | | +--LocalVariable(OK)
|
|
// | | |
|
|
// | | +--GlobalVariable(OK)
|
|
// | | |
|
|
// | | +--ExtendedScopeVariable(OK)
|
|
// | | |
|
|
// | | +--ObjectField(OK)
|
|
// | |
|
|
// | +--IndirectData(OK) takes a Data as source (never instantiated)
|
|
// | | | canEvaluateInObjectScope() depends on the parameter data
|
|
// | | |
|
|
// | | +--ArrayOrHashElement(OK) isReadOnly() depends on the source data (never instantiated)
|
|
// | | | | canEvaluateToObjectReference() = true
|
|
// | | | |
|
|
// | | | +--ArrayElement(OK) the source Data must evaluate to an array or be writeable in order to convert it
|
|
// | | | | and an index that must evaluate to an integer (evaluate ok, result inherited ok)
|
|
// | | | |
|
|
// | | | +--HashElement(OK) the source Data must evaluate to a hash or be writeable in order to convert it
|
|
// | | | and an index that must evaluate to a non-empty hash key (evaluate ok, result inherited ok)
|
|
// | | |
|
|
// | | +--HashCount(OK) the source Data must evaluate to a hash or be writeable in order to convert it
|
|
// | | |
|
|
// | | +--ArrayCount(OK) the source Data must evaluate to an array or be writeable in order to convert it
|
|
// | | |
|
|
// | | +--HashReferenceAssert(OK) the source Data must evaluate to a hash or be writeable in order to convert it (otherwise asserts)
|
|
// | | | isReadOnly() depends on the parameter data
|
|
// | | |
|
|
// | | +--ArrayReferenceAssert(OK) the source Data must evaluate to an array or be writeable in order to convert it (otherwise asserts)
|
|
// | | isReadOnly() depends on the parameter data
|
|
// | |
|
|
// | +--Expression(OK) (never instantiated)
|
|
// | | |
|
|
// | | +--ExpressionVariableOperand(OK) (evaluate and result ok)
|
|
// | | |
|
|
// | | +--ExpressionConstantOperand(OK) (evaluate and result ok)
|
|
// | | |
|
|
// | | +--ExpressionOperator(OK) (never instantiated)
|
|
// | | |
|
|
// | | +--ExpressionBinaryOperator(OK) (never instantiated)
|
|
// | | | |
|
|
// | | | +--ExpressionBinaryOperatorSum(OK) (evaluate and result ok)
|
|
// | | | |
|
|
// | | | +--ExpressionBinaryOperatorSubtraction(OK) (evaluate and result ok)
|
|
// | | | |
|
|
// | | | +--ExpressionBinaryOperatorMultiplication(OK) (evaluate and result ok)
|
|
// | | | |
|
|
// | | | +--ExpressionBinaryOperatorDivision(OK) (evaluate and result ok)
|
|
// | | | |
|
|
// | | | +--ExpressionBinaryOperatorBitwiseAnd(OK) (evaluate and result ok)
|
|
// | | | |
|
|
// | | | +--ExpressionBinaryOperatorBitwiseOr(OK) (evaluate and result ok)
|
|
// | | | |
|
|
// | | | +--ExpressionBinaryOperatorBitwiseXor(OK) (evaluate and result ok)
|
|
// | | | |
|
|
// | | | +--ExpressionBinaryOperatorShiftLeft(OK) (evaluate and result ok)
|
|
// | | | |
|
|
// | | | +--ExpressionBinaryOperatorShiftRight(OK) (evaluate and result ok)
|
|
// | | | |
|
|
// | | | +--ExpressionBinaryOperatorAnd(OK) (evaluate and result ok)
|
|
// | | | |
|
|
// | | | +--ExpressionBinaryOperatorOr(OK) (evaluate and result ok)
|
|
// | | | |
|
|
// | | | +--ExpressionBinaryOperatorXor(OK) (evaluate and result ok)
|
|
// | | | |
|
|
// | | | +--ExpressionBinaryOperatorLowerThan(OK) (evaluate and result ok)
|
|
// | | | |
|
|
// | | | +--ExpressionBinaryOperatorGreaterThan(OK) (evaluate and result ok)
|
|
// | | | |
|
|
// | | | +--ExpressionBinaryOperatorLowerOrEqualTo(OK) (evaluate and result ok)
|
|
// | | | |
|
|
// | | | +--ExpressionBinaryOperatorGreaterOrEqualTo(OK) (evaluate and result ok)
|
|
// | | | |
|
|
// | | | +--ExpressionBinaryOperatorEqualTo(OK) (evaluate and result ok)
|
|
// | | | |
|
|
// | | | +--ExpressionBinaryOperatorNotEqualTo(OK) (evaluate and result ok)
|
|
// | | |
|
|
// | | +--ExpressionUnaryOperator(OK) (never instantiated)
|
|
// | | |
|
|
// | | +--ExpressionUnaryOperatorNegate(OK) (evaluate and result ok)
|
|
// | | |
|
|
// | | +--ExpressionUnaryOperatorBitwiseNot(OK) (evaluate and result ok)
|
|
// | | |
|
|
// | | +--ExpressionUnaryOperatorLogicalNot(OK) (evaluate and result ok)
|
|
// | |
|
|
// | +--FunctionCall(OK) this is something like $xxx and has a name. Can be called as a void instruction
|
|
// | | canEvaluateToObjectReference() = true
|
|
// | | isFunctionCall() = true
|
|
// | |
|
|
// | +--ModuleFunctionCall(OK)
|
|
// | |
|
|
// | +--AliasFunctionCall(OK)
|
|
// | |
|
|
// | +--CoreFunctionCall(OK)
|
|
// | |
|
|
// | +--ObjectFunctionCall( ) this is the only function call type appended to a scope operator
|
|
// | | canEvaluateInObjectScope() = true (never instantiated)
|
|
// | |
|
|
// | +--ThisObjectFunctionCall( )
|
|
// | |
|
|
// | +--BaseObjectFunctionCall( )
|
|
// |
|
|
// +--DataList(OK)
|
|
// |
|
|
// +--SwitchList(OK)
|
|
// |
|
|
// +--SpecialCommandSwitchLabel(Never instantiated)
|
|
// | |
|
|
// | +--SpecialCommandSwitchLabelCase(OK)
|
|
// | |
|
|
// | +--SpecialCommandSwitchLabelMatch(OK)
|
|
// | |
|
|
// | +--SpecialCommandSwitchLabelRegexp(OK)
|
|
// | |
|
|
// | +--SpecialCommandSwitchLabelDefault(OK)
|
|
// |
|
|
// +--SpecialCommandDefpopupLabel(Never instantiated)
|
|
// |
|
|
// +--SpecialCommandDefpopupLabelPrologue(OK)
|
|
// |
|
|
// +--SpecialCommandDefpopupLabelEpilogue(OK)
|
|
// |
|
|
// +--SpecialCommandDefpopupConditionalLabel(Never instantiated)
|
|
// |
|
|
// +--SpecialCommandDefpopupLabelSeparator(OK)
|
|
// |
|
|
// +--SpecialCommandDefpopupConditionalLabelWithTextAndIcon (Never instantiated)
|
|
// |
|
|
// +--SpecialCommandDefpopupLabelPopup(OK)
|
|
// |
|
|
// +--SpecialCommandDefpopupLabelExtpopup(OK)
|
|
// |
|
|
// +--SpecialCommandDefpopupLabelItem(OK)
|
|
// |
|
|
// +--SpecialCommandDefpopupLabelLabel(OK)
|
|
//
|
|
//
|
|
//
|
|
|
|
|
|
//
|
|
// Tree morphology
|
|
//
|
|
// InstructionBlock
|
|
// [Instruction]
|
|
//
|
|
// ScopeOperator
|
|
// [Data]->[Data]
|
|
//
|
|
|
|
|
|
#endif //!_KVI_KVS_TREENODE_H_
|