public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Zhu, Yonghong" <yonghong.zhu@intel.com>
To: "Feng, YunhuaX" <yunhuax.feng@intel.com>,
	"Yao, Jiewen" <jiewen.yao@intel.com>,
	"edk2-devel@lists.01.org" <edk2-devel@lists.01.org>
Cc: "Gao, Liming" <liming.gao@intel.com>,
	"Zhu, Yonghong" <yonghong.zhu@intel.com>
Subject: Re: [PATCH] BaseTools: Update Expression.py for VOID* support L'a' and 'a'
Date: Sun, 4 Feb 2018 03:04:44 +0000	[thread overview]
Message-ID: <B9726D6DCCFB8B4CA276A9169B02216D51F8A71E@SHSMSX103.ccr.corp.intel.com> (raw)
In-Reply-To: <47C64442C08CCD4089DC43B6B5E46BC4827CAD@shsmsx102.ccr.corp.intel.com>

Reviewed-by: Yonghong Zhu <yonghong.zhu@intel.com> 

Best Regards,
Zhu Yonghong


-----Original Message-----
From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf Of Feng, YunhuaX
Sent: Friday, February 02, 2018 9:49 PM
To: Yao, Jiewen <jiewen.yao@intel.com>; edk2-devel@lists.01.org
Cc: Gao, Liming <liming.gao@intel.com>
Subject: Re: [edk2] [PATCH] BaseTools: Update Expression.py for VOID* support L'a' and 'a'

sorry
L'' and '' is single quote and not include any character, so we will report error message

Any question, please let me know. Thanks.

Best Regards
Feng, Yunhua


-----Original Message-----
From: Yao, Jiewen
Sent: Friday, February 2, 2018 9:45 PM
To: Feng, YunhuaX <yunhuax.feng@intel.com>; edk2-devel@lists.01.org
Cc: Gao, Liming <liming.gao@intel.com>
Subject: RE: [PATCH] BaseTools: Update Expression.py for VOID* support L'a' and 'a'

Good.

I am just confused on the commit message --- when the value is L'' or '', will report error.

Would you please clarify what does that mean?

Thank you
Yao Jiewen


> -----Original Message-----
> From: Feng, YunhuaX
> Sent: Friday, February 2, 2018 9:42 PM
> To: Yao, Jiewen <jiewen.yao@intel.com>; edk2-devel@lists.01.org
> Cc: Gao, Liming <liming.gao@intel.com>
> Subject: RE: [PATCH] BaseTools: Update Expression.py for VOID* support 
> L'a' and 'a'
> 
> Yes, you are right.
> 
> L"String" and "String" still support,  and we add L'String' and 'String'
> L"ab"  ==> {0x61, 0x00, 0x62, 0x00, 0x00, 0x00}
> L'ab'   ==> {0x61, 0x00, 0x62, 0x00}
> 
> Any question, please let me know. Thanks.
> 
> Best Regards
> Feng, Yunhua
> 
> -----Original Message-----
> From: Yao, Jiewen
> Sent: Friday, February 2, 2018 8:17 PM
> To: Feng, YunhuaX <yunhuax.feng@intel.com>; edk2-devel@lists.01.org
> Cc: Gao, Liming <liming.gao@intel.com>; Yao, Jiewen 
> <jiewen.yao@intel.com>
> Subject: RE: [PATCH] BaseTools: Update Expression.py for VOID* support 
> L'a' and 'a'
> 
> Hello
> May I know why we do not support L"String" ?
> 
> My understanding is that L'String' is a string without NULL 
> terminator, L"String" is a string with NULL terminator, right?
> 
> Thank you
> Yao Jiewen
> 
> > -----Original Message-----
> > From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf 
> > Of Feng, YunhuaX
> > Sent: Friday, February 2, 2018 5:02 PM
> > To: edk2-devel@lists.01.org
> > Cc: Gao, Liming <liming.gao@intel.com>
> > Subject: [edk2] [PATCH] BaseTools: Update Expression.py for VOID* 
> > support
> L'a'
> > and 'a'
> >
> > Type VOID* support L'a' and 'a', the value transfer to c style value.
> > L'a' --> {0x61, 0x00}
> > L'ab' --> {0x61, 0x00, 0x62, 0x00}
> > 'a'  --> {0x61}
> > 'ab' --> {0x61, 0x62}
> >
> > when the value is L'' or '', will report error
> >
> > Cc: Liming Gao <liming.gao@intel.com>
> > Cc: Yonghong Zhu <yonghong.zhu@intel.com>
> > Contributed-under: TianoCore Contribution Agreement 1.1
> > Signed-off-by: Yunhua Feng <yunhuax.feng@intel.com>
> > ---
> >  BaseTools/Source/Python/Common/Expression.py | 19
> ++++++++++++++++---
> >  BaseTools/Source/Python/Common/Misc.py       |  4 ++++
> >  2 files changed, 20 insertions(+), 3 deletions(-)
> >
> > diff --git a/BaseTools/Source/Python/Common/Expression.py
> > b/BaseTools/Source/Python/Common/Expression.py
> > index b8c48460ff..6a1103df2c 100644
> > --- a/BaseTools/Source/Python/Common/Expression.py
> > +++ b/BaseTools/Source/Python/Common/Expression.py
> > @@ -740,7 +740,12 @@ class ValueExpressionEx(ValueExpression):
> >          try:
> >              PcdValue = ValueExpression.__call__(self, RealValue, Depth)
> >              if self.PcdType == 'VOID*' and
> > (PcdValue.startswith("'") or
> > PcdValue.startswith("L'")):
> > -                raise BadExpression
> > +                PcdValue, Size = ParseFieldValue(PcdValue)
> > +                PcdValueList = []
> > +                for I in range(Size):
> > +                    PcdValueList.append('0x%02X'%(PcdValue & 0xff))
> > +                    PcdValue = PcdValue >> 8
> > +                PcdValue = '{' + ','.join(PcdValueList) + '}'
> >              elif self.PcdType in ['UINT8', 'UINT16', 'UINT32', 
> > 'UINT64', 'BOOLEAN'] and (PcdValue.startswith("'") or \
> >                        PcdValue.startswith('"') or
> > PcdValue.startswith("L'") or PcdValue.startswith('L"') or
> PcdValue.startswith('{')):
> >                  raise BadExpression @@ -755,6 +760,8 @@ class
> > ValueExpressionEx(ValueExpression):
> >                      TmpValue = 0
> >                      Size = 0
> >                      for Item in PcdValue:
> > +                        if Item.startswith('UINT8'):
> > +                            ItemSize = 1
> >                          if Item.startswith('UINT16'):
> >                              ItemSize = 2
> >                          elif Item.startswith('UINT32'):
> > @@ -776,7 +783,10 @@ class ValueExpressionEx(ValueExpression):
> >                          TmpValue = (ItemValue << (Size * 8)) | TmpValue
> >                          Size = Size + ItemSize
> >                  else:
> > -                    TmpValue, Size = ParseFieldValue(PcdValue)
> > +                    try:
> > +                        TmpValue, Size = ParseFieldValue(PcdValue)
> > +                    except BadExpression:
> > +                        raise BadExpression("Type: %s, Value: %s, 
> > + format
> > or value error" % (self.PcdType, PcdValue))
> >                  if type(TmpValue) == type(''):
> >                      TmpValue = int(TmpValue)
> >                  else:
> > @@ -858,7 +868,7 @@ class ValueExpressionEx(ValueExpression):
> >                                      else:
> >                                          raise BadExpression('%s not 
> > defined before use' % Offset)
> >                                  ValueType = ""
> > -                                if Item.startswith('UINT16'):
> > +                                if Item.startswith('UINT8'):
> >                                      ItemSize = 1
> >                                      ValueType = "UINT8"
> >                                  elif Item.startswith('UINT16'):
> > @@ -887,6 +897,9 @@ class ValueExpressionEx(ValueExpression):
> >
> >                              if Size > 0:
> >                                  PcdValue = '{' + ValueStr[:-2] + '}'
> > +                    else:
> > +                        raise  BadExpression("Type: %s, Value: %s, 
> > + format
> > or value error"%(self.PcdType, PcdValue))
> > +
> >          if PcdValue == 'True':
> >              PcdValue = '1'
> >          if PcdValue == 'False':
> > diff --git a/BaseTools/Source/Python/Common/Misc.py
> > b/BaseTools/Source/Python/Common/Misc.py
> > index b34cb4c3be..d80f645d2e 100644
> > --- a/BaseTools/Source/Python/Common/Misc.py
> > +++ b/BaseTools/Source/Python/Common/Misc.py
> > @@ -1572,6 +1572,8 @@ def ParseFieldValue (Value):
> >      if Value.startswith("L'") and Value.endswith("'"):
> >          # Unicode Character Constant
> >          List = list(Value[2:-1])
> > +        if len(List) == 0:
> > +            raise BadExpression('Length %s is %s' % (Value,
> > + len(List)))
> >          List.reverse()
> >          Value = 0
> >          for Char in List:
> > @@ -1580,6 +1582,8 @@ def ParseFieldValue (Value):
> >      if Value.startswith("'") and Value.endswith("'"):
> >          # Character constant
> >          List = list(Value[1:-1])
> > +        if len(List) == 0:
> > +            raise BadExpression('Length %s is %s' % (Value,
> > + len(List)))
> >          List.reverse()
> >          Value = 0
> >          for Char in List:
> > --
> > 2.12.2.windows.2
> >
> > _______________________________________________
> > edk2-devel mailing list
> > edk2-devel@lists.01.org
> > https://lists.01.org/mailman/listinfo/edk2-devel
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel


      reply	other threads:[~2018-02-04  2:59 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-02-02  9:01 [PATCH] BaseTools: Update Expression.py for VOID* support L'a' and 'a' Feng, YunhuaX
2018-02-02 12:16 ` Yao, Jiewen
2018-02-02 13:41   ` Feng, YunhuaX
2018-02-02 13:45     ` Yao, Jiewen
2018-02-02 13:48       ` Feng, YunhuaX
2018-02-04  3:04         ` Zhu, Yonghong [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=B9726D6DCCFB8B4CA276A9169B02216D51F8A71E@SHSMSX103.ccr.corp.intel.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox