blob: 27d54152fc41445310b37c9940c2f4b87161d860 [file] [log] [blame] [edit]
/*
* 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 {
class 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,
uint32_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_