154#if ENABLE(ES6_CLASS_SYNTAX)
155
156// ------------------------------ SuperNode -------------------------------------
157
158RegisterID* SuperNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst)
159{
160 if (dst == generator.ignoredResult())
161 return 0;
162
163 RegisterID callee;
164 callee.setIndex(JSStack::Callee);
165
166 RefPtr<RegisterID> homeObject = generator.emitGetById(generator.newTemporary(), &callee, generator.propertyNames().homeObjectPrivateName);
167 RefPtr<RegisterID> protoParent = generator.emitGetById(generator.newTemporary(), homeObject.get(), generator.propertyNames().underscoreProto);
168 return generator.emitGetById(generator.finalDestination(dst), protoParent.get(), generator.propertyNames().constructor);
169}
170
171static RegisterID* emitSuperBaseForCallee(BytecodeGenerator& generator)
172{
173 RegisterID callee;
174 callee.setIndex(JSStack::Callee);
175
176 RefPtr<RegisterID> homeObject = generator.emitGetById(generator.newTemporary(), &callee, generator.propertyNames().homeObjectPrivateName);
177 return generator.emitGetById(generator.newTemporary(), homeObject.get(), generator.propertyNames().underscoreProto);
178}
179
180// ------------------------------ SuperBracketAccessorNode -------------------------------------
181
182RegisterID* SuperBracketAccessorNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst)
183{
184 UNUSED_PARAM(m_subscript);
185 if (dst == generator.ignoredResult())
186 return 0;
187
188 RegisterID callee;
189 callee.setIndex(JSStack::Callee);
190
191
192
193 return generator.moveToDestinationIfNeeded(dst, &callee /* generator.scopeRegister() */);
194}
195
196// ------------------------------ SuperDotAccessorNode -------------------------------------
197
198RegisterID* SuperDotAccessorNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst)
199{
200 UNUSED_PARAM(m_ident);
201 if (dst == generator.ignoredResult())
202 return 0;
203
204 RegisterID callee;
205 callee.setIndex(JSStack::Callee);
206
207 RefPtr<RegisterID> homeObject = generator.emitGetById(generator.newTemporary(), &callee, generator.propertyNames().homeObjectPrivateName);
208 RefPtr<RegisterID> baseValue = generator.emitGetById(generator.newTemporary(), homeObject.get(), generator.propertyNames().underscoreProto);
209 return generator.emitGetById(generator.tempDestination(dst), baseValue.get(), m_ident);
210}
211
212#endif
213