From 34bba7a257c7519b3ff1b194a211dbcd95ad527e Mon Sep 17 00:00:00 2001 From: Windel Bouwman Date: Tue, 14 Aug 2018 21:52:00 +0200 Subject: [PATCH] Borrow list object mutably and append item --- vm/src/builtins.rs | 6 +++++- vm/src/objlist.rs | 21 ++++++++++++--------- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/vm/src/builtins.rs b/vm/src/builtins.rs index cd1e589b9..2dd9c4a60 100644 --- a/vm/src/builtins.rs +++ b/vm/src/builtins.rs @@ -30,8 +30,12 @@ fn dir_locals(vm: &mut VirtualMachine) -> PyObjectRef { } fn dir_object(vm: &mut VirtualMachine, _obj: PyObjectRef) -> PyObjectRef { - // TODO: Implement dir for objects let d = vm.new_dict(); + // TODO: loop over dict of instance, next of class? + // TODO: Implement dir for objects + // for i in obj.iter_items() { + // d.set_item(k, v); + // } d } diff --git a/vm/src/objlist.rs b/vm/src/objlist.rs index fbdb1002a..613c8659e 100644 --- a/vm/src/objlist.rs +++ b/vm/src/objlist.rs @@ -24,17 +24,20 @@ pub fn set_item( } fn append(vm: &mut VirtualMachine, args: PyFuncArgs) -> PyResult { - // TODO: Implement objlist::append - trace!("list.append called with: {:?}", args); - if let PyObjectKind::List { ref elements } = args.args[0].borrow().kind { - warn!("implement append here: {:?}", elements); - // elements.push(args.args[1].clone()); - Ok(vm.get_none()) + if args.args.len() == 2 { + let l = args.args[0].clone(); + let o = args.args[1].clone(); + trace!("list.append called with: {:?}", args); + let mut list_obj = l.borrow_mut(); + if let PyObjectKind::List { ref mut elements } = list_obj.kind { + elements.push(o); + Ok(vm.get_none()) + } else { + Err(vm.new_exception("list.append is called with no list".to_string())) + } } else { - unimplemented!("Raise error when list.append is called with no list") - // Err() + Err(vm.new_exception("list.append requires two arguments".to_string())) } - // Ok(vm.new_bound_method(args.args[0].clone(), args.args[1].clone())) } pub fn create_type(type_type: PyObjectRef) -> PyObjectRef {