Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(72)

Side by Side Diff: include/llvm/Bitcode/NaCl/NaClBitstreamReader.h

Issue 986453002: Additional clean ups on errors in bitcode parsing. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-llvm.git@master
Patch Set: Fix nits. Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 //===- NaClBitstreamReader.h -----------------------------------*- C++ -*-===// 1 //===- NaClBitstreamReader.h -----------------------------------*- C++ -*-===//
2 // Low-level bitstream reader interface 2 // Low-level bitstream reader interface
3 // 3 //
4 // The LLVM Compiler Infrastructure 4 // The LLVM Compiler Infrastructure
5 // 5 //
6 // This file is distributed under the University of Illinois Open Source 6 // This file is distributed under the University of Illinois Open Source
7 // License. See LICENSE.TXT for details. 7 // License. See LICENSE.TXT for details.
8 // 8 //
9 //===----------------------------------------------------------------------===// 9 //===----------------------------------------------------------------------===//
10 // 10 //
11 // This header defines the BitstreamReader class. This class can be used to 11 // This header defines the BitstreamReader class. This class can be used to
12 // read an arbitrary bitstream, regardless of its contents. 12 // read an arbitrary bitstream, regardless of its contents.
13 // 13 //
14 //===----------------------------------------------------------------------===// 14 //===----------------------------------------------------------------------===//
15 15
16 #ifndef LLVM_BITCODE_NACL_NACLBITSTREAMREADER_H 16 #ifndef LLVM_BITCODE_NACL_NACLBITSTREAMREADER_H
17 #define LLVM_BITCODE_NACL_NACLBITSTREAMREADER_H 17 #define LLVM_BITCODE_NACL_NACLBITSTREAMREADER_H
18 18
19 #include "llvm/ADT/SmallVector.h" 19 #include "llvm/ADT/SmallVector.h"
20 #include "llvm/Bitcode/NaCl/NaClLLVMBitCodes.h" 20 #include "llvm/Bitcode/NaCl/NaClLLVMBitCodes.h"
21 #include "llvm/Support/Endian.h" 21 #include "llvm/Support/Endian.h"
22 #include "llvm/Support/StreamingMemoryObject.h" 22 #include "llvm/Support/StreamingMemoryObject.h"
23 #include <climits> 23 #include <climits>
24 #include <vector> 24 #include <vector>
25 25
26 namespace llvm { 26 namespace llvm {
27 27
28 class Deserializer; 28 class Deserializer;
29 29
30 namespace naclbitc {
31
32 /// Returns the Bit as a Byte:BitInByte string. MinByteWidth is the
jvoung (off chromium) 2015/03/06 22:30:27 There's no MinByteWidth argument for this function
Karl 2015/03/06 22:54:20 Good catch. Removing the sentence.
33 /// minimum number of characters to print out the Byte value (blank
34 /// fills).
35 std::string getBitAddress(uint64_t Bit);
36
37 /// Severity levels for reporting errors.
38 enum ErrorLevel {
39 Warning,
40 Error,
41 Fatal
42 };
43
44 // Basic printing routine to generate the beginning of an error
45 // message. BitPosition is the bit position the error was found.
46 // Level is the severity of the error.
47 raw_ostream &ErrorAt(raw_ostream &Out, ErrorLevel Level,
48 uint64_t BitPosition);
49
50 } // End namespace naclbitc.
51
30 /// This class is used to read from a NaCl bitcode wire format stream, 52 /// This class is used to read from a NaCl bitcode wire format stream,
31 /// maintaining information that is global to decoding the entire file. 53 /// maintaining information that is global to decoding the entire file.
32 /// While a file is being read, multiple cursors can be independently 54 /// While a file is being read, multiple cursors can be independently
33 /// advanced or skipped around within the file. These are represented by 55 /// advanced or skipped around within the file. These are represented by
34 /// the NaClBitstreamCursor class. 56 /// the NaClBitstreamCursor class.
35 class NaClBitstreamReader { 57 class NaClBitstreamReader {
36 public: 58 public:
37 /// This contains information emitted to BLOCKINFO_BLOCK blocks. These 59 /// This contains information emitted to BLOCKINFO_BLOCK blocks. These
38 /// describe abbreviations that all blocks of the specified ID inherit. 60 /// describe abbreviations that all blocks of the specified ID inherit.
39 struct BlockInfo { 61 struct BlockInfo {
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
81 Info.Abbrevs[i]->dropRef(); 103 Info.Abbrevs[i]->dropRef();
82 BlockInfoRecords.pop_back(); 104 BlockInfoRecords.pop_back();
83 } 105 }
84 } 106 }
85 107
86 /// \brief Returns the initial address (after the header) of the input stream. 108 /// \brief Returns the initial address (after the header) of the input stream.
87 size_t getInitialAddress() const { 109 size_t getInitialAddress() const {
88 return InitialAddress; 110 return InitialAddress;
89 } 111 }
90 112
91 /// Returns the Bit as a Byte:BitInByte string. MinByteWidth is the
92 /// minimum number of characters to print out the Byte value (blank
93 /// fills).
94 static std::string getBitAddress(uint64_t Bit, unsigned MinByteWidth=1);
95
96 //===--------------------------------------------------------------------===// 113 //===--------------------------------------------------------------------===//
97 // Block Manipulation 114 // Block Manipulation
98 //===--------------------------------------------------------------------===// 115 //===--------------------------------------------------------------------===//
99 116
100 /// Return true if we've already read and processed the block info block for 117 /// Return true if we've already read and processed the block info block for
101 /// this Bitstream. We only process it for the first cursor that walks over 118 /// this Bitstream. We only process it for the first cursor that walks over
102 /// it. 119 /// it.
103 bool hasBlockInfoRecords() const { return !BlockInfoRecords.empty(); } 120 bool hasBlockInfoRecords() const { return !BlockInfoRecords.empty(); }
104 121
105 /// If there is block info for the specified ID, return it, otherwise return 122 /// If there is block info for the specified ID, return it, otherwise return
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
320 } 337 }
321 338
322 NaClBitstreamReader *getBitStreamReader() { 339 NaClBitstreamReader *getBitStreamReader() {
323 return BitStream; 340 return BitStream;
324 } 341 }
325 const NaClBitstreamReader *getBitStreamReader() const { 342 const NaClBitstreamReader *getBitStreamReader() const {
326 return BitStream; 343 return BitStream;
327 } 344 }
328 345
329 /// Returns the current bit address (string) of the bit cursor. 346 /// Returns the current bit address (string) of the bit cursor.
330 /// MinByteWidth is the minimum number of characters to print out 347 /// MinByteWidth is the minimum number of characters to print out
jvoung (off chromium) 2015/03/06 22:30:27 There's no MinByteWidth parameter here anymore.
Karl 2015/03/06 22:54:20 Removed the sentence.
331 /// the Byte value (blank fills). 348 /// the Byte value (blank fills).
332 std::string getCurrentBitAddress(unsigned MinByteWidth=1) const { 349 std::string getCurrentBitAddress() const {
333 return BitStream->getBitAddress(GetCurrentBitNo(), MinByteWidth); 350 return naclbitc::getBitAddress(GetCurrentBitNo());
334 } 351 }
335 352
336 /// Flags that modify the behavior of advance(). 353 /// Flags that modify the behavior of advance().
337 enum { 354 enum {
338 /// If this flag is used, the advance() method does not automatically pop 355 /// If this flag is used, the advance() method does not automatically pop
339 /// the block scope when the end of a block is reached. 356 /// the block scope when the end of a block is reached.
340 AF_DontPopBlockAtEnd = 1, 357 AF_DontPopBlockAtEnd = 1,
341 358
342 /// If this flag is used, abbrev entries are returned just like normal 359 /// If this flag is used, abbrev entries are returned just like normal
343 /// records. 360 /// records.
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after
638 // Skips over an abbreviation record. Duplicates code of ReadAbbrevRecord, 655 // Skips over an abbreviation record. Duplicates code of ReadAbbrevRecord,
639 // except that no abbreviation is built. 656 // except that no abbreviation is built.
640 void SkipAbbrevRecord(); 657 void SkipAbbrevRecord();
641 658
642 bool ReadBlockInfoBlock(NaClAbbrevListener *Listener); 659 bool ReadBlockInfoBlock(NaClAbbrevListener *Listener);
643 }; 660 };
644 661
645 } // End llvm namespace 662 } // End llvm namespace
646 663
647 #endif 664 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698