| Index: src/interpreter/bytecode-array-builder.cc
|
| diff --git a/src/interpreter/bytecode-array-builder.cc b/src/interpreter/bytecode-array-builder.cc
|
| index 40b02dd59d849fa1955fa6e8e45214155a6d46c7..cf8918abb93d757bc279b420bb4baef093a1213c 100644
|
| --- a/src/interpreter/bytecode-array-builder.cc
|
| +++ b/src/interpreter/bytecode-array-builder.cc
|
| @@ -128,7 +128,12 @@ void BytecodeArrayBuilder::Output(Bytecode bytecode) {
|
|
|
|
|
| BytecodeArrayBuilder& BytecodeArrayBuilder::BinaryOperation(Token::Value op,
|
| - Register reg) {
|
| + Register reg,
|
| + Strength strength) {
|
| + if (is_strong(strength)) {
|
| + UNIMPLEMENTED();
|
| + }
|
| +
|
| Output(BytecodeForBinaryOperation(op), reg.ToOperand());
|
| return *this;
|
| }
|
| @@ -147,8 +152,8 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::TypeOf() {
|
|
|
|
|
| BytecodeArrayBuilder& BytecodeArrayBuilder::CompareOperation(
|
| - Token::Value op, Register reg, LanguageMode language_mode) {
|
| - if (!is_sloppy(language_mode)) {
|
| + Token::Value op, Register reg, Strength strength) {
|
| + if (is_strong(strength)) {
|
| UNIMPLEMENTED();
|
| }
|
|
|
| @@ -238,13 +243,9 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::LoadGlobal(int slot_index) {
|
|
|
| BytecodeArrayBuilder& BytecodeArrayBuilder::LoadNamedProperty(
|
| Register object, int feedback_slot, LanguageMode language_mode) {
|
| - if (!is_sloppy(language_mode)) {
|
| - UNIMPLEMENTED();
|
| - }
|
| -
|
| + Bytecode bytecode = BytecodeForLoadIC(language_mode);
|
| if (FitsInIdx8Operand(feedback_slot)) {
|
| - Output(Bytecode::kLoadIC, object.ToOperand(),
|
| - static_cast<uint8_t>(feedback_slot));
|
| + Output(bytecode, object.ToOperand(), static_cast<uint8_t>(feedback_slot));
|
| } else {
|
| UNIMPLEMENTED();
|
| }
|
| @@ -254,13 +255,9 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::LoadNamedProperty(
|
|
|
| BytecodeArrayBuilder& BytecodeArrayBuilder::LoadKeyedProperty(
|
| Register object, int feedback_slot, LanguageMode language_mode) {
|
| - if (!is_sloppy(language_mode)) {
|
| - UNIMPLEMENTED();
|
| - }
|
| -
|
| + Bytecode bytecode = BytecodeForKeyedLoadIC(language_mode);
|
| if (FitsInIdx8Operand(feedback_slot)) {
|
| - Output(Bytecode::kKeyedLoadIC, object.ToOperand(),
|
| - static_cast<uint8_t>(feedback_slot));
|
| + Output(bytecode, object.ToOperand(), static_cast<uint8_t>(feedback_slot));
|
| } else {
|
| UNIMPLEMENTED();
|
| }
|
| @@ -271,12 +268,9 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::LoadKeyedProperty(
|
| BytecodeArrayBuilder& BytecodeArrayBuilder::StoreNamedProperty(
|
| Register object, Register name, int feedback_slot,
|
| LanguageMode language_mode) {
|
| - if (!is_sloppy(language_mode)) {
|
| - UNIMPLEMENTED();
|
| - }
|
| -
|
| + Bytecode bytecode = BytecodeForStoreIC(language_mode);
|
| if (FitsInIdx8Operand(feedback_slot)) {
|
| - Output(Bytecode::kStoreIC, object.ToOperand(), name.ToOperand(),
|
| + Output(bytecode, object.ToOperand(), name.ToOperand(),
|
| static_cast<uint8_t>(feedback_slot));
|
| } else {
|
| UNIMPLEMENTED();
|
| @@ -288,12 +282,9 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::StoreNamedProperty(
|
| BytecodeArrayBuilder& BytecodeArrayBuilder::StoreKeyedProperty(
|
| Register object, Register key, int feedback_slot,
|
| LanguageMode language_mode) {
|
| - if (!is_sloppy(language_mode)) {
|
| - UNIMPLEMENTED();
|
| - }
|
| -
|
| + Bytecode bytecode = BytecodeForKeyedStoreIC(language_mode);
|
| if (FitsInIdx8Operand(feedback_slot)) {
|
| - Output(Bytecode::kKeyedStoreIC, object.ToOperand(), key.ToOperand(),
|
| + Output(bytecode, object.ToOperand(), key.ToOperand(),
|
| static_cast<uint8_t>(feedback_slot));
|
| } else {
|
| UNIMPLEMENTED();
|
| @@ -620,6 +611,72 @@ Bytecode BytecodeArrayBuilder::BytecodeForCompareOperation(Token::Value op) {
|
|
|
|
|
| // static
|
| +Bytecode BytecodeArrayBuilder::BytecodeForLoadIC(LanguageMode language_mode) {
|
| + switch (language_mode) {
|
| + case SLOPPY:
|
| + return Bytecode::kLoadICSloppy;
|
| + case STRICT:
|
| + return Bytecode::kLoadICStrict;
|
| + case STRONG:
|
| + UNIMPLEMENTED();
|
| + default:
|
| + UNREACHABLE();
|
| + }
|
| + return static_cast<Bytecode>(-1);
|
| +}
|
| +
|
| +
|
| +// static
|
| +Bytecode BytecodeArrayBuilder::BytecodeForKeyedLoadIC(
|
| + LanguageMode language_mode) {
|
| + switch (language_mode) {
|
| + case SLOPPY:
|
| + return Bytecode::kKeyedLoadICSloppy;
|
| + case STRICT:
|
| + return Bytecode::kKeyedLoadICStrict;
|
| + case STRONG:
|
| + UNIMPLEMENTED();
|
| + default:
|
| + UNREACHABLE();
|
| + }
|
| + return static_cast<Bytecode>(-1);
|
| +}
|
| +
|
| +
|
| +// static
|
| +Bytecode BytecodeArrayBuilder::BytecodeForStoreIC(LanguageMode language_mode) {
|
| + switch (language_mode) {
|
| + case SLOPPY:
|
| + return Bytecode::kStoreICSloppy;
|
| + case STRICT:
|
| + return Bytecode::kStoreICStrict;
|
| + case STRONG:
|
| + UNIMPLEMENTED();
|
| + default:
|
| + UNREACHABLE();
|
| + }
|
| + return static_cast<Bytecode>(-1);
|
| +}
|
| +
|
| +
|
| +// static
|
| +Bytecode BytecodeArrayBuilder::BytecodeForKeyedStoreIC(
|
| + LanguageMode language_mode) {
|
| + switch (language_mode) {
|
| + case SLOPPY:
|
| + return Bytecode::kKeyedStoreICSloppy;
|
| + case STRICT:
|
| + return Bytecode::kKeyedStoreICStrict;
|
| + case STRONG:
|
| + UNIMPLEMENTED();
|
| + default:
|
| + UNREACHABLE();
|
| + }
|
| + return static_cast<Bytecode>(-1);
|
| +}
|
| +
|
| +
|
| +// static
|
| bool BytecodeArrayBuilder::FitsInIdx8Operand(int value) {
|
| return kMinUInt8 <= value && value <= kMaxUInt8;
|
| }
|
|
|