* Copyright (c) 2024 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
declare function print(arg:any):string;
declare interface ArkTools {
isAOTCompiled(args: any): boolean;
}
let arraybuffer = new ArrayBuffer(10)
let dataView = new DataView(arraybuffer)
print(ArrayBuffer.isView(dataView))
print(ArrayBuffer.isView(dataView, 0))
let str = "123"
print(ArrayBuffer.isView(str))
print(ArrayBuffer.isView())
print(ArrayBuffer.isView(123))
print(ArrayBuffer.isView(new Float32Array()))
print(ArrayBuffer.isView({}))
print(ArrayBuffer.isView([]))
print(ArrayBuffer.isView(undefined))
try {
print('try')
print(ArrayBuffer.isView({}))
} catch(e) {
}
let obj = {};
obj.valueOf = (() => { return 5; })
print(ArrayBuffer.isView(obj));
function Throwing() {
this.value = 2;
Throwing.prototype.valueOf = function() {
if (this.value > 0) {
throw new Error("positive");
}
return this.value;
}
}
let throwingObj = new Throwing();
try {
print(ArrayBuffer.isView(throwingObj));
} catch(e) {
print(e);
} finally {
print(ArrayBuffer.isView(obj));
}
function replace(a : any) {
return a;
}
let true_isView = ArrayBuffer.isView
ArrayBuffer.isView = replace
print(ArrayBuffer.isView(undefined));
ArrayBuffer.isView = true_isView
print(ArrayBuffer.isView(undefined));
function doIsView(x: any): any {
return ArrayBuffer.isView(x);
}
function printIsView(x: any) {
try {
print(doIsView(x));
} finally {
}
}
if (ArkTools.isAOTCompiled(printIsView)) {
ArrayBuffer.isView = replace
}
printIsView(-1);
printIsView("abc");
ArrayBuffer.isView = true_isView