AggregationInsertRemoveExpression::AggregationInsertRemoveExpression( Expression* a_pLeftExpression, Expression* a_pIndexExpression, AggregationClass* a_pAggregationClass ) : Expression(a_pLeftExpression->getValueType()->replicate(a_pAggregationClass->getAggregateClass()->pointerType())) , m_pLeftExpression(a_pLeftExpression) , m_pIndexExpression(a_pIndexExpression) , m_pAggregationClass(a_pAggregationClass) , m_pBufferedPointer(nullptr) { addSubExpression(m_pLeftExpression); addSubExpression(m_pIndexExpression); reflection::Type* pPointerType = a_pAggregationClass->getAggregateClass()->pointerType(); }
PropertyExpression::PropertyExpression( Expression* a_pLeftExpression, Property* a_pProperty ) : LValueExpression(a_pLeftExpression->getValueType()->replicate(a_pProperty->getValueType()->removeConstReference()), a_pProperty->getValueType()->removeConstReference()) , m_pLeftExpression(a_pLeftExpression) , m_pProperty(a_pProperty) { if(NOT(a_pLeftExpression->getValueType()->asReferenceType())) { setInvalid(); } else if(a_pLeftExpression->getValueType()->removeReference()->removeConst() != a_pProperty->getOwner()) { Class* pLeftClass = a_pLeftExpression->getValueType()->removeReference()->removeConst()->asClass(); if(pLeftClass) { Class* pOwnerClass = a_pProperty->getOwner()->asClass(); if(pOwnerClass) { if(pLeftClass->getBaseClassOffsetCascade(pOwnerClass) != 0) setInvalid(); } else setInvalid(); } else setInvalid(); } addSubExpression(m_pLeftExpression); addReferencedElement(a_pProperty); m_pBuffer = m_pValueType->removeReference()->allocate(); m_pValueType->removeReference()->construct(m_pBuffer); m_pValueType->removeReference()->install(m_pBuffer); m_pValueType->removeReference()->initialize(m_pBuffer); }
VariableExpression::VariableExpression(Variable* a_pVariable, Expression* a_pChildExpression /*= nullptr*/) : LValueExpression(a_pVariable->getValueType()) , m_pVariable(a_pVariable) { addReferencedElement(a_pVariable); if(a_pChildExpression) addSubExpression(a_pChildExpression); }
EqTestOp::EqTestOp(Opcode opcode, Expression* lhs, Expression* rhs) : m_opcode(opcode) { addSubExpression(lhs); addSubExpression(rhs); }
NumericOp::NumericOp(Opcode opcode, Expression* lhs, Expression* rhs) : m_opcode(opcode) { addSubExpression(lhs); addSubExpression(rhs); }
LogicalOp::LogicalOp(Opcode opcode, Expression* lhs, Expression* rhs) : m_opcode(opcode) { addSubExpression(lhs); addSubExpression(rhs); }