Compare commits
22
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3a4dc8de41 | ||
|
|
18595b01b6 | ||
|
|
f7215fc685 | ||
|
|
08521d4651 | ||
|
|
00b177d75f | ||
|
|
a89a071049 | ||
|
|
f9dc8a091a | ||
|
|
944299ed6c | ||
|
|
0e1441155c | ||
|
|
7bf5dfe4e4 | ||
|
|
d4c34fc9f7 | ||
|
|
6811005551 | ||
|
|
464cefa127 | ||
|
|
c94a1ab5d3 | ||
|
|
8aa5b35605 | ||
|
|
25dd1fb31a | ||
|
|
d8cf2c8b44 | ||
|
|
938c5d08d4 | ||
|
|
7fca2b8de3 | ||
|
|
ef19ad3ffd | ||
|
|
fdf491d4ec | ||
|
|
1f4cceca43 |
No files matched your search
@@ -127,7 +127,6 @@ def old_configure_options(*options):
|
||||
'--enable-alsa',
|
||||
'--enable-appcompat-guid',
|
||||
'--enable-av1',
|
||||
'--enable-jxl',
|
||||
'--enable-b2g-bt',
|
||||
'--enable-b2g-camera',
|
||||
'--enable-b2g-ril',
|
||||
|
||||
@@ -613,14 +613,6 @@ ScriptLoader::CreateModuleScript(ModuleLoadRequest* aRequest)
|
||||
|
||||
nsresult rv;
|
||||
{
|
||||
// Update our current script.
|
||||
Maybe<AutoCurrentScriptUpdater> masterScriptUpdater;
|
||||
nsCOMPtr<nsIDocument> master = mDocument->MasterDocument();
|
||||
if (master != mDocument) {
|
||||
masterScriptUpdater.emplace(master->ScriptLoader(),
|
||||
aRequest->Element());
|
||||
}
|
||||
|
||||
JSContext* cx = aes.cx();
|
||||
JS::Rooted<JSObject*> module(cx);
|
||||
|
||||
@@ -2323,8 +2315,14 @@ ScriptLoader::EvaluateScript(ScriptLoadRequest* aRequest)
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
// Update our current script.
|
||||
// This must be destroyed after destroying nsAutoMicroTask.
|
||||
nsIScriptElement* currentScript =
|
||||
aRequest->IsModuleRequest() ? nullptr : aRequest->Element();
|
||||
AutoCurrentScriptUpdater scriptUpdater(this, currentScript);
|
||||
|
||||
// New script entry point required, due to the "Create a script" sub-step of
|
||||
// http://www.whatwg.org/specs/web-apps/current-work/#execute-the-script-block
|
||||
// http://html.spec.whatwg.org/multipage/#execute-the-script-block
|
||||
nsAutoMicroTask mt;
|
||||
AutoEntryScript aes(globalObject, "<script> element", true);
|
||||
JSContext* cx = aes.cx();
|
||||
@@ -2382,9 +2380,6 @@ ScriptLoader::EvaluateScript(ScriptLoadRequest* aRequest)
|
||||
FinishDynamicImport(cx, request, rv);
|
||||
}
|
||||
} else {
|
||||
// Update our current script.
|
||||
AutoCurrentScriptUpdater scriptUpdater(this, aRequest->Element());
|
||||
|
||||
JS::CompileOptions options(cx);
|
||||
rv = FillCompileOptionsForRequest(aes, aRequest, global, &options);
|
||||
|
||||
|
||||
@@ -324,7 +324,9 @@ class ScriptLoader final : public nsISupports
|
||||
: mOldScript(aScriptLoader->mCurrentScript)
|
||||
, mScriptLoader(aScriptLoader)
|
||||
{
|
||||
mScriptLoader->mCurrentScript = aCurrentScript;
|
||||
nsCOMPtr<nsINode> node = do_QueryInterface(aCurrentScript);
|
||||
mScriptLoader->mCurrentScript =
|
||||
node && !node->IsInShadowTree() ? aCurrentScript : nullptr;
|
||||
}
|
||||
~AutoCurrentScriptUpdater()
|
||||
{
|
||||
|
||||
+85
-23
@@ -57,7 +57,84 @@ CreateObjectURLInternal(const GlobalObject& aGlobal, T aObject,
|
||||
CopyASCIItoUTF16(url, aResult);
|
||||
}
|
||||
|
||||
// The URL implementation for the main-thread
|
||||
bool
|
||||
IsRootRelativePathInput(const nsAString& aURL)
|
||||
{
|
||||
return !aURL.IsEmpty() && aURL.CharAt(0) == '/' &&
|
||||
(aURL.Length() == 1 || aURL.CharAt(1) != '/');
|
||||
}
|
||||
|
||||
bool
|
||||
BuildRootRelativeFallbackSpec(const nsAString& aURL, nsIURI* aBase,
|
||||
nsACString& aFallbackSpec)
|
||||
{
|
||||
MOZ_ASSERT(aBase);
|
||||
MOZ_ASSERT(IsRootRelativePathInput(aURL));
|
||||
|
||||
nsAutoCString baseSpec;
|
||||
if (NS_FAILED(aBase->GetSpec(baseSpec)) || baseSpec.IsEmpty()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
int32_t colon = baseSpec.FindChar(':');
|
||||
if (colon <= 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
uint32_t afterColon = static_cast<uint32_t>(colon + 1);
|
||||
if (afterColon >= baseSpec.Length() || baseSpec.CharAt(afterColon) != '/') {
|
||||
// Opaque paths (for example mailto:test@example.com) are not valid bases
|
||||
// for root-relative URL input.
|
||||
return false;
|
||||
}
|
||||
|
||||
nsAutoCString input;
|
||||
if (!AppendUTF16toUTF8(aURL, input, fallible)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Preserve authority when present (scheme://authority/path -> scheme://authority/input)
|
||||
if (afterColon + 1 < baseSpec.Length() && baseSpec.CharAt(afterColon + 1) == '/') {
|
||||
uint32_t authorityEnd = afterColon + 2;
|
||||
while (authorityEnd < baseSpec.Length()) {
|
||||
char c = baseSpec.CharAt(authorityEnd);
|
||||
if (c == '/' || c == '?' || c == '#') {
|
||||
break;
|
||||
}
|
||||
++authorityEnd;
|
||||
}
|
||||
|
||||
aFallbackSpec.Assign(Substring(baseSpec, 0, authorityEnd));
|
||||
aFallbackSpec.Append(input);
|
||||
return true;
|
||||
}
|
||||
|
||||
// Single-slash hierarchical base (scheme:/path -> scheme:/input)
|
||||
aFallbackSpec.Assign(Substring(baseSpec, 0, afterColon));
|
||||
aFallbackSpec.Append(input);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
TryResolveRootRelativeAgainstBase(const nsAString& aURL, nsIURI* aBase,
|
||||
nsIURI** aOutURI)
|
||||
{
|
||||
MOZ_ASSERT(aOutURI);
|
||||
|
||||
if (!aBase || !IsRootRelativePathInput(aURL)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
nsAutoCString fallbackSpec;
|
||||
if (!BuildRootRelativeFallbackSpec(aURL, aBase, fallbackSpec)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
nsresult rv = NS_NewURI(aOutURI, fallbackSpec, nullptr, nullptr,
|
||||
nsContentUtils::GetIOService());
|
||||
return NS_SUCCEEDED(rv);
|
||||
}
|
||||
|
||||
class URLMainThread final : public URL
|
||||
{
|
||||
public:
|
||||
@@ -229,7 +306,8 @@ URLMainThread::Constructor(nsISupports* aParent, const nsAString& aURL,
|
||||
nsCOMPtr<nsIURI> uri;
|
||||
nsresult rv = NS_NewURI(getter_AddRefs(uri), aURL, nullptr, aBase,
|
||||
nsContentUtils::GetIOService());
|
||||
if (NS_FAILED(rv)) {
|
||||
if (NS_FAILED(rv) &&
|
||||
!TryResolveRootRelativeAgainstBase(aURL, aBase, getter_AddRefs(uri))) {
|
||||
// No need to warn in this case. It's common to use the URL constructor
|
||||
// to determine if a URL is valid and an exception will be propagated.
|
||||
aRv.ThrowTypeError<MSG_INVALID_URL>(aURL);
|
||||
@@ -1714,30 +1792,14 @@ URL::IsValidURL(const GlobalObject& aGlobal, const nsAString& aURL,
|
||||
bool
|
||||
URL::CanParse(const GlobalObject& aGlobal, const nsAString& aURL,
|
||||
const Optional<nsAString>& aBase) {
|
||||
nsCOMPtr<nsIURI> baseUri;
|
||||
if (aBase.WasPassed()) {
|
||||
// Don't use NS_ConvertUTF16toUTF8 because that doesn't let us handle OOM.
|
||||
nsAutoCString base;
|
||||
if (!AppendUTF16toUTF8(aBase.Value(), base, fallible)) {
|
||||
// Just return false with OOM errors as no ErrorResult.
|
||||
return false;
|
||||
}
|
||||
|
||||
nsresult rv = NS_NewURI(getter_AddRefs(baseUri), base);
|
||||
if (NS_FAILED(rv)) {
|
||||
// Invalid base URL, return false.
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
nsAutoCString urlStr;
|
||||
if (!AppendUTF16toUTF8(aURL, urlStr, fallible)) {
|
||||
// Just return false with OOM errors as no ErrorResult.
|
||||
ErrorResult rv;
|
||||
RefPtr<URL> parsed = URL::Constructor(aGlobal, aURL, aBase, rv);
|
||||
if (rv.Failed() || !parsed) {
|
||||
rv.SuppressException();
|
||||
return false;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIURI> uri;
|
||||
return NS_SUCCEEDED(NS_NewURI(getter_AddRefs(uri), urlStr, nullptr, baseUri));
|
||||
return true;
|
||||
}
|
||||
|
||||
URLSearchParams*
|
||||
|
||||
+414
-412
@@ -1,460 +1,462 @@
|
||||
<!DOCTYPE HTML>
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Test URL API</title>
|
||||
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
|
||||
</head>
|
||||
<body>
|
||||
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=887364">Mozilla Bug 887364</a>
|
||||
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=991471">Mozilla Bug 991471</a>
|
||||
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=996055">Mozilla Bug 996055</a>
|
||||
<p id="display"></p>
|
||||
<div id="content" style="display: none">
|
||||
<iframe name="x" id="x"></iframe>
|
||||
<iframe name="y" id="y"></iframe>
|
||||
</div>
|
||||
<pre id="test">
|
||||
</pre>
|
||||
<script type="application/javascript">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>Test URL API</title>
|
||||
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
|
||||
</head>
|
||||
<body>
|
||||
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=887364">Mozilla Bug 887364</a>
|
||||
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=991471">Mozilla Bug 991471</a>
|
||||
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=996055">Mozilla Bug 996055</a>
|
||||
<p id="display"></p>
|
||||
<div id="content" style="display: none">
|
||||
<iframe name="x" id="x"></iframe>
|
||||
<iframe name="y" id="y"></iframe>
|
||||
</div>
|
||||
<pre id="test"></pre>
|
||||
<script type="application/javascript">
|
||||
/** Test for Bug 887364 **/
|
||||
ok("URL" in window, "window.URL exists");
|
||||
|
||||
/** Test for Bug 887364 **/
|
||||
ok("URL" in window, "window.URL exists");
|
||||
var tests = [
|
||||
{
|
||||
url: "http://www.abc.com",
|
||||
base: undefined,
|
||||
error: false,
|
||||
href: "http://www.abc.com/",
|
||||
origin: "http://www.abc.com",
|
||||
protocol: "http:",
|
||||
username: "",
|
||||
password: "",
|
||||
host: "www.abc.com",
|
||||
hostname: "www.abc.com",
|
||||
port: "",
|
||||
pathname: "/",
|
||||
search: "",
|
||||
hash: "",
|
||||
},
|
||||
{
|
||||
url: "ftp://auser:apw@www.abc.com",
|
||||
base: undefined,
|
||||
error: false,
|
||||
href: "ftp://auser:apw@www.abc.com/",
|
||||
origin: "ftp://www.abc.com",
|
||||
protocol: "ftp:",
|
||||
username: "auser",
|
||||
password: "apw",
|
||||
host: "www.abc.com",
|
||||
hostname: "www.abc.com",
|
||||
port: "",
|
||||
pathname: "/",
|
||||
search: "",
|
||||
hash: "",
|
||||
},
|
||||
{
|
||||
url: "http://www.abc.com:90/apath/",
|
||||
base: undefined,
|
||||
error: false,
|
||||
href: "http://www.abc.com:90/apath/",
|
||||
origin: "http://www.abc.com:90",
|
||||
protocol: "http:",
|
||||
username: "",
|
||||
password: "",
|
||||
host: "www.abc.com:90",
|
||||
hostname: "www.abc.com",
|
||||
port: "90",
|
||||
pathname: "/apath/",
|
||||
search: "",
|
||||
hash: "",
|
||||
},
|
||||
{
|
||||
url: "http://www.abc.com/apath/afile.txt#ahash",
|
||||
base: undefined,
|
||||
error: false,
|
||||
href: "http://www.abc.com/apath/afile.txt#ahash",
|
||||
origin: "http://www.abc.com",
|
||||
protocol: "http:",
|
||||
username: "",
|
||||
password: "",
|
||||
host: "www.abc.com",
|
||||
hostname: "www.abc.com",
|
||||
port: "",
|
||||
pathname: "/apath/afile.txt",
|
||||
search: "",
|
||||
hash: "#ahash",
|
||||
},
|
||||
{
|
||||
url: "http://example.com/?test#hash",
|
||||
base: undefined,
|
||||
error: false,
|
||||
href: "http://example.com/?test#hash",
|
||||
origin: "http://example.com",
|
||||
protocol: "http:",
|
||||
username: "",
|
||||
password: "",
|
||||
host: "example.com",
|
||||
hostname: "example.com",
|
||||
port: "",
|
||||
pathname: "/",
|
||||
search: "?test",
|
||||
hash: "#hash",
|
||||
},
|
||||
{
|
||||
url: "http://example.com/?test",
|
||||
base: undefined,
|
||||
error: false,
|
||||
href: "http://example.com/?test",
|
||||
origin: "http://example.com",
|
||||
protocol: "http:",
|
||||
username: "",
|
||||
password: "",
|
||||
host: "example.com",
|
||||
hostname: "example.com",
|
||||
port: "",
|
||||
pathname: "/",
|
||||
search: "?test",
|
||||
hash: "",
|
||||
},
|
||||
{ url: "http://example.com/carrot#question%3f", base: undefined, error: false, hash: "#question%3f" },
|
||||
{
|
||||
url: "https://example.com:4443?",
|
||||
base: undefined,
|
||||
error: false,
|
||||
protocol: "https:",
|
||||
port: "4443",
|
||||
pathname: "/",
|
||||
hash: "",
|
||||
search: "",
|
||||
},
|
||||
{
|
||||
url: "http://www.abc.com/apath/afile.txt#ahash?asearch",
|
||||
base: undefined,
|
||||
error: false,
|
||||
href: "http://www.abc.com/apath/afile.txt#ahash?asearch",
|
||||
protocol: "http:",
|
||||
pathname: "/apath/afile.txt",
|
||||
hash: "#ahash?asearch",
|
||||
search: "",
|
||||
},
|
||||
{
|
||||
url: "http://www.abc.com/apath/afile.txt?asearch#ahash",
|
||||
base: undefined,
|
||||
error: false,
|
||||
href: "http://www.abc.com/apath/afile.txt?asearch#ahash",
|
||||
protocol: "http:",
|
||||
pathname: "/apath/afile.txt",
|
||||
hash: "#ahash",
|
||||
search: "?asearch",
|
||||
},
|
||||
{
|
||||
url: "http://abc.com/apath/afile.txt?#ahash",
|
||||
base: undefined,
|
||||
error: false,
|
||||
pathname: "/apath/afile.txt",
|
||||
hash: "#ahash",
|
||||
search: "",
|
||||
},
|
||||
{
|
||||
url: "http://auser:apassword@www.abc.com:90/apath/afile.txt?asearch#ahash",
|
||||
base: undefined,
|
||||
error: false,
|
||||
protocol: "http:",
|
||||
username: "auser",
|
||||
password: "apassword",
|
||||
host: "www.abc.com:90",
|
||||
hostname: "www.abc.com",
|
||||
port: "90",
|
||||
pathname: "/apath/afile.txt",
|
||||
hash: "#ahash",
|
||||
search: "?asearch",
|
||||
origin: "http://www.abc.com:90",
|
||||
},
|
||||
|
||||
var tests = [
|
||||
{ url: 'http://www.abc.com',
|
||||
base: undefined,
|
||||
error: false,
|
||||
href: 'http://www.abc.com/',
|
||||
origin: 'http://www.abc.com',
|
||||
protocol: 'http:',
|
||||
username: '',
|
||||
password: '',
|
||||
host: 'www.abc.com',
|
||||
hostname: 'www.abc.com',
|
||||
port: '',
|
||||
pathname: '/',
|
||||
search: '',
|
||||
hash: ''
|
||||
},
|
||||
{ url: 'ftp://auser:apw@www.abc.com',
|
||||
base: undefined,
|
||||
error: false,
|
||||
href: 'ftp://auser:apw@www.abc.com/',
|
||||
origin: 'ftp://www.abc.com',
|
||||
protocol: 'ftp:',
|
||||
username: 'auser',
|
||||
password: 'apw',
|
||||
host: 'www.abc.com',
|
||||
hostname: 'www.abc.com',
|
||||
port: '',
|
||||
pathname: '/',
|
||||
search: '',
|
||||
hash: ''
|
||||
},
|
||||
{ url: 'http://www.abc.com:90/apath/',
|
||||
base: undefined,
|
||||
error: false,
|
||||
href: 'http://www.abc.com:90/apath/',
|
||||
origin: 'http://www.abc.com:90',
|
||||
protocol: 'http:',
|
||||
username: '',
|
||||
password: '',
|
||||
host: 'www.abc.com:90',
|
||||
hostname: 'www.abc.com',
|
||||
port: '90',
|
||||
pathname: '/apath/',
|
||||
search: '',
|
||||
hash: ''
|
||||
},
|
||||
{ url: 'http://www.abc.com/apath/afile.txt#ahash',
|
||||
base: undefined,
|
||||
error: false,
|
||||
href: 'http://www.abc.com/apath/afile.txt#ahash',
|
||||
origin: 'http://www.abc.com',
|
||||
protocol: 'http:',
|
||||
username: '',
|
||||
password: '',
|
||||
host: 'www.abc.com',
|
||||
hostname: 'www.abc.com',
|
||||
port: '',
|
||||
pathname: '/apath/afile.txt',
|
||||
search: '',
|
||||
hash: '#ahash'
|
||||
},
|
||||
{ url: 'http://example.com/?test#hash',
|
||||
base: undefined,
|
||||
error: false,
|
||||
href: 'http://example.com/?test#hash',
|
||||
origin: 'http://example.com',
|
||||
protocol: 'http:',
|
||||
username: '',
|
||||
password: '',
|
||||
host: 'example.com',
|
||||
hostname: 'example.com',
|
||||
port: '',
|
||||
pathname: '/',
|
||||
search: '?test',
|
||||
hash: '#hash'
|
||||
},
|
||||
{ url: 'http://example.com/?test',
|
||||
base: undefined,
|
||||
error: false,
|
||||
href: 'http://example.com/?test',
|
||||
origin: 'http://example.com',
|
||||
protocol: 'http:',
|
||||
username: '',
|
||||
password: '',
|
||||
host: 'example.com',
|
||||
hostname: 'example.com',
|
||||
port: '',
|
||||
pathname: '/',
|
||||
search: '?test',
|
||||
hash: ''
|
||||
},
|
||||
{ url: 'http://example.com/carrot#question%3f',
|
||||
base: undefined,
|
||||
error: false,
|
||||
hash: '#question%3f'
|
||||
},
|
||||
{ url: 'https://example.com:4443?',
|
||||
base: undefined,
|
||||
error: false,
|
||||
protocol: 'https:',
|
||||
port: '4443',
|
||||
pathname: '/',
|
||||
hash: '',
|
||||
search: ''
|
||||
},
|
||||
{ url: 'http://www.abc.com/apath/afile.txt#ahash?asearch',
|
||||
base: undefined,
|
||||
error: false,
|
||||
href: 'http://www.abc.com/apath/afile.txt#ahash?asearch',
|
||||
protocol: 'http:',
|
||||
pathname: '/apath/afile.txt',
|
||||
hash: '#ahash?asearch',
|
||||
search: ''
|
||||
},
|
||||
{ url: 'http://www.abc.com/apath/afile.txt?asearch#ahash',
|
||||
base: undefined,
|
||||
error: false,
|
||||
href: 'http://www.abc.com/apath/afile.txt?asearch#ahash',
|
||||
protocol: 'http:',
|
||||
pathname: '/apath/afile.txt',
|
||||
hash: '#ahash',
|
||||
search: '?asearch'
|
||||
},
|
||||
{ url: 'http://abc.com/apath/afile.txt?#ahash',
|
||||
base: undefined,
|
||||
error: false,
|
||||
pathname: '/apath/afile.txt',
|
||||
hash: '#ahash',
|
||||
search: ''
|
||||
},
|
||||
{ url: 'http://auser:apassword@www.abc.com:90/apath/afile.txt?asearch#ahash',
|
||||
base: undefined,
|
||||
error: false,
|
||||
protocol: 'http:',
|
||||
username: 'auser',
|
||||
password: 'apassword',
|
||||
host: 'www.abc.com:90',
|
||||
hostname: 'www.abc.com',
|
||||
port: '90',
|
||||
pathname: '/apath/afile.txt',
|
||||
hash: '#ahash',
|
||||
search: '?asearch',
|
||||
origin: 'http://www.abc.com:90'
|
||||
},
|
||||
{ url: "/foo#bar", base: "www.test.org", error: true },
|
||||
{ url: "/foo#bar", base: null, error: true },
|
||||
{ url: "/foo#bar", base: 42, error: true },
|
||||
{ url: "ftp://ftp.something.net", base: undefined, error: false, protocol: "ftp:" },
|
||||
{ url: "file:///tmp/file", base: undefined, error: false, protocol: "file:" },
|
||||
{ url: "gopher://gopher.something.net", base: undefined, error: false, protocol: "gopher:" },
|
||||
{ url: "ws://ws.something.net", base: undefined, error: false, protocol: "ws:" },
|
||||
{ url: "wss://ws.something.net", base: undefined, error: false, protocol: "wss:" },
|
||||
{ url: "foo://foo.something.net", base: undefined, error: false, protocol: "foo:" },
|
||||
|
||||
{ url: '/foo#bar',
|
||||
base: 'www.test.org',
|
||||
error: true,
|
||||
},
|
||||
{ url: '/foo#bar',
|
||||
base: null,
|
||||
error: true,
|
||||
},
|
||||
{ url: '/foo#bar',
|
||||
base: 42,
|
||||
error: true,
|
||||
},
|
||||
{ url: 'ftp://ftp.something.net',
|
||||
base: undefined,
|
||||
error: false,
|
||||
protocol: 'ftp:',
|
||||
},
|
||||
{ url: 'file:///tmp/file',
|
||||
base: undefined,
|
||||
error: false,
|
||||
protocol: 'file:',
|
||||
},
|
||||
{ url: 'gopher://gopher.something.net',
|
||||
base: undefined,
|
||||
error: false,
|
||||
protocol: 'gopher:',
|
||||
},
|
||||
{ url: 'ws://ws.something.net',
|
||||
base: undefined,
|
||||
error: false,
|
||||
protocol: 'ws:',
|
||||
},
|
||||
{ url: 'wss://ws.something.net',
|
||||
base: undefined,
|
||||
error: false,
|
||||
protocol: 'wss:',
|
||||
},
|
||||
{ url: 'foo://foo.something.net',
|
||||
base: undefined,
|
||||
error: false,
|
||||
protocol: 'foo:',
|
||||
},
|
||||
{
|
||||
url: "about:blank",
|
||||
base: undefined,
|
||||
error: false,
|
||||
protocol: "about:",
|
||||
pathname: "blank",
|
||||
skip_setters: false,
|
||||
},
|
||||
|
||||
{ url: 'about:blank',
|
||||
base: undefined,
|
||||
error: false,
|
||||
protocol: 'about:',
|
||||
pathname: 'blank',
|
||||
skip_setters: false,
|
||||
},
|
||||
{
|
||||
url: "foo:bar?what#yeah",
|
||||
base: undefined,
|
||||
error: false,
|
||||
protocol: "foo:",
|
||||
pathname: "bar",
|
||||
search: "?what",
|
||||
hash: "#yeah",
|
||||
skip_setters: false,
|
||||
},
|
||||
];
|
||||
|
||||
{ url: 'foo:bar?what#yeah',
|
||||
base: undefined,
|
||||
error: false,
|
||||
protocol: 'foo:',
|
||||
pathname: 'bar',
|
||||
search: '?what',
|
||||
hash: '#yeah',
|
||||
skip_setters: false,
|
||||
},
|
||||
];
|
||||
while (tests.length) {
|
||||
var test = tests.shift();
|
||||
|
||||
while(tests.length) {
|
||||
var test = tests.shift();
|
||||
var error = false;
|
||||
var url;
|
||||
try {
|
||||
if (test.base) {
|
||||
url = new URL(test.url, test.base);
|
||||
} else {
|
||||
url = new URL(test.url);
|
||||
}
|
||||
} catch (e) {
|
||||
error = true;
|
||||
}
|
||||
|
||||
var error = false;
|
||||
var url;
|
||||
try {
|
||||
if (test.base) {
|
||||
url = new URL(test.url, test.base);
|
||||
} else {
|
||||
url = new URL(test.url);
|
||||
}
|
||||
} catch(e) {
|
||||
error = true;
|
||||
}
|
||||
is(test.error, error, "Error creating URL");
|
||||
if (test.error) {
|
||||
continue;
|
||||
}
|
||||
|
||||
is(test.error, error, "Error creating URL");
|
||||
if (test.error) {
|
||||
continue;
|
||||
}
|
||||
if ("href" in test) is(url.href, test.href, "href");
|
||||
if ("origin" in test) is(url.origin, test.origin, "origin");
|
||||
if ("protocol" in test) is(url.protocol, test.protocol, "protocol");
|
||||
if ("username" in test) is(url.username, test.username, "username");
|
||||
if ("password" in test) is(url.password, test.password, "password");
|
||||
if ("host" in test) is(url.host, test.host, "host");
|
||||
if ("hostname" in test) is(url.hostname, test.hostname, "hostname");
|
||||
if ("port" in test) is(url.port, test.port, "port");
|
||||
if ("pathname" in test) is(url.pathname, test.pathname, "pathname");
|
||||
if ("search" in test) is(url.search, test.search, "search");
|
||||
if ("hash" in test) is(url.hash, test.hash, "hash");
|
||||
|
||||
if ('href' in test) is(url.href, test.href, "href");
|
||||
if ('origin' in test) is(url.origin, test.origin, "origin");
|
||||
if ('protocol' in test) is(url.protocol, test.protocol, "protocol");
|
||||
if ('username' in test) is(url.username, test.username, "username");
|
||||
if ('password' in test) is(url.password, test.password, "password");
|
||||
if ('host' in test) is(url.host, test.host, "host");
|
||||
if ('hostname' in test) is(url.hostname, test.hostname, "hostname");
|
||||
if ('port' in test) is(url.port, test.port, "port");
|
||||
if ('pathname' in test) is(url.pathname, test.pathname, "pathname");
|
||||
if ('search' in test) is(url.search, test.search, "search");
|
||||
if ('hash' in test) is(url.hash, test.hash, "hash");
|
||||
if ("skip_setters" in test && test.skip_setters == false) {
|
||||
info("Skip setter methods for URL: " + test);
|
||||
continue;
|
||||
}
|
||||
|
||||
if ('skip_setters' in test && test.skip_setters == false) {
|
||||
info("Skip setter methods for URL: " + test);
|
||||
continue;
|
||||
}
|
||||
url = new URL("https://www.example.net/what#foo?bar");
|
||||
ok(url, "Url exists!");
|
||||
|
||||
url = new URL('https://www.example.net/what#foo?bar');
|
||||
ok(url, "Url exists!");
|
||||
if ("href" in test) url.href = test.href;
|
||||
if ("protocol" in test) url.protocol = test.protocol;
|
||||
if ("username" in test && test.username) url.username = test.username;
|
||||
if ("password" in test && test.password) url.password = test.password;
|
||||
if ("host" in test) url.host = test.host;
|
||||
if ("hostname" in test) url.hostname = test.hostname;
|
||||
if ("port" in test) url.port = test.port;
|
||||
if ("pathname" in test) url.pathname = test.pathname;
|
||||
if ("search" in test) url.search = test.search;
|
||||
if ("hash" in test) url.hash = test.hash;
|
||||
|
||||
if ('href' in test) url.href = test.href;
|
||||
if ('protocol' in test) url.protocol = test.protocol;
|
||||
if ('username' in test && test.username) url.username = test.username;
|
||||
if ('password' in test && test.password) url.password = test.password;
|
||||
if ('host' in test) url.host = test.host;
|
||||
if ('hostname' in test) url.hostname = test.hostname;
|
||||
if ('port' in test) url.port = test.port;
|
||||
if ('pathname' in test) url.pathname = test.pathname;
|
||||
if ('search' in test) url.search = test.search;
|
||||
if ('hash' in test) url.hash = test.hash;
|
||||
if ("href" in test) is(url.href, test.href, "href");
|
||||
if ("origin" in test) is(url.origin, test.origin, "origin");
|
||||
if ("protocol" in test) is(url.protocol, test.protocol, "protocol");
|
||||
if ("username" in test) is(url.username, test.username, "username");
|
||||
if ("password" in test) is(url.password, test.password, "password");
|
||||
if ("host" in test) is(url.host, test.host, "host");
|
||||
if ("hostname" in test) is(test.hostname, url.hostname, "hostname");
|
||||
if ("port" in test) is(test.port, url.port, "port");
|
||||
if ("pathname" in test) is(test.pathname, url.pathname, "pathname");
|
||||
if ("search" in test) is(test.search, url.search, "search");
|
||||
if ("hash" in test) is(test.hash, url.hash, "hash");
|
||||
|
||||
if ('href' in test) is(url.href, test.href, "href");
|
||||
if ('origin' in test) is(url.origin, test.origin, "origin");
|
||||
if ('protocol' in test) is(url.protocol, test.protocol, "protocol");
|
||||
if ('username' in test) is(url.username, test.username, "username");
|
||||
if ('password' in test) is(url.password, test.password, "password");
|
||||
if ('host' in test) is(url.host, test.host, "host");
|
||||
if ('hostname' in test) is(test.hostname, url.hostname, "hostname");
|
||||
if ('port' in test) is(test.port, url.port, "port");
|
||||
if ('pathname' in test) is(test.pathname, url.pathname, "pathname");
|
||||
if ('search' in test) is(test.search, url.search, "search");
|
||||
if ('hash' in test) is(test.hash, url.hash, "hash");
|
||||
if ("href" in test) is(test.href, url + "", "stringify works");
|
||||
}
|
||||
</script>
|
||||
|
||||
if ('href' in test) is (test.href, url + '', 'stringify works');
|
||||
}
|
||||
<script>
|
||||
/** Test for Bug 991471 **/
|
||||
var url = new URL("http://localhost/");
|
||||
url.hostname = "";
|
||||
url.username = "tttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt";
|
||||
url.hostname = "www.mozilla.org";
|
||||
url.username = "";
|
||||
url.hostname = "www.mozilla.org";
|
||||
is(url.href, "http://www.mozilla.org/", "No parsing error with empty host");
|
||||
</script>
|
||||
|
||||
</script>
|
||||
<script>
|
||||
/** Test for Bug 996055 **/
|
||||
var url = new URL("http://localhost/");
|
||||
url.hostname = "";
|
||||
is(url.href, "http://localhost/", "Empty hostname is ignored");
|
||||
</script>
|
||||
|
||||
<script>
|
||||
/** Test for Bug 991471 **/
|
||||
var url = new URL("http://localhost/");
|
||||
url.hostname = "";
|
||||
url.username = "tttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt";
|
||||
url.hostname = "www.mozilla.org";
|
||||
url.username = "";
|
||||
url.hostname = "www.mozilla.org";
|
||||
is(url.href, "http://www.mozilla.org/", "No parsing error with empty host");
|
||||
</script>
|
||||
<script>
|
||||
/** Test for Bug 960014 **/
|
||||
var url = new URL("http://localhost/");
|
||||
url.hostname = "[2001::1]";
|
||||
is(url.hostname, "[2001::1]", "IPv6 hostname");
|
||||
is(url.href, "http://[2001::1]/");
|
||||
|
||||
<script>
|
||||
/** Test for Bug 996055 **/
|
||||
var url = new URL("http://localhost/");
|
||||
url.hostname = "";
|
||||
is(url.href, "http://localhost/", "Empty hostname is ignored");
|
||||
</script>
|
||||
url.hostname = "[::192.9.5.5]";
|
||||
is(url.hostname, "[::192.9.5.5]", "IPv6 hostname");
|
||||
is(url.href, "http://[::192.9.5.5]/");
|
||||
|
||||
<script>
|
||||
/** Test for Bug 960014 **/
|
||||
var url = new URL("http://localhost/");
|
||||
url.hostname = "[2001::1]";
|
||||
is(url.hostname, "[2001::1]", "IPv6 hostname");
|
||||
is(url.href, "http://[2001::1]/");
|
||||
url = new URL("http://localhost/");
|
||||
url.hostname = "[::]";
|
||||
is(url.hostname, "[::]", "IPv6 hostname");
|
||||
|
||||
url.hostname = "[::192.9.5.5]";
|
||||
is(url.hostname, "[::192.9.5.5]", "IPv6 hostname");
|
||||
is(url.href, "http://[::192.9.5.5]/");
|
||||
url = new URL("http://localhost/");
|
||||
url.host = "[2001::1]:30";
|
||||
is(url.hostname, "[2001::1]", "IPv6 hostname");
|
||||
is(url.port, "30", "Port");
|
||||
is(url.host, "[2001::1]:30", "IPv6 host");
|
||||
|
||||
url = new URL("http://localhost/");
|
||||
url.hostname = "[::]";
|
||||
is(url.hostname, "[::]", "IPv6 hostname");
|
||||
url = new URL("http://localhost/");
|
||||
// This should silently fail since it's missing the brackets
|
||||
url.hostname = "2001::1";
|
||||
is(url.hostname, "localhost", "Setting bad hostname fails");
|
||||
</script>
|
||||
|
||||
url = new URL("http://localhost/");
|
||||
url.host = "[2001::1]:30";
|
||||
is(url.hostname, "[2001::1]", "IPv6 hostname");
|
||||
is(url.port, "30", "Port");
|
||||
is(url.host, "[2001::1]:30", "IPv6 host");
|
||||
<script>
|
||||
var blob = new Blob(["a"]);
|
||||
var url = URL.createObjectURL(blob);
|
||||
|
||||
url = new URL("http://localhost/");
|
||||
// This should silently fail since it's missing the brackets
|
||||
url.hostname = "2001::1";
|
||||
is(url.hostname, "localhost", "Setting bad hostname fails");
|
||||
</script>
|
||||
var u = new URL(url);
|
||||
ok(u.origin, "http://mochi.test:8888", "The URL generated from a blob URI has an origin");
|
||||
</script>
|
||||
|
||||
<script>
|
||||
var blob = new Blob(['a']);
|
||||
var url = URL.createObjectURL(blob);
|
||||
<script>
|
||||
var blob = new Blob(["a"]);
|
||||
var url = URL.createObjectURL(blob);
|
||||
|
||||
var u = new URL(url);
|
||||
ok(u.origin, 'http://mochi.test:8888', "The URL generated from a blob URI has an origin");
|
||||
</script>
|
||||
var a = document.createElement("A");
|
||||
a.href = url;
|
||||
ok(a.origin, "http://mochi.test:8888", "The 'a' element has the correct origin");
|
||||
</script>
|
||||
|
||||
<script>
|
||||
var blob = new Blob(['a']);
|
||||
var url = URL.createObjectURL(blob);
|
||||
<script>
|
||||
var blob = new Blob(["a"]);
|
||||
var url = URL.createObjectURL(blob);
|
||||
URL.revokeObjectURL(url);
|
||||
URL.revokeObjectURL(url);
|
||||
ok(true, "Calling revokeObjectURL twice should be ok");
|
||||
</script>
|
||||
|
||||
var a = document.createElement('A');
|
||||
a.href = url;
|
||||
ok(a.origin, 'http://mochi.test:8888', "The 'a' element has the correct origin");
|
||||
</script>
|
||||
<script>
|
||||
URL.revokeObjectURL("blob:something");
|
||||
ok(true, "This should not throw.");
|
||||
</script>
|
||||
|
||||
<script>
|
||||
var blob = new Blob(['a']);
|
||||
var url = URL.createObjectURL(blob);
|
||||
URL.revokeObjectURL(url);
|
||||
URL.revokeObjectURL(url);
|
||||
ok(true, "Calling revokeObjectURL twice should be ok");
|
||||
</script>
|
||||
<script>
|
||||
var base = new URL("http:\\\\test.com\\path/to\\file?query\\backslash#hash\\");
|
||||
is(base.href, "http://test.com/path/to/file?query\\backslash#hash\\");
|
||||
|
||||
<script>
|
||||
URL.revokeObjectURL('blob:something');
|
||||
ok(true, "This should not throw.");
|
||||
</script>
|
||||
var url = new URL("..\\", base);
|
||||
is(url.href, "http://test.com/path/");
|
||||
|
||||
<script>
|
||||
var base = new URL("http:\\\\test.com\\path/to\\file?query\\backslash#hash\\");
|
||||
is(base.href, "http://test.com/path/to/file?query\\backslash#hash\\");
|
||||
url = new URL("\\test", base);
|
||||
is(url.href, "http://test.com/test");
|
||||
|
||||
var url = new URL("..\\", base);
|
||||
is(url.href, "http://test.com/path/");
|
||||
url = new URL("\\test\\", base);
|
||||
is(url.href, "http://test.com/test/");
|
||||
|
||||
url = new URL("\\test", base);
|
||||
is(url.href, "http://test.com/test");
|
||||
url = new URL("http://example.org/test", base);
|
||||
is(url.href, "http://example.org/test");
|
||||
|
||||
url = new URL("\\test\\", base);
|
||||
is(url.href, "http://test.com/test/");
|
||||
url = new URL("ftp://tmp/test", base);
|
||||
is(url.href, "ftp://tmp/test");
|
||||
|
||||
url = new URL("http://example.org/test", base);
|
||||
is(url.href, "http://example.org/test");
|
||||
url = new URL("ftp:\\\\tmp\\test", base);
|
||||
is(url.href, "ftp://tmp/test");
|
||||
|
||||
url = new URL("ftp://tmp/test", base);
|
||||
is(url.href, "ftp://tmp/test");
|
||||
url = new URL("scheme://tmp\\test", base);
|
||||
is(url.href, "scheme://tmp\\test");
|
||||
</script>
|
||||
|
||||
url = new URL("ftp:\\\\tmp\\test", base);
|
||||
is(url.href, "ftp://tmp/test");
|
||||
<script>
|
||||
/** Test for Bug 1275746 **/
|
||||
SimpleTest.doesThrow(() => {
|
||||
var url = new URL("http:");
|
||||
}, "http: is not a valid URL");
|
||||
SimpleTest.doesThrow(() => {
|
||||
var url = new URL("http:///");
|
||||
}, "http: is not a valid URL");
|
||||
|
||||
url = new URL("scheme://tmp\\test", base);
|
||||
is(url.href, "scheme://tmp\\test");
|
||||
</script>
|
||||
var url = new URL("file:");
|
||||
is(url.href, "file:///", "Parsing file: should work.");
|
||||
|
||||
<script>
|
||||
/** Test for Bug 1275746 **/
|
||||
SimpleTest.doesThrow(() => { var url = new URL("http:"); }, "http: is not a valid URL");
|
||||
SimpleTest.doesThrow(() => { var url = new URL("http:///"); }, "http: is not a valid URL");
|
||||
url = new URL("file:///");
|
||||
is(url.href, "file:///", "Parsing file:/// should work.");
|
||||
</script>
|
||||
|
||||
var url = new URL("file:");
|
||||
is(url.href, "file:///", "Parsing file: should work.");
|
||||
<script>
|
||||
var url = new URL("scheme:path/to/file?query#hash");
|
||||
is(url.href, "scheme:path/to/file?query#hash");
|
||||
is(url.pathname, "path/to/file");
|
||||
is(url.search, "?query");
|
||||
is(url.hash, "#hash");
|
||||
|
||||
url = new URL("file:///");
|
||||
is(url.href, "file:///", "Parsing file:/// should work.");
|
||||
</script>
|
||||
// pathname cannot be overwritten.
|
||||
url.pathname = "new/path?newquery#newhash";
|
||||
is(url.href, "scheme:path/to/file?query#hash");
|
||||
|
||||
<script>
|
||||
var url = new URL("scheme:path/to/file?query#hash");
|
||||
is(url.href, "scheme:path/to/file?query#hash");
|
||||
is(url.pathname, "path/to/file");
|
||||
is(url.search, "?query");
|
||||
is(url.hash, "#hash");
|
||||
// don't escape '#' until we implement a spec-compliant parser.
|
||||
url.search = "?newquery#newhash";
|
||||
is(url.href, "scheme:path/to/file?newquery#newhash#hash");
|
||||
|
||||
// pathname cannot be overwritten.
|
||||
url.pathname = "new/path?newquery#newhash";
|
||||
is(url.href, "scheme:path/to/file?query#hash");
|
||||
// nulls get encoded, whitespace gets stripped
|
||||
url = new URL("scheme:pa\0\nth/to/fi\0\nle?qu\0\nery#ha\0\nsh");
|
||||
is(url.href, "scheme:pa%00th/to/fi%00le?qu%00ery#ha%00sh");
|
||||
|
||||
// don't escape '#' until we implement a spec-compliant parser.
|
||||
url.search = "?newquery#newhash";
|
||||
is(url.href, "scheme:path/to/file?newquery#newhash#hash");
|
||||
url.search = "new\0\nquery";
|
||||
is(url.href, "scheme:pa%00th/to/fi%00le?new%00%0Aquery#ha%00sh");
|
||||
url.hash = "new\0\nhash";
|
||||
is(url.href, "scheme:pa%00th/to/fi%00le?new%00%0Aquery#new%00%0Ahash");
|
||||
|
||||
// nulls get encoded, whitespace gets stripped
|
||||
url = new URL("scheme:pa\0\nth/to/fi\0\nle?qu\0\nery#ha\0\nsh");
|
||||
is(url.href, "scheme:pa%00th/to/fi%00le?qu%00ery#ha%00sh");
|
||||
url = new URL("scheme:path#hash");
|
||||
is(url.href, "scheme:path#hash");
|
||||
url.search = "query";
|
||||
is(url.href, "scheme:path?query#hash");
|
||||
url.hash = "";
|
||||
is(url.href, "scheme:path?query");
|
||||
url.hash = "newhash";
|
||||
is(url.href, "scheme:path?query#newhash");
|
||||
url.search = "";
|
||||
is(url.href, "scheme:path#newhash");
|
||||
|
||||
url.search = "new\0\nquery";
|
||||
is(url.href, "scheme:pa%00th/to/fi%00le?new%00%0Aquery#ha%00sh");
|
||||
url.hash = "new\0\nhash";
|
||||
is(url.href, "scheme:pa%00th/to/fi%00le?new%00%0Aquery#new%00%0Ahash");
|
||||
// we don't implement a spec-compliant parser yet.
|
||||
// make sure we are bug compatible with existing implementations.
|
||||
url = new URL('data:text/html,<a href="http://example.org/?q">Link</a>');
|
||||
is(url.href, 'data:text/html,<a%20href="http://example.org/?q">Link</a>');
|
||||
</script>
|
||||
|
||||
url = new URL("scheme:path#hash");
|
||||
is(url.href, "scheme:path#hash");
|
||||
url.search = "query";
|
||||
is(url.href, "scheme:path?query#hash");
|
||||
url.hash = "";
|
||||
is(url.href, "scheme:path?query");
|
||||
url.hash = "newhash";
|
||||
is(url.href, "scheme:path?query#newhash");
|
||||
url.search = "";
|
||||
is(url.href, "scheme:path#newhash");
|
||||
<script>
|
||||
is(
|
||||
new URL("/static/client/runtime.js", "x:/").href,
|
||||
"x:/static/client/runtime.js",
|
||||
"URL constructor accepts root-relative input with x:/ base",
|
||||
);
|
||||
ok("canParse" in URL, "URL.canParse exists");
|
||||
ok(
|
||||
URL.canParse("/static/client/runtime.js", "x:/"),
|
||||
"URL.canParse accepts root-relative input with x:/ base",
|
||||
);
|
||||
ok(
|
||||
URL.canParse("/static/client/runtime.js", document.baseURI),
|
||||
"URL.canParse accepts root-relative input with document base",
|
||||
);
|
||||
ok(!URL.canParse("/static/client/runtime.js"), "URL.canParse rejects root-relative input without base");
|
||||
ok(
|
||||
!URL.canParse("/static/client/runtime.js", "mailto:test@example.com"),
|
||||
"URL.canParse rejects root-relative input against opaque mailto: base",
|
||||
);
|
||||
SimpleTest.doesThrow(() => {
|
||||
new URL("/static/client/runtime.js", "mailto:test@example.com");
|
||||
}, "constructor rejects root-relative input against opaque mailto: base");
|
||||
</script>
|
||||
|
||||
// we don't implement a spec-compliant parser yet.
|
||||
// make sure we are bug compatible with existing implementations.
|
||||
url = new URL("data:text/html,<a href=\"http://example.org/?q\">Link</a>");
|
||||
is(url.href, "data:text/html,<a%20href=\"http://example.org/?q\">Link</a>");
|
||||
</script>
|
||||
|
||||
<script>
|
||||
var u = new URL('http://www.example.org');
|
||||
ok(u.toJSON(), 'http://www.example.org', "URL.toJSON()");
|
||||
is(JSON.stringify(u), "\"http://www.example.org/\"", "JSON.stringify(u) works");
|
||||
</script>
|
||||
</body>
|
||||
<script>
|
||||
var u = new URL("http://www.example.org");
|
||||
ok(u.toJSON(), "http://www.example.org", "URL.toJSON()");
|
||||
is(JSON.stringify(u), '"http://www.example.org/"', "JSON.stringify(u) works");
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
+220
-176
@@ -1,212 +1,224 @@
|
||||
function ok(a, msg) {
|
||||
dump("OK: " + !!a + " => " + a + " " + msg + "\n");
|
||||
postMessage({type: 'status', status: !!a, msg: a + ": " + msg });
|
||||
postMessage({ type: "status", status: !!a, msg: a + ": " + msg });
|
||||
}
|
||||
|
||||
function is(a, b, msg) {
|
||||
dump("IS: " + (a===b) + " => " + a + " | " + b + " " + msg + "\n");
|
||||
postMessage({type: 'status', status: a === b, msg: a + " === " + b + ": " + msg });
|
||||
dump("IS: " + (a === b) + " => " + a + " | " + b + " " + msg + "\n");
|
||||
postMessage({
|
||||
type: "status",
|
||||
status: a === b,
|
||||
msg: a + " === " + b + ": " + msg,
|
||||
});
|
||||
}
|
||||
|
||||
onmessage = function() {
|
||||
onmessage = function () {
|
||||
status = false;
|
||||
try {
|
||||
if ((URL instanceof Object)) {
|
||||
if (URL instanceof Object) {
|
||||
status = true;
|
||||
}
|
||||
} catch(e) {
|
||||
}
|
||||
} catch (e) {}
|
||||
|
||||
var tests = [
|
||||
{ url: 'http://www.abc.com',
|
||||
{
|
||||
url: "http://www.abc.com",
|
||||
base: undefined,
|
||||
error: false,
|
||||
href: 'http://www.abc.com/',
|
||||
origin: 'http://www.abc.com',
|
||||
protocol: 'http:',
|
||||
username: '',
|
||||
password: '',
|
||||
host: 'www.abc.com',
|
||||
hostname: 'www.abc.com',
|
||||
port: '',
|
||||
pathname: '/',
|
||||
search: '',
|
||||
hash: ''
|
||||
href: "http://www.abc.com/",
|
||||
origin: "http://www.abc.com",
|
||||
protocol: "http:",
|
||||
username: "",
|
||||
password: "",
|
||||
host: "www.abc.com",
|
||||
hostname: "www.abc.com",
|
||||
port: "",
|
||||
pathname: "/",
|
||||
search: "",
|
||||
hash: "",
|
||||
},
|
||||
{ url: 'ftp://auser:apw@www.abc.com',
|
||||
{
|
||||
url: "ftp://auser:apw@www.abc.com",
|
||||
base: undefined,
|
||||
error: false,
|
||||
href: 'ftp://auser:apw@www.abc.com/',
|
||||
origin: 'ftp://www.abc.com',
|
||||
protocol: 'ftp:',
|
||||
username: 'auser',
|
||||
password: 'apw',
|
||||
host: 'www.abc.com',
|
||||
hostname: 'www.abc.com',
|
||||
port: '',
|
||||
pathname: '/',
|
||||
search: '',
|
||||
hash: ''
|
||||
href: "ftp://auser:apw@www.abc.com/",
|
||||
origin: "ftp://www.abc.com",
|
||||
protocol: "ftp:",
|
||||
username: "auser",
|
||||
password: "apw",
|
||||
host: "www.abc.com",
|
||||
hostname: "www.abc.com",
|
||||
port: "",
|
||||
pathname: "/",
|
||||
search: "",
|
||||
hash: "",
|
||||
},
|
||||
{ url: 'http://www.abc.com:90/apath/',
|
||||
{
|
||||
url: "http://www.abc.com:90/apath/",
|
||||
base: undefined,
|
||||
error: false,
|
||||
href: 'http://www.abc.com:90/apath/',
|
||||
origin: 'http://www.abc.com:90',
|
||||
protocol: 'http:',
|
||||
username: '',
|
||||
password: '',
|
||||
host: 'www.abc.com:90',
|
||||
hostname: 'www.abc.com',
|
||||
port: '90',
|
||||
pathname: '/apath/',
|
||||
search: '',
|
||||
hash: ''
|
||||
href: "http://www.abc.com:90/apath/",
|
||||
origin: "http://www.abc.com:90",
|
||||
protocol: "http:",
|
||||
username: "",
|
||||
password: "",
|
||||
host: "www.abc.com:90",
|
||||
hostname: "www.abc.com",
|
||||
port: "90",
|
||||
pathname: "/apath/",
|
||||
search: "",
|
||||
hash: "",
|
||||
},
|
||||
{ url: 'http://www.abc.com/apath/afile.txt#ahash',
|
||||
{
|
||||
url: "http://www.abc.com/apath/afile.txt#ahash",
|
||||
base: undefined,
|
||||
error: false,
|
||||
href: 'http://www.abc.com/apath/afile.txt#ahash',
|
||||
origin: 'http://www.abc.com',
|
||||
protocol: 'http:',
|
||||
username: '',
|
||||
password: '',
|
||||
host: 'www.abc.com',
|
||||
hostname: 'www.abc.com',
|
||||
port: '',
|
||||
pathname: '/apath/afile.txt',
|
||||
search: '',
|
||||
hash: '#ahash'
|
||||
href: "http://www.abc.com/apath/afile.txt#ahash",
|
||||
origin: "http://www.abc.com",
|
||||
protocol: "http:",
|
||||
username: "",
|
||||
password: "",
|
||||
host: "www.abc.com",
|
||||
hostname: "www.abc.com",
|
||||
port: "",
|
||||
pathname: "/apath/afile.txt",
|
||||
search: "",
|
||||
hash: "#ahash",
|
||||
},
|
||||
{ url: 'http://example.com/?test#hash',
|
||||
{
|
||||
url: "http://example.com/?test#hash",
|
||||
base: undefined,
|
||||
error: false,
|
||||
href: 'http://example.com/?test#hash',
|
||||
origin: 'http://example.com',
|
||||
protocol: 'http:',
|
||||
username: '',
|
||||
password: '',
|
||||
host: 'example.com',
|
||||
hostname: 'example.com',
|
||||
port: '',
|
||||
pathname: '/',
|
||||
search: '?test',
|
||||
hash: '#hash'
|
||||
href: "http://example.com/?test#hash",
|
||||
origin: "http://example.com",
|
||||
protocol: "http:",
|
||||
username: "",
|
||||
password: "",
|
||||
host: "example.com",
|
||||
hostname: "example.com",
|
||||
port: "",
|
||||
pathname: "/",
|
||||
search: "?test",
|
||||
hash: "#hash",
|
||||
},
|
||||
{ url: 'http://example.com/?test',
|
||||
{
|
||||
url: "http://example.com/?test",
|
||||
base: undefined,
|
||||
error: false,
|
||||
href: 'http://example.com/?test',
|
||||
origin: 'http://example.com',
|
||||
protocol: 'http:',
|
||||
username: '',
|
||||
password: '',
|
||||
host: 'example.com',
|
||||
hostname: 'example.com',
|
||||
port: '',
|
||||
pathname: '/',
|
||||
search: '?test',
|
||||
hash: ''
|
||||
href: "http://example.com/?test",
|
||||
origin: "http://example.com",
|
||||
protocol: "http:",
|
||||
username: "",
|
||||
password: "",
|
||||
host: "example.com",
|
||||
hostname: "example.com",
|
||||
port: "",
|
||||
pathname: "/",
|
||||
search: "?test",
|
||||
hash: "",
|
||||
},
|
||||
{ url: 'http://example.com/carrot#question%3f',
|
||||
{
|
||||
url: "http://example.com/carrot#question%3f",
|
||||
base: undefined,
|
||||
error: false,
|
||||
hash: '#question%3f'
|
||||
hash: "#question%3f",
|
||||
},
|
||||
{ url: 'https://example.com:4443?',
|
||||
{
|
||||
url: "https://example.com:4443?",
|
||||
base: undefined,
|
||||
error: false,
|
||||
protocol: 'https:',
|
||||
port: '4443',
|
||||
pathname: '/',
|
||||
hash: '',
|
||||
search: ''
|
||||
protocol: "https:",
|
||||
port: "4443",
|
||||
pathname: "/",
|
||||
hash: "",
|
||||
search: "",
|
||||
},
|
||||
{ url: 'http://www.abc.com/apath/afile.txt#ahash?asearch',
|
||||
{
|
||||
url: "http://www.abc.com/apath/afile.txt#ahash?asearch",
|
||||
base: undefined,
|
||||
error: false,
|
||||
href: 'http://www.abc.com/apath/afile.txt#ahash?asearch',
|
||||
protocol: 'http:',
|
||||
pathname: '/apath/afile.txt',
|
||||
hash: '#ahash?asearch',
|
||||
search: ''
|
||||
href: "http://www.abc.com/apath/afile.txt#ahash?asearch",
|
||||
protocol: "http:",
|
||||
pathname: "/apath/afile.txt",
|
||||
hash: "#ahash?asearch",
|
||||
search: "",
|
||||
},
|
||||
{ url: 'http://www.abc.com/apath/afile.txt?asearch#ahash',
|
||||
{
|
||||
url: "http://www.abc.com/apath/afile.txt?asearch#ahash",
|
||||
base: undefined,
|
||||
error: false,
|
||||
href: 'http://www.abc.com/apath/afile.txt?asearch#ahash',
|
||||
protocol: 'http:',
|
||||
pathname: '/apath/afile.txt',
|
||||
hash: '#ahash',
|
||||
search: '?asearch'
|
||||
href: "http://www.abc.com/apath/afile.txt?asearch#ahash",
|
||||
protocol: "http:",
|
||||
pathname: "/apath/afile.txt",
|
||||
hash: "#ahash",
|
||||
search: "?asearch",
|
||||
},
|
||||
{ url: 'http://abc.com/apath/afile.txt?#ahash',
|
||||
{
|
||||
url: "http://abc.com/apath/afile.txt?#ahash",
|
||||
base: undefined,
|
||||
error: false,
|
||||
pathname: '/apath/afile.txt',
|
||||
hash: '#ahash',
|
||||
search: ''
|
||||
pathname: "/apath/afile.txt",
|
||||
hash: "#ahash",
|
||||
search: "",
|
||||
},
|
||||
{ url: 'http://auser:apassword@www.abc.com:90/apath/afile.txt?asearch#ahash',
|
||||
{
|
||||
url: "http://auser:apassword@www.abc.com:90/apath/afile.txt?asearch#ahash",
|
||||
base: undefined,
|
||||
error: false,
|
||||
protocol: 'http:',
|
||||
username: 'auser',
|
||||
password: 'apassword',
|
||||
host: 'www.abc.com:90',
|
||||
hostname: 'www.abc.com',
|
||||
port: '90',
|
||||
pathname: '/apath/afile.txt',
|
||||
hash: '#ahash',
|
||||
search: '?asearch',
|
||||
origin: 'http://www.abc.com:90'
|
||||
protocol: "http:",
|
||||
username: "auser",
|
||||
password: "apassword",
|
||||
host: "www.abc.com:90",
|
||||
hostname: "www.abc.com",
|
||||
port: "90",
|
||||
pathname: "/apath/afile.txt",
|
||||
hash: "#ahash",
|
||||
search: "?asearch",
|
||||
origin: "http://www.abc.com:90",
|
||||
},
|
||||
|
||||
{ url: '/foo#bar',
|
||||
base: 'www.test.org',
|
||||
error: true,
|
||||
},
|
||||
{ url: '/foo#bar',
|
||||
base: null,
|
||||
error: true,
|
||||
},
|
||||
{ url: '/foo#bar',
|
||||
base: 42,
|
||||
error: true,
|
||||
},
|
||||
{ url: 'ftp://ftp.something.net',
|
||||
{ url: "/foo#bar", base: "www.test.org", error: true },
|
||||
{ url: "/foo#bar", base: null, error: true },
|
||||
{ url: "/foo#bar", base: 42, error: true },
|
||||
{
|
||||
url: "ftp://ftp.something.net",
|
||||
base: undefined,
|
||||
error: false,
|
||||
protocol: 'ftp:',
|
||||
protocol: "ftp:",
|
||||
},
|
||||
{ url: 'file:///tmp/file',
|
||||
{
|
||||
url: "file:///tmp/file",
|
||||
base: undefined,
|
||||
error: false,
|
||||
protocol: 'file:',
|
||||
protocol: "file:",
|
||||
},
|
||||
{ url: 'gopher://gopher.something.net',
|
||||
{
|
||||
url: "gopher://gopher.something.net",
|
||||
base: undefined,
|
||||
error: false,
|
||||
protocol: 'gopher:',
|
||||
protocol: "gopher:",
|
||||
},
|
||||
{ url: 'ws://ws.something.net',
|
||||
{
|
||||
url: "ws://ws.something.net",
|
||||
base: undefined,
|
||||
error: false,
|
||||
protocol: 'ws:',
|
||||
protocol: "ws:",
|
||||
},
|
||||
{ url: 'wss://ws.something.net',
|
||||
{
|
||||
url: "wss://ws.something.net",
|
||||
base: undefined,
|
||||
error: false,
|
||||
protocol: 'wss:',
|
||||
protocol: "wss:",
|
||||
},
|
||||
{ url: 'foo://foo.something.net',
|
||||
{
|
||||
url: "foo://foo.something.net",
|
||||
base: undefined,
|
||||
error: false,
|
||||
protocol: 'foo:',
|
||||
protocol: "foo:",
|
||||
},
|
||||
];
|
||||
|
||||
while(tests.length) {
|
||||
while (tests.length) {
|
||||
var test = tests.shift();
|
||||
|
||||
var error = false;
|
||||
@@ -217,7 +229,7 @@ onmessage = function() {
|
||||
} else {
|
||||
url = new URL(test.url);
|
||||
}
|
||||
} catch(e) {
|
||||
} catch (e) {
|
||||
error = true;
|
||||
}
|
||||
|
||||
@@ -226,47 +238,79 @@ onmessage = function() {
|
||||
continue;
|
||||
}
|
||||
|
||||
if ('href' in test) is(url.href, test.href, "href");
|
||||
if ('origin' in test) is(url.origin, test.origin, "origin");
|
||||
if ('protocol' in test) is(url.protocol, test.protocol, "protocol");
|
||||
if ('username' in test) is(url.username, test.username, "username");
|
||||
if ('password' in test) is(url.password, test.password, "password");
|
||||
if ('host' in test) is(url.host, test.host, "host");
|
||||
if ('hostname' in test) is(url.hostname, test.hostname, "hostname");
|
||||
if ('port' in test) is(url.port, test.port, "port");
|
||||
if ('pathname' in test) is(url.pathname, test.pathname, "pathname");
|
||||
if ('search' in test) is(url.search, test.search, "search");
|
||||
if ('hash' in test) is(url.hash, test.hash, "hash");
|
||||
if ("href" in test) is(url.href, test.href, "href");
|
||||
if ("origin" in test) is(url.origin, test.origin, "origin");
|
||||
if ("protocol" in test) is(url.protocol, test.protocol, "protocol");
|
||||
if ("username" in test) is(url.username, test.username, "username");
|
||||
if ("password" in test) is(url.password, test.password, "password");
|
||||
if ("host" in test) is(url.host, test.host, "host");
|
||||
if ("hostname" in test) is(url.hostname, test.hostname, "hostname");
|
||||
if ("port" in test) is(url.port, test.port, "port");
|
||||
if ("pathname" in test) is(url.pathname, test.pathname, "pathname");
|
||||
if ("search" in test) is(url.search, test.search, "search");
|
||||
if ("hash" in test) is(url.hash, test.hash, "hash");
|
||||
|
||||
url = new URL('https://www.example.net/what#foo?bar');
|
||||
url = new URL("https://www.example.net/what#foo?bar");
|
||||
ok(url, "Url exists!");
|
||||
|
||||
if ('href' in test) url.href = test.href;
|
||||
if ('protocol' in test) url.protocol = test.protocol;
|
||||
if ('username' in test && test.username) url.username = test.username;
|
||||
if ('password' in test && test.password) url.password = test.password;
|
||||
if ('host' in test) url.host = test.host;
|
||||
if ('hostname' in test) url.hostname = test.hostname;
|
||||
if ('port' in test) url.port = test.port;
|
||||
if ('pathname' in test) url.pathname = test.pathname;
|
||||
if ('search' in test) url.search = test.search;
|
||||
if ('hash' in test) url.hash = test.hash;
|
||||
if ("href" in test) url.href = test.href;
|
||||
if ("protocol" in test) url.protocol = test.protocol;
|
||||
if ("username" in test && test.username) url.username = test.username;
|
||||
if ("password" in test && test.password) url.password = test.password;
|
||||
if ("host" in test) url.host = test.host;
|
||||
if ("hostname" in test) url.hostname = test.hostname;
|
||||
if ("port" in test) url.port = test.port;
|
||||
if ("pathname" in test) url.pathname = test.pathname;
|
||||
if ("search" in test) url.search = test.search;
|
||||
if ("hash" in test) url.hash = test.hash;
|
||||
|
||||
if ('href' in test) is(url.href, test.href, "href");
|
||||
if ('origin' in test) is(url.origin, test.origin, "origin");
|
||||
if ('protocol' in test) is(url.protocol, test.protocol, "protocol");
|
||||
if ('username' in test) is(url.username, test.username, "username");
|
||||
if ('password' in test) is(url.password, test.password, "password");
|
||||
if ('host' in test) is(url.host, test.host, "host");
|
||||
if ('hostname' in test) is(test.hostname, url.hostname, "hostname");
|
||||
if ('port' in test) is(test.port, url.port, "port");
|
||||
if ('pathname' in test) is(test.pathname, url.pathname, "pathname");
|
||||
if ('search' in test) is(test.search, url.search, "search");
|
||||
if ('hash' in test) is(test.hash, url.hash, "hash");
|
||||
if ("href" in test) is(url.href, test.href, "href");
|
||||
if ("origin" in test) is(url.origin, test.origin, "origin");
|
||||
if ("protocol" in test) is(url.protocol, test.protocol, "protocol");
|
||||
if ("username" in test) is(url.username, test.username, "username");
|
||||
if ("password" in test) is(url.password, test.password, "password");
|
||||
if ("host" in test) is(url.host, test.host, "host");
|
||||
if ("hostname" in test) is(test.hostname, url.hostname, "hostname");
|
||||
if ("port" in test) is(test.port, url.port, "port");
|
||||
if ("pathname" in test) is(test.pathname, url.pathname, "pathname");
|
||||
if ("search" in test) is(test.search, url.search, "search");
|
||||
if ("hash" in test) is(test.hash, url.hash, "hash");
|
||||
|
||||
if ('href' in test) is (test.href, url + '', 'stringify works');
|
||||
if ("href" in test) is(test.href, url + "", "stringify works");
|
||||
}
|
||||
|
||||
postMessage({type: 'finish' });
|
||||
}
|
||||
is(
|
||||
new URL("/static/client/runtime.js", "x:/").href,
|
||||
"x:/static/client/runtime.js",
|
||||
"URL constructor accepts root-relative input with x:/ base",
|
||||
);
|
||||
ok("canParse" in URL, "URL.canParse exists");
|
||||
ok(
|
||||
URL.canParse("/static/client/runtime.js", "x:/"),
|
||||
"URL.canParse accepts root-relative input with x:/ base",
|
||||
);
|
||||
ok(
|
||||
URL.canParse("/static/client/runtime.js", self.location.href),
|
||||
"URL.canParse accepts root-relative input with worker location base",
|
||||
);
|
||||
ok(
|
||||
!URL.canParse("/static/client/runtime.js"),
|
||||
"URL.canParse rejects root-relative input without base",
|
||||
);
|
||||
ok(
|
||||
!URL.canParse("/static/client/runtime.js", "mailto:test@example.com"),
|
||||
"URL.canParse rejects root-relative input against opaque mailto: base",
|
||||
);
|
||||
let mailtoRelativeFailed = false;
|
||||
try {
|
||||
new URL("/static/client/runtime.js", "mailto:test@example.com");
|
||||
} catch (e) {
|
||||
mailtoRelativeFailed = true;
|
||||
}
|
||||
ok(
|
||||
mailtoRelativeFailed,
|
||||
"constructor rejects root-relative input against opaque mailto: base",
|
||||
);
|
||||
|
||||
postMessage({ type: "finish" });
|
||||
};
|
||||
@@ -37,6 +37,10 @@ function TypedArrayLengthMethod() {
|
||||
return TypedArrayLength(this);
|
||||
}
|
||||
|
||||
function TypedArrayContentTypeIsBigIntMethod() {
|
||||
return IsBigInt64TypedArray(this) || IsBigUint64TypedArray(this);
|
||||
}
|
||||
|
||||
function GetAttachedArrayBuffer(tarray) {
|
||||
var buffer = ViewedArrayBufferIfReified(tarray);
|
||||
if (IsDetachedBuffer(buffer))
|
||||
@@ -895,6 +899,61 @@ function TypedArrayToReversed() {
|
||||
return A;
|
||||
}
|
||||
|
||||
// ES2023 23.2.3.36 %TypedArray%.prototype.with ( index, value )
|
||||
function TypedArrayWith(index, value) {
|
||||
// Step 1.
|
||||
var O = this;
|
||||
|
||||
// Step 2.
|
||||
// This function is not generic.
|
||||
// We want to make sure that we have an attached buffer, per spec prose.
|
||||
var isTypedArray = IsTypedArrayEnsuringArrayBuffer(O);
|
||||
|
||||
// If we got here, `this` is either a typed array or a wrapper for one.
|
||||
|
||||
// Step 3.
|
||||
var len;
|
||||
if (isTypedArray)
|
||||
len = TypedArrayLength(O);
|
||||
else
|
||||
len = callFunction(CallTypedArrayMethodIfWrapped, O, "TypedArrayLengthMethod");
|
||||
|
||||
// Steps 4-6.
|
||||
var relativeIndex = ToInteger(index);
|
||||
var actualIndex = relativeIndex >= 0 ? relativeIndex : len + relativeIndex;
|
||||
|
||||
// Steps 7-8.
|
||||
var isBigIntContentType;
|
||||
if (isTypedArray) {
|
||||
isBigIntContentType = callFunction(TypedArrayContentTypeIsBigIntMethod, O);
|
||||
} else {
|
||||
isBigIntContentType = callFunction(CallTypedArrayMethodIfWrapped, O,
|
||||
"TypedArrayContentTypeIsBigIntMethod");
|
||||
}
|
||||
var numericValue = isBigIntContentType ? ToBigInt(value) : ToNumber(value);
|
||||
|
||||
// Step 9.
|
||||
if (actualIndex < 0 || actualIndex >= len)
|
||||
ThrowRangeError(JSMSG_BAD_INDEX);
|
||||
|
||||
// Step 10.
|
||||
var A = TypedArrayCreateSameType(O, len);
|
||||
|
||||
// Steps 11-12.
|
||||
for (var k = 0; k < len; k++) {
|
||||
var fromValue;
|
||||
if (k === actualIndex) {
|
||||
fromValue = numericValue;
|
||||
} else {
|
||||
fromValue = O[k];
|
||||
}
|
||||
A[k] = fromValue;
|
||||
}
|
||||
|
||||
// Step 13.
|
||||
return A;
|
||||
}
|
||||
|
||||
// ES6 draft 20150220 22.2.3.22.1 %TypedArray%.prototype.set(array [, offset])
|
||||
function SetFromNonTypedArray(target, array, targetOffset, targetLength, targetBuffer) {
|
||||
assert(!IsPossiblyWrappedTypedArray(array),
|
||||
|
||||
@@ -97,6 +97,10 @@ assertThrowsInstanceOf(() => {
|
||||
array.values();
|
||||
}, TypeError);
|
||||
|
||||
assertThrowsInstanceOf(() => {
|
||||
array.with(POISON, POISON);
|
||||
}, TypeError);
|
||||
|
||||
assertThrowsInstanceOf(() => {
|
||||
array.every(POISON);
|
||||
}, TypeError);
|
||||
|
||||
@@ -0,0 +1,84 @@
|
||||
for (var constructor of anyTypedArrayConstructors) {
|
||||
assertEq(constructor.prototype.with.length, 2);
|
||||
|
||||
var original = new constructor([1, 2, 3, 4]);
|
||||
var updated = original.with(1, 9);
|
||||
assertDeepEq(updated, new constructor([1, 9, 3, 4]));
|
||||
assertDeepEq(original, new constructor([1, 2, 3, 4]));
|
||||
assertEq(updated === original, false);
|
||||
assertEq(updated.constructor, constructor);
|
||||
|
||||
assertDeepEq(new constructor([1, 2, 3]).with(-1, 7),
|
||||
new constructor([1, 2, 7]));
|
||||
assertDeepEq(new constructor([1, 2, 3]).with(-0, 7),
|
||||
new constructor([7, 2, 3]));
|
||||
|
||||
assertThrowsInstanceOf(() => {
|
||||
new constructor([1, 2, 3]).with(3, 9);
|
||||
}, RangeError);
|
||||
assertThrowsInstanceOf(() => {
|
||||
new constructor([1, 2, 3]).with(-4, 9);
|
||||
}, RangeError);
|
||||
|
||||
var valueOrder = [];
|
||||
var value = {
|
||||
valueOf() {
|
||||
valueOrder.push("valueOf");
|
||||
return 9;
|
||||
}
|
||||
};
|
||||
assertThrowsInstanceOf(() => {
|
||||
new constructor([1, 2, 3]).with(9, value);
|
||||
}, RangeError);
|
||||
assertEq(valueOrder.join(","), "valueOf");
|
||||
|
||||
var ctorIgnored = new constructor([5, 6, 7]);
|
||||
Object.defineProperty(ctorIgnored, "constructor", {
|
||||
get() {
|
||||
throw new Error("constructor accessor called");
|
||||
}
|
||||
});
|
||||
assertDeepEq(ctorIgnored.with(0, 4), new constructor([4, 6, 7]));
|
||||
|
||||
if (constructor === Uint8ClampedArray ||
|
||||
(typeof isSharedConstructor === "function" && isSharedConstructor(constructor) &&
|
||||
constructor.name === Uint8ClampedArray.name))
|
||||
{
|
||||
assertDeepEq(new constructor([0, 1, 2]).with(1, 2.6),
|
||||
new constructor([0, 3, 2]));
|
||||
}
|
||||
|
||||
var invalidReceivers = [undefined, null, 1, false, "", Symbol(), [], {}, /./,
|
||||
new Proxy(new constructor(), {})];
|
||||
invalidReceivers.forEach(invalidReceiver => {
|
||||
assertThrowsInstanceOf(() => {
|
||||
constructor.prototype.with.call(invalidReceiver, 0, 1);
|
||||
}, TypeError,
|
||||
"Assert that with fails if this value is not a TypedArray");
|
||||
});
|
||||
}
|
||||
|
||||
for (var constructor of typedArrayConstructors) {
|
||||
if (typeof newGlobal === "function") {
|
||||
var withFn = newGlobal()[constructor.name].prototype.with;
|
||||
var original = new constructor([3, 2, 1]);
|
||||
var updated = withFn.call(original, 1, 8);
|
||||
|
||||
assertDeepEq(updated, new constructor([3, 8, 1]));
|
||||
assertDeepEq(original, new constructor([3, 2, 1]));
|
||||
}
|
||||
}
|
||||
|
||||
if (typeof BigInt64Array === "function" && typeof BigUint64Array === "function") {
|
||||
var bigIntArray = new BigInt64Array([1n, 2n, 3n]);
|
||||
assertEq(BigInt64Array.prototype.with.length, 2);
|
||||
assertDeepEq(bigIntArray.with(1, 9n), new BigInt64Array([1n, 9n, 3n]));
|
||||
assertThrowsInstanceOf(() => bigIntArray.with(1, 9), TypeError);
|
||||
|
||||
var bigUintArray = new BigUint64Array([1n, 2n, 3n]);
|
||||
assertDeepEq(bigUintArray.with(2, 4n), new BigUint64Array([1n, 2n, 4n]));
|
||||
assertThrowsInstanceOf(() => bigUintArray.with(9, 1), TypeError);
|
||||
}
|
||||
|
||||
if (typeof reportCompare === "function")
|
||||
reportCompare(true, true);
|
||||
@@ -1629,6 +1629,7 @@ TypedArrayObject::protoFunctions[] = {
|
||||
JS_SELF_HOSTED_FN("reduceRight", "TypedArrayReduceRight", 1, 0),
|
||||
JS_SELF_HOSTED_FN("reverse", "TypedArrayReverse", 0, 0),
|
||||
JS_SELF_HOSTED_FN("toReversed", "TypedArrayToReversed", 0, 0),
|
||||
JS_SELF_HOSTED_FN("with", "TypedArrayWith", 2, 0),
|
||||
JS_SELF_HOSTED_FN("slice", "TypedArraySlice", 2, 0),
|
||||
JS_SELF_HOSTED_FN("some", "TypedArraySome", 1, 0),
|
||||
JS_SELF_HOSTED_FN("sort", "TypedArraySort", 1, 0),
|
||||
|
||||
@@ -48,10 +48,12 @@ static AVMutex mutex = AV_MUTEX_INITIALIZER;
|
||||
#define LINE_SZ 1024
|
||||
|
||||
#if HAVE_VALGRIND_VALGRIND_H
|
||||
#ifdef MOZ_VALGRIND
|
||||
#include <valgrind/valgrind.h>
|
||||
/* this is the log level at which valgrind will output a full backtrace */
|
||||
#define BACKTRACE_LOGLEVEL AV_LOG_ERROR
|
||||
#endif
|
||||
#endif
|
||||
|
||||
static int av_log_level = AV_LOG_INFO;
|
||||
static int flags;
|
||||
@@ -395,9 +397,11 @@ void av_log_default_callback(void* ptr, int level, const char* fmt, va_list vl)
|
||||
colored_fputs(av_clip(level >> 3, 0, NB_LEVELS - 1), tint >> 8, part[3].str);
|
||||
|
||||
#if CONFIG_VALGRIND_BACKTRACE
|
||||
#ifdef MOZ_VALGRIND
|
||||
if (level <= BACKTRACE_LOGLEVEL)
|
||||
VALGRIND_PRINTF_BACKTRACE("%s", "");
|
||||
#endif
|
||||
#endif
|
||||
end:
|
||||
av_bprint_finalize(part+3, NULL);
|
||||
ff_mutex_unlock(&mutex);
|
||||
|
||||
@@ -148,9 +148,6 @@
|
||||
#elif defined(__hppa__)
|
||||
#define ARCH_CPU_HPPA 1
|
||||
#define ARCH_CPU_32_BITS 1
|
||||
#elif defined(__ia64__)
|
||||
#define ARCH_CPU_IA64 1
|
||||
#define ARCH_CPU_64_BITS 1
|
||||
#elif defined(__s390x__)
|
||||
#define ARCH_CPU_S390X 1
|
||||
#define ARCH_CPU_64_BITS 1
|
||||
|
||||
@@ -571,17 +571,16 @@ using ::std::tuple_size;
|
||||
#endif // GTEST_HAS_TR1_TUPLE
|
||||
|
||||
// Determines whether clone(2) is supported.
|
||||
// Usually it will only be available on Linux, excluding
|
||||
// Linux on the Itanium architecture, and x86 Android.
|
||||
// Usually it will only be available on Linux.
|
||||
// Also see http://linux.die.net/man/2/clone.
|
||||
#ifndef GTEST_HAS_CLONE
|
||||
// The user didn't tell us, so we need to figure it out.
|
||||
|
||||
# if GTEST_OS_LINUX && !defined(__ia64__) && !(defined(ANDROID) && defined(__i386__))
|
||||
# if GTEST_OS_LINUX && !(defined(ANDROID) && defined(__i386__))
|
||||
# define GTEST_HAS_CLONE 1
|
||||
# else
|
||||
# define GTEST_HAS_CLONE 0
|
||||
# endif // GTEST_OS_LINUX && !defined(__ia64__) && !(defined(ANDROID) && defined(__i386__))
|
||||
# endif // GTEST_OS_LINUX && !(defined(ANDROID) && defined(__i386__))
|
||||
|
||||
#endif // GTEST_HAS_CLONE
|
||||
|
||||
|
||||
@@ -804,7 +804,6 @@ _target_machine_enumeration = _Enumeration(
|
||||
None,
|
||||
'MachineARM', # /MACHINE:ARM
|
||||
'MachineEBC', # /MACHINE:EBC
|
||||
'MachineIA64', # /MACHINE:IA64
|
||||
None,
|
||||
'MachineMIPS', # /MACHINE:MIPS
|
||||
'MachineMIPS16', # /MACHINE:MIPS16
|
||||
@@ -904,8 +903,7 @@ _MSBuildOnly(_link, 'ForceFileOutput',
|
||||
_MSBuildOnly(_link, 'CreateHotPatchableImage',
|
||||
_Enumeration([], new=['Enabled', # /FUNCTIONPADMIN
|
||||
'X86Image', # /FUNCTIONPADMIN:5
|
||||
'X64Image', # /FUNCTIONPADMIN:6
|
||||
'ItaniumImage'])) # /FUNCTIONPADMIN:16
|
||||
'X64Image'])) # /FUNCTIONPADMIN:6
|
||||
_MSBuildOnly(_link, 'CLRSupportLastError',
|
||||
_Enumeration([], new=['Enabled', # /CLRSupportLastError
|
||||
'Disabled', # /CLRSupportLastError:NO
|
||||
@@ -969,7 +967,6 @@ _Same(_midl, 'DefaultCharType',
|
||||
_Same(_midl, 'TargetEnvironment',
|
||||
_Enumeration(['NotSet',
|
||||
'Win32', # /env win32
|
||||
'Itanium', # /env ia64
|
||||
'X64'])) # /env x64
|
||||
_Same(_midl, 'EnableErrorChecks',
|
||||
_Enumeration(['EnableCustom',
|
||||
|
||||
@@ -484,7 +484,7 @@ class TestSequenceFunctions(unittest.TestCase):
|
||||
'StructMemberAlignment': 'NotSet',
|
||||
'SuppressCompilerWarnings': 'true',
|
||||
'SuppressStartupBanner': 'true',
|
||||
'TargetEnvironment': 'Itanium',
|
||||
'TargetEnvironment': 'InvalidTarget',
|
||||
'TrackerLogDirectory': 'a_folder',
|
||||
'TypeLibFormat': 'NewFormat',
|
||||
'TypeLibraryName': 'a_file_name',
|
||||
|
||||
@@ -152,8 +152,7 @@ BOOL AudioDeviceUtilityWindows::GetOSDisplayString(LPTSTR pszOS)
|
||||
|
||||
// Add 64-bit or 32-bit
|
||||
//
|
||||
if ((si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64) ||
|
||||
(si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64))
|
||||
if ((si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64))
|
||||
StringCchCat(pszOS, STRING_MAX_SIZE, TEXT( ", 64-bit" ));
|
||||
else if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_INTEL )
|
||||
StringCchCat(pszOS, STRING_MAX_SIZE, TEXT(", 32-bit"));
|
||||
|
||||
@@ -90,11 +90,6 @@
|
||||
#define WEBRTC_ARCH_32_BITS 1
|
||||
#define WEBRTC_ARCH_BIG_ENDIAN
|
||||
#define WEBRTC_BIG_ENDIAN
|
||||
#elif defined(__ia64__)
|
||||
#define WEBRTC_ARCH_IA64 1
|
||||
#define WEBRTC_ARCH_64_BITS 1
|
||||
#define WEBRTC_ARCH_LITTLE_ENDIAN
|
||||
#define WEBRTC_LITTLE_ENDIAN
|
||||
#elif defined(__s390x__)
|
||||
#define WEBRTC_ARCH_S390X 1
|
||||
#define WEBRTC_ARCH_64_BITS 1
|
||||
|
||||
@@ -59,8 +59,6 @@
|
||||
#ifdef _UNICODE
|
||||
#if defined _M_IX86
|
||||
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
|
||||
#elif defined _M_IA64
|
||||
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\"")
|
||||
#elif defined _M_X64
|
||||
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
|
||||
#else
|
||||
|
||||
@@ -1931,6 +1931,12 @@ pref("network.predictor.max-resources-per-entry", 100);
|
||||
pref("network.predictor.max-uri-length", 500);
|
||||
pref("network.predictor.cleaned-up", false);
|
||||
|
||||
// Cloudflare Image Resizing compatibility.
|
||||
// When enabled, URLs containing the "/cdn-cgi/image/" marker will have
|
||||
// everything after that marker treated as opaque path data. This matches
|
||||
// Cloudflare's expectations for Image Resizing URLs.
|
||||
pref("network.url.cloudflare_image_resizing.enabled", true);
|
||||
|
||||
// The following prefs pertain to the negotiate-auth extension (see bug 17578),
|
||||
// which provides transparent Kerberos or NTLM authentication using the SPNEGO
|
||||
// protocol. Each pref is a comma-separated list of keys, where each key has
|
||||
@@ -4209,11 +4215,7 @@ pref("image.decode-immediately.enabled", false);
|
||||
pref("image.downscale-during-decode.enabled", true);
|
||||
|
||||
// The default Accept header sent for images loaded over HTTP(S)
|
||||
#ifdef MOZ_JXL
|
||||
pref("image.http.accept", "image/webp,image/jxl,image/png,image/*;q=0.8,*/*;q=0.5");
|
||||
#else
|
||||
pref("image.http.accept", "image/webp,image/png,image/*;q=0.8,*/*;q=0.5");
|
||||
#endif
|
||||
|
||||
// The threshold for inferring that changes to an <img> element's |src|
|
||||
// attribute by JavaScript represent an animation, in milliseconds. If the |src|
|
||||
@@ -4270,11 +4272,6 @@ pref("image.mem.surfacecache.discard_factor", 1);
|
||||
// automatically determined based on the system's number of cores.
|
||||
pref("image.multithreaded_decoding.limit", -1);
|
||||
|
||||
#ifdef MOZ_JXL
|
||||
// Whether we attempt to decode JPEG-XL images or not.
|
||||
pref("image.jxl.enabled", true);
|
||||
#endif
|
||||
|
||||
// Limit for the canvas image cache. 0 means we don't limit the size of the
|
||||
// cache.
|
||||
pref("canvas.image.cache.limit", 0);
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
#include "prprf.h"
|
||||
#include "nsReadableUtils.h"
|
||||
#include "nsPrintfCString.h"
|
||||
#include "mozilla/Preferences.h" //fixes up dependency issues in non-unified building
|
||||
|
||||
using mozilla::dom::EncodingUtils;
|
||||
using namespace mozilla::ipc;
|
||||
@@ -1105,6 +1106,58 @@ nsStandardURL::ParseURL(const char *spec, int32_t specLen)
|
||||
nsresult
|
||||
nsStandardURL::ParsePath(const char *spec, uint32_t pathPos, int32_t pathLen)
|
||||
{
|
||||
// Cloudflare Image Resizing compatibility (pref-controlled)
|
||||
//
|
||||
// This feature detects the "/cdn-cgi/image/" marker in the URL path and
|
||||
// treats everything after it as opaque path data. Cloudflare's Image
|
||||
// Resizing service expects clients to preserve the entire suffix exactly.
|
||||
//
|
||||
// Because this code runs in a hot path (URL parsing), we avoid calling
|
||||
// Preferences::GetBool() repeatedly. Instead, we use AddBoolVarCache()
|
||||
// to cache the pref value once and read it cheaply thereafter.
|
||||
|
||||
// Cached preference: true = enable Cloudflare Image Resizing fixup
|
||||
static bool sCloudflareImageResizingEnabled = true;
|
||||
static bool sCloudflareImageResizingPrefCached = false;
|
||||
|
||||
if (!sCloudflareImageResizingPrefCached) {
|
||||
Preferences::AddBoolVarCache(
|
||||
&sCloudflareImageResizingEnabled,
|
||||
"network.url.cloudflare_image_resizing.enabled",
|
||||
true // default if pref does not exist
|
||||
);
|
||||
sCloudflareImageResizingPrefCached = true;
|
||||
}
|
||||
|
||||
if (sCloudflareImageResizingEnabled) {
|
||||
|
||||
// Extract the full path substring from the full URL spec.
|
||||
nsDependentCSubstring fullPath(spec + pathPos, pathLen);
|
||||
|
||||
// Prepare iterators for scanning the path.
|
||||
nsACString::const_iterator begin, end;
|
||||
fullPath.BeginReading(begin);
|
||||
fullPath.EndReading(end);
|
||||
|
||||
// Search for the Cloudflare Image Resizing marker.
|
||||
nsACString::const_iterator cfPos = begin;
|
||||
if (FindInReadable(NS_LITERAL_CSTRING("/cdn-cgi/image/"), cfPos, end)) {
|
||||
|
||||
// Compute how far into the path the marker was found.
|
||||
uint32_t offset = cfPos.get() - begin.get();
|
||||
|
||||
// Rewrite the internal path representation so that the path
|
||||
// begins at the Cloudflare marker. Everything before it is ignored.
|
||||
mPath.mPos = pathPos + offset;
|
||||
mPath.mLen = pathLen - offset;
|
||||
|
||||
// We handled the path; no further parsing needed.
|
||||
return NS_OK;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
LOG(("ParsePath: %s pathpos %d len %d\n",spec,pathPos,pathLen));
|
||||
|
||||
if (pathLen > net_GetURLMaxLength()) {
|
||||
|
||||
@@ -44,17 +44,10 @@ print OUTFILE "* 0 is QueryInterface\n";
|
||||
print OUTFILE "* 1 is AddRef\n";
|
||||
print OUTFILE "* 2 is Release\n";
|
||||
print OUTFILE "*/\n";
|
||||
print OUTFILE "#if !defined(__ia64) || (!defined(__hpux) && !defined(__linux__) && !defined(__FreeBSD__))\n";
|
||||
|
||||
for($i = 0; $i < $entry_count; $i++) {
|
||||
print OUTFILE "NS_IMETHOD Stub",$i+3,"();\n";
|
||||
}
|
||||
print OUTFILE "#else\n";
|
||||
for($i = 0; $i < $entry_count; $i++) {
|
||||
print OUTFILE "NS_IMETHOD Stub",$i+3,"(uint64_t,uint64_t,\n";
|
||||
print OUTFILE " uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);\n";
|
||||
|
||||
}
|
||||
print OUTFILE "#endif\n";
|
||||
|
||||
print OUTFILE "\n/* declarations of sentinel stubs */\n";
|
||||
|
||||
|
||||
@@ -46,15 +46,6 @@ if CONFIG['OS_ARCH'] in ('Linux', 'Bitrig', 'DragonFly', 'FreeBSD', 'NetBSD', 'O
|
||||
'xptcstubs_gcc_x86_unix.cpp'
|
||||
]
|
||||
|
||||
if CONFIG['OS_ARCH'] in ('Linux', 'FreeBSD'):
|
||||
if 'ia64' in CONFIG['OS_TEST']:
|
||||
SOURCES += [
|
||||
'xptcinvoke_asm_ipf64.s',
|
||||
'xptcinvoke_ipf64.cpp',
|
||||
'xptcstubs_asm_ipf64.s',
|
||||
'xptcstubs_ipf64.cpp'
|
||||
]
|
||||
|
||||
if CONFIG['OS_TEST'] == 'alpha':
|
||||
if CONFIG['OS_ARCH'] in ('Linux', 'FreeBSD', 'NetBSD'):
|
||||
SOURCES += [
|
||||
|
||||
@@ -1,145 +0,0 @@
|
||||
|
||||
// Select C numeric constant
|
||||
.radix C
|
||||
// for 64 bit mode, use .psr abi64
|
||||
.psr abi32
|
||||
// big endian
|
||||
.psr msb
|
||||
// Section has executable code
|
||||
.section .text, "ax","progbits"
|
||||
// procedure named 'NS_InvokeByIndex'
|
||||
.proc NS_InvokeByIndex
|
||||
// manual bundling
|
||||
.explicit
|
||||
|
||||
// extern "C" uint32_t
|
||||
// invoke_copy_to_stack(uint64_t* d,
|
||||
// const uint32_t paramCount, nsXPTCVariant* s)
|
||||
.global invoke_copy_to_stack
|
||||
// .exclass invoke_copy_to_stack, @fullyvisible
|
||||
.type invoke_copy_to_stack,@function
|
||||
|
||||
// .exclass NS_InvokeByIndex, @fullyvisible
|
||||
.type NS_InvokeByIndex,@function
|
||||
|
||||
// NS_InvokeByIndex(nsISupports* that, uint32_t methodIndex,
|
||||
// uint32_t paramCount, nsXPTCVariant* params);
|
||||
NS_InvokeByIndex::
|
||||
.prologue
|
||||
.save ar.pfs, r37
|
||||
// allocate 4 input args, 6 local args, and 8 output args
|
||||
alloc r37 = ar.pfs, 4, 6, 8, 0 // M
|
||||
nop.i 0 ;; // I
|
||||
|
||||
// unwind table already knows gp, no need to specify anything
|
||||
add r39 = 0, gp // A
|
||||
.save rp, r36
|
||||
mov r36 = rp // I
|
||||
.vframe r38
|
||||
add r38 = 0, sp ;; // A
|
||||
|
||||
// We first calculate the amount of extra memory stack space required
|
||||
// for the arguments, and register storage.
|
||||
// We then call invoke_copy_to_stack() to write the argument contents
|
||||
// to the specified memory regions.
|
||||
// We then copy the integer arguments to integer registers, and floating
|
||||
// arguments to float registers.
|
||||
// Lastly we load the virtual table jump pointer, and call the target
|
||||
// subroutine.
|
||||
|
||||
// in0 : that
|
||||
// in1 : methodIndex
|
||||
// in2 : paramCount
|
||||
// in3 : params
|
||||
|
||||
// stack frame size is 16 + (8 * even(paramCount)) + 64 + 64
|
||||
// 16 byte frame header
|
||||
// 8 * even(paramCount) memory argument area
|
||||
// 64 bytes integer register area
|
||||
// 64 bytes float register area
|
||||
// This scheme makes sure stack fram size is a multiple of 16
|
||||
|
||||
.body
|
||||
add r10 = 8, r0 // A
|
||||
// r41 points to float register area
|
||||
add r41 = -64, sp // A
|
||||
// r40 points to int register area
|
||||
add r40 = -128, sp ;; // A
|
||||
|
||||
add out1 = 0, r40 // A
|
||||
add out2 = 0, r41 // A
|
||||
tbit.z p14,p15 = in2,0 ;; // I
|
||||
|
||||
// compute 8 * even(paramCount)
|
||||
(p14) shladd r11 = in2, 3, r0 ;; // A
|
||||
(p15) shladd r11 = in2, 3, r10 ;; // A
|
||||
sub out0 = r40, r11 ;; // A
|
||||
|
||||
// advance the stack frame
|
||||
add sp = -16, out0 // A
|
||||
add out3 = 0, in2 // A
|
||||
add out4 = 0, in3 // A
|
||||
|
||||
// branch to invoke_copy_to_stack
|
||||
br.call.sptk.few rp = invoke_copy_to_stack ;; // B
|
||||
|
||||
// restore gp
|
||||
add gp = 0, r39 // A
|
||||
add out0 = 0, in0 // A
|
||||
|
||||
// load the integer and float registers
|
||||
ld8 out1 = [r40], 8 // M
|
||||
ldfd f8 = [r41], 8 ;; // M
|
||||
|
||||
ld8 out2 = [r40], 8 // M
|
||||
ldfd f9 = [r41], 8 ;; // M
|
||||
|
||||
ld8 out3 = [r40], 8 // M
|
||||
ldfd f10 = [r41], 8 ;; // M
|
||||
|
||||
ld8 out4 = [r40], 8 // M
|
||||
ldfd f11 = [r41], 8 ;; // M
|
||||
|
||||
ld8 out5 = [r40], 8 // M
|
||||
ldfd f12 = [r41], 8 ;; // M
|
||||
// 16 * methodIndex
|
||||
shladd r11 = in1, 4, r0 // A
|
||||
|
||||
ld8 out6 = [r40], 8 // M
|
||||
ldfd f13 = [r41], 8 ;; // M
|
||||
|
||||
ld8 out7 = [r40], 8 // M
|
||||
ldfd f14 = [r41], 8 // M
|
||||
addp4 r8 = 0, in0 ;; // A
|
||||
|
||||
// look up virtual base table and dispatch to target subroutine
|
||||
// This section assumes 32 bit pointer mode, and virtual base table
|
||||
// layout from the ABI http://www.codesourcery.com/cxx-abi/abi.html
|
||||
|
||||
// load base table
|
||||
ld4 r8 = [r8] ;; // M
|
||||
addp4 r8 = r11, r8 ;; // A
|
||||
|
||||
// first entry is jump pointer, second entry is gp
|
||||
addp4 r9 = 8, r8 ;; // A
|
||||
// load jump pointer
|
||||
ld8 r8 = [r8]
|
||||
|
||||
// load gp
|
||||
ld8 gp = [r9] ;; // M
|
||||
mov b6 = r8 ;; // I
|
||||
|
||||
// branch to target virtual function
|
||||
br.call.sptk.few rp = b6 ;; // B
|
||||
|
||||
// epilog
|
||||
mov ar.pfs = r37 // I
|
||||
mov rp = r36 ;; // I
|
||||
|
||||
add sp = 0, r38 // A
|
||||
add gp = 0, r39 // A
|
||||
br.ret.sptk.few rp ;; // B
|
||||
|
||||
.endp
|
||||
|
||||
|
||||
@@ -1,146 +0,0 @@
|
||||
|
||||
// Select C numeric constant
|
||||
.radix C
|
||||
// for 64 bit mode, use .psr abi64
|
||||
.psr abi64
|
||||
// little endian
|
||||
.psr lsb
|
||||
// Section has executable code
|
||||
.section .text, "ax","progbits"
|
||||
// procedure named 'NS_InvokeByIndex'
|
||||
.proc NS_InvokeByIndex
|
||||
// manual bundling
|
||||
.explicit
|
||||
|
||||
// extern "C" uint32_t
|
||||
// invoke_copy_to_stack(uint64_t* d,
|
||||
// const uint32_t paramCount, nsXPTCVariant* s)
|
||||
.global invoke_copy_to_stack
|
||||
// .exclass invoke_copy_to_stack, @fullyvisible
|
||||
.type invoke_copy_to_stack,@function
|
||||
|
||||
// .exclass NS_InvokeByIndex, @fullyvisible
|
||||
.type NS_InvokeByIndex,@function
|
||||
|
||||
// XPTC_InvokeByIndex(nsISupports* that, uint32_t methodIndex,
|
||||
// uint32_t paramCount, nsXPTCVariant* params);
|
||||
NS_InvokeByIndex::
|
||||
.prologue
|
||||
.save ar.pfs, r37
|
||||
// allocate 4 input args, 6 local args, and 8 output args
|
||||
alloc r37 = ar.pfs, 4, 6, 8, 0 // M
|
||||
nop.i 0 ;; // I
|
||||
|
||||
// unwind table already knows gp, no need to specify anything
|
||||
add r39 = 0, gp // A
|
||||
.save rp, r36
|
||||
mov r36 = rp // I
|
||||
.vframe r38
|
||||
add r38 = 0, sp ;; // A
|
||||
|
||||
// We first calculate the amount of extra memory stack space required
|
||||
// for the arguments, and register storage.
|
||||
// We then call invoke_copy_to_stack() to write the argument contents
|
||||
// to the specified memory regions.
|
||||
// We then copy the integer arguments to integer registers, and floating
|
||||
// arguments to float registers.
|
||||
// Lastly we load the virtual table jump pointer, and call the target
|
||||
// subroutine.
|
||||
|
||||
// in0 : that
|
||||
// in1 : methodIndex
|
||||
// in2 : paramCount
|
||||
// in3 : params
|
||||
|
||||
// stack frame size is 16 + (8 * even(paramCount)) + 64 + 64
|
||||
// 16 byte frame header
|
||||
// 8 * even(paramCount) memory argument area
|
||||
// 64 bytes integer register area
|
||||
// 64 bytes float register area
|
||||
// This scheme makes sure stack fram size is a multiple of 16
|
||||
|
||||
.body
|
||||
add r10 = 8, r0 // A
|
||||
// r41 points to float register area
|
||||
add r41 = -64, sp // A
|
||||
// r40 points to int register area
|
||||
add r40 = -128, sp ;; // A
|
||||
|
||||
add out1 = 0, r40 // A
|
||||
add out2 = 0, r41 // A
|
||||
tbit.z p14,p15 = in2,0 ;; // I
|
||||
|
||||
// compute 8 * even(paramCount)
|
||||
(p14) shladd r11 = in2, 3, r0 ;; // A
|
||||
(p15) shladd r11 = in2, 3, r10 ;; // A
|
||||
sub out0 = r40, r11 ;; // A
|
||||
|
||||
// advance the stack frame
|
||||
add sp = -16, out0 // A
|
||||
add out3 = 0, in2 // A
|
||||
add out4 = 0, in3 // A
|
||||
|
||||
// branch to invoke_copy_to_stack
|
||||
br.call.sptk.few rp = invoke_copy_to_stack ;; // B
|
||||
|
||||
// restore gp
|
||||
add gp = 0, r39 // A
|
||||
add out0 = 0, in0 // A
|
||||
|
||||
// load the integer and float registers
|
||||
ld8 out1 = [r40], 8 // M
|
||||
ldfd f8 = [r41], 8 ;; // M
|
||||
|
||||
ld8 out2 = [r40], 8 // M
|
||||
ldfd f9 = [r41], 8 ;; // M
|
||||
|
||||
ld8 out3 = [r40], 8 // M
|
||||
ldfd f10 = [r41], 8 ;; // M
|
||||
|
||||
ld8 out4 = [r40], 8 // M
|
||||
ldfd f11 = [r41], 8 ;; // M
|
||||
|
||||
ld8 out5 = [r40], 8 // M
|
||||
ldfd f12 = [r41], 8 ;; // M
|
||||
// 16 * methodIndex
|
||||
shladd r11 = in1, 4, r0 // A
|
||||
|
||||
ld8 out6 = [r40], 8 // M
|
||||
ldfd f13 = [r41], 8 ;; // M
|
||||
|
||||
ld8 out7 = [r40], 8 // M
|
||||
ldfd f14 = [r41], 8 // M
|
||||
add r8 = 0, in0 ;; // A
|
||||
|
||||
// look up virtual base table and dispatch to target subroutine
|
||||
// This section assumes 64 bit pointer mode, and virtual base table
|
||||
// layout from the ABI http://www.codesourcery.com/cxx-abi/abi.html
|
||||
|
||||
// load base table
|
||||
ld8 r8 = [r8] ;; // M
|
||||
add r8 = r11, r8 ;; // A
|
||||
|
||||
// first entry is jump pointer, second entry is gp
|
||||
add r9 = 8, r8 ;; // A
|
||||
// load jump pointer
|
||||
ld8 r8 = [r8]
|
||||
|
||||
// load gp
|
||||
ld8 gp = [r9] ;; // M
|
||||
mov b6 = r8 ;; // I
|
||||
|
||||
// branch to target virtual function
|
||||
br.call.sptk.few rp = b6 ;; // B
|
||||
|
||||
// epilog
|
||||
mov ar.pfs = r37 // I
|
||||
mov rp = r36 ;; // I
|
||||
|
||||
add sp = 0, r38 // A
|
||||
add gp = 0, r39 // A
|
||||
br.ret.sptk.few rp ;; // B
|
||||
|
||||
.endp
|
||||
|
||||
/* Magic indicating no need for an executable stack */
|
||||
.section .note.GNU-stack, "", @progbits ; .previous
|
||||
@@ -1,132 +0,0 @@
|
||||
|
||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#include "xptcprivate.h"
|
||||
|
||||
#include <iostream.h>
|
||||
|
||||
// "This code is for IA64 only"
|
||||
|
||||
|
||||
/* invoke_copy_to_stack() will copy from variant array 's' to
|
||||
* the stack argument area 'mloc', the integer register area 'iloc', and
|
||||
* the float register area 'floc'.
|
||||
*
|
||||
*/
|
||||
extern "C" void
|
||||
invoke_copy_to_stack(uint64_t* mloc, uint64_t* iloc, uint64_t* floc,
|
||||
const uint32_t paramCount, nsXPTCVariant* s)
|
||||
{
|
||||
uint64_t* dest = mloc;
|
||||
uint32_t len = paramCount;
|
||||
nsXPTCVariant* source = s;
|
||||
|
||||
uint32_t indx;
|
||||
uint32_t endlen;
|
||||
endlen = (len > 7) ? 7 : len;
|
||||
/* handle the memory arguments */
|
||||
for (indx = 7; indx < len; ++indx)
|
||||
{
|
||||
if (source[indx].IsPtrData())
|
||||
{
|
||||
#ifdef __LP64__
|
||||
/* 64 bit pointer mode */
|
||||
*((void**) dest) = source[indx].ptr;
|
||||
#else
|
||||
/* 32 bit pointer mode */
|
||||
uint32_t* adr = (uint32_t*) dest;
|
||||
*(adr) = 0;
|
||||
*(adr+1) = (uint32_t) source[indx].ptr;
|
||||
#endif
|
||||
}
|
||||
else
|
||||
switch (source[indx].type)
|
||||
{
|
||||
case nsXPTType::T_I8 : *(dest) = source[indx].val.i8; break;
|
||||
case nsXPTType::T_I16 : *(dest) = source[indx].val.i16; break;
|
||||
case nsXPTType::T_I32 : *(dest) = source[indx].val.i32; break;
|
||||
case nsXPTType::T_I64 : *(dest) = source[indx].val.i64; break;
|
||||
case nsXPTType::T_U8 : *(dest) = source[indx].val.u8; break;
|
||||
case nsXPTType::T_U16 : *(dest) = source[indx].val.u16; break;
|
||||
case nsXPTType::T_U32 : *(dest) = source[indx].val.u32; break;
|
||||
case nsXPTType::T_U64 : *(dest) = source[indx].val.u64; break;
|
||||
case nsXPTType::T_FLOAT : *(dest) = source[indx].val.u32; break;
|
||||
case nsXPTType::T_DOUBLE: *(dest) = source[indx].val.u64; break;
|
||||
case nsXPTType::T_BOOL : *(dest) = source[indx].val.b; break;
|
||||
case nsXPTType::T_CHAR : *(dest) = source[indx].val.c; break;
|
||||
case nsXPTType::T_WCHAR : *(dest) = source[indx].val.wc; break;
|
||||
default:
|
||||
// all the others are plain pointer types
|
||||
#ifdef __LP64__
|
||||
/* 64 bit pointer mode */
|
||||
*((void**) dest) = source[indx].val.p;
|
||||
#else
|
||||
{
|
||||
/* 32 bit pointer mode */
|
||||
uint32_t* adr = (uint32_t*) dest;
|
||||
*(adr) = 0;
|
||||
*(adr+1) = (uint32_t) source[indx].val.p;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
++dest;
|
||||
}
|
||||
/* process register arguments */
|
||||
dest = iloc;
|
||||
for (indx = 0; indx < endlen; ++indx)
|
||||
{
|
||||
if (source[indx].IsPtrData())
|
||||
{
|
||||
#ifdef __LP64__
|
||||
/* 64 bit pointer mode */
|
||||
*((void**) dest) = source[indx].ptr;
|
||||
#else
|
||||
/* 32 bit pointer mode */
|
||||
uint32_t* adr = (uint32_t*) dest;
|
||||
*(adr) = 0;
|
||||
*(adr+1) = (uint32_t) source[indx].ptr;
|
||||
#endif
|
||||
}
|
||||
else
|
||||
switch (source[indx].type)
|
||||
{
|
||||
case nsXPTType::T_I8 : *(dest) = source[indx].val.i8; break;
|
||||
case nsXPTType::T_I16 : *(dest) = source[indx].val.i16; break;
|
||||
case nsXPTType::T_I32 : *(dest) = source[indx].val.i32; break;
|
||||
case nsXPTType::T_I64 : *(dest) = source[indx].val.i64; break;
|
||||
case nsXPTType::T_U8 : *(dest) = source[indx].val.u8; break;
|
||||
case nsXPTType::T_U16 : *(dest) = source[indx].val.u16; break;
|
||||
case nsXPTType::T_U32 : *(dest) = source[indx].val.u32; break;
|
||||
case nsXPTType::T_U64 : *(dest) = source[indx].val.u64; break;
|
||||
case nsXPTType::T_FLOAT :
|
||||
*((double*) (floc++)) = (double) source[indx].val.f;
|
||||
break;
|
||||
case nsXPTType::T_DOUBLE:
|
||||
*((double*) (floc++)) = source[indx].val.d;
|
||||
break;
|
||||
case nsXPTType::T_BOOL : *(dest) = source[indx].val.b; break;
|
||||
case nsXPTType::T_CHAR : *(dest) = source[indx].val.c; break;
|
||||
case nsXPTType::T_WCHAR : *(dest) = source[indx].val.wc; break;
|
||||
default:
|
||||
// all the others are plain pointer types
|
||||
#ifdef __LP64__
|
||||
/* 64 bit pointer mode */
|
||||
*((void**) dest) = source[indx].val.p;
|
||||
#else
|
||||
{
|
||||
/* 32 bit pointer mode */
|
||||
uint32_t* adr = (uint32_t*) dest;
|
||||
*(adr) = 0;
|
||||
*(adr+1) = (uint32_t) source[indx].val.p;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
++dest;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,100 +0,0 @@
|
||||
|
||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#include "xptcprivate.h"
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
// "This code is for IA64 only"
|
||||
|
||||
|
||||
/* invoke_copy_to_stack() will copy from variant array 's' to
|
||||
* the stack argument area 'mloc', the integer register area 'iloc', and
|
||||
* the float register area 'floc'.
|
||||
*
|
||||
*/
|
||||
extern "C" void
|
||||
invoke_copy_to_stack(uint64_t* mloc, uint64_t* iloc, uint64_t* floc,
|
||||
const uint32_t paramCount, nsXPTCVariant* s)
|
||||
{
|
||||
uint64_t* dest = mloc;
|
||||
uint32_t len = paramCount;
|
||||
nsXPTCVariant* source = s;
|
||||
|
||||
uint32_t indx;
|
||||
uint32_t endlen;
|
||||
endlen = (len > 7) ? 7 : len;
|
||||
/* handle the memory arguments */
|
||||
for (indx = 7; indx < len; ++indx)
|
||||
{
|
||||
if (source[indx].IsPtrData())
|
||||
{
|
||||
/* 64 bit pointer mode */
|
||||
*((void**) dest) = source[indx].ptr;
|
||||
}
|
||||
else
|
||||
switch (source[indx].type)
|
||||
{
|
||||
case nsXPTType::T_I8 : *(dest) = source[indx].val.i8; break;
|
||||
case nsXPTType::T_I16 : *(dest) = source[indx].val.i16; break;
|
||||
case nsXPTType::T_I32 : *(dest) = source[indx].val.i32; break;
|
||||
case nsXPTType::T_I64 : *(dest) = source[indx].val.i64; break;
|
||||
case nsXPTType::T_U8 : *(dest) = source[indx].val.u8; break;
|
||||
case nsXPTType::T_U16 : *(dest) = source[indx].val.u16; break;
|
||||
case nsXPTType::T_U32 : *(dest) = source[indx].val.u32; break;
|
||||
case nsXPTType::T_U64 : *(dest) = source[indx].val.u64; break;
|
||||
case nsXPTType::T_FLOAT : *(dest) = source[indx].val.u32; break;
|
||||
case nsXPTType::T_DOUBLE: *(dest) = source[indx].val.u64; break;
|
||||
case nsXPTType::T_BOOL : *(dest) = source[indx].val.b; break;
|
||||
case nsXPTType::T_CHAR : *(dest) = source[indx].val.c; break;
|
||||
case nsXPTType::T_WCHAR : *(dest) = source[indx].val.wc; break;
|
||||
default:
|
||||
// all the others are plain pointer types
|
||||
/* 64 bit pointer mode */
|
||||
*((void**) dest) = source[indx].val.p;
|
||||
}
|
||||
++dest;
|
||||
}
|
||||
/* process register arguments */
|
||||
dest = iloc;
|
||||
for (indx = 0; indx < endlen; ++indx)
|
||||
{
|
||||
if (source[indx].IsPtrData())
|
||||
{
|
||||
/* 64 bit pointer mode */
|
||||
*((void**) dest) = source[indx].ptr;
|
||||
}
|
||||
else
|
||||
switch (source[indx].type)
|
||||
{
|
||||
case nsXPTType::T_I8 : *(dest) = source[indx].val.i8; break;
|
||||
case nsXPTType::T_I16 : *(dest) = source[indx].val.i16; break;
|
||||
case nsXPTType::T_I32 : *(dest) = source[indx].val.i32; break;
|
||||
case nsXPTType::T_I64 : *(dest) = source[indx].val.i64; break;
|
||||
case nsXPTType::T_U8 : *(dest) = source[indx].val.u8; break;
|
||||
case nsXPTType::T_U16 : *(dest) = source[indx].val.u16; break;
|
||||
case nsXPTType::T_U32 : *(dest) = source[indx].val.u32; break;
|
||||
case nsXPTType::T_U64 : *(dest) = source[indx].val.u64; break;
|
||||
case nsXPTType::T_FLOAT :
|
||||
*((double*) (floc++)) = (double) source[indx].val.f;
|
||||
break;
|
||||
case nsXPTType::T_DOUBLE:
|
||||
*((double*) (floc++)) = source[indx].val.d;
|
||||
break;
|
||||
case nsXPTType::T_BOOL : *(dest) = source[indx].val.b; break;
|
||||
case nsXPTType::T_CHAR : *(dest) = source[indx].val.c; break;
|
||||
case nsXPTType::T_WCHAR : *(dest) = source[indx].val.wc; break;
|
||||
default:
|
||||
// all the others are plain pointer types
|
||||
/* 64 bit pointer mode */
|
||||
*((void**) dest) = source[indx].val.p;
|
||||
}
|
||||
++dest;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,123 +0,0 @@
|
||||
|
||||
// Select C numeric constant
|
||||
.radix C
|
||||
.psr abi32
|
||||
.psr msb
|
||||
// Section has executable code
|
||||
.section .text, "ax","progbits"
|
||||
// procedure named 'SharedStub'
|
||||
.proc SharedStub
|
||||
// manual bundling
|
||||
.explicit
|
||||
|
||||
.global PrepareAndDispatch
|
||||
// .exclass PrepareAndDispatch, @fullyvisible
|
||||
.type PrepareAndDispatch,@function
|
||||
|
||||
SharedStub::
|
||||
// 10 arguments, first 8 are the input arguments of previous
|
||||
// function call. The 9th one is methodIndex and the 10th is the
|
||||
// pointer to the remaining input arguments. The last two arguments
|
||||
// are passed in memory.
|
||||
.prologue
|
||||
.save ar.pfs , r41
|
||||
// allocate 8 input args, 4 local args, and 5 output args
|
||||
alloc r41 = ar.pfs, 8, 4, 5, 0 // M
|
||||
.save rp, r40
|
||||
mov r40 = rp // I
|
||||
addp4 out4 = 28, sp ;; // I
|
||||
|
||||
.save ar.unat, r42
|
||||
mov r42 = ar.unat // M
|
||||
.fframe 144
|
||||
add sp = -144, sp // A
|
||||
// unwind table already knows gp, don't need to specify anything
|
||||
add r43 = 0, gp ;; // A
|
||||
|
||||
// We have possible 8 integer registers and 8 float registers that could
|
||||
// be arguments. We also have a stack region from the previous
|
||||
// stack frame that may hold some stack arguments.
|
||||
// We need to write the integer registers to a memory region, write
|
||||
// the float registers to a memory region (making sure we don't step
|
||||
// on NAT while touching the registers). We also mark the memory
|
||||
// address of the stack arguments.
|
||||
// We then call PrepareAndDispatch() specifying the three memory
|
||||
// region pointers.
|
||||
|
||||
|
||||
.body
|
||||
add out0 = 0, in0 // A move self ptr
|
||||
// 144 bytes = 16 byte stack header + 64 byte int space + 64 byte float space
|
||||
// methodIndex is at 144 + 16 bytes away from current sp
|
||||
// (current frame + previous frame header)
|
||||
ld4 out4 = [out4] // A restarg address
|
||||
add r11 = 160, sp ;; // A address of methodIndex
|
||||
|
||||
ld8 out1 = [r11] // M load methodIndex
|
||||
// sp + 16 is the start of intargs
|
||||
add out2 = 16, sp // A address of intargs
|
||||
// the intargs take up 64 bytes, so sp + 16 + 64 is the start of floatargs
|
||||
add out3 = 80, sp ;; // A address of floatargs
|
||||
|
||||
add r11 = 0, out2 ;; // A
|
||||
st8.spill [r11] = in1, 8 // M
|
||||
add r10 = 0, out3 ;; // A
|
||||
|
||||
st8.spill [r11] = in2, 8 ;; // M
|
||||
st8.spill [r11] = in3, 8 // M
|
||||
nop.i 0 ;; // I
|
||||
|
||||
st8.spill [r11] = in4, 8 ;; // M
|
||||
st8.spill [r11] = in5, 8 // M
|
||||
nop.i 0 ;; // I
|
||||
|
||||
st8.spill [r11] = in6, 8 ;; // M
|
||||
st8.spill [r11] = in7 // M
|
||||
fclass.nm p14,p15 = f8,@nat ;; // F
|
||||
|
||||
(p14) stfd [r10] = f8, 8 // M
|
||||
(p15) add r10 = 8, r10 // A
|
||||
fclass.nm p12,p13 = f9,@nat ;; // F
|
||||
|
||||
(p12) stfd [r10] = f9, 8 // M
|
||||
(p13) add r10 = 8, r10 // A
|
||||
fclass.nm p14,p15 =f10,@nat ;; // F
|
||||
|
||||
(p14) stfd [r10] = f10, 8 // M
|
||||
(p15) add r10 = 8, r10 // A
|
||||
fclass.nm p12,p13 =f11,@nat ;; // F
|
||||
|
||||
(p12) stfd [r10] = f11, 8 // M
|
||||
(p13) add r10 = 8, r10 // A
|
||||
fclass.nm p14,p15 =f12,@nat ;; // F
|
||||
|
||||
(p14) stfd [r10] = f12, 8 // M
|
||||
(p15) add r10 = 8, r10 // A
|
||||
fclass.nm p12,p13 =f13,@nat ;; // F
|
||||
|
||||
(p12) stfd [r10] = f13, 8 // M
|
||||
(p13) add r10 = 8, r10 // A
|
||||
fclass.nm p14,p15 =f14,@nat ;; // F
|
||||
|
||||
(p14) stfd [r10] = f14, 8 // M
|
||||
(p15) add r10 = 8, r10 // A
|
||||
fclass.nm p12,p13 =f15,@nat ;; // F
|
||||
|
||||
(p12) stfd [r10] = f15, 8 // M
|
||||
(p13) add r10 = 8, r10 // A
|
||||
|
||||
// branch to PrepareAndDispatch
|
||||
br.call.dptk.few rp = PrepareAndDispatch ;; // B
|
||||
|
||||
// epilog
|
||||
mov ar.unat = r42 // M
|
||||
mov ar.pfs = r41 // I
|
||||
mov rp = r40 ;; // I
|
||||
|
||||
add gp = 0, r43 // A
|
||||
add sp = 144, sp // A
|
||||
br.ret.dptk.few rp ;; // B
|
||||
|
||||
.endp
|
||||
|
||||
|
||||
@@ -1,124 +0,0 @@
|
||||
|
||||
// Select C numeric constant
|
||||
.radix C
|
||||
.psr abi64
|
||||
.psr lsb
|
||||
// Section has executable code
|
||||
.section .text, "ax","progbits"
|
||||
// procedure named 'SharedStub'
|
||||
.proc SharedStub
|
||||
// manual bundling
|
||||
.explicit
|
||||
|
||||
.global PrepareAndDispatch
|
||||
// .exclass PrepareAndDispatch, @fullyvisible
|
||||
.type PrepareAndDispatch,@function
|
||||
|
||||
SharedStub::
|
||||
// 10 arguments, first 8 are the input arguments of previous
|
||||
// function call. The 9th one is methodIndex and the 10th is the
|
||||
// pointer to the remaining input arguments. The last two arguments
|
||||
// are passed in memory.
|
||||
.prologue
|
||||
.save ar.pfs , r41
|
||||
// allocate 8 input args, 4 local args, and 5 output args
|
||||
alloc r41 = ar.pfs, 8, 4, 5, 0 // M
|
||||
.save rp, r40
|
||||
mov r40 = rp // I
|
||||
add out4 = 24, sp ;; // I
|
||||
|
||||
.save ar.unat, r42
|
||||
mov r42 = ar.unat // M
|
||||
.fframe 144
|
||||
add sp = -144, sp // A
|
||||
// unwind table already knows gp, don't need to specify anything
|
||||
add r43 = 0, gp ;; // A
|
||||
|
||||
// We have possible 8 integer registers and 8 float registers that could
|
||||
// be arguments. We also have a stack region from the previous
|
||||
// stack frame that may hold some stack arguments.
|
||||
// We need to write the integer registers to a memory region, write
|
||||
// the float registers to a memory region (making sure we don't step
|
||||
// on NAT while touching the registers). We also mark the memory
|
||||
// address of the stack arguments.
|
||||
// We then call PrepareAndDispatch() specifying the three memory
|
||||
// region pointers.
|
||||
|
||||
|
||||
.body
|
||||
add out0 = 0, in0 // A move self ptr
|
||||
// 144 bytes = 16 byte stack header + 64 byte int space + 64 byte float space
|
||||
// methodIndex is at 144 + 16 bytes away from current sp
|
||||
// (current frame + previous frame header)
|
||||
ld8 out4 = [out4] // M restarg address
|
||||
add r11 = 160, sp ;; // A address of methodIndex
|
||||
|
||||
ld8 out1 = [r11] // M load methodIndex
|
||||
// sp + 16 is the start of intargs
|
||||
add out2 = 16, sp // A address of intargs
|
||||
// the intargs take up 64 bytes, so sp + 16 + 64 is the start of floatargs
|
||||
add out3 = 80, sp ;; // A address of floatargs
|
||||
|
||||
add r11 = 0, out2 ;; // A
|
||||
st8.spill [r11] = in1, 8 // M
|
||||
add r10 = 0, out3 ;; // A
|
||||
|
||||
st8.spill [r11] = in2, 8 ;; // M
|
||||
st8.spill [r11] = in3, 8 // M
|
||||
nop.i 0 ;; // I
|
||||
|
||||
st8.spill [r11] = in4, 8 ;; // M
|
||||
st8.spill [r11] = in5, 8 // M
|
||||
nop.i 0 ;; // I
|
||||
|
||||
st8.spill [r11] = in6, 8 ;; // M
|
||||
st8.spill [r11] = in7 // M
|
||||
fclass.nm p14,p15 = f8,@nat ;; // F
|
||||
|
||||
(p14) stfd [r10] = f8, 8 // M
|
||||
(p15) add r10 = 8, r10 // A
|
||||
fclass.nm p12,p13 = f9,@nat ;; // F
|
||||
|
||||
(p12) stfd [r10] = f9, 8 // M
|
||||
(p13) add r10 = 8, r10 // A
|
||||
fclass.nm p14,p15 =f10,@nat ;; // F
|
||||
|
||||
(p14) stfd [r10] = f10, 8 // M
|
||||
(p15) add r10 = 8, r10 // A
|
||||
fclass.nm p12,p13 =f11,@nat ;; // F
|
||||
|
||||
(p12) stfd [r10] = f11, 8 // M
|
||||
(p13) add r10 = 8, r10 // A
|
||||
fclass.nm p14,p15 =f12,@nat ;; // F
|
||||
|
||||
(p14) stfd [r10] = f12, 8 // M
|
||||
(p15) add r10 = 8, r10 // A
|
||||
fclass.nm p12,p13 =f13,@nat ;; // F
|
||||
|
||||
(p12) stfd [r10] = f13, 8 // M
|
||||
(p13) add r10 = 8, r10 // A
|
||||
fclass.nm p14,p15 =f14,@nat ;; // F
|
||||
|
||||
(p14) stfd [r10] = f14, 8 // M
|
||||
(p15) add r10 = 8, r10 // A
|
||||
fclass.nm p12,p13 =f15,@nat ;; // F
|
||||
|
||||
(p12) stfd [r10] = f15, 8 // M
|
||||
(p13) add r10 = 8, r10 // A
|
||||
|
||||
// branch to PrepareAndDispatch
|
||||
br.call.dptk.few rp = PrepareAndDispatch ;; // B
|
||||
|
||||
// epilog
|
||||
mov ar.unat = r42 // M
|
||||
mov ar.pfs = r41 // I
|
||||
mov rp = r40 ;; // I
|
||||
|
||||
add gp = 0, r43 // A
|
||||
add sp = 144, sp // A
|
||||
br.ret.dptk.few rp ;; // B
|
||||
|
||||
.endp
|
||||
|
||||
/* Magic indicating no need for an executable stack */
|
||||
.section .note.GNU-stack, "", @progbits ; .previous
|
||||
@@ -1,151 +0,0 @@
|
||||
|
||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
|
||||
#include "xptcprivate.h"
|
||||
#include "xptiprivate.h"
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
// "This code is for IA64 only"
|
||||
|
||||
/* Implement shared vtbl methods. */
|
||||
|
||||
extern "C" nsresult ATTRIBUTE_USED
|
||||
PrepareAndDispatch(nsXPTCStubBase* self, uint32_t methodIndex,
|
||||
uint64_t* intargs, uint64_t* floatargs, uint64_t* restargs)
|
||||
{
|
||||
|
||||
#define PARAM_BUFFER_COUNT 16
|
||||
|
||||
nsXPTCMiniVariant paramBuffer[PARAM_BUFFER_COUNT];
|
||||
nsXPTCMiniVariant* dispatchParams = nullptr;
|
||||
const nsXPTMethodInfo* info;
|
||||
nsresult result = NS_ERROR_FAILURE;
|
||||
uint64_t* iargs = intargs;
|
||||
uint64_t* fargs = floatargs;
|
||||
uint8_t paramCount;
|
||||
uint8_t i;
|
||||
|
||||
NS_ASSERTION(self,"no self");
|
||||
|
||||
self->mEntry->GetMethodInfo(uint16_t(methodIndex), &info);
|
||||
NS_ASSERTION(info,"no interface info");
|
||||
|
||||
paramCount = info->GetParamCount();
|
||||
|
||||
// setup variant array pointer
|
||||
if(paramCount > PARAM_BUFFER_COUNT)
|
||||
dispatchParams = new nsXPTCMiniVariant[paramCount];
|
||||
else
|
||||
dispatchParams = paramBuffer;
|
||||
NS_ASSERTION(dispatchParams,"no place for params");
|
||||
if (! dispatchParams)
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
|
||||
for(i = 0; i < paramCount; ++i)
|
||||
{
|
||||
int isfloat = 0;
|
||||
const nsXPTParamInfo& param = info->GetParam(i);
|
||||
const nsXPTType& type = param.GetType();
|
||||
nsXPTCMiniVariant* dp = &dispatchParams[i];
|
||||
|
||||
if(param.IsOut() || !type.IsArithmetic())
|
||||
{
|
||||
#ifdef __LP64__
|
||||
/* 64 bit pointer mode */
|
||||
dp->val.p = (void*) *iargs;
|
||||
#else
|
||||
/* 32 bit pointer mode */
|
||||
uint32_t* adr = (uint32_t*) iargs;
|
||||
dp->val.p = (void*) (*(adr+1));
|
||||
#endif
|
||||
}
|
||||
else
|
||||
switch(type)
|
||||
{
|
||||
case nsXPTType::T_I8 : dp->val.i8 = *(iargs); break;
|
||||
case nsXPTType::T_I16 : dp->val.i16 = *(iargs); break;
|
||||
case nsXPTType::T_I32 : dp->val.i32 = *(iargs); break;
|
||||
case nsXPTType::T_I64 : dp->val.i64 = *(iargs); break;
|
||||
case nsXPTType::T_U8 : dp->val.u8 = *(iargs); break;
|
||||
case nsXPTType::T_U16 : dp->val.u16 = *(iargs); break;
|
||||
case nsXPTType::T_U32 : dp->val.u32 = *(iargs); break;
|
||||
case nsXPTType::T_U64 : dp->val.u64 = *(iargs); break;
|
||||
case nsXPTType::T_FLOAT :
|
||||
isfloat = 1;
|
||||
if (i < 7)
|
||||
dp->val.f = (float) *((double*) fargs); /* register */
|
||||
else
|
||||
dp->val.u32 = *(fargs); /* memory */
|
||||
break;
|
||||
case nsXPTType::T_DOUBLE :
|
||||
isfloat = 1;
|
||||
dp->val.u64 = *(fargs);
|
||||
break;
|
||||
case nsXPTType::T_BOOL : dp->val.b = *(iargs); break;
|
||||
case nsXPTType::T_CHAR : dp->val.c = *(iargs); break;
|
||||
case nsXPTType::T_WCHAR : dp->val.wc = *(iargs); break;
|
||||
default:
|
||||
NS_ERROR("bad type");
|
||||
break;
|
||||
}
|
||||
if (i < 7)
|
||||
{
|
||||
/* we are parsing register arguments */
|
||||
if (i == 6)
|
||||
{
|
||||
// run out of register arguments, move on to memory arguments
|
||||
iargs = restargs;
|
||||
fargs = restargs;
|
||||
}
|
||||
else
|
||||
{
|
||||
++iargs; // advance one integer register slot
|
||||
if (isfloat) ++fargs; // advance float register slot if isfloat
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* we are parsing memory arguments */
|
||||
++iargs;
|
||||
++fargs;
|
||||
}
|
||||
}
|
||||
|
||||
result = self->mOuter->CallMethod((uint16_t) methodIndex, info, dispatchParams);
|
||||
|
||||
if(dispatchParams != paramBuffer)
|
||||
delete [] dispatchParams;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
extern "C" nsresult SharedStub(uint64_t,uint64_t,uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t *);
|
||||
|
||||
/* Variable a0-a7 were put there so we can have access to the 8 input
|
||||
registers on Stubxyz entry */
|
||||
|
||||
#define STUB_ENTRY(n) \
|
||||
nsresult nsXPTCStubBase::Stub##n(uint64_t a1, \
|
||||
uint64_t a2,uint64_t a3,uint64_t a4,uint64_t a5,uint64_t a6,uint64_t a7, \
|
||||
uint64_t a8) \
|
||||
{ uint64_t a0 = (uint64_t) this; \
|
||||
return SharedStub(a0,a1,a2,a3,a4,a5,a6,a7,(uint64_t) n, &a8); \
|
||||
}
|
||||
|
||||
#define SENTINEL_ENTRY(n) \
|
||||
nsresult nsXPTCStubBase::Sentinel##n() \
|
||||
{ \
|
||||
NS_ERROR("nsXPTCStubBase::Sentinel called"); \
|
||||
return NS_ERROR_NOT_IMPLEMENTED; \
|
||||
}
|
||||
|
||||
#include "xptcstubsdef.inc"
|
||||
|
||||
@@ -1,154 +0,0 @@
|
||||
|
||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
|
||||
#include "xptcprivate.h"
|
||||
#include "xptiprivate.h"
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
|
||||
// "This code is for IA64 only"
|
||||
|
||||
/* Implement shared vtbl methods. */
|
||||
|
||||
extern "C" nsresult ATTRIBUTE_USED
|
||||
PrepareAndDispatch(nsXPTCStubBase* self, uint32_t methodIndex,
|
||||
uint64_t* intargs, uint64_t* floatargs, uint64_t* restargs)
|
||||
{
|
||||
|
||||
#define PARAM_BUFFER_COUNT 16
|
||||
|
||||
nsXPTCMiniVariant paramBuffer[PARAM_BUFFER_COUNT];
|
||||
nsXPTCMiniVariant* dispatchParams = nullptr;
|
||||
const nsXPTMethodInfo* info;
|
||||
nsresult result = NS_ERROR_FAILURE;
|
||||
uint64_t* iargs = intargs;
|
||||
uint64_t* fargs = floatargs;
|
||||
uint8_t paramCount;
|
||||
uint8_t i;
|
||||
|
||||
NS_ASSERTION(self,"no self");
|
||||
|
||||
self->mEntry->GetMethodInfo(uint16_t(methodIndex), &info);
|
||||
NS_ASSERTION(info,"no method info");
|
||||
if (! info)
|
||||
return NS_ERROR_UNEXPECTED;
|
||||
|
||||
paramCount = info->GetParamCount();
|
||||
|
||||
// setup variant array pointer
|
||||
if(paramCount > PARAM_BUFFER_COUNT)
|
||||
dispatchParams = new nsXPTCMiniVariant[paramCount];
|
||||
else
|
||||
dispatchParams = paramBuffer;
|
||||
NS_ASSERTION(dispatchParams,"no place for params");
|
||||
if (! dispatchParams)
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
|
||||
for(i = 0; i < paramCount; ++i)
|
||||
{
|
||||
int isfloat = 0;
|
||||
const nsXPTParamInfo& param = info->GetParam(i);
|
||||
const nsXPTType& type = param.GetType();
|
||||
nsXPTCMiniVariant* dp = &dispatchParams[i];
|
||||
|
||||
if(param.IsOut() || !type.IsArithmetic())
|
||||
{
|
||||
#ifdef __LP64__
|
||||
/* 64 bit pointer mode */
|
||||
dp->val.p = (void*) *iargs;
|
||||
#else
|
||||
/* 32 bit pointer mode */
|
||||
uint32_t* adr = (uint32_t*) iargs;
|
||||
dp->val.p = (void*) (*(adr+1));
|
||||
#endif
|
||||
}
|
||||
else
|
||||
switch(type)
|
||||
{
|
||||
case nsXPTType::T_I8 : dp->val.i8 = *(iargs); break;
|
||||
case nsXPTType::T_I16 : dp->val.i16 = *(iargs); break;
|
||||
case nsXPTType::T_I32 : dp->val.i32 = *(iargs); break;
|
||||
case nsXPTType::T_I64 : dp->val.i64 = *(iargs); break;
|
||||
case nsXPTType::T_U8 : dp->val.u8 = *(iargs); break;
|
||||
case nsXPTType::T_U16 : dp->val.u16 = *(iargs); break;
|
||||
case nsXPTType::T_U32 : dp->val.u32 = *(iargs); break;
|
||||
case nsXPTType::T_U64 : dp->val.u64 = *(iargs); break;
|
||||
case nsXPTType::T_FLOAT :
|
||||
isfloat = 1;
|
||||
if (i < 7)
|
||||
dp->val.f = (float) *((double*) fargs); /* register */
|
||||
else
|
||||
dp->val.u32 = *(fargs); /* memory */
|
||||
break;
|
||||
case nsXPTType::T_DOUBLE :
|
||||
isfloat = 1;
|
||||
dp->val.u64 = *(fargs);
|
||||
break;
|
||||
case nsXPTType::T_BOOL : dp->val.b = *(iargs); break;
|
||||
case nsXPTType::T_CHAR : dp->val.c = *(iargs); break;
|
||||
case nsXPTType::T_WCHAR : dp->val.wc = *(iargs); break;
|
||||
default:
|
||||
NS_ERROR("bad type");
|
||||
break;
|
||||
}
|
||||
if (i < 7)
|
||||
{
|
||||
/* we are parsing register arguments */
|
||||
if (i == 6)
|
||||
{
|
||||
// run out of register arguments, move on to memory arguments
|
||||
iargs = restargs;
|
||||
fargs = restargs;
|
||||
}
|
||||
else
|
||||
{
|
||||
++iargs; // advance one integer register slot
|
||||
if (isfloat) ++fargs; // advance float register slot if isfloat
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* we are parsing memory arguments */
|
||||
++iargs;
|
||||
++fargs;
|
||||
}
|
||||
}
|
||||
|
||||
result = self->mOuter->CallMethod((uint16_t) methodIndex, info, dispatchParams);
|
||||
|
||||
if(dispatchParams != paramBuffer)
|
||||
delete [] dispatchParams;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
extern "C" nsresult SharedStub(uint64_t,uint64_t,uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t *);
|
||||
|
||||
/* Variable a0-a7 were put there so we can have access to the 8 input
|
||||
registers on Stubxyz entry */
|
||||
|
||||
#define STUB_ENTRY(n) \
|
||||
nsresult nsXPTCStubBase::Stub##n(uint64_t a1, \
|
||||
uint64_t a2,uint64_t a3,uint64_t a4,uint64_t a5,uint64_t a6,uint64_t a7, \
|
||||
uint64_t a8) \
|
||||
{ uint64_t a0 = (uint64_t) this; \
|
||||
return SharedStub(a0,a1,a2,a3,a4,a5,a6,a7,(uint64_t) n, &a8); \
|
||||
}
|
||||
|
||||
#define SENTINEL_ENTRY(n) \
|
||||
nsresult nsXPTCStubBase::Sentinel##n() \
|
||||
{ \
|
||||
NS_ERROR("nsXPTCStubBase::Sentinel called"); \
|
||||
return NS_ERROR_NOT_IMPLEMENTED; \
|
||||
}
|
||||
|
||||
#include "xptcstubsdef.inc"
|
||||
|
||||
@@ -345,18 +345,6 @@ snapshot from a couple of days ago).
|
||||
</TD>
|
||||
</TR>
|
||||
|
||||
<TR>
|
||||
<TD bgcolor="green"><font color="white"><b>Done</b></font></TD>
|
||||
<TD>Linux ia64</TD>
|
||||
<TD><img alt="Contributed code!" title="Contributed code!" src="http://tinderbox.mozilla.org/star.gif">
|
||||
HP<br>
|
||||
<img alt="Contributed code!" title="Contributed code!" src="http://tinderbox.mozilla.org/star.gif">
|
||||
<a href="mailto:drepper@redhat.com">Ulrich Drepper <drepper@redhat.com></a>
|
||||
</TD>
|
||||
<TD><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=40950#c15">bug 40950 comment 15</a></TD>
|
||||
</TR>
|
||||
|
||||
|
||||
<TR>
|
||||
<TD bgcolor="red"><font color="white"><b>HELP!</b></font></TD>
|
||||
<TD>All others!</TD>
|
||||
|
||||
@@ -14,11 +14,7 @@
|
||||
|
||||
class xptiInterfaceEntry;
|
||||
|
||||
#if !defined(__ia64) || (!defined(__hpux) && !defined(__linux__) && !defined(__FreeBSD__))
|
||||
#define STUB_ENTRY(n) NS_IMETHOD Stub##n() = 0;
|
||||
#else
|
||||
#define STUB_ENTRY(n) NS_IMETHOD Stub##n(uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t) = 0;
|
||||
#endif
|
||||
|
||||
#define SENTINEL_ENTRY(n) NS_IMETHOD Sentinel##n() = 0;
|
||||
|
||||
@@ -31,11 +27,7 @@ public:
|
||||
#undef STUB_ENTRY
|
||||
#undef SENTINEL_ENTRY
|
||||
|
||||
#if !defined(__ia64) || (!defined(__hpux) && !defined(__linux__) && !defined(__FreeBSD__))
|
||||
#define STUB_ENTRY(n) NS_IMETHOD Stub##n() override;
|
||||
#else
|
||||
#define STUB_ENTRY(n) NS_IMETHOD Stub##n(uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t) override;
|
||||
#endif
|
||||
|
||||
#define SENTINEL_ENTRY(n) NS_IMETHOD Sentinel##n() override;
|
||||
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
* 1 is AddRef
|
||||
* 2 is Release
|
||||
*/
|
||||
#if !defined(__ia64) || (!defined(__hpux) && !defined(__linux__) && !defined(__FreeBSD__))
|
||||
NS_IMETHOD Stub3();
|
||||
NS_IMETHOD Stub4();
|
||||
NS_IMETHOD Stub5();
|
||||
@@ -256,502 +255,6 @@ NS_IMETHOD Stub246();
|
||||
NS_IMETHOD Stub247();
|
||||
NS_IMETHOD Stub248();
|
||||
NS_IMETHOD Stub249();
|
||||
#else
|
||||
NS_IMETHOD Stub3(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub4(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub5(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub6(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub7(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub8(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub9(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub10(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub11(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub12(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub13(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub14(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub15(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub16(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub17(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub18(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub19(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub20(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub21(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub22(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub23(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub24(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub25(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub26(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub27(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub28(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub29(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub30(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub31(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub32(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub33(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub34(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub35(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub36(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub37(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub38(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub39(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub40(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub41(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub42(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub43(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub44(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub45(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub46(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub47(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub48(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub49(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub50(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub51(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub52(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub53(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub54(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub55(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub56(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub57(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub58(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub59(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub60(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub61(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub62(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub63(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub64(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub65(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub66(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub67(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub68(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub69(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub70(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub71(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub72(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub73(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub74(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub75(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub76(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub77(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub78(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub79(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub80(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub81(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub82(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub83(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub84(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub85(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub86(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub87(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub88(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub89(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub90(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub91(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub92(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub93(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub94(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub95(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub96(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub97(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub98(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub99(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub100(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub101(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub102(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub103(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub104(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub105(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub106(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub107(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub108(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub109(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub110(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub111(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub112(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub113(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub114(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub115(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub116(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub117(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub118(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub119(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub120(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub121(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub122(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub123(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub124(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub125(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub126(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub127(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub128(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub129(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub130(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub131(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub132(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub133(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub134(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub135(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub136(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub137(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub138(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub139(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub140(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub141(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub142(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub143(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub144(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub145(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub146(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub147(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub148(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub149(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub150(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub151(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub152(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub153(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub154(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub155(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub156(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub157(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub158(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub159(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub160(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub161(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub162(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub163(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub164(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub165(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub166(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub167(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub168(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub169(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub170(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub171(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub172(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub173(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub174(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub175(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub176(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub177(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub178(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub179(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub180(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub181(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub182(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub183(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub184(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub185(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub186(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub187(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub188(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub189(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub190(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub191(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub192(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub193(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub194(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub195(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub196(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub197(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub198(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub199(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub200(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub201(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub202(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub203(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub204(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub205(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub206(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub207(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub208(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub209(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub210(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub211(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub212(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub213(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub214(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub215(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub216(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub217(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub218(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub219(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub220(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub221(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub222(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub223(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub224(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub225(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub226(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub227(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub228(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub229(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub230(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub231(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub232(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub233(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub234(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub235(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub236(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub237(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub238(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub239(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub240(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub241(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub242(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub243(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub244(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub245(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub246(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub247(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub248(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
NS_IMETHOD Stub249(uint64_t,uint64_t,
|
||||
uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
#endif
|
||||
|
||||
/* declarations of sentinel stubs */
|
||||
NS_IMETHOD Sentinel0();
|
||||
|
||||
Reference in new issue
Block a user