Set __VERSION__ macro when the #version directive is parsed

__VERSION__ macro needs to be set to 300 when #version 300 es is on the
first line of the shader, since section 3.4 of ESSL 3.00.4 spec mentions
that the value of __VERSION__ should match the shading language being
parsed. The value from parsing the version directive replaces the default
value 100.

BUG=angleproject:524
TEST=dEQP-GLES3.functional.shaders.preprocessor.predefined_macros.*
     (4 tests start passing, 2 still fail)
     dEQP-GLES3.functional.shaders.preprocessor.conditionals.*
     (2 tests start passing)
     dEQP-GLES2.functional.shaders.preprocessor.predefined_macros.*
     (no regression)

Change-Id: I15bfdeb73d1e343d131ded56b1fd52ca5ef32408
Reviewed-on: https://chromium-review.googlesource.com/293440
Reviewed-by: Zhenyao Mo <zmo@chromium.org>
Tested-by: Olli Etuaho <oetuaho@nvidia.com>
diff --git a/src/compiler/preprocessor/Macro.cpp b/src/compiler/preprocessor/Macro.cpp
index 13cb14e..4c4d5fd 100644
--- a/src/compiler/preprocessor/Macro.cpp
+++ b/src/compiler/preprocessor/Macro.cpp
@@ -6,6 +6,8 @@
 
 #include "Macro.h"
 
+#include <sstream>
+
 #include "Token.h"
 
 namespace pp
@@ -19,5 +21,23 @@
            (replacements == other.replacements);
 }
 
+void PredefineMacro(MacroSet *macroSet, const char *name, int value)
+{
+    std::ostringstream stream;
+    stream << value;
+
+    Token token;
+    token.type = Token::CONST_INT;
+    token.text = stream.str();
+
+    Macro macro;
+    macro.predefined = true;
+    macro.type       = Macro::kTypeObj;
+    macro.name = name;
+    macro.replacements.push_back(token);
+
+    (*macroSet)[name] = macro;
+}
+
 }  // namespace pp