mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-14 13:50:13 +00:00
MTROPOLIS: Refactor dynamic value write interface tables to quiet GCC global destructor warnings.
This commit is contained in:
parent
7f2f42e4a1
commit
82a5ce8319
@ -1602,7 +1602,7 @@ MiniscriptInstructionOutcome TextLabelElement::writeRefAttributeIndexed(Miniscri
|
||||
return kMiniscriptInstructionOutcomeFailed;
|
||||
}
|
||||
|
||||
writeProxy.pod.ifc = &TextLabelLineWriteInterface::_instance;
|
||||
writeProxy.pod.ifc = DynamicValueWriteInterfaceGlue<TextLabelLineWriteInterface>::getInstance();
|
||||
writeProxy.pod.objectRef = this;
|
||||
writeProxy.pod.ptrOrOffset = asInteger - 1;
|
||||
return kMiniscriptInstructionOutcomeContinue;
|
||||
@ -1872,21 +1872,18 @@ size_t TextLabelElement::countLines() const {
|
||||
return numLines;
|
||||
}
|
||||
|
||||
MiniscriptInstructionOutcome TextLabelElement::TextLabelLineWriteInterface::write(MiniscriptThread *thread, const DynamicValue &dest, void *objectRef, uintptr ptrOrOffset) const {
|
||||
MiniscriptInstructionOutcome TextLabelElement::TextLabelLineWriteInterface::write(MiniscriptThread *thread, const DynamicValue &dest, void *objectRef, uintptr ptrOrOffset) {
|
||||
return static_cast<TextLabelElement *>(objectRef)->scriptSetLine(thread, ptrOrOffset, dest);
|
||||
}
|
||||
|
||||
MiniscriptInstructionOutcome TextLabelElement::TextLabelLineWriteInterface::refAttrib(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib) const {
|
||||
MiniscriptInstructionOutcome TextLabelElement::TextLabelLineWriteInterface::refAttrib(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib) {
|
||||
return kMiniscriptInstructionOutcomeFailed;
|
||||
}
|
||||
|
||||
MiniscriptInstructionOutcome TextLabelElement::TextLabelLineWriteInterface::refAttribIndexed(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib, const DynamicValue &index) const {
|
||||
MiniscriptInstructionOutcome TextLabelElement::TextLabelLineWriteInterface::refAttribIndexed(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib, const DynamicValue &index) {
|
||||
return kMiniscriptInstructionOutcomeFailed;
|
||||
}
|
||||
|
||||
TextLabelElement::TextLabelLineWriteInterface TextLabelElement::TextLabelLineWriteInterface::_instance;
|
||||
|
||||
|
||||
SoundElement::SoundElement() : _finishTime(0), _shouldPlayIfNotPaused(true), _needsReset(true) {
|
||||
}
|
||||
|
||||
|
@ -280,12 +280,10 @@ public:
|
||||
#endif
|
||||
|
||||
private:
|
||||
struct TextLabelLineWriteInterface : public IDynamicValueWriteInterface {
|
||||
MiniscriptInstructionOutcome write(MiniscriptThread *thread, const DynamicValue &dest, void *objectRef, uintptr ptrOrOffset) const override;
|
||||
MiniscriptInstructionOutcome refAttrib(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib) const override;
|
||||
MiniscriptInstructionOutcome refAttribIndexed(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib, const DynamicValue &index) const override;
|
||||
|
||||
static TextLabelLineWriteInterface _instance;
|
||||
struct TextLabelLineWriteInterface {
|
||||
static MiniscriptInstructionOutcome write(MiniscriptThread *thread, const DynamicValue &dest, void *objectRef, uintptr ptrOrOffset);
|
||||
static MiniscriptInstructionOutcome refAttrib(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib);
|
||||
static MiniscriptInstructionOutcome refAttribIndexed(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib, const DynamicValue &index);
|
||||
};
|
||||
|
||||
MiniscriptInstructionOutcome scriptSetText(MiniscriptThread *thread, const DynamicValue &value);
|
||||
|
@ -1933,29 +1933,27 @@ bool MiniscriptThread::evaluateTruthOfResult(bool &isTrue) {
|
||||
}
|
||||
|
||||
void MiniscriptThread::createWriteIncomingDataProxy(DynamicValueWriteProxy &proxy) {
|
||||
proxy.pod.ifc = &IncomingDataWriteInterface::_instance;
|
||||
proxy.pod.ifc = DynamicValueWriteInterfaceGlue<IncomingDataWriteInterface>::getInstance();
|
||||
proxy.pod.objectRef = this;
|
||||
proxy.pod.ptrOrOffset = 0;
|
||||
}
|
||||
|
||||
MiniscriptInstructionOutcome MiniscriptThread::IncomingDataWriteInterface::write(MiniscriptThread *thread, const DynamicValue &value, void *objectRef, uintptr ptrOrOffset) const {
|
||||
MiniscriptInstructionOutcome MiniscriptThread::IncomingDataWriteInterface::write(MiniscriptThread *thread, const DynamicValue &value, void *objectRef, uintptr ptrOrOffset) {
|
||||
thread->_msgProps->setValue(value);
|
||||
|
||||
return kMiniscriptInstructionOutcomeContinue;
|
||||
}
|
||||
|
||||
MiniscriptInstructionOutcome MiniscriptThread::IncomingDataWriteInterface::refAttrib(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib) const {
|
||||
MiniscriptInstructionOutcome MiniscriptThread::IncomingDataWriteInterface::refAttrib(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib) {
|
||||
// TODO: Generic refAttrib for dynamic values
|
||||
return kMiniscriptInstructionOutcomeFailed;
|
||||
}
|
||||
|
||||
MiniscriptInstructionOutcome MiniscriptThread::IncomingDataWriteInterface::refAttribIndexed(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib, const DynamicValue &index) const {
|
||||
MiniscriptInstructionOutcome MiniscriptThread::IncomingDataWriteInterface::refAttribIndexed(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib, const DynamicValue &index) {
|
||||
// TODO: Generic refAttribIndexed for dynamic values
|
||||
return kMiniscriptInstructionOutcomeFailed;
|
||||
}
|
||||
|
||||
MiniscriptThread::IncomingDataWriteInterface MiniscriptThread::IncomingDataWriteInterface::_instance;
|
||||
|
||||
|
||||
VThreadState MiniscriptThread::resumeTask(const ResumeTaskData &data) {
|
||||
return data.thread->resume(data);
|
||||
|
@ -412,12 +412,10 @@ public:
|
||||
void createWriteIncomingDataProxy(DynamicValueWriteProxy &proxy);
|
||||
|
||||
private:
|
||||
struct IncomingDataWriteInterface : public IDynamicValueWriteInterface {
|
||||
MiniscriptInstructionOutcome write(MiniscriptThread *thread, const DynamicValue &dest, void *objectRef, uintptr ptrOrOffset) const override;
|
||||
MiniscriptInstructionOutcome refAttrib(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib) const override;
|
||||
MiniscriptInstructionOutcome refAttribIndexed(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib, const DynamicValue &index) const override;
|
||||
|
||||
static IncomingDataWriteInterface _instance;
|
||||
struct IncomingDataWriteInterface {
|
||||
static MiniscriptInstructionOutcome write(MiniscriptThread *thread, const DynamicValue &dest, void *objectRef, uintptr ptrOrOffset);
|
||||
static MiniscriptInstructionOutcome refAttrib(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib);
|
||||
static MiniscriptInstructionOutcome refAttribIndexed(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib, const DynamicValue &index);
|
||||
};
|
||||
|
||||
struct ResumeTaskData {
|
||||
|
@ -630,7 +630,7 @@ MiniscriptInstructionOutcome ObjectReferenceVariableModifier::writeRefAttribute(
|
||||
if (attrib == "object") {
|
||||
result.pod.ptrOrOffset = 0;
|
||||
result.pod.objectRef = this;
|
||||
result.pod.ifc = &ObjectWriteInterface::_instance;
|
||||
result.pod.ifc = DynamicValueWriteInterfaceGlue<ObjectWriteInterface>::getInstance();
|
||||
return kMiniscriptInstructionOutcomeContinue;
|
||||
}
|
||||
|
||||
@ -896,15 +896,15 @@ RuntimeObject *ObjectReferenceVariableModifier::getObjectParent(RuntimeObject *o
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
MiniscriptInstructionOutcome ObjectReferenceVariableModifier::ObjectWriteInterface::write(MiniscriptThread *thread, const DynamicValue &value, void *objectRef, uintptr ptrOrOffset) const {
|
||||
MiniscriptInstructionOutcome ObjectReferenceVariableModifier::ObjectWriteInterface::write(MiniscriptThread *thread, const DynamicValue &value, void *objectRef, uintptr ptrOrOffset) {
|
||||
return static_cast<ObjectReferenceVariableModifier *>(objectRef)->scriptSetObject(thread, value);
|
||||
}
|
||||
|
||||
MiniscriptInstructionOutcome ObjectReferenceVariableModifier::ObjectWriteInterface::refAttrib(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib) const {
|
||||
MiniscriptInstructionOutcome ObjectReferenceVariableModifier::ObjectWriteInterface::refAttrib(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib) {
|
||||
return static_cast<ObjectReferenceVariableModifier *>(objectRef)->scriptObjectRefAttrib(thread, proxy, attrib);
|
||||
}
|
||||
|
||||
MiniscriptInstructionOutcome ObjectReferenceVariableModifier::ObjectWriteInterface::refAttribIndexed(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib, const DynamicValue &index) const {
|
||||
MiniscriptInstructionOutcome ObjectReferenceVariableModifier::ObjectWriteInterface::refAttribIndexed(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib, const DynamicValue &index) {
|
||||
return static_cast<ObjectReferenceVariableModifier *>(objectRef)->scriptObjectRefAttribIndexed(thread, proxy, attrib, index);
|
||||
}
|
||||
|
||||
@ -912,8 +912,6 @@ ObjectReferenceVariableModifier::SaveLoad::SaveLoad(ObjectReferenceVariableModif
|
||||
_objectPath = _modifier->_objectPath;
|
||||
}
|
||||
|
||||
ObjectReferenceVariableModifier::ObjectWriteInterface ObjectReferenceVariableModifier::ObjectWriteInterface::_instance;
|
||||
|
||||
void ObjectReferenceVariableModifier::SaveLoad::commitLoad() const {
|
||||
_modifier->_object.reset();
|
||||
_modifier->_fullPath.clear();
|
||||
@ -1069,7 +1067,7 @@ MiniscriptInstructionOutcome MidiModifier::writeRefAttributeIndexed(MiniscriptTh
|
||||
|
||||
result.pod.objectRef = this;
|
||||
result.pod.ptrOrOffset = asInteger - 1;
|
||||
result.pod.ifc = &MuteTrackProxyInterface::_instance;
|
||||
result.pod.ifc = DynamicValueWriteInterfaceGlue<MuteTrackProxyInterface>::getInstance();
|
||||
|
||||
return kMiniscriptInstructionOutcomeContinue;
|
||||
}
|
||||
@ -1213,7 +1211,7 @@ MiniscriptInstructionOutcome MidiModifier::scriptSetMuteTrack(MiniscriptThread *
|
||||
return kMiniscriptInstructionOutcomeContinue;
|
||||
}
|
||||
|
||||
MiniscriptInstructionOutcome MidiModifier::MuteTrackProxyInterface::write(MiniscriptThread *thread, const DynamicValue &value, void *objectRef, uintptr ptrOrOffset) const {
|
||||
MiniscriptInstructionOutcome MidiModifier::MuteTrackProxyInterface::write(MiniscriptThread *thread, const DynamicValue &value, void *objectRef, uintptr ptrOrOffset) {
|
||||
if (value.getType() != DynamicValueTypes::kBoolean) {
|
||||
thread->error("Invalid type for mutetrack");
|
||||
return kMiniscriptInstructionOutcomeFailed;
|
||||
@ -1222,16 +1220,14 @@ MiniscriptInstructionOutcome MidiModifier::MuteTrackProxyInterface::write(Minisc
|
||||
return static_cast<MidiModifier *>(objectRef)->scriptSetMuteTrack(thread, ptrOrOffset, value.getBool());
|
||||
}
|
||||
|
||||
MiniscriptInstructionOutcome MidiModifier::MuteTrackProxyInterface::refAttrib(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib) const {
|
||||
MiniscriptInstructionOutcome MidiModifier::MuteTrackProxyInterface::refAttrib(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib) {
|
||||
return kMiniscriptInstructionOutcomeFailed;
|
||||
}
|
||||
|
||||
MiniscriptInstructionOutcome MidiModifier::MuteTrackProxyInterface::refAttribIndexed(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib, const DynamicValue &index) const {
|
||||
MiniscriptInstructionOutcome MidiModifier::MuteTrackProxyInterface::refAttribIndexed(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib, const DynamicValue &index) {
|
||||
return kMiniscriptInstructionOutcomeFailed;
|
||||
}
|
||||
|
||||
MidiModifier::MuteTrackProxyInterface MidiModifier::MuteTrackProxyInterface::_instance;
|
||||
|
||||
ListVariableModifier::ListVariableModifier() : _list(new DynamicList()), _preferredContentType(DynamicValueTypes::kInteger) {
|
||||
}
|
||||
|
||||
|
@ -163,12 +163,10 @@ public:
|
||||
#endif
|
||||
|
||||
private:
|
||||
struct ObjectWriteInterface : public IDynamicValueWriteInterface {
|
||||
MiniscriptInstructionOutcome write(MiniscriptThread *thread, const DynamicValue &dest, void *objectRef, uintptr ptrOrOffset) const override;
|
||||
MiniscriptInstructionOutcome refAttrib(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib) const override;
|
||||
MiniscriptInstructionOutcome refAttribIndexed(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib, const DynamicValue &index) const override;
|
||||
|
||||
static ObjectWriteInterface _instance;
|
||||
struct ObjectWriteInterface {
|
||||
static MiniscriptInstructionOutcome write(MiniscriptThread *thread, const DynamicValue &dest, void *objectRef, uintptr ptrOrOffset);
|
||||
static MiniscriptInstructionOutcome refAttrib(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib);
|
||||
static MiniscriptInstructionOutcome refAttribIndexed(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib, const DynamicValue &index);
|
||||
};
|
||||
|
||||
class SaveLoad : public ModifierSaveLoad {
|
||||
@ -226,12 +224,10 @@ public:
|
||||
#endif
|
||||
|
||||
private:
|
||||
struct MuteTrackProxyInterface : public IDynamicValueWriteInterface {
|
||||
MiniscriptInstructionOutcome write(MiniscriptThread *thread, const DynamicValue &dest, void *objectRef, uintptr ptrOrOffset) const override;
|
||||
MiniscriptInstructionOutcome refAttrib(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib) const override;
|
||||
MiniscriptInstructionOutcome refAttribIndexed(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib, const DynamicValue &index) const override;
|
||||
|
||||
static MuteTrackProxyInterface _instance;
|
||||
struct MuteTrackProxyInterface {
|
||||
static MiniscriptInstructionOutcome write(MiniscriptThread *thread, const DynamicValue &dest, void *objectRef, uintptr ptrOrOffset);
|
||||
static MiniscriptInstructionOutcome refAttrib(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib);
|
||||
static MiniscriptInstructionOutcome refAttribIndexed(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib, const DynamicValue &index);
|
||||
};
|
||||
|
||||
Common::SharedPtr<Modifier> shallowClone() const override;
|
||||
|
@ -340,9 +340,6 @@ ColorRGB8 ColorRGB8::create(uint8 r, uint8 g, uint8 b) {
|
||||
MessageFlags::MessageFlags() : relay(true), cascade(true), immediate(true) {
|
||||
}
|
||||
|
||||
IDynamicValueWriteInterface::~IDynamicValueWriteInterface() {
|
||||
}
|
||||
|
||||
Common::Point Point16POD::toScummVMPoint() const {
|
||||
return Common::Point(x, y);
|
||||
}
|
||||
@ -904,7 +901,7 @@ Common::SharedPtr<DynamicList> DynamicList::clone() const {
|
||||
}
|
||||
|
||||
void DynamicList::createWriteProxyForIndex(size_t index, DynamicValueWriteProxy &proxy) {
|
||||
proxy.pod.ifc = &WriteProxyInterface::_instance;
|
||||
proxy.pod.ifc = DynamicValueWriteInterfaceGlue<WriteProxyInterface>::getInstance();
|
||||
proxy.pod.objectRef = this;
|
||||
proxy.pod.ptrOrOffset = index;
|
||||
}
|
||||
@ -986,13 +983,13 @@ void DynamicList::initFromOther(const DynamicList &other) {
|
||||
}
|
||||
}
|
||||
|
||||
MiniscriptInstructionOutcome DynamicList::WriteProxyInterface::write(MiniscriptThread *thread, const DynamicValue &value, void *objectRef, uintptr ptrOrOffset) const {
|
||||
MiniscriptInstructionOutcome DynamicList::WriteProxyInterface::write(MiniscriptThread *thread, const DynamicValue &value, void *objectRef, uintptr ptrOrOffset) {
|
||||
if (!static_cast<DynamicList *>(objectRef)->setAtIndex(ptrOrOffset, value))
|
||||
return kMiniscriptInstructionOutcomeFailed;
|
||||
return kMiniscriptInstructionOutcomeContinue;
|
||||
}
|
||||
|
||||
MiniscriptInstructionOutcome DynamicList::WriteProxyInterface::refAttrib(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib) const {
|
||||
MiniscriptInstructionOutcome DynamicList::WriteProxyInterface::refAttrib(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib) {
|
||||
DynamicList *list = static_cast<DynamicList *>(objectRef);
|
||||
|
||||
switch (list->getType()) {
|
||||
@ -1025,7 +1022,7 @@ MiniscriptInstructionOutcome DynamicList::WriteProxyInterface::refAttrib(Miniscr
|
||||
}
|
||||
}
|
||||
|
||||
MiniscriptInstructionOutcome DynamicList::WriteProxyInterface::refAttribIndexed(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib, const DynamicValue &index) const {
|
||||
MiniscriptInstructionOutcome DynamicList::WriteProxyInterface::refAttribIndexed(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib, const DynamicValue &index) {
|
||||
DynamicList *list = static_cast<DynamicList *>(objectRef);
|
||||
switch (list->getType()) {
|
||||
case DynamicValueTypes::kList: {
|
||||
@ -1060,8 +1057,6 @@ MiniscriptInstructionOutcome DynamicList::WriteProxyInterface::refAttribIndexed(
|
||||
return kMiniscriptInstructionOutcomeFailed;
|
||||
}
|
||||
|
||||
DynamicList::WriteProxyInterface DynamicList::WriteProxyInterface::_instance;
|
||||
|
||||
DynamicValue::DynamicValue() : _type(DynamicValueTypes::kNull) {
|
||||
}
|
||||
|
||||
@ -1580,7 +1575,7 @@ void DynamicValue::initFromOther(const DynamicValue &other) {
|
||||
_type = other._type;
|
||||
}
|
||||
|
||||
MiniscriptInstructionOutcome DynamicValueWriteStringHelper::write(MiniscriptThread *thread, const DynamicValue &value, void *objectRef, uintptr ptrOrOffset) const {
|
||||
MiniscriptInstructionOutcome DynamicValueWriteStringHelper::write(MiniscriptThread *thread, const DynamicValue &value, void *objectRef, uintptr ptrOrOffset) {
|
||||
Common::String &dest = *static_cast<Common::String *>(objectRef);
|
||||
switch (value.getType()) {
|
||||
case DynamicValueTypes::kString:
|
||||
@ -1591,23 +1586,21 @@ MiniscriptInstructionOutcome DynamicValueWriteStringHelper::write(MiniscriptThre
|
||||
}
|
||||
}
|
||||
|
||||
MiniscriptInstructionOutcome DynamicValueWriteStringHelper::refAttrib(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib) const {
|
||||
MiniscriptInstructionOutcome DynamicValueWriteStringHelper::refAttrib(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib) {
|
||||
return kMiniscriptInstructionOutcomeFailed;
|
||||
}
|
||||
|
||||
MiniscriptInstructionOutcome DynamicValueWriteStringHelper::refAttribIndexed(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib, const DynamicValue &index) const {
|
||||
MiniscriptInstructionOutcome DynamicValueWriteStringHelper::refAttribIndexed(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib, const DynamicValue &index) {
|
||||
return kMiniscriptInstructionOutcomeFailed;
|
||||
}
|
||||
|
||||
void DynamicValueWriteStringHelper::create(Common::String *strValue, DynamicValueWriteProxy &proxy) {
|
||||
proxy.pod.ptrOrOffset = 0;
|
||||
proxy.pod.objectRef = strValue;
|
||||
proxy.pod.ifc = &_instance;
|
||||
proxy.pod.ifc = DynamicValueWriteInterfaceGlue<DynamicValueWriteStringHelper>::getInstance();
|
||||
}
|
||||
|
||||
DynamicValueWriteStringHelper DynamicValueWriteStringHelper::_instance;
|
||||
|
||||
MiniscriptInstructionOutcome DynamicValueWritePointHelper::write(MiniscriptThread *thread, const DynamicValue &value, void *objectRef, uintptr ptrOrOffset) const {
|
||||
MiniscriptInstructionOutcome DynamicValueWritePointHelper::write(MiniscriptThread *thread, const DynamicValue &value, void *objectRef, uintptr ptrOrOffset) {
|
||||
if (value.getType() != DynamicValueTypes::kPoint) {
|
||||
thread->error("Can't set point to invalid type");
|
||||
return kMiniscriptInstructionOutcomeFailed;
|
||||
@ -1618,7 +1611,7 @@ MiniscriptInstructionOutcome DynamicValueWritePointHelper::write(MiniscriptThrea
|
||||
return kMiniscriptInstructionOutcomeContinue;
|
||||
}
|
||||
|
||||
MiniscriptInstructionOutcome DynamicValueWritePointHelper::refAttrib(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib) const {
|
||||
MiniscriptInstructionOutcome DynamicValueWritePointHelper::refAttrib(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib) {
|
||||
if (attrib == "x") {
|
||||
DynamicValueWriteIntegerHelper<int16>::create(&static_cast<Common::Point *>(objectRef)->x, proxy);
|
||||
return kMiniscriptInstructionOutcomeContinue;
|
||||
@ -1632,19 +1625,17 @@ MiniscriptInstructionOutcome DynamicValueWritePointHelper::refAttrib(MiniscriptT
|
||||
return kMiniscriptInstructionOutcomeFailed;
|
||||
}
|
||||
|
||||
MiniscriptInstructionOutcome DynamicValueWritePointHelper::refAttribIndexed(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib, const DynamicValue &index) const {
|
||||
MiniscriptInstructionOutcome DynamicValueWritePointHelper::refAttribIndexed(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib, const DynamicValue &index) {
|
||||
return kMiniscriptInstructionOutcomeFailed;
|
||||
}
|
||||
|
||||
void DynamicValueWritePointHelper::create(Common::Point *pointValue, DynamicValueWriteProxy &proxy) {
|
||||
proxy.pod.ptrOrOffset = 0;
|
||||
proxy.pod.objectRef = pointValue;
|
||||
proxy.pod.ifc = &_instance;
|
||||
proxy.pod.ifc = DynamicValueWriteInterfaceGlue<DynamicValueWritePointHelper>::getInstance();
|
||||
}
|
||||
|
||||
DynamicValueWritePointHelper DynamicValueWritePointHelper::_instance;
|
||||
|
||||
MiniscriptInstructionOutcome DynamicValueWriteBoolHelper::write(MiniscriptThread *thread, const DynamicValue &value, void *objectRef, uintptr ptrOrOffset) const {
|
||||
MiniscriptInstructionOutcome DynamicValueWriteBoolHelper::write(MiniscriptThread *thread, const DynamicValue &value, void *objectRef, uintptr ptrOrOffset) {
|
||||
bool &dest = *static_cast<bool *>(objectRef);
|
||||
switch (value.getType()) {
|
||||
case DynamicValueTypes::kBoolean:
|
||||
@ -1655,23 +1646,21 @@ MiniscriptInstructionOutcome DynamicValueWriteBoolHelper::write(MiniscriptThread
|
||||
}
|
||||
}
|
||||
|
||||
MiniscriptInstructionOutcome DynamicValueWriteBoolHelper::refAttrib(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib) const {
|
||||
MiniscriptInstructionOutcome DynamicValueWriteBoolHelper::refAttrib(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib) {
|
||||
return kMiniscriptInstructionOutcomeFailed;
|
||||
}
|
||||
|
||||
MiniscriptInstructionOutcome DynamicValueWriteBoolHelper::refAttribIndexed(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib, const DynamicValue &index) const {
|
||||
MiniscriptInstructionOutcome DynamicValueWriteBoolHelper::refAttribIndexed(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib, const DynamicValue &index) {
|
||||
return kMiniscriptInstructionOutcomeFailed;
|
||||
}
|
||||
|
||||
void DynamicValueWriteBoolHelper::create(bool *boolValue, DynamicValueWriteProxy &proxy) {
|
||||
proxy.pod.ptrOrOffset = 0;
|
||||
proxy.pod.objectRef = boolValue;
|
||||
proxy.pod.ifc = &_instance;
|
||||
proxy.pod.ifc = DynamicValueWriteInterfaceGlue<DynamicValueWriteBoolHelper>::getInstance();
|
||||
}
|
||||
|
||||
DynamicValueWriteBoolHelper DynamicValueWriteBoolHelper::_instance;
|
||||
|
||||
MiniscriptInstructionOutcome DynamicValueWriteObjectHelper::write(MiniscriptThread *thread, const DynamicValue &value, void *objectRef, uintptr ptrOrOffset) const {
|
||||
MiniscriptInstructionOutcome DynamicValueWriteObjectHelper::write(MiniscriptThread *thread, const DynamicValue &value, void *objectRef, uintptr ptrOrOffset) {
|
||||
RuntimeObject *obj = static_cast<RuntimeObject *>(objectRef);
|
||||
if (obj->isModifier() && static_cast<Modifier *>(obj)->isVariable()) {
|
||||
VariableModifier *var = static_cast<VariableModifier *>(obj);
|
||||
@ -1687,23 +1676,21 @@ MiniscriptInstructionOutcome DynamicValueWriteObjectHelper::write(MiniscriptThre
|
||||
return kMiniscriptInstructionOutcomeFailed;
|
||||
}
|
||||
|
||||
MiniscriptInstructionOutcome DynamicValueWriteObjectHelper::refAttrib(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib) const {
|
||||
MiniscriptInstructionOutcome DynamicValueWriteObjectHelper::refAttrib(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib) {
|
||||
return static_cast<RuntimeObject *>(objectRef)->writeRefAttribute(thread, proxy, attrib);
|
||||
}
|
||||
|
||||
MiniscriptInstructionOutcome DynamicValueWriteObjectHelper::refAttribIndexed(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib, const DynamicValue &index) const {
|
||||
MiniscriptInstructionOutcome DynamicValueWriteObjectHelper::refAttribIndexed(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib, const DynamicValue &index) {
|
||||
return static_cast<RuntimeObject *>(objectRef)->writeRefAttributeIndexed(thread, proxy, attrib, index);
|
||||
}
|
||||
|
||||
void DynamicValueWriteObjectHelper::create(RuntimeObject *obj, DynamicValueWriteProxy &proxy) {
|
||||
proxy.containerList.reset(); // Object references are always anchored while threads are running, so don't need to preserve the container
|
||||
proxy.pod.ifc = &DynamicValueWriteObjectHelper::_instance;
|
||||
proxy.pod.ifc = DynamicValueWriteInterfaceGlue<DynamicValueWriteObjectHelper>::getInstance();
|
||||
proxy.pod.objectRef = obj;
|
||||
proxy.pod.ptrOrOffset = 0;
|
||||
}
|
||||
|
||||
DynamicValueWriteObjectHelper DynamicValueWriteObjectHelper::_instance;
|
||||
|
||||
MessengerSendSpec::MessengerSendSpec() : destination(0), _linkType(kLinkTypeNotYetLinked) {
|
||||
}
|
||||
|
||||
@ -7328,26 +7315,24 @@ DynamicValueWriteProxy VariableModifier::createWriteProxy() {
|
||||
DynamicValueWriteProxy proxy;
|
||||
proxy.pod.objectRef = this;
|
||||
proxy.pod.ptrOrOffset = 0;
|
||||
proxy.pod.ifc = &VariableModifier::WriteProxyInterface::_instance;
|
||||
proxy.pod.ifc = DynamicValueWriteInterfaceGlue<VariableModifier::WriteProxyInterface>::getInstance();
|
||||
return proxy;
|
||||
}
|
||||
|
||||
MiniscriptInstructionOutcome VariableModifier::WriteProxyInterface::write(MiniscriptThread *thread, const DynamicValue &dest, void *objectRef, uintptr ptrOrOffset) const {
|
||||
MiniscriptInstructionOutcome VariableModifier::WriteProxyInterface::write(MiniscriptThread *thread, const DynamicValue &dest, void *objectRef, uintptr ptrOrOffset) {
|
||||
if (!static_cast<VariableModifier *>(objectRef)->varSetValue(thread, dest))
|
||||
return kMiniscriptInstructionOutcomeFailed;
|
||||
return kMiniscriptInstructionOutcomeContinue;
|
||||
}
|
||||
|
||||
MiniscriptInstructionOutcome VariableModifier::WriteProxyInterface::refAttrib(MiniscriptThread *thread, DynamicValueWriteProxy &dest, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib) const {
|
||||
MiniscriptInstructionOutcome VariableModifier::WriteProxyInterface::refAttrib(MiniscriptThread *thread, DynamicValueWriteProxy &dest, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib) {
|
||||
return static_cast<VariableModifier *>(objectRef)->writeRefAttribute(thread, dest, attrib);
|
||||
}
|
||||
|
||||
MiniscriptInstructionOutcome VariableModifier::WriteProxyInterface::refAttribIndexed(MiniscriptThread *thread, DynamicValueWriteProxy &dest, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib, const DynamicValue &index) const {
|
||||
MiniscriptInstructionOutcome VariableModifier::WriteProxyInterface::refAttribIndexed(MiniscriptThread *thread, DynamicValueWriteProxy &dest, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib, const DynamicValue &index) {
|
||||
return static_cast<VariableModifier *>(objectRef)->writeRefAttributeIndexed(thread, dest, attrib, index);
|
||||
}
|
||||
|
||||
VariableModifier::WriteProxyInterface VariableModifier::WriteProxyInterface::_instance;
|
||||
|
||||
bool Modifier::loadTypicalHeader(const Data::TypicalModifierHeader &typicalHeader) {
|
||||
if (!_modifierFlags.load(typicalHeader.modifierFlags))
|
||||
return false;
|
||||
|
@ -464,17 +464,47 @@ struct MessageFlags {
|
||||
struct DynamicValue;
|
||||
struct DynamicList;
|
||||
|
||||
struct IDynamicValueWriteInterface {
|
||||
virtual ~IDynamicValueWriteInterface();
|
||||
virtual MiniscriptInstructionOutcome write(MiniscriptThread *thread, const DynamicValue &dest, void *objectRef, uintptr ptrOrOffset) const = 0;
|
||||
virtual MiniscriptInstructionOutcome refAttrib(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib) const = 0;
|
||||
virtual MiniscriptInstructionOutcome refAttribIndexed(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib, const DynamicValue &index) const = 0;
|
||||
// This should be an interface, but since this exists to make global singletons that JUST supply a vtable,
|
||||
// GCC complains about there being a global destructor, unless we delete the destructor, in which case
|
||||
// it complains about a class having virtual functions but not having a virtual destructor, so we have to
|
||||
// do this dispatch table stuff just to make GCC be quiet.
|
||||
struct DynamicValueWriteInterface {
|
||||
typedef MiniscriptInstructionOutcome (*writeFunc_t)(MiniscriptThread *thread, const DynamicValue &dest, void *objectRef, uintptr ptrOrOffset);
|
||||
typedef MiniscriptInstructionOutcome (*refAttribFunc_t)(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib);
|
||||
typedef MiniscriptInstructionOutcome (*refAttribIndexedFunc_t)(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib, const DynamicValue &index);
|
||||
|
||||
writeFunc_t write;
|
||||
refAttribFunc_t refAttrib;
|
||||
refAttribIndexedFunc_t refAttribIndexed;
|
||||
};
|
||||
|
||||
template<class T>
|
||||
class DynamicValueWriteInterfaceGlue {
|
||||
public:
|
||||
static const DynamicValueWriteInterface *getInstance();
|
||||
|
||||
private:
|
||||
static DynamicValueWriteInterface _instance;
|
||||
};
|
||||
|
||||
template<class T>
|
||||
inline const DynamicValueWriteInterface *DynamicValueWriteInterfaceGlue<T>::getInstance() {
|
||||
return &_instance;
|
||||
}
|
||||
|
||||
template<class T>
|
||||
DynamicValueWriteInterface DynamicValueWriteInterfaceGlue<T>::_instance = {
|
||||
static_cast<DynamicValueWriteInterface::writeFunc_t>(T::write),
|
||||
static_cast<DynamicValueWriteInterface::refAttribFunc_t>(T::refAttrib),
|
||||
static_cast<DynamicValueWriteInterface::refAttribIndexedFunc_t>(T::refAttribIndexed),
|
||||
};
|
||||
|
||||
|
||||
|
||||
struct DynamicValueWriteProxyPOD {
|
||||
uintptr ptrOrOffset;
|
||||
void *objectRef;
|
||||
IDynamicValueWriteInterface *ifc;
|
||||
const DynamicValueWriteInterface *ifc;
|
||||
};
|
||||
|
||||
struct DynamicValueWriteProxy {
|
||||
@ -758,12 +788,10 @@ struct DynamicList {
|
||||
void createWriteProxyForIndex(size_t index, DynamicValueWriteProxy &proxy);
|
||||
|
||||
private:
|
||||
struct WriteProxyInterface : public IDynamicValueWriteInterface {
|
||||
MiniscriptInstructionOutcome write(MiniscriptThread *thread, const DynamicValue &dest, void *objectRef, uintptr ptrOrOffset) const override;
|
||||
MiniscriptInstructionOutcome refAttrib(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib) const override;
|
||||
MiniscriptInstructionOutcome refAttribIndexed(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib, const DynamicValue &index) const override;
|
||||
|
||||
static WriteProxyInterface _instance;
|
||||
struct WriteProxyInterface {
|
||||
static MiniscriptInstructionOutcome write(MiniscriptThread *thread, const DynamicValue &dest, void *objectRef, uintptr ptrOrOffset);
|
||||
static MiniscriptInstructionOutcome refAttrib(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib);
|
||||
static MiniscriptInstructionOutcome refAttribIndexed(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib, const DynamicValue &index);
|
||||
};
|
||||
|
||||
void clear();
|
||||
@ -867,8 +895,8 @@ private:
|
||||
};
|
||||
|
||||
template<class TFloat>
|
||||
struct DynamicValueWriteFloatHelper : public IDynamicValueWriteInterface {
|
||||
MiniscriptInstructionOutcome write(MiniscriptThread *thread, const DynamicValue &value, void *objectRef, uintptr ptrOrOffset) const override {
|
||||
struct DynamicValueWriteFloatHelper {
|
||||
static MiniscriptInstructionOutcome write(MiniscriptThread *thread, const DynamicValue &value, void *objectRef, uintptr ptrOrOffset) {
|
||||
TFloat &dest = *static_cast<TFloat *>(objectRef);
|
||||
switch (value.getType()) {
|
||||
case DynamicValueTypes::kFloat:
|
||||
@ -881,29 +909,23 @@ struct DynamicValueWriteFloatHelper : public IDynamicValueWriteInterface {
|
||||
return kMiniscriptInstructionOutcomeFailed;
|
||||
}
|
||||
}
|
||||
MiniscriptInstructionOutcome refAttrib(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib) const override {
|
||||
static MiniscriptInstructionOutcome refAttrib(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib) {
|
||||
return kMiniscriptInstructionOutcomeFailed;
|
||||
}
|
||||
MiniscriptInstructionOutcome refAttribIndexed(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib, const DynamicValue &index) const override {
|
||||
static MiniscriptInstructionOutcome refAttribIndexed(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib, const DynamicValue &index) {
|
||||
return kMiniscriptInstructionOutcomeFailed;
|
||||
}
|
||||
|
||||
static void create(TFloat *floatValue, DynamicValueWriteProxy &proxy) {
|
||||
proxy.pod.ptrOrOffset = 0;
|
||||
proxy.pod.objectRef = floatValue;
|
||||
proxy.pod.ifc = &_instance;
|
||||
proxy.pod.ifc = DynamicValueWriteInterfaceGlue<DynamicValueWriteFloatHelper<TFloat> >::getInstance();
|
||||
}
|
||||
|
||||
private:
|
||||
static DynamicValueWriteFloatHelper _instance;
|
||||
};
|
||||
|
||||
template<class TFloat>
|
||||
DynamicValueWriteFloatHelper<TFloat> DynamicValueWriteFloatHelper<TFloat>::_instance;
|
||||
|
||||
template<class TInteger>
|
||||
struct DynamicValueWriteIntegerHelper : public IDynamicValueWriteInterface {
|
||||
MiniscriptInstructionOutcome write(MiniscriptThread *thread, const DynamicValue &value, void *objectRef, uintptr ptrOrOffset) const override {
|
||||
struct DynamicValueWriteIntegerHelper {
|
||||
static MiniscriptInstructionOutcome write(MiniscriptThread *thread, const DynamicValue &value, void *objectRef, uintptr ptrOrOffset) {
|
||||
TInteger &dest = *static_cast<TInteger *>(objectRef);
|
||||
switch (value.getType()) {
|
||||
case DynamicValueTypes::kFloat:
|
||||
@ -916,101 +938,79 @@ struct DynamicValueWriteIntegerHelper : public IDynamicValueWriteInterface {
|
||||
return kMiniscriptInstructionOutcomeFailed;
|
||||
}
|
||||
}
|
||||
MiniscriptInstructionOutcome refAttrib(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib) const override {
|
||||
static MiniscriptInstructionOutcome refAttrib(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib) {
|
||||
return kMiniscriptInstructionOutcomeFailed;
|
||||
}
|
||||
MiniscriptInstructionOutcome refAttribIndexed(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib, const DynamicValue &index) const override {
|
||||
static MiniscriptInstructionOutcome refAttribIndexed(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib, const DynamicValue &index) {
|
||||
return kMiniscriptInstructionOutcomeFailed;
|
||||
}
|
||||
|
||||
static void create(TInteger *intValue, DynamicValueWriteProxy &proxy) {
|
||||
proxy.pod.ptrOrOffset = 0;
|
||||
proxy.pod.objectRef = intValue;
|
||||
proxy.pod.ifc = &_instance;
|
||||
proxy.pod.ifc = DynamicValueWriteInterfaceGlue<DynamicValueWriteIntegerHelper<TInteger> >::getInstance();
|
||||
}
|
||||
|
||||
private:
|
||||
static DynamicValueWriteIntegerHelper _instance;
|
||||
};
|
||||
|
||||
template<class TInteger>
|
||||
DynamicValueWriteIntegerHelper<TInteger> DynamicValueWriteIntegerHelper<TInteger>::_instance;
|
||||
|
||||
struct DynamicValueWritePointHelper : public IDynamicValueWriteInterface {
|
||||
MiniscriptInstructionOutcome write(MiniscriptThread *thread, const DynamicValue &value, void *objectRef, uintptr ptrOrOffset) const override;
|
||||
MiniscriptInstructionOutcome refAttrib(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib) const override;
|
||||
MiniscriptInstructionOutcome refAttribIndexed(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib, const DynamicValue &index) const override;
|
||||
struct DynamicValueWritePointHelper {
|
||||
static MiniscriptInstructionOutcome write(MiniscriptThread *thread, const DynamicValue &value, void *objectRef, uintptr ptrOrOffset);
|
||||
static MiniscriptInstructionOutcome refAttrib(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib);
|
||||
static MiniscriptInstructionOutcome refAttribIndexed(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib, const DynamicValue &index);
|
||||
|
||||
static void create(Common::Point *pointValue, DynamicValueWriteProxy &proxy);
|
||||
|
||||
private:
|
||||
static DynamicValueWritePointHelper _instance;
|
||||
};
|
||||
|
||||
struct DynamicValueWriteBoolHelper : public IDynamicValueWriteInterface {
|
||||
MiniscriptInstructionOutcome write(MiniscriptThread *thread, const DynamicValue &value, void *objectRef, uintptr ptrOrOffset) const override;
|
||||
MiniscriptInstructionOutcome refAttrib(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib) const override;
|
||||
MiniscriptInstructionOutcome refAttribIndexed(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib, const DynamicValue &index) const override;
|
||||
struct DynamicValueWriteBoolHelper {
|
||||
static MiniscriptInstructionOutcome write(MiniscriptThread *thread, const DynamicValue &value, void *objectRef, uintptr ptrOrOffset);
|
||||
static MiniscriptInstructionOutcome refAttrib(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib);
|
||||
static MiniscriptInstructionOutcome refAttribIndexed(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib, const DynamicValue &index);
|
||||
|
||||
static void create(bool *boolValue, DynamicValueWriteProxy &proxy);
|
||||
|
||||
private:
|
||||
static DynamicValueWriteBoolHelper _instance;
|
||||
};
|
||||
|
||||
struct DynamicValueWriteStringHelper : public IDynamicValueWriteInterface {
|
||||
MiniscriptInstructionOutcome write(MiniscriptThread *thread, const DynamicValue &value, void *objectRef, uintptr ptrOrOffset) const override;
|
||||
MiniscriptInstructionOutcome refAttrib(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib) const override;
|
||||
MiniscriptInstructionOutcome refAttribIndexed(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib, const DynamicValue &index) const override;
|
||||
struct DynamicValueWriteStringHelper {
|
||||
static MiniscriptInstructionOutcome write(MiniscriptThread *thread, const DynamicValue &value, void *objectRef, uintptr ptrOrOffset);
|
||||
static MiniscriptInstructionOutcome refAttrib(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib);
|
||||
static MiniscriptInstructionOutcome refAttribIndexed(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib, const DynamicValue &index);
|
||||
|
||||
static void create(Common::String *strValue, DynamicValueWriteProxy &proxy);
|
||||
|
||||
private:
|
||||
static DynamicValueWriteStringHelper _instance;
|
||||
};
|
||||
|
||||
template<class TClass, MiniscriptInstructionOutcome (TClass::*TWriteMethod)(MiniscriptThread *thread, const DynamicValue &dest), MiniscriptInstructionOutcome (TClass::*TRefAttribMethod)(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, const Common::String &attrib)>
|
||||
struct DynamicValueWriteOrRefAttribFuncHelper : public IDynamicValueWriteInterface {
|
||||
MiniscriptInstructionOutcome write(MiniscriptThread *thread, const DynamicValue &dest, void *objectRef, uintptr ptrOrOffset) const override {
|
||||
struct DynamicValueWriteOrRefAttribFuncHelper {
|
||||
static MiniscriptInstructionOutcome write(MiniscriptThread *thread, const DynamicValue &dest, void *objectRef, uintptr ptrOrOffset) {
|
||||
return (static_cast<TClass *>(objectRef)->*TWriteMethod)(thread, dest);
|
||||
}
|
||||
MiniscriptInstructionOutcome refAttrib(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib) const override {
|
||||
static MiniscriptInstructionOutcome refAttrib(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib) {
|
||||
return (static_cast<TClass *>(objectRef)->*TRefAttribMethod)(thread, proxy, attrib);
|
||||
}
|
||||
MiniscriptInstructionOutcome refAttribIndexed(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib, const DynamicValue &index) const override {
|
||||
static MiniscriptInstructionOutcome refAttribIndexed(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib, const DynamicValue &index) {
|
||||
return kMiniscriptInstructionOutcomeFailed;
|
||||
}
|
||||
|
||||
static void create(TClass *obj, DynamicValueWriteProxy &proxy) {
|
||||
proxy.pod.ptrOrOffset = 0;
|
||||
proxy.pod.objectRef = obj;
|
||||
proxy.pod.ifc = &_instance;
|
||||
proxy.pod.ifc = DynamicValueWriteInterfaceGlue<DynamicValueWriteOrRefAttribFuncHelper<TClass, TWriteMethod, TRefAttribMethod> >::getInstance();
|
||||
}
|
||||
|
||||
private:
|
||||
static DynamicValueWriteOrRefAttribFuncHelper _instance;
|
||||
};
|
||||
|
||||
template<class TClass, MiniscriptInstructionOutcome (TClass::*TWriteMethod)(MiniscriptThread *thread, const DynamicValue &dest), MiniscriptInstructionOutcome (TClass::*TRefAttribMethod)(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, const Common::String &attrib)>
|
||||
DynamicValueWriteOrRefAttribFuncHelper<TClass, TWriteMethod, TRefAttribMethod> DynamicValueWriteOrRefAttribFuncHelper<TClass, TWriteMethod, TRefAttribMethod>::_instance;
|
||||
|
||||
|
||||
template<class TClass, MiniscriptInstructionOutcome (TClass::*TWriteMethod)(MiniscriptThread *thread, const DynamicValue &dest)>
|
||||
struct DynamicValueWriteFuncHelper : public IDynamicValueWriteInterface {
|
||||
MiniscriptInstructionOutcome write(MiniscriptThread *thread, const DynamicValue &dest, void *objectRef, uintptr ptrOrOffset) const override {
|
||||
struct DynamicValueWriteFuncHelper {
|
||||
static MiniscriptInstructionOutcome write(MiniscriptThread *thread, const DynamicValue &dest, void *objectRef, uintptr ptrOrOffset) {
|
||||
return (static_cast<TClass *>(objectRef)->*TWriteMethod)(thread, dest);
|
||||
}
|
||||
MiniscriptInstructionOutcome refAttrib(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib) const override {
|
||||
static MiniscriptInstructionOutcome refAttrib(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib) {
|
||||
return kMiniscriptInstructionOutcomeFailed;
|
||||
}
|
||||
MiniscriptInstructionOutcome refAttribIndexed(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib, const DynamicValue &index) const override {
|
||||
static MiniscriptInstructionOutcome refAttribIndexed(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib, const DynamicValue &index) {
|
||||
return kMiniscriptInstructionOutcomeFailed;
|
||||
}
|
||||
|
||||
static void create(TClass *obj, DynamicValueWriteProxy &proxy) {
|
||||
proxy.pod.ptrOrOffset = 0;
|
||||
proxy.pod.objectRef = obj;
|
||||
proxy.pod.ifc = &_instance;
|
||||
proxy.pod.ifc = DynamicValueWriteInterfaceGlue<DynamicValueWriteFuncHelper<TClass, TWriteMethod> >::getInstance();
|
||||
}
|
||||
|
||||
private:
|
||||
@ -1020,15 +1020,12 @@ private:
|
||||
template<class TClass, MiniscriptInstructionOutcome (TClass::*TWriteMethod)(MiniscriptThread *thread, const DynamicValue &dest)>
|
||||
DynamicValueWriteFuncHelper<TClass, TWriteMethod> DynamicValueWriteFuncHelper<TClass, TWriteMethod>::_instance;
|
||||
|
||||
struct DynamicValueWriteObjectHelper : public IDynamicValueWriteInterface {
|
||||
MiniscriptInstructionOutcome write(MiniscriptThread *thread, const DynamicValue &value, void *objectRef, uintptr ptrOrOffset) const override;
|
||||
MiniscriptInstructionOutcome refAttrib(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib) const override;
|
||||
MiniscriptInstructionOutcome refAttribIndexed(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib, const DynamicValue &index) const override;
|
||||
struct DynamicValueWriteObjectHelper {
|
||||
static MiniscriptInstructionOutcome write(MiniscriptThread *thread, const DynamicValue &value, void *objectRef, uintptr ptrOrOffset);
|
||||
static MiniscriptInstructionOutcome refAttrib(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib);
|
||||
static MiniscriptInstructionOutcome refAttribIndexed(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib, const DynamicValue &index);
|
||||
|
||||
static void create(RuntimeObject *obj, DynamicValueWriteProxy &proxy);
|
||||
|
||||
private:
|
||||
static DynamicValueWriteObjectHelper _instance;
|
||||
};
|
||||
|
||||
struct MessengerSendSpec {
|
||||
@ -2595,12 +2592,10 @@ public:
|
||||
virtual DynamicValueWriteProxy createWriteProxy();
|
||||
|
||||
private:
|
||||
struct WriteProxyInterface : public IDynamicValueWriteInterface {
|
||||
MiniscriptInstructionOutcome write(MiniscriptThread *thread, const DynamicValue &dest, void *objectRef, uintptr ptrOrOffset) const override;
|
||||
MiniscriptInstructionOutcome refAttrib(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib) const override;
|
||||
MiniscriptInstructionOutcome refAttribIndexed(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib, const DynamicValue &index) const override;
|
||||
|
||||
static WriteProxyInterface _instance;
|
||||
struct WriteProxyInterface {
|
||||
static MiniscriptInstructionOutcome write(MiniscriptThread *thread, const DynamicValue &dest, void *objectRef, uintptr ptrOrOffset);
|
||||
static MiniscriptInstructionOutcome refAttrib(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib);
|
||||
static MiniscriptInstructionOutcome refAttribIndexed(MiniscriptThread *thread, DynamicValueWriteProxy &proxy, void *objectRef, uintptr ptrOrOffset, const Common::String &attrib, const DynamicValue &index);
|
||||
};
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user