Remove AssemblyContext::getWord().
authorDejan Mircevski <deki@google.com>
Tue, 15 Mar 2016 19:16:40 +0000 (15:16 -0400)
committerDejan Mircevski <deki@google.com>
Tue, 15 Mar 2016 19:16:40 +0000 (15:16 -0400)
Fixes #152.

source/text.cpp
source/text_handler.cpp
source/text_handler.h
test/TextToBinary.Miscellaneous.cpp
test/TextToBinary.cpp

index 91c04a4..c9fc8e9 100644 (file)
@@ -478,7 +478,6 @@ spv_result_t encodeInstructionStartingWithImmediate(
   }
   return SPV_SUCCESS;
 }
-}  // anonymous namespace
 
 /// @brief Translate single Opcode and operands to binary form
 ///
@@ -545,7 +544,7 @@ spv_result_t spvTextEncodeOpcode(const libspirv::AssemblyGrammar& grammar,
   error = grammar.lookupOpcode(pInstName, &opcodeEntry);
   if (error) {
     return context->diagnostic(error) << "Invalid Opcode name '"
-                                      << context->getWord() << "'";
+                                      << opcodeName << "'";
   }
   if (opcodeEntry->hasResult && result_id.empty()) {
     return context->diagnostic()
@@ -652,8 +651,6 @@ spv_result_t spvTextEncodeOpcode(const libspirv::AssemblyGrammar& grammar,
   return SPV_SUCCESS;
 }
 
-namespace {
-
 enum { kAssemblerVersion = 0 };
 
 /// @brief Populate a binary stream's words with this generator's header.
index 851d1b1..17453fe 100644 (file)
@@ -233,25 +233,6 @@ bool AssemblyContext::hasText() const {
   return text_->length > current_position_.index;
 }
 
-std::string AssemblyContext::getWord() const {
-  uint64_t index = current_position_.index;
-  while (true) {
-    switch (text_->str[index]) {
-      case '\0':
-      case '\t':
-      case '\v':
-      case '\r':
-      case '\n':
-      case ' ':
-        return std::string(text_->str, text_->str + index);
-      default:
-        index++;
-    }
-  }
-  assert(0 && "Unreachable");
-  return "";  // Make certain compilers happy.
-}
-
 void AssemblyContext::seekForward(uint32_t size) {
   current_position_.index += size;
   current_position_.column += size;
index 386a4dc..c0a3df4 100644 (file)
@@ -149,11 +149,6 @@ class AssemblyContext {
   // the next location past the end of the word.
   spv_result_t getWord(std::string& word, spv_position endPosition);
 
-  // Returns the next word in the input stream. It is invalid to call this
-  // method if position has been set to a location in the stream that does not
-  // exist. If there are no subsequent words, the empty string will be returned.
-  std::string getWord() const;
-
   // Returns true if the next word in the input is the start of a new Opcode.
   bool startsWithOp();
 
index 55aac28..d99af52 100644 (file)
@@ -29,8 +29,8 @@
 
 #include "UnitSPIRV.h"
 
-#include "gmock/gmock.h"
 #include "TestFixture.h"
+#include "gmock/gmock.h"
 
 namespace {
 
@@ -51,4 +51,18 @@ TEST_F(TextToBinaryMisc, OpUndef) {
   EXPECT_THAT(Subvector(code, 3), Eq(MakeInstruction(SpvOpUndef, {typeID, 2})));
 }
 
+TEST_F(TextToBinaryMisc, OpWrong) {
+  EXPECT_THAT(CompileFailure(" OpWrong %1 %2"),
+              Eq("Invalid Opcode name 'OpWrong'"));
+}
+
+TEST_F(TextToBinaryMisc, OpWrongAfterRight) {
+  const auto assembly = R"(
+OpCapability Shader
+OpMemoryModel Logical GLSL450
+OpXYZ
+)";
+  EXPECT_THAT(CompileFailure(assembly), Eq("Invalid Opcode name 'OpXYZ'"));
+}
+
 }  // anonymous namespace
index 182dcf5..841e964 100644 (file)
@@ -46,22 +46,6 @@ using spvtest::MakeInstruction;
 using spvtest::TextToBinaryTest;
 using testing::Eq;
 
-TEST(GetWord, Simple) {
-  EXPECT_EQ("", AssemblyContext(AutoText(""), nullptr).getWord());
-  EXPECT_EQ("", AssemblyContext(AutoText("\0a"), nullptr).getWord());
-  EXPECT_EQ("", AssemblyContext(AutoText(" a"), nullptr).getWord());
-  EXPECT_EQ("", AssemblyContext(AutoText("\ta"), nullptr).getWord());
-  EXPECT_EQ("", AssemblyContext(AutoText("\va"), nullptr).getWord());
-  EXPECT_EQ("", AssemblyContext(AutoText("\ra"), nullptr).getWord());
-  EXPECT_EQ("", AssemblyContext(AutoText("\na"), nullptr).getWord());
-  EXPECT_EQ("abc", AssemblyContext(AutoText("abc"), nullptr).getWord());
-  EXPECT_EQ("abc", AssemblyContext(AutoText("abc "), nullptr).getWord());
-  EXPECT_EQ("abc", AssemblyContext(AutoText("abc\t"), nullptr).getWord());
-  EXPECT_EQ("abc", AssemblyContext(AutoText("abc\r"), nullptr).getWord());
-  EXPECT_EQ("abc", AssemblyContext(AutoText("abc\v"), nullptr).getWord());
-  EXPECT_EQ("abc", AssemblyContext(AutoText("abc\n"), nullptr).getWord());
-}
-
 // An mask parsing test case.
 struct MaskCase {
   spv_operand_type_t which_enum;