diff options
author | Andreas Kling <kling@serenityos.org> | 2021-01-12 12:17:30 +0100 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2021-01-12 12:17:46 +0100 |
commit | 13d7c09125f8eec703d0a43a9a87fc8aa08f7319 (patch) | |
tree | 70fd643c429cea5c1f9362c2674511d17a53f3b5 /Userland/Libraries/LibJS/Runtime/BigIntConstructor.cpp | |
parent | dc28c07fa526841e05e16161c74a6c23984f1dd5 (diff) | |
download | serenity-13d7c09125f8eec703d0a43a9a87fc8aa08f7319.zip |
Libraries: Move to Userland/Libraries/
Diffstat (limited to 'Userland/Libraries/LibJS/Runtime/BigIntConstructor.cpp')
-rw-r--r-- | Userland/Libraries/LibJS/Runtime/BigIntConstructor.cpp | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/Userland/Libraries/LibJS/Runtime/BigIntConstructor.cpp b/Userland/Libraries/LibJS/Runtime/BigIntConstructor.cpp new file mode 100644 index 0000000000..5eec127b63 --- /dev/null +++ b/Userland/Libraries/LibJS/Runtime/BigIntConstructor.cpp @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2020, Linus Groh <mail@linusgroh.de> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <AK/String.h> +#include <LibCrypto/BigInt/SignedBigInteger.h> +#include <LibJS/Runtime/BigIntConstructor.h> +#include <LibJS/Runtime/BigIntObject.h> +#include <LibJS/Runtime/Error.h> +#include <LibJS/Runtime/GlobalObject.h> +#include <LibJS/Runtime/VM.h> + +namespace JS { + +BigIntConstructor::BigIntConstructor(GlobalObject& global_object) + : NativeFunction(vm().names.BigInt, *global_object.function_prototype()) +{ +} + +void BigIntConstructor::initialize(GlobalObject& global_object) +{ + auto& vm = this->vm(); + NativeFunction::initialize(global_object); + define_property(vm.names.prototype, global_object.bigint_prototype(), 0); + define_property(vm.names.length, Value(1), Attribute::Configurable); + + u8 attr = Attribute::Writable | Attribute::Configurable; + define_native_function(vm.names.asIntN, as_int_n, 2, attr); + define_native_function(vm.names.asUintN, as_uint_n, 2, attr); +} + +BigIntConstructor::~BigIntConstructor() +{ +} + +Value BigIntConstructor::call() +{ + auto primitive = vm().argument(0).to_primitive(Value::PreferredType::Number); + if (vm().exception()) + return {}; + if (primitive.is_number()) { + if (!primitive.is_integer()) { + vm().throw_exception<RangeError>(global_object(), ErrorType::BigIntIntArgument); + return {}; + } + return js_bigint(heap(), Crypto::SignedBigInteger { primitive.as_i32() }); + } + auto* bigint = vm().argument(0).to_bigint(global_object()); + if (vm().exception()) + return {}; + return bigint; +} + +Value BigIntConstructor::construct(Function&) +{ + vm().throw_exception<TypeError>(global_object(), ErrorType::NotAConstructor, "BigInt"); + return {}; +} + +JS_DEFINE_NATIVE_FUNCTION(BigIntConstructor::as_int_n) +{ + TODO(); +} + +JS_DEFINE_NATIVE_FUNCTION(BigIntConstructor::as_uint_n) +{ + TODO(); +} + +} |