Пример #1
0
JSValue JSHTMLOptionsCollection::add(ExecState* exec)
{
    HTMLOptionsCollection* imp = static_cast<HTMLOptionsCollection*>(impl());
    HTMLOptionElement* option = toHTMLOptionElement(exec->argument(0));
    ExceptionCode ec = 0;
    if (exec->argumentCount() < 2)
        imp->add(option, ec);
    else {
        bool ok;
        int index = finiteInt32Value(exec->argument(1), exec, ok);
        if (exec->hadException())
            return jsUndefined();
        if (!ok)
            ec = TYPE_MISMATCH_ERR;
        else
            imp->add(option, index, ec);
    }
    setDOMException(exec, ec);
    return jsUndefined();
}
JSValue JSSQLResultSetRowList::item(ExecState* exec)
{
    bool indexOk;
    int index = finiteInt32Value(exec->argument(0), exec, indexOk);
    if (!indexOk) {
        setDOMException(exec, TYPE_MISMATCH_ERR);
        return jsUndefined();
    }
    if (index < 0 || (unsigned)index >= m_impl->length()) {
        setDOMException(exec, INDEX_SIZE_ERR);
        return jsUndefined();
    }

    JSObject* object = constructEmptyObject(exec);

    unsigned numColumns = m_impl->columnNames().size();
    unsigned valuesIndex = index * numColumns;
    for (unsigned i = 0; i < numColumns; i++) {
        const SQLValue& value = m_impl->values()[valuesIndex + i];
        JSValue jsValue;

        switch (value.type()) {
            case SQLValue::StringValue:
              jsValue = jsString(exec, value.string());
              break;
          case SQLValue::NullValue:
              jsValue = jsNull();
              break;
          case SQLValue::NumberValue:
              jsValue = jsNumber(value.number());
              break;
          default:
              ASSERT_NOT_REACHED();
        }

        object->putDirect(exec->globalData(), Identifier(exec, stringToUString(m_impl->columnNames()[i])), jsValue, DontDelete | ReadOnly);
    }

    return object;
}