diff options
Diffstat (limited to 'src/binary-reader-logging.h')
-rw-r--r-- | src/binary-reader-logging.h | 242 |
1 files changed, 242 insertions, 0 deletions
diff --git a/src/binary-reader-logging.h b/src/binary-reader-logging.h new file mode 100644 index 00000000..021420cb --- /dev/null +++ b/src/binary-reader-logging.h @@ -0,0 +1,242 @@ +/* + * Copyright 2017 WebAssembly Community Group participants + * + * 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 + * + * http://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. + */ + +#ifndef WABT_BINARY_READER_LOGGING_H_ +#define WABT_BINARY_READER_LOGGING_H_ + +#include "binary-reader.h" + +namespace wabt { + +struct Stream; + +class BinaryReaderLogging : public BinaryReader { + public: + BinaryReaderLogging(Stream*, BinaryReader* forward); + + virtual bool OnError(const char* message); + virtual void OnSetState(const State* s); + + virtual Result BeginModule(uint32_t version); + virtual Result EndModule(); + + virtual Result BeginSection(BinarySection section_type, uint32_t size); + + virtual Result BeginCustomSection(uint32_t size, StringSlice section_name); + virtual Result EndCustomSection(); + + virtual Result BeginTypeSection(uint32_t size); + virtual Result OnTypeCount(uint32_t count); + virtual Result OnType(uint32_t index, + uint32_t param_count, + Type* param_types, + uint32_t result_count, + Type* result_types); + virtual Result EndTypeSection(); + + virtual Result BeginImportSection(uint32_t size); + virtual Result OnImportCount(uint32_t count); + virtual Result OnImport(uint32_t index, + StringSlice module_name, + StringSlice field_name); + virtual Result OnImportFunc(uint32_t import_index, + StringSlice module_name, + StringSlice field_name, + uint32_t func_index, + uint32_t sig_index); + virtual Result OnImportTable(uint32_t import_index, + StringSlice module_name, + StringSlice field_name, + uint32_t table_index, + Type elem_type, + const Limits* elem_limits); + virtual Result OnImportMemory(uint32_t import_index, + StringSlice module_name, + StringSlice field_name, + uint32_t memory_index, + const Limits* page_limits); + virtual Result OnImportGlobal(uint32_t import_index, + StringSlice module_name, + StringSlice field_name, + uint32_t global_index, + Type type, + bool mutable_); + virtual Result EndImportSection(); + + virtual Result BeginFunctionSection(uint32_t size); + virtual Result OnFunctionCount(uint32_t count); + virtual Result OnFunction(uint32_t index, uint32_t sig_index); + virtual Result EndFunctionSection(); + + virtual Result BeginTableSection(uint32_t size); + virtual Result OnTableCount(uint32_t count); + virtual Result OnTable(uint32_t index, + Type elem_type, + const Limits* elem_limits); + virtual Result EndTableSection(); + + virtual Result BeginMemorySection(uint32_t size); + virtual Result OnMemoryCount(uint32_t count); + virtual Result OnMemory(uint32_t index, const Limits* limits); + virtual Result EndMemorySection(); + + virtual Result BeginGlobalSection(uint32_t size); + virtual Result OnGlobalCount(uint32_t count); + virtual Result BeginGlobal(uint32_t index, Type type, bool mutable_); + virtual Result BeginGlobalInitExpr(uint32_t index); + virtual Result EndGlobalInitExpr(uint32_t index); + virtual Result EndGlobal(uint32_t index); + virtual Result EndGlobalSection(); + + virtual Result BeginExportSection(uint32_t size); + virtual Result OnExportCount(uint32_t count); + virtual Result OnExport(uint32_t index, + ExternalKind kind, + uint32_t item_index, + StringSlice name); + virtual Result EndExportSection(); + + virtual Result BeginStartSection(uint32_t size); + virtual Result OnStartFunction(uint32_t func_index); + virtual Result EndStartSection(); + + virtual Result BeginCodeSection(uint32_t size); + virtual Result OnFunctionBodyCount(uint32_t count); + virtual Result BeginFunctionBody(uint32_t index); + virtual Result OnLocalDeclCount(uint32_t count); + virtual Result OnLocalDecl(uint32_t decl_index, uint32_t count, Type type); + + virtual Result OnOpcode(Opcode opcode); + virtual Result OnOpcodeBare(); + virtual Result OnOpcodeUint32(uint32_t value); + virtual Result OnOpcodeUint32Uint32(uint32_t value, uint32_t value2); + virtual Result OnOpcodeUint64(uint64_t value); + virtual Result OnOpcodeF32(uint32_t value); + virtual Result OnOpcodeF64(uint64_t value); + virtual Result OnOpcodeBlockSig(uint32_t num_types, Type* sig_types); + virtual Result OnBinaryExpr(Opcode opcode); + virtual Result OnBlockExpr(uint32_t num_types, Type* sig_types); + virtual Result OnBrExpr(uint32_t depth); + virtual Result OnBrIfExpr(uint32_t depth); + virtual Result OnBrTableExpr(uint32_t num_targets, + uint32_t* target_depths, + uint32_t default_target_depth); + virtual Result OnCallExpr(uint32_t func_index); + virtual Result OnCallIndirectExpr(uint32_t sig_index); + virtual Result OnCompareExpr(Opcode opcode); + virtual Result OnConvertExpr(Opcode opcode); + virtual Result OnCurrentMemoryExpr(); + virtual Result OnDropExpr(); + virtual Result OnElseExpr(); + virtual Result OnEndExpr(); + virtual Result OnEndFunc(); + virtual Result OnF32ConstExpr(uint32_t value_bits); + virtual Result OnF64ConstExpr(uint64_t value_bits); + virtual Result OnGetGlobalExpr(uint32_t global_index); + virtual Result OnGetLocalExpr(uint32_t local_index); + virtual Result OnGrowMemoryExpr(); + virtual Result OnI32ConstExpr(uint32_t value); + virtual Result OnI64ConstExpr(uint64_t value); + virtual Result OnIfExpr(uint32_t num_types, Type* sig_types); + virtual Result OnLoadExpr(Opcode opcode, + uint32_t alignment_log2, + uint32_t offset); + virtual Result OnLoopExpr(uint32_t num_types, Type* sig_types); + virtual Result OnNopExpr(); + virtual Result OnReturnExpr(); + virtual Result OnSelectExpr(); + virtual Result OnSetGlobalExpr(uint32_t global_index); + virtual Result OnSetLocalExpr(uint32_t local_index); + virtual Result OnStoreExpr(Opcode opcode, + uint32_t alignment_log2, + uint32_t offset); + virtual Result OnTeeLocalExpr(uint32_t local_index); + virtual Result OnUnaryExpr(Opcode opcode); + virtual Result OnUnreachableExpr(); + virtual Result EndFunctionBody(uint32_t index); + virtual Result EndCodeSection(); + + virtual Result BeginElemSection(uint32_t size); + virtual Result OnElemSegmentCount(uint32_t count); + virtual Result BeginElemSegment(uint32_t index, uint32_t table_index); + virtual Result BeginElemSegmentInitExpr(uint32_t index); + virtual Result EndElemSegmentInitExpr(uint32_t index); + virtual Result OnElemSegmentFunctionIndexCount(uint32_t index, + uint32_t count); + virtual Result OnElemSegmentFunctionIndex(uint32_t index, + uint32_t func_index); + virtual Result EndElemSegment(uint32_t index); + virtual Result EndElemSection(); + + virtual Result BeginDataSection(uint32_t size); + virtual Result OnDataSegmentCount(uint32_t count); + virtual Result BeginDataSegment(uint32_t index, uint32_t memory_index); + virtual Result BeginDataSegmentInitExpr(uint32_t index); + virtual Result EndDataSegmentInitExpr(uint32_t index); + virtual Result OnDataSegmentData(uint32_t index, + const void* data, + uint32_t size); + virtual Result EndDataSegment(uint32_t index); + virtual Result EndDataSection(); + + virtual Result BeginNamesSection(uint32_t size); + virtual Result OnFunctionNameSubsection(uint32_t index, + uint32_t name_type, + uint32_t subsection_size); + virtual Result OnFunctionNamesCount(uint32_t num_functions); + virtual Result OnFunctionName(uint32_t function_index, + StringSlice function_name); + virtual Result OnLocalNameSubsection(uint32_t index, + uint32_t name_type, + uint32_t subsection_size); + virtual Result OnLocalNameFunctionCount(uint32_t num_functions); + virtual Result OnLocalNameLocalCount(uint32_t function_index, + uint32_t num_locals); + virtual Result OnLocalName(uint32_t function_index, + uint32_t local_index, + StringSlice local_name); + virtual Result EndNamesSection(); + + virtual Result BeginRelocSection(uint32_t size); + virtual Result OnRelocCount(uint32_t count, + BinarySection section_code, + StringSlice section_name); + virtual Result OnReloc(RelocType type, + uint32_t offset, + uint32_t index, + int32_t addend); + virtual Result EndRelocSection(); + + virtual Result OnInitExprF32ConstExpr(uint32_t index, uint32_t value); + virtual Result OnInitExprF64ConstExpr(uint32_t index, uint64_t value); + virtual Result OnInitExprGetGlobalExpr(uint32_t index, uint32_t global_index); + virtual Result OnInitExprI32ConstExpr(uint32_t index, uint32_t value); + virtual Result OnInitExprI64ConstExpr(uint32_t index, uint64_t value); + + private: + void Indent(); + void Dedent(); + void WriteIndent(); + void LogTypes(uint32_t type_count, Type* types); + + Stream* stream; + BinaryReader* reader; + int indent; +}; + +} // namespace wabt + +#endif // WABT_BINARY_READER_LOGGING_H_ |