static v8::Handle<v8::Value> insertItemBeforeCallback(const v8::Arguments& args) { INC_STATS("DOM.SVGPointList.insertItemBefore"); SVGPointList* imp = V8SVGPointList::toNative(args.Holder()); ExceptionCode ec = 0; { bool itemOk; FloatPoint item = V8SVGPODTypeUtil::toSVGPODType<FloatPoint>(&V8SVGPoint::info, args[0], itemOk); if (UNLIKELY(!itemOk)) { ec = TYPE_MISMATCH_ERR; goto fail; } EXCEPTION_BLOCK(unsigned, index, toUInt32(args[1])); SVGList<RefPtr<SVGPODListItem<FloatPoint> > >* listImp = imp; RefPtr<SVGPODListItem<FloatPoint> > result = listImp->insertItemBefore(SVGPODListItem<FloatPoint>::copy(item), index, ec); if (UNLIKELY(ec)) goto fail; RefPtr<V8SVGPODTypeWrapper<FloatPoint> > wrapper = V8SVGPODTypeWrapperCreatorForList<FloatPoint>::create(result, imp->associatedAttributeName()); SVGElement* context = V8Proxy::svgContext(imp); V8Proxy::setSVGContext(wrapper.get(), context); context->svgAttributeChanged(imp->associatedAttributeName()); return toV8(wrapper.release()); } fail: V8Proxy::setDOMException(ec); return v8::Handle<v8::Value>(); }
JSValue* JSSVGTransformList::insertItemBefore(ExecState* exec, const List& args) { ExceptionCode ec = 0; SVGTransform newItem = toSVGTransform(args[0]); bool indexOk; unsigned index = args[1]->toInt32(exec, indexOk); if (!indexOk) { setDOMException(exec, DOMException::TYPE_MISMATCH_ERR); return jsUndefined(); } SVGTransformList* imp = static_cast<SVGTransformList*>(impl()); SVGList<RefPtr<SVGPODListItem<SVGTransform> > >* listImp = imp; SVGPODListItem<SVGTransform>* listItem = listImp->insertItemBefore(SVGPODListItem<SVGTransform>::copy(newItem), index, ec).get(); JSSVGPODTypeWrapperCreatorForList<SVGTransform>* obj = new JSSVGPODTypeWrapperCreatorForList<SVGTransform>(listItem, imp->associatedAttributeName()); KJS::JSValue* result = toJS(exec, obj, m_context.get()); setDOMException(exec, ec); m_context->svgAttributeChanged(imp->associatedAttributeName()); return result; }