forked from mirrors/gecko-dev
		
	 cde449925a
			
		
	
	
		cde449925a
		
	
	
	
	
		
			
			The actual iterator implementation and JSAPI calls related to setting up the interface are ported directly from Gecko's Codegen.py, IterableIterator.h, and IterableIterator.webidl. The changes to support multiple interfaces in one file are required because the internal iterator interface the parser generates gets associated with the original interface's WebIDL file. It seemed like a good time to address #571 in that case. --- - [X] `./mach build -d` does not report any errors - [X] `./mach test-tidy` does not report any errors - [X] These changes fix #12628 and fix #571. - [X] There are tests for these changes Source-Repo: https://github.com/servo/servo Source-Revision: 1370fa5e3b38f3000c0b1439177cc7b7b81d380e
		
			
				
	
	
		
			54 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			54 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| /* This Source Code Form is subject to the terms of the Mozilla Public
 | |
|  * License, v. 2.0. If a copy of the MPL was not distributed with this
 | |
|  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 | |
| 
 | |
| // check-tidy: no specs after this line
 | |
| 
 | |
| use dom::bindings::cell::DOMRefCell;
 | |
| use dom::bindings::codegen::Bindings::TestBindingPairIterableBinding;
 | |
| use dom::bindings::codegen::Bindings::TestBindingPairIterableBinding::TestBindingPairIterableMethods;
 | |
| use dom::bindings::error::Fallible;
 | |
| use dom::bindings::global::GlobalRef;
 | |
| use dom::bindings::iterable::Iterable;
 | |
| use dom::bindings::js::Root;
 | |
| use dom::bindings::reflector::{Reflector, reflect_dom_object};
 | |
| use dom::bindings::str::DOMString;
 | |
| 
 | |
| #[dom_struct]
 | |
| pub struct TestBindingPairIterable {
 | |
|     reflector: Reflector,
 | |
|     map: DOMRefCell<Vec<(DOMString, u32)>>,
 | |
| }
 | |
| 
 | |
| impl Iterable for TestBindingPairIterable {
 | |
|     type Key = DOMString;
 | |
|     type Value = u32;
 | |
|     fn get_iterable_length(&self) -> u32 {
 | |
|         self.map.borrow().len() as u32
 | |
|     }
 | |
|     fn get_value_at_index(&self, index: u32) -> u32 {
 | |
|         self.map.borrow().iter().nth(index as usize).map(|a| &a.1).unwrap().clone()
 | |
|     }
 | |
|     fn get_key_at_index(&self, index: u32) -> DOMString {
 | |
|         self.map.borrow().iter().nth(index as usize).map(|a| &a.0).unwrap().clone()
 | |
|     }
 | |
| }
 | |
| 
 | |
| impl TestBindingPairIterable {
 | |
|     fn new(global: GlobalRef) -> Root<TestBindingPairIterable> {
 | |
|         reflect_dom_object(box TestBindingPairIterable {
 | |
|             reflector: Reflector::new(),
 | |
|             map: DOMRefCell::new(vec![]),
 | |
|         }, global, TestBindingPairIterableBinding::TestBindingPairIterableWrap)
 | |
|     }
 | |
| 
 | |
|     pub fn Constructor(global: GlobalRef) -> Fallible<Root<TestBindingPairIterable>> {
 | |
|         Ok(TestBindingPairIterable::new(global))
 | |
|     }
 | |
| }
 | |
| 
 | |
| impl TestBindingPairIterableMethods for TestBindingPairIterable {
 | |
|     fn Add(&self, key: DOMString, value: u32) {
 | |
|         self.map.borrow_mut().push((key, value));
 | |
|     }
 | |
| }
 |