Value StringPrototype::method_search(ExecutionContext *ctx)
{
- // requires Regexp
- ctx->throwUnimplemented(QStringLiteral("String.prototype.search"));
- return Value::undefinedValue();
+ QString string;
+ if (StringObject *thisString = ctx->thisObject.asStringObject())
+ string = thisString->value.stringValue()->toQString();
+ else
+ string = ctx->thisObject.toString(ctx)->toQString();
+
+ Value regExpValue = ctx->argument(0);
+ RegExpObject *regExp = regExpValue.asRegExpObject();
+ if (!regExp) {
+ regExpValue = ctx->engine->regExpCtor.asFunctionObject()->construct(ctx, ®ExpValue, 1);
+ regExp = regExpValue.asRegExpObject();
+ }
+ uint* matchOffsets = (uint*)alloca(regExp->value->captureCount() * 2 * sizeof(uint));
+ uint result = regExp->value->match(string, /*offset*/0, matchOffsets);
+ if (result == JSC::Yarr::offsetNoMatch)
+ return Value::fromInt32(-1);
+ return Value::fromUInt32(result);
}
Value StringPrototype::method_slice(ExecutionContext *ctx)
S15.5.4.10_A1_T10 failing
S15.5.4.11_A1_T10 failing
S15.5.4.11_A5_T1 failing
-S15.5.4.12_A1.1_T1 failing
-S15.5.4.12_A1_T1 failing
S15.5.4.12_A1_T10 failing
-S15.5.4.12_A1_T11 failing
-S15.5.4.12_A1_T12 failing
-S15.5.4.12_A1_T13 failing
-S15.5.4.12_A1_T14 failing
-S15.5.4.12_A1_T2 failing
-S15.5.4.12_A1_T4 failing
-S15.5.4.12_A1_T5 failing
-S15.5.4.12_A1_T6 failing
-S15.5.4.12_A1_T7 failing
-S15.5.4.12_A1_T8 failing
-S15.5.4.12_A1_T9 failing
-S15.5.4.12_A2_T1 failing
-S15.5.4.12_A2_T2 failing
-S15.5.4.12_A2_T3 failing
-S15.5.4.12_A2_T4 failing
-S15.5.4.12_A2_T5 failing
-S15.5.4.12_A2_T6 failing
-S15.5.4.12_A2_T7 failing
-S15.5.4.12_A3_T1 failing
-S15.5.4.12_A3_T2 failing
S15.5.4.13_A1_T10 failing
S15.4.4.8_A1_T1 failing
S15.4.4.8_A1_T2 failing
15.4.4.21-8-b-iii-1-6 failing
15.12.3_4-1-1
-15.12.3_4-1-3
\ No newline at end of file
+15.12.3_4-1-3