#
# Autogenerated by generate-bytecode-expectations.
#

---
wrap: yes

---
snippet: "
  var obj_a = {val:1};
  var b = 10;
  if (obj_a == null) { b = 20;}
  return b;
"
frame size: 3
parameter count: 1
bytecode array length: 24
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   46 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(1), R(2),
                B(Mov), R(2), R(0),
  /*   63 S> */ B(LdaSmi), U8(10),
                B(Star), R(1),
  /*   67 S> */ B(TestUndetectable), R(0),
                B(JumpIfFalse), U8(6),
  /*   88 S> */ B(LdaSmi), U8(20),
                B(Star), R(1),
  /*   97 S> */ B(Ldar), R(1),
  /*  107 S> */ B(Return),
]
constant pool: [
  FIXED_ARRAY_TYPE,
]
handlers: [
]

---
snippet: "
  var obj_a = {val:1};
  var b = 10;
  if (obj_a == undefined) { b = 20;}
  return b;
"
frame size: 3
parameter count: 1
bytecode array length: 24
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   46 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(1), R(2),
                B(Mov), R(2), R(0),
  /*   63 S> */ B(LdaSmi), U8(10),
                B(Star), R(1),
  /*   67 S> */ B(TestUndetectable), R(0),
                B(JumpIfFalse), U8(6),
  /*   93 S> */ B(LdaSmi), U8(20),
                B(Star), R(1),
  /*  102 S> */ B(Ldar), R(1),
  /*  112 S> */ B(Return),
]
constant pool: [
  FIXED_ARRAY_TYPE,
]
handlers: [
]

---
snippet: "
  var obj_a = {val:1};
  var b = 10;
  if (obj_a != null) { b = 20;}
  return b;
"
frame size: 3
parameter count: 1
bytecode array length: 24
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   46 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(1), R(2),
                B(Mov), R(2), R(0),
  /*   63 S> */ B(LdaSmi), U8(10),
                B(Star), R(1),
  /*   67 S> */ B(TestUndetectable), R(0),
                B(JumpIfTrue), U8(6),
  /*   88 S> */ B(LdaSmi), U8(20),
                B(Star), R(1),
  /*   97 S> */ B(Ldar), R(1),
  /*  107 S> */ B(Return),
]
constant pool: [
  FIXED_ARRAY_TYPE,
]
handlers: [
]

---
snippet: "
  var obj_a = {val:1};
  var b = 10;
  if (obj_a != undefined) { b = 20;}
  return b;
"
frame size: 3
parameter count: 1
bytecode array length: 24
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   46 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(1), R(2),
                B(Mov), R(2), R(0),
  /*   63 S> */ B(LdaSmi), U8(10),
                B(Star), R(1),
  /*   67 S> */ B(TestUndetectable), R(0),
                B(JumpIfTrue), U8(6),
  /*   93 S> */ B(LdaSmi), U8(20),
                B(Star), R(1),
  /*  102 S> */ B(Ldar), R(1),
  /*  112 S> */ B(Return),
]
constant pool: [
  FIXED_ARRAY_TYPE,
]
handlers: [
]

---
snippet: "
  var obj_a = {val:1};
  var b = 10;
  if (obj_a === null) { b = 20;}
  return b;
"
frame size: 3
parameter count: 1
bytecode array length: 24
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   46 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(1), R(2),
                B(Mov), R(2), R(0),
  /*   63 S> */ B(LdaSmi), U8(10),
                B(Star), R(1),
  /*   67 S> */ B(TestNull), R(0),
                B(JumpIfFalse), U8(6),
  /*   89 S> */ B(LdaSmi), U8(20),
                B(Star), R(1),
  /*   98 S> */ B(Ldar), R(1),
  /*  108 S> */ B(Return),
]
constant pool: [
  FIXED_ARRAY_TYPE,
]
handlers: [
]

---
snippet: "
  var obj_a = {val:1};
  var b = 10;
  if (obj_a === undefined) { b = 20;}
  return b;
"
frame size: 3
parameter count: 1
bytecode array length: 24
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   46 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(1), R(2),
                B(Mov), R(2), R(0),
  /*   63 S> */ B(LdaSmi), U8(10),
                B(Star), R(1),
  /*   67 S> */ B(TestUndefined), R(0),
                B(JumpIfFalse), U8(6),
  /*   94 S> */ B(LdaSmi), U8(20),
                B(Star), R(1),
  /*  103 S> */ B(Ldar), R(1),
  /*  113 S> */ B(Return),
]
constant pool: [
  FIXED_ARRAY_TYPE,
]
handlers: [
]

---
snippet: "
  var obj_a = {val:1};
  var b = 10;
  if (obj_a !== null) { b = 20;}
  return b;
"
frame size: 3
parameter count: 1
bytecode array length: 24
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   46 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(1), R(2),
                B(Mov), R(2), R(0),
  /*   63 S> */ B(LdaSmi), U8(10),
                B(Star), R(1),
  /*   67 S> */ B(TestNull), R(0),
                B(JumpIfTrue), U8(6),
  /*   89 S> */ B(LdaSmi), U8(20),
                B(Star), R(1),
  /*   98 S> */ B(Ldar), R(1),
  /*  108 S> */ B(Return),
]
constant pool: [
  FIXED_ARRAY_TYPE,
]
handlers: [
]

---
snippet: "
  var obj_a = {val:1};
  var b = 10;
  if (obj_a !== undefined) { b = 20;}
  return b;
"
frame size: 3
parameter count: 1
bytecode array length: 24
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   46 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(1), R(2),
                B(Mov), R(2), R(0),
  /*   63 S> */ B(LdaSmi), U8(10),
                B(Star), R(1),
  /*   67 S> */ B(TestUndefined), R(0),
                B(JumpIfTrue), U8(6),
  /*   94 S> */ B(LdaSmi), U8(20),
                B(Star), R(1),
  /*  103 S> */ B(Ldar), R(1),
  /*  113 S> */ B(Return),
]
constant pool: [
  FIXED_ARRAY_TYPE,
]
handlers: [
]

