From 0701d2f1fb3b99459c7e2cabf3b9aeee10c88725 Mon Sep 17 00:00:00 2001 From: Stiopa Koltsov Date: Thu, 19 Sep 2024 19:21:57 -0700 Subject: [PATCH] Move abs() into mod num Reviewed By: JakobDegen Differential Revision: D63009017 fbshipit-source-id: 9f0a392fdbfded1bdf8ce8d56c95dc58ea4c3e03 --- starlark/src/stdlib/funcs/globals.rs | 2 ++ starlark/src/stdlib/funcs/other.rs | 20 ----------- starlark/src/values/types/num.rs | 1 + starlark/src/values/types/num/globals.rs | 44 ++++++++++++++++++++++++ 4 files changed, 47 insertions(+), 20 deletions(-) create mode 100644 starlark/src/values/types/num/globals.rs diff --git a/starlark/src/stdlib/funcs/globals.rs b/starlark/src/stdlib/funcs/globals.rs index a08468279..557d6cc13 100644 --- a/starlark/src/stdlib/funcs/globals.rs +++ b/starlark/src/stdlib/funcs/globals.rs @@ -28,6 +28,7 @@ use crate::values::string::globals::register_str; use crate::values::tuple::globals::register_tuple; use crate::values::types::dict::globals::register_dict; use crate::values::types::list::globals::register_list; +use crate::values::types::num::globals::register_num; pub(crate) fn register_globals(globals: &mut GlobalsBuilder) { register_list(globals); @@ -38,6 +39,7 @@ pub(crate) fn register_globals(globals: &mut GlobalsBuilder) { register_str(globals); register_range(globals); register_int(globals); + register_num(globals); register_float(globals); register_min_max(globals); register_zip(globals); diff --git a/starlark/src/stdlib/funcs/other.rs b/starlark/src/stdlib/funcs/other.rs index d73f924cd..3b3bad44a 100644 --- a/starlark/src/stdlib/funcs/other.rs +++ b/starlark/src/stdlib/funcs/other.rs @@ -27,8 +27,6 @@ use crate::environment::GlobalsBuilder; use crate::eval::Evaluator; use crate::values::list::AllocList; use crate::values::tuple::UnpackTuple; -use crate::values::types::num::value::Num; -use crate::values::types::num::value::NumRef; use crate::values::typing::never::StarlarkNever; use crate::values::typing::ty::AbstractType; use crate::values::typing::StarlarkIter; @@ -66,24 +64,6 @@ pub(crate) fn register_other(builder: &mut GlobalsBuilder) { ))) } - /// Take the absolute value of an int. - /// - /// ``` - /// # starlark::assert::all_true(r#" - /// abs(0) == 0 - /// abs(-10) == 10 - /// abs(10) == 10 - /// abs(10.0) == 10.0 - /// abs(-12.34) == 12.34 - /// # "#); - /// ``` - fn abs(#[starlark(require = pos)] x: NumRef) -> anyhow::Result { - match x { - NumRef::Int(a) => Ok(Num::Int(a.abs())), - NumRef::Float(a) => Ok(Num::Float(a.0.abs())), - } - } - /// [any]( /// https://github.com/bazelbuild/starlark/blob/master/spec.md#any /// ): returns true if any value in the iterable object have a truth value diff --git a/starlark/src/values/types/num.rs b/starlark/src/values/types/num.rs index 14af586f3..9dfa1b6a6 100644 --- a/starlark/src/values/types/num.rs +++ b/starlark/src/values/types/num.rs @@ -17,5 +17,6 @@ //! Helpers for numerical values. +pub(crate) mod globals; pub(crate) mod typecheck; pub(crate) mod value; diff --git a/starlark/src/values/types/num/globals.rs b/starlark/src/values/types/num/globals.rs new file mode 100644 index 000000000..2fbf94973 --- /dev/null +++ b/starlark/src/values/types/num/globals.rs @@ -0,0 +1,44 @@ +/* + * Copyright 2018 The Starlark in Rust Authors. + * Copyright (c) Facebook, Inc. and its affiliates. + * + * 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 + * + * https://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. + */ + +use starlark_derive::starlark_module; + +use crate as starlark; +use crate::environment::GlobalsBuilder; +use crate::values::types::num::value::Num; +use crate::values::types::num::value::NumRef; + +#[starlark_module] +pub(crate) fn register_num(globals: &mut GlobalsBuilder) { + /// Take the absolute value of an int. + /// + /// ``` + /// # starlark::assert::all_true(r#" + /// abs(0) == 0 + /// abs(-10) == 10 + /// abs(10) == 10 + /// abs(10.0) == 10.0 + /// abs(-12.34) == 12.34 + /// # "#); + /// ``` + fn abs(#[starlark(require = pos)] x: NumRef) -> anyhow::Result { + match x { + NumRef::Int(a) => Ok(Num::Int(a.abs())), + NumRef::Float(a) => Ok(Num::Float(a.0.abs())), + } + } +}