e4b6c2aaafb8a617cefe2734625954fb2ee0f876
[WebKit-https.git] / Source / JavaScriptCore / Scripts / tests / builtins / expected / JavaScriptCore-Builtin.prototype-Combined.js-result
1 ### Begin File: JSCBuiltins.h
2 /*
3  * Copyright (c) 2014, 2015, 2016 Apple Inc. All rights reserved.
4  * Copyright (c) 2015 Yusuke Suzuki <utatane.tea@gmail.com>.
5  * 
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the distribution.
14  * 
15  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
16  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
17  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
19  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
25  * THE POSSIBILITY OF SUCH DAMAGE.
26  * 
27  */
28
29 // DO NOT EDIT THIS FILE. It is automatically generated from JavaScript files for
30 // builtins by the script: Source/JavaScriptCore/Scripts/generate-js-builtins.py
31
32 #pragma once
33
34 namespace JSC {
35 class FunctionExecutable;
36 class VM;
37
38 enum class ConstructAbility : unsigned;
39 }
40
41 namespace JSC {
42
43 /* Builtin.prototype */
44 extern const char* s_builtinPrototypeEveryCode;
45 extern const int s_builtinPrototypeEveryCodeLength;
46 extern const JSC::ConstructAbility s_builtinPrototypeEveryCodeConstructAbility;
47 extern const char* s_builtinPrototypeForEachCode;
48 extern const int s_builtinPrototypeForEachCodeLength;
49 extern const JSC::ConstructAbility s_builtinPrototypeForEachCodeConstructAbility;
50 extern const char* s_builtinPrototypeMatchCode;
51 extern const int s_builtinPrototypeMatchCodeLength;
52 extern const JSC::ConstructAbility s_builtinPrototypeMatchCodeConstructAbility;
53 extern const char* s_builtinPrototypeTestCode;
54 extern const int s_builtinPrototypeTestCodeLength;
55 extern const JSC::ConstructAbility s_builtinPrototypeTestCodeConstructAbility;
56
57 #define JSC_FOREACH_BUILTINPROTOTYPE_BUILTIN_DATA(macro) \
58     macro(every, builtinPrototypeEvery, 1) \
59     macro(forEach, builtinPrototypeForEach, 1) \
60     macro(match, builtinPrototypeMatch, 1) \
61     macro(test, builtinPrototypeTest, 1) \
62
63 #define JSC_FOREACH_BUILTIN_CODE(macro) \
64     macro(builtinPrototypeEveryCode, every, static_cast<const char*>(nullptr), s_builtinPrototypeEveryCodeLength) \
65     macro(builtinPrototypeForEachCode, forEach, static_cast<const char*>(nullptr), s_builtinPrototypeForEachCodeLength) \
66     macro(builtinPrototypeMatchCode, match, "[Symbol.match]", s_builtinPrototypeMatchCodeLength) \
67     macro(builtinPrototypeTestCode, test, static_cast<const char*>(nullptr), s_builtinPrototypeTestCodeLength) \
68
69 #define JSC_FOREACH_BUILTIN_FUNCTION_NAME(macro) \
70     macro(every) \
71     macro(forEach) \
72     macro(match) \
73     macro(test) \
74
75 #define JSC_FOREACH_BUILTIN_FUNCTION_PRIVATE_GLOBAL_NAME(macro) \
76
77 #define DECLARE_BUILTIN_GENERATOR(codeName, functionName, overriddenName, argumentCount) \
78     JSC::FunctionExecutable* codeName##Generator(JSC::VM&);
79
80 JSC_FOREACH_BUILTIN_CODE(DECLARE_BUILTIN_GENERATOR)
81 #undef DECLARE_BUILTIN_GENERATOR
82
83 } // namespace JSC
84 ### End File: JSCBuiltins.h
85
86 ### Begin File: JSCBuiltins.cpp
87 /*
88  * Copyright (c) 2014, 2015, 2016 Apple Inc. All rights reserved.
89  * Copyright (c) 2015 Yusuke Suzuki <utatane.tea@gmail.com>.
90  * 
91  * Redistribution and use in source and binary forms, with or without
92  * modification, are permitted provided that the following conditions
93  * are met:
94  * 1. Redistributions of source code must retain the above copyright
95  *    notice, this list of conditions and the following disclaimer.
96  * 2. Redistributions in binary form must reproduce the above copyright
97  *    notice, this list of conditions and the following disclaimer in the
98  *    documentation and/or other materials provided with the distribution.
99  * 
100  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
101  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
102  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
103  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
104  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
105  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
106  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
107  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
108  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
109  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
110  * THE POSSIBILITY OF SUCH DAMAGE.
111  * 
112  */
113
114 // DO NOT EDIT THIS FILE. It is automatically generated from JavaScript files for
115 // builtins by the script: Source/JavaScriptCore/Scripts/generate-js-builtins.py
116
117 #include "config.h"
118 #include "JSCBuiltins.h"
119
120 #include "BuiltinExecutables.h"
121 #include "HeapInlines.h"
122 #include "IdentifierInlines.h"
123 #include "Intrinsic.h"
124 #include "JSCellInlines.h"
125 #include "UnlinkedFunctionExecutable.h"
126 #include "VM.h"
127
128 namespace JSC {
129
130 const JSC::ConstructAbility s_builtinPrototypeEveryCodeConstructAbility = JSC::ConstructAbility::CannotConstruct;
131 const int s_builtinPrototypeEveryCodeLength = 760;
132 static const JSC::Intrinsic s_builtinPrototypeEveryCodeIntrinsic = JSC::NoIntrinsic;
133 const char* s_builtinPrototypeEveryCode =
134     "(function (callback )\n" \
135     "{\n" \
136     "    \"use strict\";\n" \
137     "    if (this === null)\n" \
138     "        throw new @TypeError(\"Array.prototype.every requires that |this| not be null\");\n" \
139     "    \n" \
140     "    if (this === undefined)\n" \
141     "        throw new @TypeError(\"Array.prototype.every requires that |this| not be undefined\");\n" \
142     "    \n" \
143     "    var array = @Object(this);\n" \
144     "    var length = @toLength(array.length);\n" \
145     "    if (typeof callback !== \"function\")\n" \
146     "        throw new @TypeError(\"Array.prototype.every callback must be a function\");\n" \
147     "    \n" \
148     "    var thisArg = arguments.length > 1 ? arguments[1] : undefined;\n" \
149     "    \n" \
150     "    for (var i = 0; i < length; i++) {\n" \
151     "        if (!(i in array))\n" \
152     "            continue;\n" \
153     "        if (!callback.@call(thisArg, array[i], i, array))\n" \
154     "            return false;\n" \
155     "    }\n" \
156     "    \n" \
157     "    return true;\n" \
158     "})\n" \
159 ;
160
161 const JSC::ConstructAbility s_builtinPrototypeForEachCodeConstructAbility = JSC::ConstructAbility::CannotConstruct;
162 const int s_builtinPrototypeForEachCodeLength = 692;
163 static const JSC::Intrinsic s_builtinPrototypeForEachCodeIntrinsic = JSC::NoIntrinsic;
164 const char* s_builtinPrototypeForEachCode =
165     "(function (callback )\n" \
166     "{\n" \
167     "    \"use strict\";\n" \
168     "    if (this === null)\n" \
169     "        throw new @TypeError(\"Array.prototype.forEach requires that |this| not be null\");\n" \
170     "    \n" \
171     "    if (this === undefined)\n" \
172     "        throw new @TypeError(\"Array.prototype.forEach requires that |this| not be undefined\");\n" \
173     "    \n" \
174     "    var array = @Object(this);\n" \
175     "    var length = @toLength(array.length);\n" \
176     "    if (typeof callback !== \"function\")\n" \
177     "        throw new @TypeError(\"Array.prototype.forEach callback must be a function\");\n" \
178     "    \n" \
179     "    var thisArg = arguments.length > 1 ? arguments[1] : undefined;\n" \
180     "    \n" \
181     "    for (var i = 0; i < length; i++) {\n" \
182     "        if (i in array)\n" \
183     "            callback.@call(thisArg, array[i], i, array);\n" \
184     "    }\n" \
185     "})\n" \
186 ;
187
188 const JSC::ConstructAbility s_builtinPrototypeMatchCodeConstructAbility = JSC::ConstructAbility::CannotConstruct;
189 const int s_builtinPrototypeMatchCodeLength = 1198;
190 static const JSC::Intrinsic s_builtinPrototypeMatchCodeIntrinsic = JSC::NoIntrinsic;
191 const char* s_builtinPrototypeMatchCode =
192     "(function (strArg)\n" \
193     "{\n" \
194     "    \"use strict\";\n" \
195     "    if (!@isObject(this))\n" \
196     "        @throwTypeError(\"RegExp.prototype.@@match requires that |this| be an Object\");\n" \
197     "    let regexp = this;\n" \
198     "    if (!@hasObservableSideEffectsForRegExpMatch(regexp))\n" \
199     "        return @regExpMatchFast.@call(regexp, strArg);\n" \
200     "    let str = @toString(strArg);\n" \
201     "    if (!regexp.global)\n" \
202     "        return @regExpExec(regexp, str);\n" \
203     "    \n" \
204     "    let unicode = regexp.unicode;\n" \
205     "    regexp.lastIndex = 0;\n" \
206     "    let resultList = [];\n" \
207     "    const maximumReasonableMatchSize = 100000000;\n" \
208     "    while (true) {\n" \
209     "        let result = @regExpExec(regexp, str);\n" \
210     "        \n" \
211     "        if (result === null) {\n" \
212     "            if (resultList.length === 0)\n" \
213     "                return null;\n" \
214     "            return resultList;\n" \
215     "        }\n" \
216     "        if (resultList.length > maximumReasonableMatchSize)\n" \
217     "            @throwOutOfMemoryError();\n" \
218     "        if (!@isObject(result))\n" \
219     "            @throwTypeError(\"RegExp.prototype.@@match call to RegExp.exec didn't return null or an object\");\n" \
220     "        let resultString = @toString(result[0]);\n" \
221     "        if (!resultString.length)\n" \
222     "            regexp.lastIndex = @advanceStringIndex(str, regexp.lastIndex, unicode);\n" \
223     "        resultList.@push(resultString);\n" \
224     "    }\n" \
225     "})\n" \
226 ;
227
228 const JSC::ConstructAbility s_builtinPrototypeTestCodeConstructAbility = JSC::ConstructAbility::CannotConstruct;
229 const int s_builtinPrototypeTestCodeLength = 456;
230 static const JSC::Intrinsic s_builtinPrototypeTestCodeIntrinsic = JSC::RegExpTestIntrinsic;
231 const char* s_builtinPrototypeTestCode =
232     "(function (strArg)\n" \
233     "{\n" \
234     "    \"use strict\";\n" \
235     "    let regexp = this;\n" \
236     "    if (@isRegExpObject(regexp) && @tryGetById(regexp, \"exec\") === @regExpBuiltinExec)\n" \
237     "        return @regExpTestFast.@call(regexp, strArg);\n" \
238     "    if (!@isObject(regexp))\n" \
239     "        @throwTypeError(\"RegExp.prototype.test requires that |this| be an Object\");\n" \
240     "    let str = @toString(strArg);\n" \
241     "    let match = @regExpExec(regexp, str);\n" \
242     "    if (match !== null)\n" \
243     "        return true;\n" \
244     "    return false;\n" \
245     "})\n" \
246 ;
247
248
249 #define DEFINE_BUILTIN_GENERATOR(codeName, functionName, overriddenName, argumentCount) \
250 JSC::FunctionExecutable* codeName##Generator(JSC::VM& vm) \
251 {\
252     return vm.builtinExecutables()->codeName##Executable()->link(vm, vm.builtinExecutables()->codeName##Source(), std::nullopt, s_##codeName##Intrinsic); }
253 JSC_FOREACH_BUILTIN_CODE(DEFINE_BUILTIN_GENERATOR)
254 #undef DEFINE_BUILTIN_GENERATOR
255
256
257 } // namespace JSC
258 ### End File: JSCBuiltins.cpp