// ECMA 15.10.4 JSObject* constructRegExp(ExecState* exec, JSGlobalObject* globalObject, const ArgList& args) { JSValue arg0 = args.at(0); JSValue arg1 = args.at(1); if (arg0.inherits(&RegExpObject::s_info)) { if (!arg1.isUndefined()) return throwError(exec, createTypeError(exec, "Cannot supply flags when constructing one RegExp from another.")); return asObject(arg0); } UString pattern = arg0.isUndefined() ? UString("") : arg0.toString(exec); if (exec->hadException()) return 0; RegExpFlags flags = NoFlags; if (!arg1.isUndefined()) { flags = regExpFlags(arg1.toString(exec)); if (exec->hadException()) return 0; if (flags == InvalidFlags) return throwError(exec, createSyntaxError(exec, "Invalid flags supplied to RegExp constructor.")); } RefPtr<RegExp> regExp = exec->globalData().regExpCache()->lookupOrCreate(pattern, flags); if (!regExp->isValid()) return throwError(exec, createSyntaxError(exec, regExp->errorMessage())); return new (exec) RegExpObject(exec->lexicalGlobalObject(), globalObject->regExpStructure(), regExp.release()); }
JSC::JSValue JSAudioNode::connect(JSC::ExecState* exec) { if (exec->argumentCount() < 1) return throwError(exec, createSyntaxError(exec, "Not enough arguments")); unsigned outputIndex = 0; unsigned inputIndex = 0; AudioNode* destinationNode = toAudioNode(exec->argument(0)); if (!destinationNode) return throwError(exec, createSyntaxError(exec, "Invalid destination node")); if (exec->argumentCount() > 1) outputIndex = exec->argument(1).toInt32(exec); if (exec->argumentCount() > 2) inputIndex = exec->argument(2).toInt32(exec); AudioNode* audioNode = static_cast<AudioNode*>(impl()); bool success = audioNode->connect(destinationNode, outputIndex, inputIndex); if (!success) return throwError(exec, createSyntaxError(exec, "Invalid index parameter")); return JSC::jsUndefined(); }
// ECMA 15.10.4 JSObject* constructRegExp(ExecState* exec, JSGlobalObject* globalObject, const ArgList& args, bool callAsConstructor) { JSValue arg0 = args.at(0); JSValue arg1 = args.at(1); if (arg0.inherits(&RegExpObject::s_info)) { if (!arg1.isUndefined()) return throwError(exec, createTypeError(exec, "Cannot supply flags when constructing one RegExp from another.")); // If called as a function, this just returns the first argument (see 15.10.3.1). if (callAsConstructor) { RegExp* regExp = static_cast<RegExpObject*>(asObject(arg0))->regExp(); return RegExpObject::create(exec, globalObject, globalObject->regExpStructure(), regExp); } return asObject(arg0); } UString pattern = arg0.isUndefined() ? UString("") : arg0.toString(exec)->value(exec); if (exec->hadException()) return 0; RegExpFlags flags = NoFlags; if (!arg1.isUndefined()) { flags = regExpFlags(arg1.toString(exec)->value(exec)); if (exec->hadException()) return 0; if (flags == InvalidFlags) return throwError(exec, createSyntaxError(exec, "Invalid flags supplied to RegExp constructor.")); } RegExp* regExp = RegExp::create(exec->globalData(), pattern, flags); if (!regExp->isValid()) return throwError(exec, createSyntaxError(exec, regExp->errorMessage())); return RegExpObject::create(exec, exec->lexicalGlobalObject(), globalObject->regExpStructure(), regExp); }
EncodedJSValue JSC_HOST_CALL JSAudioContextConstructor::constructJSAudioContext(ExecState* exec) { JSAudioContextConstructor* jsConstructor = jsCast<JSAudioContextConstructor*>(exec->callee()); if (!jsConstructor) return throwVMError(exec, createReferenceError(exec, "AudioContext constructor callee is unavailable")); ScriptExecutionContext* scriptExecutionContext = jsConstructor->scriptExecutionContext(); if (!scriptExecutionContext) return throwVMError(exec, createReferenceError(exec, "AudioContext constructor script execution context is unavailable")); if (!scriptExecutionContext->isDocument()) return throwVMError(exec, createReferenceError(exec, "AudioContext constructor called in a script execution context which is not a document")); Document* document = static_cast<Document*>(scriptExecutionContext); RefPtr<AudioContext> audioContext; if (!exec->argumentCount()) { // Constructor for default AudioContext which talks to audio hardware. ExceptionCode ec = 0; audioContext = AudioContext::create(document, ec); if (ec) { setDOMException(exec, ec); return JSValue::encode(JSValue()); } if (!audioContext.get()) return throwVMError(exec, createSyntaxError(exec, "audio resources unavailable for AudioContext construction")); } else { // Constructor for offline (render-target) AudioContext which renders into an AudioBuffer. // new AudioContext(in unsigned long numberOfChannels, in unsigned long numberOfFrames, in float sampleRate); if (exec->argumentCount() < 3) return throwVMError(exec, createNotEnoughArgumentsError(exec)); int32_t numberOfChannels = exec->argument(0).toInt32(exec); int32_t numberOfFrames = exec->argument(1).toInt32(exec); float sampleRate = exec->argument(2).toFloat(exec); if (numberOfChannels <= 0 || numberOfChannels > 10) return throwVMError(exec, createSyntaxError(exec, "Invalid number of channels")); if (numberOfFrames <= 0) return throwVMError(exec, createSyntaxError(exec, "Invalid number of frames")); if (sampleRate <= 0) return throwVMError(exec, createSyntaxError(exec, "Invalid sample rate")); ExceptionCode ec = 0; audioContext = AudioContext::createOfflineContext(document, numberOfChannels, numberOfFrames, sampleRate, ec); if (ec) { setDOMException(exec, ec); return throwVMError(exec, createSyntaxError(exec, "Error creating OfflineAudioContext")); } } if (!audioContext.get()) return throwVMError(exec, createReferenceError(exec, "Error creating AudioContext")); return JSValue::encode(CREATE_DOM_WRAPPER(exec, jsConstructor->globalObject(), AudioContext, audioContext.get())); }
void JSAudioBufferSourceNode::setBuffer(ExecState* exec, JSValue value) { AudioBufferSourceNode* imp = static_cast<AudioBufferSourceNode*>(impl()); AudioBuffer* buffer = toAudioBuffer(value); if (!buffer) { throwError(exec, createSyntaxError(exec, "Value is not of type AudioBuffer")); return; } if (!imp->setBuffer(buffer)) throwError(exec, createSyntaxError(exec, "AudioBuffer unsupported number of channels")); }
EncodedJSValue JSC_HOST_CALL jsDataViewPrototypeFunctionSetFloat64(ExecState* exec) { JSValue thisValue = exec->hostThisValue(); if (!thisValue.inherits(&JSDataView::s_info)) return throwVMTypeError(exec); JSDataView* castedThis = static_cast<JSDataView*>(asObject(thisValue)); ASSERT_GC_OBJECT_INHERITS(castedThis, &JSDataView::s_info); DataView* imp = static_cast<DataView*>(castedThis->impl()); if (exec->argumentCount() < 2) return throwVMError(exec, createSyntaxError(exec, "Not enough arguments")); ExceptionCode ec = 0; unsigned byteOffset(exec->argument(0).toUInt32(exec)); if (exec->hadException()) return JSValue::encode(jsUndefined()); double value(exec->argument(1).toNumber(exec)); if (exec->hadException()) return JSValue::encode(jsUndefined()); int argsCount = exec->argumentCount(); if (argsCount <= 2) { imp->setFloat64(byteOffset, value, ec); setDOMException(exec, ec); return JSValue::encode(jsUndefined()); } bool littleEndian(exec->argument(2).toBoolean(exec)); if (exec->hadException()) return JSValue::encode(jsUndefined()); imp->setFloat64(byteOffset, value, littleEndian, ec); setDOMException(exec, ec); return JSValue::encode(jsUndefined()); }
EncodedJSValue JSC_HOST_CALL jsDatabaseSyncPrototypeFunctionChangeVersion(ExecState* exec) { JSValue thisValue = exec->hostThisValue(); if (!thisValue.inherits(&JSDatabaseSync::s_info)) return throwVMTypeError(exec); JSDatabaseSync* castedThis = static_cast<JSDatabaseSync*>(asObject(thisValue)); ASSERT_GC_OBJECT_INHERITS(castedThis, &JSDatabaseSync::s_info); DatabaseSync* imp = static_cast<DatabaseSync*>(castedThis->impl()); if (exec->argumentCount() < 2) return throwVMError(exec, createSyntaxError(exec, "Not enough arguments")); ExceptionCode ec = 0; const String& oldVersion(ustringToString(exec->argument(0).toString(exec))); if (exec->hadException()) return JSValue::encode(jsUndefined()); const String& newVersion(ustringToString(exec->argument(1).toString(exec))); if (exec->hadException()) return JSValue::encode(jsUndefined()); RefPtr<SQLTransactionSyncCallback> callback; if (exec->argumentCount() > 2 && !exec->argument(2).isNull() && !exec->argument(2).isUndefined()) { if (!exec->argument(2).isObject()) { setDOMException(exec, TYPE_MISMATCH_ERR); return JSValue::encode(jsUndefined()); } callback = JSSQLTransactionSyncCallback::create(asObject(exec->argument(2)), castedThis->globalObject()); } imp->changeVersion(oldVersion, newVersion, callback, ec); setDOMException(exec, ec); return JSValue::encode(jsUndefined()); }
EncodedJSValue JSC_HOST_CALL jsSVGNumberListPrototypeFunctionReplaceItem(ExecState* exec) { JSValue thisValue = exec->hostThisValue(); if (!thisValue.inherits(&JSSVGNumberList::s_info)) return throwVMTypeError(exec); JSSVGNumberList* castedThis = static_cast<JSSVGNumberList*>(asObject(thisValue)); ASSERT_GC_OBJECT_INHERITS(castedThis, &JSSVGNumberList::s_info); SVGListPropertyTearOff<SVGNumberList> * imp = static_cast<SVGListPropertyTearOff<SVGNumberList> *>(castedThis->impl()); if (exec->argumentCount() < 2) return throwVMError(exec, createSyntaxError(exec, "Not enough arguments")); ExceptionCode ec = 0; if (exec->argumentCount() > 0 && !exec->argument(0).isUndefinedOrNull() && !exec->argument(0).inherits(&JSSVGNumber::s_info)) return throwVMTypeError(exec); SVGPropertyTearOff<float>* item(toSVGNumber(exec->argument(0))); if (exec->hadException()) return JSValue::encode(jsUndefined()); unsigned index(exec->argument(1).toUInt32(exec)); if (exec->hadException()) return JSValue::encode(jsUndefined()); JSC::JSValue result = toJS(exec, castedThis->globalObject(), WTF::getPtr(imp->replaceItem(item, index, ec))); setDOMException(exec, ec); return JSValue::encode(result); }
// Custom functions JSValue JSXMLHttpRequest::open(ExecState* exec) { if (exec->argumentCount() < 2) return throwError(exec, createSyntaxError(exec, "Not enough arguments")); const KURL& url = impl()->scriptExecutionContext()->completeURL(ustringToString(exec->argument(1).toString(exec))); String method = ustringToString(exec->argument(0).toString(exec)); ExceptionCode ec = 0; if (exec->argumentCount() >= 3) { bool async = exec->argument(2).toBoolean(exec); if (exec->argumentCount() >= 4 && !exec->argument(3).isUndefined()) { String user = valueToStringWithNullCheck(exec, exec->argument(3)); if (exec->argumentCount() >= 5 && !exec->argument(4).isUndefined()) { String password = valueToStringWithNullCheck(exec, exec->argument(4)); impl()->open(method, url, async, user, password, ec); } else impl()->open(method, url, async, user, ec); } else impl()->open(method, url, async, ec); } else impl()->open(method, url, ec); setDOMException(exec, ec); return jsUndefined(); }
JSValue JSWebSocket::send(ExecState* exec) { if (!exec->argumentCount()) return throwError(exec, createSyntaxError(exec, "Not enough arguments")); JSValue message = exec->argument(0); ExceptionCode ec = 0; bool result; if (message.inherits(&JSArrayBuffer::s_info)) result = impl()->send(toArrayBuffer(message), ec); else if (message.inherits(&JSBlob::s_info)) result = impl()->send(toBlob(message), ec); else { String stringMessage = ustringToString(message.toString(exec)->value(exec)); if (exec->hadException()) return jsUndefined(); result = impl()->send(stringMessage, ec); } if (ec) { setDOMException(exec, ec); return jsUndefined(); } return jsBoolean(result); }
EncodedJSValue JSC_HOST_CALL jsSVGColorPrototypeFunctionSetColor(ExecState* exec) { JSValue thisValue = exec->hostThisValue(); if (!thisValue.inherits(&JSSVGColor::s_info)) return throwVMTypeError(exec); JSSVGColor* castedThis = static_cast<JSSVGColor*>(asObject(thisValue)); ASSERT_GC_OBJECT_INHERITS(castedThis, &JSSVGColor::s_info); SVGColor* imp = static_cast<SVGColor*>(castedThis->impl()); if (exec->argumentCount() < 3) return throwVMError(exec, createSyntaxError(exec, "Not enough arguments")); ExceptionCode ec = 0; unsigned short colorType(exec->argument(0).toUInt32(exec)); if (exec->hadException()) return JSValue::encode(jsUndefined()); const String& rgbColor(ustringToString(exec->argument(1).toString(exec))); if (exec->hadException()) return JSValue::encode(jsUndefined()); const String& iccColor(ustringToString(exec->argument(2).toString(exec))); if (exec->hadException()) return JSValue::encode(jsUndefined()); imp->setColor(colorType, rgbColor, iccColor, ec); setDOMException(exec, ec); return JSValue::encode(jsUndefined()); }
EncodedJSValue JSC_HOST_CALL regExpProtoFuncCompile(ExecState* exec) { JSValue thisValue = exec->hostThisValue(); if (!thisValue.inherits(&RegExpObject::info)) return throwVMTypeError(exec); RefPtr<RegExp> regExp; JSValue arg0 = exec->argument(0); JSValue arg1 = exec->argument(1); if (arg0.inherits(&RegExpObject::info)) { if (!arg1.isUndefined()) return throwVMError(exec, createTypeError(exec, "Cannot supply flags when constructing one RegExp from another.")); regExp = asRegExpObject(arg0)->regExp(); } else { UString pattern = !exec->argumentCount() ? UString("") : arg0.toString(exec); UString flags = arg1.isUndefined() ? UString("") : arg1.toString(exec); regExp = exec->globalData().regExpCache()->lookupOrCreate(pattern, flags); } if (!regExp->isValid()) return throwVMError(exec, createSyntaxError(exec, makeString("Invalid regular expression: ", regExp->errorMessage()))); asRegExpObject(thisValue)->setRegExp(regExp.release()); asRegExpObject(thisValue)->setLastIndex(0); return JSValue::encode(jsUndefined()); }
EncodedJSValue JSC_HOST_CALL JSSharedWorkerConstructor::constructJSSharedWorker(ExecState* exec) { JSSharedWorkerConstructor* jsConstructor = static_cast<JSSharedWorkerConstructor*>(exec->callee()); if (exec->argumentCount() < 1) return throwVMError(exec, createSyntaxError(exec, "Not enough arguments")); UString scriptURL = exec->argument(0).toString(exec); UString name; if (exec->argumentCount() > 1) name = exec->argument(1).toString(exec); if (exec->hadException()) return JSValue::encode(JSValue()); // FIXME: We need to use both the dynamic scope and the lexical scope (dynamic scope for resolving the worker URL) DOMWindow* window = asJSDOMWindow(exec->lexicalGlobalObject())->impl(); ExceptionCode ec = 0; RefPtr<SharedWorker> worker = SharedWorker::create(ustringToString(scriptURL), ustringToString(name), window->document(), ec); if (ec) { setDOMException(exec, ec); return JSValue::encode(JSValue()); } return JSValue::encode(asObject(toJS(exec, jsConstructor->globalObject(), worker.release()))); }
JSValue JSSVGLength::convertToSpecifiedUnits(ExecState* exec) { if (impl()->role() == AnimValRole) { setDOMException(exec, NO_MODIFICATION_ALLOWED_ERR); return jsUndefined(); } SVGLength& podImp = impl()->propertyReference(); if (exec->argumentCount() < 1) return throwError(exec, createSyntaxError(exec, "Not enough arguments")); unsigned short unitType = exec->argument(0).toUInt32(exec); if (exec->hadException()) return jsUndefined(); ExceptionCode ec = 0; SVGLengthContext lengthContext(impl()->contextElement()); podImp.convertToSpecifiedUnits(unitType, lengthContext, ec); if (ec) { setDOMException(exec, ec); return jsUndefined(); } impl()->commitChange(); return jsUndefined(); }
KJS::Object KstBindLegend::construct(KJS::ExecState *exec, const KJS::List& args) { if (args.size() == 0 || args.size() > 2) { return createSyntaxError(exec); } KstViewObjectPtr view = extractViewObject(exec, args[0]); if (!view) { KstViewWindow *w = extractWindow(exec, args[0]); if (w) { view = w->view(); } else { return createTypeError(exec, 0); } } QString txt; if (args.size() == 2) { if (args[1].type() != KJS::StringType) { return createTypeError(exec, 1); } txt = args[1].toString(exec).qstring(); } KstViewLegendPtr b = new KstViewLegend; view->appendChild(b.data()); KstApp::inst()->paintAll(KstPainter::P_PAINT); return KJS::Object(new KstBindLegend(exec, b)); }
KJS::Value KstBindDebug::clearNewError(KJS::ExecState *exec, const KJS::List& args) { if (args.size() != 0) { return createSyntaxError(exec); } KstDebug::self()->clearHasNewError(); return KJS::Undefined(); }
EncodedJSValue JSC_HOST_CALL objectProtoFuncDefineSetter(ExecState* exec) { JSValue thisValue = exec->hostThisValue(); CallData callData; if (getCallData(exec->argument(1), callData) == CallTypeNone) return throwVMError(exec, createSyntaxError(exec, "invalid setter usage")); thisValue.toThisObject(exec)->defineSetter(exec, Identifier(exec, exec->argument(0).toString(exec)), asObject(exec->argument(1))); return JSValue::encode(jsUndefined()); }
EncodedJSValue DFG_OPERATION operationNewRegexp(ExecState* exec, void* regexpPtr) { RegExp* regexp = static_cast<RegExp*>(regexpPtr); if (!regexp->isValid()) { throwError(exec, createSyntaxError(exec, "Invalid flags supplied to RegExp constructor.")); return JSValue::encode(jsUndefined()); } return JSValue::encode(RegExpObject::create(exec->globalData(), exec->lexicalGlobalObject(), exec->lexicalGlobalObject()->regExpStructure(), regexp)); }
JSObject* ProgramExecutable::checkSyntax(ExecState* exec) { int errLine; UString errMsg; JSGlobalData* globalData = &exec->globalData(); JSGlobalObject* lexicalGlobalObject = exec->lexicalGlobalObject(); RefPtr<ProgramNode> programNode = globalData->parser->parse<ProgramNode>(globalData, lexicalGlobalObject->debugger(), exec, m_source, &errLine, &errMsg); if (!programNode) return addErrorInfo(globalData, createSyntaxError(lexicalGlobalObject, errMsg), errLine, m_source); return 0; }
EncodedJSValue JSC_HOST_CALL regExpProtoFuncCompile(ExecState* exec) { JSValue thisValue = exec->hostThisValue(); if (!thisValue.inherits(&RegExpObject::s_info)) return throwVMTypeError(exec); RegExp* regExp; JSValue arg0 = exec->argument(0); JSValue arg1 = exec->argument(1); if (arg0.isSymbolic() || arg1.isSymbolic()) { Statistics::statistics()->accumulate("Concolic::MissingInstrumentation::regExpProtoFuncCompile", 1); } if (arg0.inherits(&RegExpObject::s_info)) { if (!arg1.isUndefined()) return throwVMError(exec, createTypeError(exec, "Cannot supply flags when constructing one RegExp from another.")); regExp = asRegExpObject(arg0)->regExp(); } else { UString pattern = !exec->argumentCount() ? UString("") : arg0.toString(exec)->value(exec); if (exec->hadException()) return JSValue::encode(jsUndefined()); RegExpFlags flags = NoFlags; if (!arg1.isUndefined()) { flags = regExpFlags(arg1.toString(exec)->value(exec)); if (exec->hadException()) return JSValue::encode(jsUndefined()); if (flags == InvalidFlags) return throwVMError(exec, createSyntaxError(exec, "Invalid flags supplied to RegExp constructor.")); } regExp = RegExp::create(exec->globalData(), pattern, flags); } if (!regExp->isValid()) return throwVMError(exec, createSyntaxError(exec, regExp->errorMessage())); asRegExpObject(thisValue)->setRegExp(exec->globalData(), regExp); asRegExpObject(thisValue)->setLastIndex(exec, 0); return JSValue::encode(jsUndefined()); }
KJS::Value KstBindDebug::debug(KJS::ExecState *exec, const KJS::List& args) { if (args.size() != 1) { return createSyntaxError(exec); } if (args[0].type() != KJS::StringType) { return createTypeError(exec, 0); } KstDebug::self()->log(args[0].toString(exec).qstring(), KstDebug::Debug); return KJS::Undefined(); }
EncodedJSValue JSC_HOST_CALL JSWebSocketConstructor::constructJSWebSocket(ExecState* exec) { JSWebSocketConstructor* jsConstructor = static_cast<JSWebSocketConstructor*>(exec->callee()); ScriptExecutionContext* context = jsConstructor->scriptExecutionContext(); if (!context) return throwVMError(exec, createReferenceError(exec, "WebSocket constructor associated document is unavailable")); if (!exec->argumentCount()) return throwVMError(exec, createSyntaxError(exec, "Not enough arguments")); String urlString = ustringToString(exec->argument(0).toString(exec)->value(exec)); if (exec->hadException()) return throwVMError(exec, createSyntaxError(exec, "wrong URL")); RefPtr<WebSocket> webSocket = WebSocket::create(context); ExceptionCode ec = 0; if (exec->argumentCount() < 2) webSocket->connect(urlString, ec); else { JSValue protocolsValue = exec->argument(1); if (isJSArray(protocolsValue)) { Vector<String> protocols; JSArray* protocolsArray = asArray(protocolsValue); for (unsigned i = 0; i < protocolsArray->length(); ++i) { String protocol = ustringToString(protocolsArray->getIndex(i).toString(exec)->value(exec)); if (exec->hadException()) return JSValue::encode(JSValue()); protocols.append(protocol); } webSocket->connect(urlString, protocols, ec); } else { String protocol = ustringToString(protocolsValue.toString(exec)->value(exec)); if (exec->hadException()) return JSValue::encode(JSValue()); webSocket->connect(urlString, protocol, ec); } } setDOMException(exec, ec); return JSValue::encode(CREATE_DOM_WRAPPER(exec, jsConstructor->globalObject(), WebSocket, webSocket.get())); }
boost::any visit( BooleanConstant booleanConstant ) { if( currentTokenIs(TokenType::KeywordTrue) ) booleanConstant->value = true; else if( currentTokenIs(TokenType::KeywordFalse) ) booleanConstant->value = false; else throw createSyntaxError( "Expected 'true' or 'false'" ); extractToken(); return boost::any(); }
// ECMA 15.10.4 JSObject* constructRegExp(ExecState* exec, JSGlobalObject* globalObject, const ArgList& args, JSValue newTarget) { JSValue arg0 = args.at(0); JSValue arg1 = args.at(1); if (arg0.inherits(RegExpObject::info())) { if (!arg1.isUndefined()) return exec->vm().throwException(exec, createTypeError(exec, ASCIILiteral("Cannot supply flags when constructing one RegExp from another."))); // If called as a function, this just returns the first argument (see 15.10.3.1). if (newTarget != jsUndefined()) { RegExp* regExp = static_cast<RegExpObject*>(asObject(arg0))->regExp(); return RegExpObject::create(exec->vm(), getRegExpStructure(exec, globalObject, newTarget), regExp); } return asObject(arg0); } String pattern = arg0.isUndefined() ? emptyString() : arg0.toString(exec)->value(exec); if (exec->hadException()) return 0; RegExpFlags flags = NoFlags; if (!arg1.isUndefined()) { flags = regExpFlags(arg1.toString(exec)->value(exec)); if (exec->hadException()) return 0; if (flags == InvalidFlags) return exec->vm().throwException(exec, createSyntaxError(exec, ASCIILiteral("Invalid flags supplied to RegExp constructor."))); } VM& vm = exec->vm(); RegExp* regExp = RegExp::create(vm, pattern, flags); if (!regExp->isValid()) return vm.throwException(exec, createSyntaxError(exec, regExp->errorMessage())); return RegExpObject::create(vm, getRegExpStructure(exec, globalObject, newTarget), regExp); }
EncodedJSValue JSC_HOST_CALL regExpProtoFuncCompile(ExecState* exec) { JSValue thisValue = exec->thisValue(); if (!thisValue.inherits(RegExpObject::info())) return throwVMTypeError(exec); RegExp* regExp; JSValue arg0 = exec->argument(0); JSValue arg1 = exec->argument(1); if (arg0.inherits(RegExpObject::info())) { if (!arg1.isUndefined()) return throwVMError(exec, createTypeError(exec, ASCIILiteral("Cannot supply flags when constructing one RegExp from another."))); regExp = asRegExpObject(arg0)->regExp(); } else { String pattern = !exec->argumentCount() ? emptyString() : arg0.toString(exec)->value(exec); if (exec->hadException()) return JSValue::encode(jsUndefined()); RegExpFlags flags = NoFlags; if (!arg1.isUndefined()) { flags = regExpFlags(arg1.toString(exec)->value(exec)); if (exec->hadException()) return JSValue::encode(jsUndefined()); if (flags == InvalidFlags) return throwVMError(exec, createSyntaxError(exec, ASCIILiteral("Invalid flags supplied to RegExp constructor."))); } regExp = RegExp::create(exec->vm(), pattern, flags); } if (!regExp->isValid()) return throwVMError(exec, createSyntaxError(exec, regExp->errorMessage())); asRegExpObject(thisValue)->setRegExp(exec->vm(), regExp); asRegExpObject(thisValue)->setLastIndex(exec, 0); return JSValue::encode(jsUndefined()); }
KJS::Value KstBindPlot::createLegend(KJS::ExecState *exec, const KJS::List& args) { Kst2DPlotPtr d = makePlot(_d); if (!d) { return createInternalError(exec); } if (args.size() != 0) { return createSyntaxError(exec); } KstWriteLocker rl(d); KstViewLegendPtr vl = d->getOrCreateLegend(); KstApp::inst()->paintAll(KstPainter::P_PAINT); return KJS::Object(new KstBindLegend(exec, vl)); }
JSValue JSSVGMatrix::multiply(ExecState* exec) { if (exec->argumentCount() < 1) return throwError(exec, createSyntaxError(exec, "Not enough arguments")); if (!exec->argument(0).inherits(&JSSVGMatrix::s_info)) return throwError(exec, createTypeError(exec, "secondMatrix argument was not a SVGMatrix")); JSSVGMatrix* matrixObj = static_cast<JSSVGMatrix*>(asObject(exec->argument(0))); AffineTransform m1(*impl()); AffineTransform m2(*(matrixObj->impl())); SVGElement* context = JSSVGContextCache::svgContextForDOMObject(this); return toJS(exec, globalObject(), JSSVGStaticPODTypeWrapper<AffineTransform>::create(m1.multLeft(m2)).get(), context); }
JSValue JSAudioContext::createBuffer(ExecState* exec) { if (exec->argumentCount() < 2) return throwError(exec, createSyntaxError(exec, "Not enough arguments")); AudioContext* audioContext = static_cast<AudioContext*>(impl()); ASSERT(audioContext); // AudioBuffer createBuffer(in ArrayBuffer buffer, in boolean mixToMono); JSValue val = exec->argument(0); if (val.inherits(&JSArrayBuffer::s_info)) { ArrayBuffer* arrayBuffer = toArrayBuffer(val); ASSERT(arrayBuffer); if (arrayBuffer) { bool mixToMono = exec->argument(1).toBoolean(exec); RefPtr<AudioBuffer> audioBuffer = audioContext->createBuffer(arrayBuffer, mixToMono); if (!audioBuffer.get()) return throwError(exec, createSyntaxError(exec, "Error decoding audio file data")); return toJS(exec, globalObject(), audioBuffer.get()); } return jsUndefined(); } // AudioBuffer createBuffer(in unsigned long numberOfChannels, in unsigned long numberOfFrames, in float sampleRate); if (exec->argumentCount() < 3) return throwError(exec, createSyntaxError(exec, "Not enough arguments")); int32_t numberOfChannels = exec->argument(0).toInt32(exec); int32_t numberOfFrames = exec->argument(1).toInt32(exec); float sampleRate = exec->argument(2).toFloat(exec); if (numberOfChannels <= 0 || numberOfChannels > 10) return throwError(exec, createSyntaxError(exec, "Invalid number of channels")); if (numberOfFrames <= 0) return throwError(exec, createSyntaxError(exec, "Invalid number of frames")); if (sampleRate <= 0) return throwError(exec, createSyntaxError(exec, "Invalid sample rate")); RefPtr<AudioBuffer> audioBuffer = audioContext->createBuffer(numberOfChannels, numberOfFrames, sampleRate); if (!audioBuffer.get()) return throwError(exec, createSyntaxError(exec, "Error creating AudioBuffer")); return toJS(exec, globalObject(), audioBuffer.get()); }
KJS::Value KstBindImage::minMaxThreshold(KJS::ExecState *exec, const KJS::List& args) { Q_UNUSED(args) KstImagePtr d = makeImage(_d); if (!d) { return createInternalError(exec); } if (args.size() != 0) { return createSyntaxError(exec); } KstReadLocker rl(d); d->setThresholdToMinMax(); return KJS::Undefined(); }
void JSInternals::setUserPreferredLanguages(ExecState* exec, JSValue value) { if (!isJSArray(value)) { throwError(exec, createSyntaxError(exec, "setUserPreferredLanguages: Expected Array")); return; } Vector<String> languages; JSArray* array = asArray(value); for (unsigned i = 0; i < array->length(); ++i) { String language = ustringToString(array->getIndex(i).toString(exec)->value(exec)); languages.append(language); } Internals* imp = static_cast<Internals*>(impl()); imp->setUserPreferredLanguages(languages); }