diff options
Diffstat (limited to 'source/compiler/dtcompile.c')
| -rw-r--r-- | source/compiler/dtcompile.c | 84 | 
1 files changed, 52 insertions, 32 deletions
| diff --git a/source/compiler/dtcompile.c b/source/compiler/dtcompile.c index 09cb3e6c4a2e..b6a144feb2bf 100644 --- a/source/compiler/dtcompile.c +++ b/source/compiler/dtcompile.c @@ -161,7 +161,7 @@ static char                 VersionString[9];  /* Local prototypes */ -static ACPI_STATUS +void  DtInitialize (      void); @@ -196,16 +196,12 @@ DtDoCompile (      ACPI_STATUS             Status;      UINT8                   Event;      DT_FIELD                *FieldList; +    ASL_GLOBAL_FILE_NODE    *FileNode;      /* Initialize globals */ -    Status = DtInitialize (); -    if (ACPI_FAILURE (Status)) -    { -        printf ("Error during compiler initialization, 0x%X\n", Status); -        return (Status); -    } +    DtInitialize ();      /* Preprocessor */ @@ -223,13 +219,29 @@ DtDoCompile (          }      } -    /* -     * Scan the input file (file is already open) and -     * build the parse tree -     */ -    Event = UtBeginEvent ("Scan and parse input file"); -    FieldList = DtScanFile (AslGbl_Files[ASL_FILE_INPUT].Handle); -    UtEndEvent (Event); +    /* Compile the parse tree */ + +    if (AslGbl_DtLexBisonPrototype) +    { +        Event = UtBeginEvent ("Parse data table in prototype mode"); + +        DtCompilerInitLexer (AslGbl_Files[ASL_FILE_INPUT].Handle); +        DtCompilerParserparse (); +        FieldList = AslGbl_FieldList; +        DtCompilerTerminateLexer (); + +        UtEndEvent (Event); +    } +    else +    { +        /* +         * Scan the input file (file is already open) and +         * build the parse tree +         */ +        Event = UtBeginEvent ("Scan and parse input file"); +        FieldList = DtScanFile (AslGbl_Files[ASL_FILE_INPUT].Handle); +        UtEndEvent (Event); +    }      /* Did the parse tree get successfully constructed? */ @@ -245,14 +257,27 @@ DtDoCompile (      Event = UtBeginEvent ("Compile parse tree"); -    /* -     * Compile the parse tree -     */      Status = DtCompileDataTable (&FieldList);      UtEndEvent (Event); +    FileNode = FlGetCurrentFileNode (); +    if (!FileNode) +    { +        fprintf (stderr, "Summary for %s could not be generated", +            AslGbl_Files[ASL_FILE_INPUT].Filename); +    } +    else +    { +        FileNode->TotalLineCount = AslGbl_CurrentLineNumber; +        FileNode->OriginalInputFileSize = AslGbl_InputByteCount; +        DbgPrint (ASL_PARSE_OUTPUT, "Line count: %u input file size: %u\n", +                FileNode->TotalLineCount, FileNode->OriginalInputFileSize); +    } +      if (ACPI_FAILURE (Status))      { +        FileNode->ParserErrorDetected = TRUE; +          /* TBD: temporary error message. Msgs should come from function above */          DtError (ASL_ERROR, ASL_MSG_SYNTAX, NULL, @@ -276,6 +301,14 @@ DtDoCompile (      HxDoHexOutput ();      DtWriteTableToListing (); +    /* Save the compile time statistics to the current file node */ + +    if (FileNode) +    { +        FileNode->TotalFields = AslGbl_InputFieldCount; +        FileNode->OutputByteLength = AslGbl_TableLength; +    } +      return (Status);  } @@ -293,25 +326,12 @@ DtDoCompile (   *   *****************************************************************************/ -static ACPI_STATUS +void  DtInitialize (      void)  { -    ACPI_STATUS             Status; -    Status = AcpiOsInitialize (); -    if (ACPI_FAILURE (Status)) -    { -        return (Status); -    } - -    Status = AcpiUtInitGlobals (); -    if (ACPI_FAILURE (Status)) -    { -        return (Status); -    } -      AcpiUtSetIntegerWidth (2); /* Set width to 64 bits */      AslGbl_FieldList = NULL; @@ -319,7 +339,7 @@ DtInitialize (      AslGbl_SubtableStack = NULL;      sprintf (VersionString, "%X", (UINT32) ACPI_CA_VERSION); -    return (AE_OK); +    return;  } | 
