diff options
Diffstat (limited to 'source/compiler/aslcompile.c')
| -rw-r--r-- | source/compiler/aslcompile.c | 31 |
1 files changed, 28 insertions, 3 deletions
diff --git a/source/compiler/aslcompile.c b/source/compiler/aslcompile.c index 281be341426b..5da664f57c23 100644 --- a/source/compiler/aslcompile.c +++ b/source/compiler/aslcompile.c @@ -285,8 +285,17 @@ CmDoCompile ( { Event = UtBeginEvent ("Resolve all Externals"); DbgPrint (ASL_DEBUG_OUTPUT, "\nResolve Externals\n\n"); - TrWalkParseTree (Gbl_ParseTreeRoot, ASL_WALK_VISIT_TWICE, - ExAmlExternalWalkBegin, ExAmlExternalWalkEnd, NULL); + + if (Gbl_DoExternalsInPlace) + { + TrWalkParseTree (Gbl_ParseTreeRoot, ASL_WALK_VISIT_DOWNWARD, + ExAmlExternalWalkBegin, NULL, NULL); + } + else + { + TrWalkParseTree (Gbl_ParseTreeRoot, ASL_WALK_VISIT_TWICE, + ExAmlExternalWalkBegin, ExAmlExternalWalkEnd, NULL); + } UtEndEvent (Event); } @@ -347,6 +356,18 @@ CmDoCompile ( NULL, &AnalysisWalkInfo); UtEndEvent (Event); + /* + * ASL-/ASL+ converter: Gbl_ParseTreeRoot->CommentList contains the + * very last comment of a given ASL file because it's the last constructed + * node during compilation. We take the very last comment and save it in a + * global for it to be used by the disassembler. + */ + if (Gbl_CaptureComments) + { + AcpiGbl_LastListHead = Gbl_ParseTreeRoot->Asl.CommentList; + Gbl_ParseTreeRoot->Asl.CommentList = NULL; + } + /* Calculate all AML package lengths */ Event = UtBeginEvent ("Finish AML package length generation"); @@ -800,7 +821,11 @@ CmCleanupAndExit ( /* Final cleanup after compiling one file */ - CmDeleteCaches (); + if (!Gbl_DoAslConversion) + { + CmDeleteCaches (); + } + } |
