]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/UPT/Parser/DecParserMisc.py
BaseTools: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / BaseTools / Source / Python / UPT / Parser / DecParserMisc.py
index 8d289793930bb9ce1f22dc8b8e787c153a153900..27990467d1c51a1bdedadc9d0d56b3f8bbce8d69 100644 (file)
@@ -1,15 +1,9 @@
 ## @file\r
 # This file is used to define helper class and function for DEC parser\r
 #\r
-# Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>\r
+# Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.<BR>\r
 #\r
-# This program and the accompanying materials are licensed and made available \r
-# under the terms and conditions of the BSD License which accompanies this \r
-# distribution. The full text of the license may be found at \r
-# http://opensource.org/licenses/bsd-license.php\r
-#\r
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+# SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
 '''\r
 DecParserMisc\r
@@ -25,6 +19,7 @@ from Library.DataType import TAB_COMMENT_SPLIT
 from Library.DataType import TAB_COMMENT_EDK1_SPLIT\r
 from Library.ExpressionValidate import IsValidBareCString\r
 from Library.ParserValidate import IsValidCFormatGuid\r
+from Library.ExpressionValidate import IsValidFeatureFlagExp\r
 from Library.ExpressionValidate import IsValidLogicalExpr\r
 from Library.ExpressionValidate import IsValidStringTest\r
 from Library.Misc import CheckGuidRegFormat\r
@@ -103,7 +98,7 @@ def StripRoot(Root, Path):
 # Remove spaces\r
 #\r
 # @param Line:              The string to be cleaned\r
-# @param CommentCharacter:  Comment char, used to ignore comment content, \r
+# @param CommentCharacter:  Comment char, used to ignore comment content,\r
 #                           default is DataType.TAB_COMMENT_SPLIT\r
 #\r
 def CleanString(Line, CommentCharacter=TAB_COMMENT_SPLIT, \\r
@@ -134,26 +129,38 @@ def CleanString(Line, CommentCharacter=TAB_COMMENT_SPLIT, \
     return Line, Comment\r
 \r
 \r
-## IsValidHexByte\r
+## IsValidNumValUint8\r
 #\r
-# Check if Token is HexByte: <HexByte> ::= 0x <HexDigit>{1,2}\r
+# Check if Token is NumValUint8: <NumValUint8> ::= {<ShortNum>} {<UINT8>} {<Expression>}\r
 #\r
 # @param Token: Token to be checked\r
 #\r
-def IsValidHexByte(Token):\r
+def IsValidNumValUint8(Token):\r
+    Valid = True\r
+    Cause = ""\r
+    TokenValue = None\r
     Token = Token.strip()\r
-    if not Token.lower().startswith('0x') or not (len(Token) < 5 and len(Token) > 2):\r
-        return False\r
+    if Token.lower().startswith('0x'):\r
+        Base = 16\r
+    else:\r
+        Base = 10\r
     try:\r
-        Token = long(Token, 0)\r
+        TokenValue = int(Token, Base)\r
     except BaseException:\r
+        Valid, Cause = IsValidLogicalExpr(Token, True)\r
+        if Cause:\r
+            pass\r
+    if not Valid:\r
         return False\r
-    return True\r
+    if TokenValue and (TokenValue < 0 or TokenValue > 0xFF):\r
+        return False\r
+    else:\r
+        return True\r
 \r
 ## IsValidNList\r
 #\r
-# Check if Value has the format of <HexByte> ["," <HexByte>]{0,}\r
-# <HexByte> ::= "0x" <HexDigit>{1,2}\r
+# Check if Value has the format of <NumValUint8> ["," <NumValUint8>]{0,}\r
+# <NumValUint8> ::= {<ShortNum>} {<UINT8>} {<Expression>}\r
 #\r
 # @param Value: Value to be checked\r
 #\r
@@ -162,8 +169,8 @@ def IsValidNList(Value):
     if Par.End():\r
         return False\r
     while not Par.End():\r
-        Token = Par.GetToken(',\t ')\r
-        if not IsValidHexByte(Token):\r
+        Token = Par.GetToken(',')\r
+        if not IsValidNumValUint8(Token):\r
             return False\r
         if Par.Expect(','):\r
             if Par.End():\r
@@ -186,11 +193,11 @@ def IsValidCArray(Array):
     if Par.End():\r
         return False\r
     while not Par.End():\r
-        Token = Par.GetToken(',}\t ')\r
+        Token = Par.GetToken(',}')\r
         #\r
-        # 0xa, 0xaa\r
+        # ShortNum, UINT8, Expression\r
         #\r
-        if not IsValidHexByte(Token):\r
+        if not IsValidNumValUint8(Token):\r
             return False\r
         if Par.Expect(','):\r
             if Par.End():\r
@@ -213,6 +220,10 @@ def IsValidCArray(Array):
 # @param Value:    The pcd Value\r
 #\r
 def IsValidPcdDatum(Type, Value):\r
+    if not Value:\r
+        return False, ST.ERR_DECPARSE_PCD_VALUE_EMPTY\r
+    Valid = True\r
+    Cause = ""\r
     if Type not in ["UINT8", "UINT16", "UINT32", "UINT64", "VOID*", "BOOLEAN"]:\r
         return False, ST.ERR_DECPARSE_PCD_TYPE\r
     if Type == "VOID*":\r
@@ -230,9 +241,9 @@ def IsValidPcdDatum(Type, Value):
         if Value in ['TRUE', 'FALSE', 'true', 'false', 'True', 'False',\r
                      '0x1', '0x01', '1', '0x0', '0x00', '0']:\r
             return True, ""\r
-        Valid, Cause = IsValidStringTest(Value)\r
+        Valid, Cause = IsValidStringTest(Value, True)\r
         if not Valid:\r
-            Valid, Cause = IsValidLogicalExpr(Value)\r
+            Valid, Cause = IsValidFeatureFlagExp(Value, True)\r
         if not Valid:\r
             return False, Cause\r
     else:\r
@@ -245,33 +256,15 @@ def IsValidPcdDatum(Type, Value):
                 Value = Value.lstrip('0')\r
                 if not Value:\r
                     return True, ""\r
-            Value = long(Value, 0)\r
-            TypeLenMap = {\r
-                #\r
-                # 0x00 - 0xff\r
-                #\r
-                'UINT8'  : 2,\r
-                #\r
-                # 0x0000 - 0xffff\r
-                #\r
-                'UINT16' : 4,\r
-                #\r
-                # 0x00000000 - 0xffffffff\r
-                #\r
-                'UINT32' : 8,\r
-                #\r
-                # 0x0 - 0xffffffffffffffff\r
-                #\r
-                'UINT64' : 16\r
-            }\r
-            HexStr = hex(Value)\r
-            #\r
-            # First two chars of HexStr are 0x and tail char is L\r
-            #\r
-            if TypeLenMap[Type] < len(HexStr) - 3:\r
+            Value = int(Value, 0)\r
+            MAX_VAL_TYPE = {"BOOLEAN": 0x01, 'UINT8': 0xFF, 'UINT16': 0xFFFF, 'UINT32': 0xFFFFFFFF,\r
+                            'UINT64': 0xFFFFFFFFFFFFFFFF}\r
+            if Value > MAX_VAL_TYPE[Type]:\r
                 return False, ST.ERR_DECPARSE_PCD_INT_EXCEED % (StrVal, Type)\r
         except BaseException:\r
-            return False, ST.ERR_DECPARSE_PCD_INT % (Value, Type)\r
+            Valid, Cause = IsValidLogicalExpr(Value, True)\r
+        if not Valid:\r
+            return False, Cause\r
 \r
     return True, ""\r
 \r
@@ -347,7 +340,7 @@ class ParserHelper:
 \r
     ## AssertChar\r
     #\r
-    # Assert char at current index of string is AssertChar, or will report \r
+    # Assert char at current index of string is AssertChar, or will report\r
     # error message\r
     #\r
     # @param AssertChar: AssertChar\r