зеркало из https://github.com/mozilla/pjs.git
LoadString now has JSString* as second operand
This commit is contained in:
Родитель
9acc5cacea
Коммит
2a42ae2d9b
|
@ -149,7 +149,7 @@ namespace ICG {
|
||||||
Register ICodeGenerator::loadString(String &value)
|
Register ICodeGenerator::loadString(String &value)
|
||||||
{
|
{
|
||||||
Register dest = getRegister();
|
Register dest = getRegister();
|
||||||
LoadString *instr = new LoadString(dest, &value);
|
LoadString *instr = new LoadString(dest, new JSString(value));
|
||||||
iCode->push_back(instr);
|
iCode->push_back(instr);
|
||||||
return dest;
|
return dest;
|
||||||
}
|
}
|
||||||
|
|
|
@ -303,7 +303,7 @@ JSValue Context::interpret(ICodeModule* iCode, const JSValues& args)
|
||||||
case LOAD_STRING:
|
case LOAD_STRING:
|
||||||
{
|
{
|
||||||
LoadString* ls = static_cast<LoadString*>(instruction);
|
LoadString* ls = static_cast<LoadString*>(instruction);
|
||||||
(*registers)[dst(ls)] = JSValue(new JSString(src1(ls)));
|
(*registers)[dst(ls)] = JSValue(src1(ls));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case BRANCH:
|
case BRANCH:
|
||||||
|
|
|
@ -89,7 +89,7 @@ $ops{"LOAD_STRING"} =
|
||||||
{
|
{
|
||||||
super => "Instruction_2",
|
super => "Instruction_2",
|
||||||
rem => "dest, immediate value (string)",
|
rem => "dest, immediate value (string)",
|
||||||
params => [ ("Register", "String" ) ]
|
params => [ ("Register", "JSString*" ) ]
|
||||||
};
|
};
|
||||||
$ops{"LOAD_NAME"} =
|
$ops{"LOAD_NAME"} =
|
||||||
{
|
{
|
||||||
|
@ -415,7 +415,7 @@ sub get_print_body {
|
||||||
push (@oplist, "\"R\" << mOp$op");
|
push (@oplist, "\"R\" << mOp$op");
|
||||||
} elsif ($type eq "Label*") {
|
} elsif ($type eq "Label*") {
|
||||||
push (@oplist, "\"Offset \" << mOp$op->mOffset");
|
push (@oplist, "\"Offset \" << mOp$op->mOffset");
|
||||||
} elsif ($type =~ /StringAtom/) {
|
} elsif ($type =~ /String/) {
|
||||||
push (@oplist, "\"'\" << *mOp$op << \"'\"");
|
push (@oplist, "\"'\" << *mOp$op << \"'\"");
|
||||||
} else {
|
} else {
|
||||||
push (@oplist, "mOp$op");
|
push (@oplist, "mOp$op");
|
||||||
|
|
|
@ -43,6 +43,7 @@ namespace JavaScript {
|
||||||
namespace VM {
|
namespace VM {
|
||||||
|
|
||||||
using JSTypes::JSValues;
|
using JSTypes::JSValues;
|
||||||
|
using JSTypes::JSString;
|
||||||
|
|
||||||
enum ICodeOp {
|
enum ICodeOp {
|
||||||
ADD, /* dest, source1, source2 */
|
ADD, /* dest, source1, source2 */
|
||||||
|
@ -637,11 +638,11 @@ namespace VM {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class LoadString : public Instruction_2<Register, String *> {
|
class LoadString : public Instruction_2<Register, JSString*> {
|
||||||
public:
|
public:
|
||||||
/* dest, immediate value (string) */
|
/* dest, immediate value (string) */
|
||||||
LoadString (Register aOp1, String *aOp2) :
|
LoadString (Register aOp1, JSString* aOp2) :
|
||||||
Instruction_2<Register, String *>
|
Instruction_2<Register, JSString*>
|
||||||
(LOAD_STRING, aOp1, aOp2) {};
|
(LOAD_STRING, aOp1, aOp2) {};
|
||||||
virtual Formatter& print(Formatter& f) {
|
virtual Formatter& print(Formatter& f) {
|
||||||
f << opcodeNames[LOAD_STRING] << "\t" << "R" << mOp1 << ", " << "'" << *mOp2 << "'";
|
f << opcodeNames[LOAD_STRING] << "\t" << "R" << mOp1 << ", " << "'" << *mOp2 << "'";
|
||||||
|
|
|
@ -149,7 +149,7 @@ namespace ICG {
|
||||||
Register ICodeGenerator::loadString(String &value)
|
Register ICodeGenerator::loadString(String &value)
|
||||||
{
|
{
|
||||||
Register dest = getRegister();
|
Register dest = getRegister();
|
||||||
LoadString *instr = new LoadString(dest, &value);
|
LoadString *instr = new LoadString(dest, new JSString(value));
|
||||||
iCode->push_back(instr);
|
iCode->push_back(instr);
|
||||||
return dest;
|
return dest;
|
||||||
}
|
}
|
||||||
|
|
|
@ -303,7 +303,7 @@ JSValue Context::interpret(ICodeModule* iCode, const JSValues& args)
|
||||||
case LOAD_STRING:
|
case LOAD_STRING:
|
||||||
{
|
{
|
||||||
LoadString* ls = static_cast<LoadString*>(instruction);
|
LoadString* ls = static_cast<LoadString*>(instruction);
|
||||||
(*registers)[dst(ls)] = JSValue(new JSString(src1(ls)));
|
(*registers)[dst(ls)] = JSValue(src1(ls));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case BRANCH:
|
case BRANCH:
|
||||||
|
|
|
@ -43,6 +43,7 @@ namespace JavaScript {
|
||||||
namespace VM {
|
namespace VM {
|
||||||
|
|
||||||
using JSTypes::JSValues;
|
using JSTypes::JSValues;
|
||||||
|
using JSTypes::JSString;
|
||||||
|
|
||||||
enum ICodeOp {
|
enum ICodeOp {
|
||||||
ADD, /* dest, source1, source2 */
|
ADD, /* dest, source1, source2 */
|
||||||
|
@ -637,11 +638,11 @@ namespace VM {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class LoadString : public Instruction_2<Register, String *> {
|
class LoadString : public Instruction_2<Register, JSString*> {
|
||||||
public:
|
public:
|
||||||
/* dest, immediate value (string) */
|
/* dest, immediate value (string) */
|
||||||
LoadString (Register aOp1, String *aOp2) :
|
LoadString (Register aOp1, JSString* aOp2) :
|
||||||
Instruction_2<Register, String *>
|
Instruction_2<Register, JSString*>
|
||||||
(LOAD_STRING, aOp1, aOp2) {};
|
(LOAD_STRING, aOp1, aOp2) {};
|
||||||
virtual Formatter& print(Formatter& f) {
|
virtual Formatter& print(Formatter& f) {
|
||||||
f << opcodeNames[LOAD_STRING] << "\t" << "R" << mOp1 << ", " << "'" << *mOp2 << "'";
|
f << opcodeNames[LOAD_STRING] << "\t" << "R" << mOp1 << ", " << "'" << *mOp2 << "'";
|
||||||
|
|
|
@ -89,7 +89,7 @@ $ops{"LOAD_STRING"} =
|
||||||
{
|
{
|
||||||
super => "Instruction_2",
|
super => "Instruction_2",
|
||||||
rem => "dest, immediate value (string)",
|
rem => "dest, immediate value (string)",
|
||||||
params => [ ("Register", "String" ) ]
|
params => [ ("Register", "JSString*" ) ]
|
||||||
};
|
};
|
||||||
$ops{"LOAD_NAME"} =
|
$ops{"LOAD_NAME"} =
|
||||||
{
|
{
|
||||||
|
@ -415,7 +415,7 @@ sub get_print_body {
|
||||||
push (@oplist, "\"R\" << mOp$op");
|
push (@oplist, "\"R\" << mOp$op");
|
||||||
} elsif ($type eq "Label*") {
|
} elsif ($type eq "Label*") {
|
||||||
push (@oplist, "\"Offset \" << mOp$op->mOffset");
|
push (@oplist, "\"Offset \" << mOp$op->mOffset");
|
||||||
} elsif ($type =~ /StringAtom/) {
|
} elsif ($type =~ /String/) {
|
||||||
push (@oplist, "\"'\" << *mOp$op << \"'\"");
|
push (@oplist, "\"'\" << *mOp$op << \"'\"");
|
||||||
} else {
|
} else {
|
||||||
push (@oplist, "mOp$op");
|
push (@oplist, "mOp$op");
|
||||||
|
|
Загрузка…
Ссылка в новой задаче