148// | +--Operation(OK) : has a m_pTargetData pointer (never instantiated)
149// | |
150// | +--OperationAssignment(OK)
151// | |
152// | +--OperationIncrement(OK)
153// | |
154// | +--OperationDecrement(OK)
155// | |
156// | +--OperationSelfSum(OK)
157// | |
158// | +--OperationSelfSubtraction(OK)
159// | |
160// | +--OperationSelfDivision(OK)
161// | |
162// | +--OperationSelfMultiplication(OK)
163// | |
164// | +--OperationSelfModulus(OK)
165// | |
166// | +--OperationSelfOr(OK)
167// | |
168// | +--OperationSelfAnd(OK)
169// | |
170// | +--OperationSelfXor(OK)
171// | |
172// | +--OperationSelfShl(OK)
173// | |
174// | +--OperationSelfShr(OK)
175// | |
176// | +--OperationStringAppend(OK)
177// | |
178// | +--OperationStringAppendWithComma(OK)
179// | |
180// | +--OperationStringAppendWithSpace(OK)
181// | |
182// | +--OperationStringTransliteration(OK)
183// | |
184// | +--OperationStringSubstitution(OK)
185// |
186// +--Data(OK) data has
187// | | bool evaluateReadOnly(KviKvsRunTimeContext * c,KviKvsVariant * pBuffer) <-- this MUST be implemented
188// | | KviKvsVariant * evaluateReadWrite(KviKvsRunTimeContext * c) <-- this MUST be implemented if isReadOnly returns false
189// | |
190// | | This class is NEVER instantiated directly
191// | |
192// | | isReadOnly(); true by default
193// | | canEvaluateToObjectReference(); false by default
194// | | isFunctionCall(); false by default
195// | | canEvaluateInObjectScope(); false by default
196// | | (DEAD)canReleaseResult(); false by default (can the result be simply "taken" ?)
197// | |
198// | +--StringCast(OK) has some kind of data inside that is converted to string "on the fly"
199// | |
200// | +--ConstantData(OK) have real constant data
201// | | everything inherited from data
202// | | only evaluateReadOnly is implemented and it never fails
203// | |
204// | +--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)
205// | | everything inherited from data
206// | | only evaluateReadOnly is implemented and it never fails
207// | |
208// | +--ScopeOperator( ) Has a left side that must evaluate to ob reference
209// | | Has a right side that must be a variable reference or function call
210// | | isReadOnly() depends on the right child
211// | | canEvaluateToObjectReference() depends on last child
212// | | isFunctionCall() depends on last child
213// | | canEvaluateInObjectScope() depends on last child
214// | | (DEAD)canReleaseResult() depends on last child
215// | |
216// | +--SingleParameterIdentifier(OK) this is $n
217// | | canEvaluateToObjectReference() = true
218// | |
219// | +--MultipleParameterIdentifier(OK) this is $n-[n]
220// | |
221// | +--CommandEvaluation(OK) this is ${ ... }
222// | | canEvaluateToObjectReference() = true
223// | |
224// | +--Variable(OK) this is something related to %xxx (never instantiated)
225// | | | canEvaluateInObjectScope() = true
226// | | | isReadOnly() = false
227// | | | canEvaluateToObjectReference() = true
228// | | |
229// | | +--LocalVariable(OK)
230// | | |
231// | | +--GlobalVariable(OK)
232// | | |
233// | | +--ExtendedScopeVariable(OK)
234// | | |
235// | | +--ObjectField(OK)
236// | |
237// | +--IndirectData(OK) takes a Data as source (never instantiated)
238// | | | canEvaluateInObjectScope() depends on the parameter data
239// | | |
240// | | +--ArrayOrHashElement(OK) isReadOnly() depends on the source data (never instantiated)