1 /* Copyright 2017 Mozilla Foundation
2  *
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 //! A simple event-driven library for parsing WebAssembly binary files
17 //! (or streams).
18 //!
19 //! The parser library reports events as they happend and only stores
20 //! parsing information for a brief period of time, making it very fast
21 //! and memory-efficient. The event-driven model, however, has some drawbacks.
22 //! If you need random access to the entire WebAssembly data-structure,
23 //! this is not the right library for you. You could however, build such
24 //! a data-structure using this library.
25 
26 pub use crate::binary_reader::BinaryReader;
27 pub use crate::binary_reader::Range;
28 use crate::binary_reader::SectionHeader;
29 
30 pub use crate::parser::ElemSectionEntryTable;
31 pub use crate::parser::LocalName;
32 pub use crate::parser::NameEntry;
33 pub use crate::parser::Parser;
34 pub use crate::parser::ParserInput;
35 pub use crate::parser::ParserState;
36 pub use crate::parser::RelocEntry;
37 pub use crate::parser::WasmDecoder;
38 
39 pub use crate::primitives::BinaryReaderError;
40 pub use crate::primitives::BrTable;
41 pub use crate::primitives::CustomSectionKind;
42 pub use crate::primitives::ExternalKind;
43 pub use crate::primitives::FuncType;
44 pub use crate::primitives::GlobalType;
45 pub use crate::primitives::Ieee32;
46 pub use crate::primitives::Ieee64;
47 pub use crate::primitives::ImportSectionEntryType;
48 pub use crate::primitives::LinkingType;
49 pub use crate::primitives::MemoryImmediate;
50 pub use crate::primitives::MemoryType;
51 pub use crate::primitives::NameType;
52 pub use crate::primitives::Naming;
53 pub use crate::primitives::Operator;
54 pub use crate::primitives::RelocType;
55 pub use crate::primitives::ResizableLimits;
56 pub use crate::primitives::Result;
57 pub use crate::primitives::SectionCode;
58 pub use crate::primitives::TableType;
59 pub use crate::primitives::Type;
60 pub use crate::primitives::TypeOrFuncType;
61 pub use crate::primitives::V128;
62 
63 pub use crate::validator::validate;
64 pub use crate::validator::validate_function_body;
65 pub use crate::validator::ValidatingOperatorParser;
66 pub use crate::validator::ValidatingParser;
67 pub use crate::validator::ValidatingParserConfig;
68 
69 pub use crate::module_resources::WasmFuncType;
70 pub use crate::module_resources::WasmGlobalType;
71 pub use crate::module_resources::WasmMemoryType;
72 pub use crate::module_resources::WasmModuleResources;
73 pub use crate::module_resources::WasmTableType;
74 pub use crate::module_resources::WasmType;
75 
76 pub(crate) use crate::module_resources::{wasm_func_type_inputs, wasm_func_type_outputs};
77 
78 pub use crate::operators_validator::OperatorValidatorConfig;
79 
80 pub use crate::readers::CodeSectionReader;
81 pub use crate::readers::CustomSectionContent;
82 pub use crate::readers::Data;
83 pub use crate::readers::DataKind;
84 pub use crate::readers::DataSectionReader;
85 pub use crate::readers::Element;
86 pub use crate::readers::ElementItem;
87 pub use crate::readers::ElementItems;
88 pub use crate::readers::ElementItemsReader;
89 pub use crate::readers::ElementKind;
90 pub use crate::readers::ElementSectionReader;
91 pub use crate::readers::Export;
92 pub use crate::readers::ExportSectionReader;
93 pub use crate::readers::FunctionBody;
94 pub use crate::readers::FunctionSectionReader;
95 pub use crate::readers::Global;
96 pub use crate::readers::GlobalSectionReader;
97 pub use crate::readers::Import;
98 pub use crate::readers::ImportSectionReader;
99 pub use crate::readers::InitExpr;
100 pub use crate::readers::LinkingSectionReader;
101 pub use crate::readers::LocalsReader;
102 pub use crate::readers::MemorySectionReader;
103 pub use crate::readers::ModuleReader;
104 pub use crate::readers::Name;
105 pub use crate::readers::NameSectionReader;
106 pub use crate::readers::NamingReader;
107 pub use crate::readers::OperatorsReader;
108 pub use crate::readers::ProducersField;
109 pub use crate::readers::ProducersFieldValue;
110 pub use crate::readers::ProducersFieldValuesReader;
111 pub use crate::readers::ProducersSectionReader;
112 pub use crate::readers::Reloc;
113 pub use crate::readers::RelocSectionReader;
114 pub use crate::readers::Section;
115 pub use crate::readers::SectionContent;
116 pub use crate::readers::SectionIterator;
117 pub use crate::readers::SectionIteratorLimited;
118 pub use crate::readers::SectionReader;
119 pub use crate::readers::SectionWithLimitedItems;
120 pub use crate::readers::TableSectionReader;
121 pub use crate::readers::TypeSectionReader;
122 
123 mod binary_reader;
124 mod limits;
125 mod module_resources;
126 mod operators_validator;
127 mod parser;
128 mod primitives;
129 mod readers;
130 mod tests;
131 mod validator;
132