Enchance the VfrCompiler error handling.
authorqhuang8 <qhuang8@7335b38e-4728-0410-8992-fb3ffe349368>
Thu, 9 Apr 2009 02:57:18 +0000 (02:57 +0000)
committerqhuang8 <qhuang8@7335b38e-4728-0410-8992-fb3ffe349368>
Thu, 9 Apr 2009 02:57:18 +0000 (02:57 +0000)
git-svn-id: https://buildtools.tianocore.org/svn/buildtools/trunk/BaseTools@1547 7335b38e-4728-0410-8992-fb3ffe349368

Source/C/VfrCompile/VfrCompiler.cpp
Source/C/VfrCompile/VfrError.cpp
Source/C/VfrCompile/VfrFormPkg.cpp
Source/C/VfrCompile/VfrSyntax.g

index 94ba36c..6f7eb2c 100644 (file)
@@ -48,7 +48,7 @@ CVfrCompiler::IS_RUN_STATUS (
 \r
 VOID\r
 CVfrCompiler::OptionInitialization (\r
-  IN INT32      Argc, \r
+  IN INT32      Argc,\r
   IN CHAR8      **Argv\r
   )\r
 {\r
@@ -164,7 +164,7 @@ Fail:
   if (mOptions.IncludePaths != NULL) {\r
     delete mOptions.IncludePaths;\r
     mOptions.IncludePaths                = NULL;\r
-  } \r
+  }\r
   if (mOptions.CPreprocessorOptions != NULL) {\r
     delete mOptions.CPreprocessorOptions;\r
     mOptions.CPreprocessorOptions        = NULL;\r
@@ -328,7 +328,7 @@ CVfrCompiler::SetRecordListFileName (
 }\r
 \r
 CVfrCompiler::CVfrCompiler (\r
-  IN INT32      Argc, \r
+  IN INT32      Argc,\r
   IN CHAR8      **Argv\r
   )\r
 {\r
@@ -361,14 +361,14 @@ CVfrCompiler::~CVfrCompiler (
   SET_RUN_STATUS(STATUS_DEAD);\r
 }\r
 \r
-VOID \r
+VOID\r
 CVfrCompiler::Usage (\r
   VOID\r
   )\r
 {\r
   UINT32 Index;\r
   CONST  CHAR8 *Help[] = {\r
-    " ", \r
+    " ",\r
     "VfrCompile version " VFR_COMPILER_VERSION VFR_COMPILER_UPDATE_TIME,\r
     " ",\r
     "Usage: VfrCompile [options] VfrFile",\r
@@ -417,7 +417,7 @@ CVfrCompiler::PreProcess (
   }\r
   fclose (pVfrFile);\r
 \r
-  CmdLen = strlen (mPreProcessCmd) + strlen (mPreProcessOpt) + \r
+  CmdLen = strlen (mPreProcessCmd) + strlen (mPreProcessOpt) +\r
               strlen (mOptions.VfrFileName) + strlen (mOptions.PreprocessorOutputFileName);\r
   if (mOptions.CPreprocessorOptions != NULL) {\r
     CmdLen += strlen (mOptions.CPreprocessorOptions);\r
@@ -704,7 +704,7 @@ Err1:
 \r
 int\r
 main (\r
-  IN INT32             Argc, \r
+  IN INT32             Argc,\r
   IN CHAR8             **Argv\r
   )\r
 {\r
index b24cc72..38e3bdb 100644 (file)
@@ -90,7 +90,7 @@ CVfrErrorHandle::SetInputFile (
 }\r
 \r
 SVfrFileScopeRecord::SVfrFileScopeRecord (\r
-  IN CHAR8    *Record, \r
+  IN CHAR8    *Record,\r
   IN UINT32   LineNum\r
   )\r
 {\r
@@ -131,7 +131,7 @@ SVfrFileScopeRecord::~SVfrFileScopeRecord (
 \r
 VOID\r
 CVfrErrorHandle::ParseFileScopeRecord (\r
-  IN CHAR8     *Record, \r
+  IN CHAR8     *Record,\r
   IN UINT32    WholeScopeLine\r
   )\r
 {\r
index 3fb865b..1d5800c 100644 (file)
@@ -21,9 +21,9 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
  */\r
 \r
 SPendingAssign::SPendingAssign (\r
-  IN CHAR8  *Key, \r
-  IN VOID   *Addr, \r
-  IN UINT32 Len, \r
+  IN CHAR8  *Key,\r
+  IN VOID   *Addr,\r
+  IN UINT32 Len,\r
   IN UINT32 LineNo,\r
   IN CHAR8  *Msg\r
   )\r
@@ -68,7 +68,7 @@ SPendingAssign::~SPendingAssign (
 \r
 VOID\r
 SPendingAssign::SetAddrAndLen (\r
-  IN VOID   *Addr, \r
+  IN VOID   *Addr,\r
   IN UINT32 LineNo\r
   )\r
 {\r
@@ -78,7 +78,7 @@ SPendingAssign::SetAddrAndLen (
 \r
 VOID\r
 SPendingAssign::AssignValue (\r
-  IN VOID   *Addr, \r
+  IN VOID   *Addr,\r
   IN UINT32 Len\r
   )\r
 {\r
@@ -234,7 +234,7 @@ CFormPkg::Close (
 \r
 UINT32\r
 CFormPkg::Read (\r
-  IN CHAR8     *Buffer, \r
+  IN CHAR8     *Buffer,\r
   IN UINT32    Size\r
   )\r
 {\r
@@ -1353,11 +1353,11 @@ CIfrObj::~CIfrObj (
   VOID\r
   )\r
 {\r
+  gCIfrRecordInfoDB.IfrRecordInfoUpdate (mRecordIdx, mLineNo, mObjBinBuf, mObjBinLen, mPkgOffset);\r
+\r
   if ((mDelayEmit == TRUE) && ((gCreateOp == TRUE))) {\r
     _EMIT_PENDING_OBJ ();\r
   }\r
-\r
-  gCIfrRecordInfoDB.IfrRecordInfoUpdate (mRecordIdx, mLineNo, mObjBinBuf, mObjBinLen, mPkgOffset);\r
 }\r
 \r
 /*\r
index af974ce..f03471a 100644 (file)
@@ -673,6 +673,7 @@ subclassDefinition[UINT16 & SubClass] :
 vfrStatementDisableIfFormSet :\r
   <<\r
     CIfrDisableIf DIObj;\r
+    mConstantOnlyInExpression = TRUE;\r
   >>\r
   D:DisableIf                                       << DIObj.SetLineNo(D->getLine()); >>\r
   vfrStatementExpression[0] ";"                     << mConstantOnlyInExpression = FALSE; >>\r
@@ -895,7 +896,11 @@ vfrQuestionDataFieldName [EFI_QUESTION_ID &QId, UINT32 &Mask, CHAR8 *&VarIdStr,
                                                        _STRCAT(&VarIdStr, "]");\r
                                                     >>\r
                                                     << mCVfrQuestionDB.GetQuestionId (NULL, VarIdStr, $QId, $Mask); >>\r
-  )\r
+  )                                                 <<\r
+                                                       if (mConstantOnlyInExpression) {\r
+                                                         _PCATCH(VFR_RETURN_CONSTANT_ONLY, LineNo);\r
+                                                       }\r
+                                                    >>\r
   |\r
   (\r
     SN2:StringIdentifier                            << _STRCAT (&VarIdStr, SN2->getText()); LineNo = SN2->getLine(); >>\r
@@ -1911,9 +1916,12 @@ vfrStatementStatListOld :
   ;\r
 \r
 vfrStatementDisableIfStat :\r
-  << CIfrDisableIf DIObj; >>\r
+  << \r
+       CIfrDisableIf DIObj;\r
+       mConstantOnlyInExpression = TRUE; \r
+  >>\r
   L:DisableIf                                          << DIObj.SetLineNo(L->getLine()); >>\r
-  vfrStatementExpression[0] ";"\r
+  vfrStatementExpression[0] ";"                        << mConstantOnlyInExpression = FALSE; >>\r
   ( vfrStatementStatList )*\r
   E:EndIf                                              << CRT_END_OP (E); >>\r
   ";"\r
@@ -2055,9 +2063,12 @@ vfrStatementNoSubmitIf :
   ;\r
 \r
 vfrStatementDisableIfQuest :\r
-  << CIfrDisableIf DIObj; >>\r
+  << \r
+       CIfrDisableIf DIObj; \r
+       mConstantOnlyInExpression = TRUE;\r
+  >>\r
   L:DisableIf                                          << DIObj.SetLineNo(L->getLine()); >>\r
-  vfrStatementExpression[0] ";"\r
+  vfrStatementExpression[0] ";"                        << mConstantOnlyInExpression = FALSE; >>\r
   vfrStatementQuestionOptionList\r
   E:EndIf                                              << CRT_END_OP (E); >>\r
   ;\r