|
|
|
@ -6,11 +6,11 @@
|
|
|
|
|
#include "context.hpp"
|
|
|
|
|
|
|
|
|
|
namespace Interpreter
|
|
|
|
|
{
|
|
|
|
|
{
|
|
|
|
|
class OpStoreLocalShort : public Opcode0
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtual void execute (Runtime& runtime)
|
|
|
|
|
{
|
|
|
|
|
Type_Integer data = runtime[0].mInteger;
|
|
|
|
@ -20,13 +20,13 @@ namespace Interpreter
|
|
|
|
|
|
|
|
|
|
runtime.pop();
|
|
|
|
|
runtime.pop();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class OpStoreLocalLong : public Opcode0
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtual void execute (Runtime& runtime)
|
|
|
|
|
{
|
|
|
|
|
Type_Integer data = runtime[0].mInteger;
|
|
|
|
@ -36,13 +36,13 @@ namespace Interpreter
|
|
|
|
|
|
|
|
|
|
runtime.pop();
|
|
|
|
|
runtime.pop();
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class OpStoreLocalFloat : public Opcode0
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtual void execute (Runtime& runtime)
|
|
|
|
|
{
|
|
|
|
|
Type_Float data = runtime[0].mFloat;
|
|
|
|
@ -52,71 +52,71 @@ namespace Interpreter
|
|
|
|
|
|
|
|
|
|
runtime.pop();
|
|
|
|
|
runtime.pop();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class OpFetchIntLiteral : public Opcode0
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtual void execute (Runtime& runtime)
|
|
|
|
|
{
|
|
|
|
|
Type_Integer intValue = runtime.getIntegerLiteral (runtime[0].mInteger);
|
|
|
|
|
runtime[0].mInteger = intValue;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class OpFetchFloatLiteral : public Opcode0
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtual void execute (Runtime& runtime)
|
|
|
|
|
{
|
|
|
|
|
Type_Float floatValue = runtime.getFloatLiteral (runtime[0].mInteger);
|
|
|
|
|
runtime[0].mFloat = floatValue;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class OpFetchLocalShort : public Opcode0
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtual void execute (Runtime& runtime)
|
|
|
|
|
{
|
|
|
|
|
int index = runtime[0].mInteger;
|
|
|
|
|
int value = runtime.getContext().getLocalShort (index);
|
|
|
|
|
runtime[0].mInteger = value;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class OpFetchLocalLong : public Opcode0
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtual void execute (Runtime& runtime)
|
|
|
|
|
{
|
|
|
|
|
int index = runtime[0].mInteger;
|
|
|
|
|
int index = runtime[0].mInteger;
|
|
|
|
|
int value = runtime.getContext().getLocalLong (index);
|
|
|
|
|
runtime[0].mInteger = value;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class OpFetchLocalFloat : public Opcode0
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtual void execute (Runtime& runtime)
|
|
|
|
|
{
|
|
|
|
|
int index = runtime[0].mInteger;
|
|
|
|
|
float value = runtime.getContext().getLocalFloat (index);
|
|
|
|
|
runtime[0].mFloat = value;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class OpStoreGlobalShort : public Opcode0
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtual void execute (Runtime& runtime)
|
|
|
|
|
{
|
|
|
|
|
Type_Integer data = runtime[0].mInteger;
|
|
|
|
@ -128,13 +128,13 @@ namespace Interpreter
|
|
|
|
|
|
|
|
|
|
runtime.pop();
|
|
|
|
|
runtime.pop();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class OpStoreGlobalLong : public Opcode0
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtual void execute (Runtime& runtime)
|
|
|
|
|
{
|
|
|
|
|
Type_Integer data = runtime[0].mInteger;
|
|
|
|
@ -146,13 +146,13 @@ namespace Interpreter
|
|
|
|
|
|
|
|
|
|
runtime.pop();
|
|
|
|
|
runtime.pop();
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class OpStoreGlobalFloat : public Opcode0
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtual void execute (Runtime& runtime)
|
|
|
|
|
{
|
|
|
|
|
Type_Float data = runtime[0].mFloat;
|
|
|
|
@ -164,48 +164,161 @@ namespace Interpreter
|
|
|
|
|
|
|
|
|
|
runtime.pop();
|
|
|
|
|
runtime.pop();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class OpFetchGlobalShort : public Opcode0
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtual void execute (Runtime& runtime)
|
|
|
|
|
{
|
|
|
|
|
int index = runtime[0].mInteger;
|
|
|
|
|
int index = runtime[0].mInteger;
|
|
|
|
|
std::string name = runtime.getStringLiteral (index);
|
|
|
|
|
Type_Integer value = runtime.getContext().getGlobalShort (name);
|
|
|
|
|
runtime[0].mInteger = value;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class OpFetchGlobalLong : public Opcode0
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtual void execute (Runtime& runtime)
|
|
|
|
|
{
|
|
|
|
|
int index = runtime[0].mInteger;
|
|
|
|
|
int index = runtime[0].mInteger;
|
|
|
|
|
std::string name = runtime.getStringLiteral (index);
|
|
|
|
|
Type_Integer value = runtime.getContext().getGlobalLong (name);
|
|
|
|
|
runtime[0].mInteger = value;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class OpFetchGlobalFloat : public Opcode0
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtual void execute (Runtime& runtime)
|
|
|
|
|
{
|
|
|
|
|
int index = runtime[0].mInteger;
|
|
|
|
|
std::string name = runtime.getStringLiteral (index);
|
|
|
|
|
Type_Float value = runtime.getContext().getGlobalFloat (name);
|
|
|
|
|
runtime[0].mFloat = value;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class OpStoreMemberShort : public Opcode0
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
virtual void execute (Runtime& runtime)
|
|
|
|
|
{
|
|
|
|
|
Type_Integer data = runtime[0].mInteger;
|
|
|
|
|
Type_Integer index = runtime[1].mInteger;
|
|
|
|
|
std::string id = runtime.getStringLiteral (index);
|
|
|
|
|
index = runtime[2].mInteger;
|
|
|
|
|
std::string variable = runtime.getStringLiteral (index);
|
|
|
|
|
|
|
|
|
|
runtime.getContext().setMemberShort (id, variable, data);
|
|
|
|
|
|
|
|
|
|
runtime.pop();
|
|
|
|
|
runtime.pop();
|
|
|
|
|
runtime.pop();
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class OpStoreMemberLong : public Opcode0
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
virtual void execute (Runtime& runtime)
|
|
|
|
|
{
|
|
|
|
|
Type_Integer data = runtime[0].mInteger;
|
|
|
|
|
Type_Integer index = runtime[1].mInteger;
|
|
|
|
|
std::string id = runtime.getStringLiteral (index);
|
|
|
|
|
index = runtime[2].mInteger;
|
|
|
|
|
std::string variable = runtime.getStringLiteral (index);
|
|
|
|
|
|
|
|
|
|
runtime.getContext().setMemberLong (id, variable, data);
|
|
|
|
|
|
|
|
|
|
runtime.pop();
|
|
|
|
|
runtime.pop();
|
|
|
|
|
runtime.pop();
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class OpStoreMemberFloat : public Opcode0
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
virtual void execute (Runtime& runtime)
|
|
|
|
|
{
|
|
|
|
|
Type_Integer index = runtime[0].mInteger;
|
|
|
|
|
std::string id = runtime.getStringLiteral (index);
|
|
|
|
|
Type_Float data = runtime[1].mFloat;
|
|
|
|
|
index = runtime[2].mInteger;
|
|
|
|
|
std::string variable = runtime.getStringLiteral (index);
|
|
|
|
|
|
|
|
|
|
runtime.getContext().setMemberFloat (id, variable, data);
|
|
|
|
|
|
|
|
|
|
runtime.pop();
|
|
|
|
|
runtime.pop();
|
|
|
|
|
runtime.pop();
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class OpFetchMemberShort : public Opcode0
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
virtual void execute (Runtime& runtime)
|
|
|
|
|
{
|
|
|
|
|
Type_Integer index = runtime[0].mInteger;
|
|
|
|
|
std::string id = runtime.getStringLiteral (index);
|
|
|
|
|
index = runtime[1].mInteger;
|
|
|
|
|
std::string variable = runtime.getStringLiteral (index);
|
|
|
|
|
runtime.pop();
|
|
|
|
|
|
|
|
|
|
index = runtime[0].mInteger;
|
|
|
|
|
int value = runtime.getContext().getMemberShort (id, variable);
|
|
|
|
|
runtime[0].mInteger = value;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class OpFetchMemberLong : public Opcode0
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
virtual void execute (Runtime& runtime)
|
|
|
|
|
{
|
|
|
|
|
Type_Integer index = runtime[0].mInteger;
|
|
|
|
|
std::string id = runtime.getStringLiteral (index);
|
|
|
|
|
index = runtime[1].mInteger;
|
|
|
|
|
std::string variable = runtime.getStringLiteral (index);
|
|
|
|
|
runtime.pop();
|
|
|
|
|
|
|
|
|
|
index = runtime[0].mInteger;
|
|
|
|
|
int value = runtime.getContext().getMemberLong (id, variable);
|
|
|
|
|
runtime[0].mInteger = value;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class OpFetchMemberFloat : public Opcode0
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
virtual void execute (Runtime& runtime)
|
|
|
|
|
{
|
|
|
|
|
Type_Integer index = runtime[0].mInteger;
|
|
|
|
|
std::string id = runtime.getStringLiteral (index);
|
|
|
|
|
index = runtime[1].mInteger;
|
|
|
|
|
std::string variable = runtime.getStringLiteral (index);
|
|
|
|
|
runtime.pop();
|
|
|
|
|
|
|
|
|
|
index = runtime[0].mInteger;
|
|
|
|
|
float value = runtime.getContext().getMemberFloat (id, variable);
|
|
|
|
|
runtime[0].mFloat = value;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|