Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit0199137

Browse files
committed
Add sum builtin function.
1 parent0799052 commit0199137

File tree

2 files changed

+24
-4
lines changed

2 files changed

+24
-4
lines changed

‎tests/snippets/builtins.py‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,6 @@
22
a=list(map(str, [1,2,3]))
33
asserta== ['1','2','3']
44

5+
x=sum(map(int,a))
6+
assertx==6
7+

‎vm/src/builtins.rs‎

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ use super::pyobject::{
1919
};
2020
usesuper::vm::VirtualMachine;
2121
use num_bigint::ToBigInt;
22-
use num_traits::{Signed,ToPrimitive};
22+
use num_traits::{Signed,ToPrimitive,Zero};
2323

2424
fnget_locals(vm:&mutVirtualMachine) ->PyObjectRef{
2525
let d = vm.new_dict();
@@ -61,7 +61,9 @@ fn builtin_abs(vm: &mut VirtualMachine, args: PyFuncArgs) -> PyResult {
6161
}
6262

6363
fnbuiltin_all(vm:&mutVirtualMachine,args:PyFuncArgs) ->PyResult{
64-
for itemin args.args{
64+
arg_check!(vm, args, required =[(iterable,None)]);
65+
let items = vm.extract_elements(iterable)?;
66+
for itemin items{
6567
let result = objbool::boolval(vm, item)?;
6668
if !result{
6769
returnOk(vm.new_bool(false));
@@ -71,7 +73,9 @@ fn builtin_all(vm: &mut VirtualMachine, args: PyFuncArgs) -> PyResult {
7173
}
7274

7375
fnbuiltin_any(vm:&mutVirtualMachine,args:PyFuncArgs) ->PyResult{
74-
for itemin args.args{
76+
arg_check!(vm, args, required =[(iterable,None)]);
77+
let items = vm.extract_elements(iterable)?;
78+
for itemin items{
7579
let result = objbool::boolval(vm, item)?;
7680
if result{
7781
returnOk(vm.new_bool(true));
@@ -501,7 +505,19 @@ fn builtin_setattr(vm: &mut VirtualMachine, args: PyFuncArgs) -> PyResult {
501505
// builtin_slice
502506
// builtin_sorted
503507
// builtin_staticmethod
504-
// builtin_sum
508+
509+
fnbuiltin_sum(vm:&mutVirtualMachine,args:PyFuncArgs) ->PyResult{
510+
arg_check!(vm, args, required =[(iterable,None)]);
511+
let items = vm.extract_elements(iterable)?;
512+
513+
// Start with zero and add at will:
514+
letmut sum = vm.ctx.new_int(Zero::zero());
515+
for itemin items{
516+
sum = vm._add(sum, item)?;
517+
}
518+
Ok(sum)
519+
}
520+
505521
// builtin_super
506522
// builtin_vars
507523
// builtin_zip
@@ -563,6 +579,7 @@ pub fn make_module(ctx: &PyContext) -> PyObjectRef {
563579
dict.insert(String::from("set"), ctx.set_type());
564580
dict.insert(String::from("setattr"), ctx.new_rustfunc(builtin_setattr));
565581
dict.insert(String::from("str"), ctx.str_type());
582+
dict.insert(String::from("sum"), ctx.new_rustfunc(builtin_sum));
566583
dict.insert(String::from("tuple"), ctx.tuple_type());
567584
dict.insert(String::from("type"), ctx.type_type());
568585

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp