BaseTools: create base expression class

this class has a fucntion to share between Exception and RangeExpression
change both classes to call this function init in their init

Cc: Liming Gao <liming.gao@intel.com>
Cc: Yonghong Zhu <yonghong.zhu@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Jaben Carsey <jaben.carsey@intel.com>
Reviewed-by: Yonghong Zhu <yonghong.zhu@intel.com>
This commit is contained in:
Carsey, Jaben
2018-04-28 06:32:55 +08:00
committed by Yonghong Zhu
parent cf3062901d
commit b2aeaf573e
2 changed files with 20 additions and 36 deletions

View File

@ -201,7 +201,22 @@ def IntToStr(Value):
SupportedInMacroList = ['TARGET', 'TOOL_CHAIN_TAG', 'ARCH', 'FAMILY'] SupportedInMacroList = ['TARGET', 'TOOL_CHAIN_TAG', 'ARCH', 'FAMILY']
class ValueExpression(object): class BaseExpression(object):
def __init__(self, *args, **kwargs):
super(BaseExpression, self).__init__()
# Check if current token matches the operators given from parameter
def _IsOperator(self, OpSet):
Idx = self._Idx
self._GetOperator()
if self._Token in OpSet:
if self._Token in self.LogicalOperators:
self._Token = self.LogicalOperators[self._Token]
return True
self._Idx = Idx
return False
class ValueExpression(BaseExpression):
# Logical operator mapping # Logical operator mapping
LogicalOperators = { LogicalOperators = {
'&&' : 'and', '||' : 'or', '&&' : 'and', '||' : 'or',
@ -307,6 +322,7 @@ class ValueExpression(object):
return Val return Val
def __init__(self, Expression, SymbolTable={}): def __init__(self, Expression, SymbolTable={}):
super(ValueExpression, self).__init__(self, Expression, SymbolTable)
self._NoProcess = False self._NoProcess = False
if type(Expression) != type(''): if type(Expression) != type(''):
self._Expr = Expression self._Expr = Expression
@ -780,17 +796,6 @@ class ValueExpression(object):
self._Token = OpToken self._Token = OpToken
return OpToken return OpToken
# Check if current token matches the operators given from OpList
def _IsOperator(self, OpList):
Idx = self._Idx
self._GetOperator()
if self._Token in OpList:
if self._Token in self.LogicalOperators:
self._Token = self.LogicalOperators[self._Token]
return True
self._Idx = Idx
return False
class ValueExpressionEx(ValueExpression): class ValueExpressionEx(ValueExpression):
def __init__(self, PcdValue, PcdType, SymbolTable={}): def __init__(self, PcdValue, PcdType, SymbolTable={}):
ValueExpression.__init__(self, PcdValue, SymbolTable) ValueExpression.__init__(self, PcdValue, SymbolTable)

View File

@ -16,7 +16,7 @@ from Common.GlobalData import *
from CommonDataClass.Exceptions import BadExpression from CommonDataClass.Exceptions import BadExpression
from CommonDataClass.Exceptions import WrnExpression from CommonDataClass.Exceptions import WrnExpression
import uuid import uuid
from Common.Expression import PcdPattern from Common.Expression import PcdPattern,BaseExpression
from Common.DataType import * from Common.DataType import *
ERR_STRING_EXPR = 'This operator cannot be used in string expression: [%s].' ERR_STRING_EXPR = 'This operator cannot be used in string expression: [%s].'
@ -186,7 +186,7 @@ def GetOperatorObject(Operator):
else: else:
raise BadExpression("Bad Operator") raise BadExpression("Bad Operator")
class RangeExpression(object): class RangeExpression(BaseExpression):
# Logical operator mapping # Logical operator mapping
LogicalOperators = { LogicalOperators = {
'&&' : 'and', '||' : 'or', '&&' : 'and', '||' : 'or',
@ -347,6 +347,7 @@ class RangeExpression(object):
def __init__(self, Expression, PcdDataType, SymbolTable = {}): def __init__(self, Expression, PcdDataType, SymbolTable = {}):
super(RangeExpression, self).__init__(self, Expression, PcdDataType, SymbolTable)
self._NoProcess = False self._NoProcess = False
if type(Expression) != type(''): if type(Expression) != type(''):
self._Expr = Expression self._Expr = Expression
@ -693,25 +694,3 @@ class RangeExpression(object):
raise BadExpression(ERR_OPERATOR_UNSUPPORT % OpToken) raise BadExpression(ERR_OPERATOR_UNSUPPORT % OpToken)
self._Token = OpToken self._Token = OpToken
return OpToken return OpToken
# Check if current token matches the operators given from OpList
def _IsOperator(self, OpList):
Idx = self._Idx
self._GetOperator()
if self._Token in OpList:
if self._Token in self.LogicalOperators:
self._Token = self.LogicalOperators[self._Token]
return True
self._Idx = Idx
return False
# UTRangeList()