diff options
Diffstat (limited to 'src/qml/compiler')
-rw-r--r-- | src/qml/compiler/qv4instr_moth_p.h | 11 | ||||
-rw-r--r-- | src/qml/compiler/qv4isel_moth.cpp | 9 |
2 files changed, 11 insertions, 9 deletions
diff --git a/src/qml/compiler/qv4instr_moth_p.h b/src/qml/compiler/qv4instr_moth_p.h index f9a46a06d7..795576b2a9 100644 --- a/src/qml/compiler/qv4instr_moth_p.h +++ b/src/qml/compiler/qv4instr_moth_p.h @@ -125,29 +125,28 @@ namespace Moth { struct Param { enum { - ValueType = 0, + ConstantType = 0, ArgumentType = 1, LocalType = 2, TempType = 3, ScopedLocalType = 4 }; - QV4::Primitive value; unsigned type : 3; unsigned scope : 29; unsigned index; - bool isValue() const { return type == ValueType; } + bool isConstant() const { return type == ConstantType; } bool isArgument() const { return type == ArgumentType; } bool isLocal() const { return type == LocalType; } bool isTemp() const { return type == TempType; } bool isScopedLocal() const { return type == ScopedLocalType; } - static Param createValue(const QV4::Primitive &v) + static Param createConstant(int index) { Param p; - p.type = ValueType; + p.type = ConstantType; p.scope = 0; - p.value = v; + p.index = index; return p; } diff --git a/src/qml/compiler/qv4isel_moth.cpp b/src/qml/compiler/qv4isel_moth.cpp index 835f0a8a23..295227cb97 100644 --- a/src/qml/compiler/qv4isel_moth.cpp +++ b/src/qml/compiler/qv4isel_moth.cpp @@ -774,7 +774,8 @@ void InstructionSelection::callBuiltinDeleteName(const QString &name, V4IR::Temp void InstructionSelection::callBuiltinDeleteValue(V4IR::Temp *result) { Instruction::LoadValue load; - load.value = Param::createValue(QV4::Primitive::fromBoolean(false)); + int idx = jsUnitGenerator()->registerConstant(QV4::Encode(false)); + load.value = Param::createConstant(idx); load.result = getResultParam(result); addInstruction(load); } @@ -797,7 +798,8 @@ void InstructionSelection::callBuiltinReThrow() _patches[_block->catchBlock].append(loc); } else { Instruction::Ret ret; - ret.result = Param::createValue(QV4::Primitive::undefinedValue()); + int idx = jsUnitGenerator()->registerConstant(QV4::Encode::undefined()); + ret.result = Param::createConstant(idx); addInstruction(ret); } } @@ -988,7 +990,8 @@ Param InstructionSelection::getParam(V4IR::Expr *e) { assert(e); if (V4IR::Const *c = e->asConst()) { - return Param::createValue(convertToValue(c)); + int idx = jsUnitGenerator()->registerConstant(convertToValue(c).asReturnedValue()); + return Param::createConstant(idx); } else if (V4IR::Temp *t = e->asTemp()) { switch (t->kind) { case V4IR::Temp::Formal: |