[Lldb-commits] [lldb] r285542 - [Test Suite] Pull generateSource into lldbtest

Chris Bieneman via lldb-commits lldb-commits at lists.llvm.org
Tue Nov 8 10:05:05 PST 2016


I pushed an attempted fix in r286254.

I wonder if this is a difference between python 2.7 and 3. The comprehension should capture everything, as should the eval call. I wonder if one of those captures less in python 3 compared to python 2.7.

Hopefully my patch will resolve the issue for you.

-Chris

> On Nov 8, 2016, at 7:37 AM, Zachary Turner <zturner at google.com> wrote:
> 
> 
> 
> On Sun, Oct 30, 2016 at 9:57 PM Chris Bieneman via lldb-commits <lldb-commits at lists.llvm.org <mailto:lldb-commits at lists.llvm.org>> wrote:
> 
> Modified: lldb/trunk/packages/Python/lldbsuite/test/lldbtest.py
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/lldbtest.py?rev=285542&r1=285541&r2=285542&view=diff <http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/lldbtest.py?rev=285542&r1=285541&r2=285542&view=diff>
> ==============================================================================
> --- lldb/trunk/packages/Python/lldbsuite/test/lldbtest.py (original)
> +++ lldb/trunk/packages/Python/lldbsuite/test/lldbtest.py Sun Oct 30 23:48:19 2016
> @@ -1848,6 +1848,33 @@ class TestBase(Base):
>                  folder = os.path.dirname(folder)
>                  continue
> 
> +    def generateSource(self, source):
> +        template = source + '.template'
> +        temp = os.path.join(os.getcwd(), template)
> +        with open(temp, 'r') as f:
> +            content = f.read()
> +
> +        public_api_dir = os.path.join(
> +            os.environ["LLDB_SRC"], "include", "lldb", "API")
> +
> +        # Look under the include/lldb/API directory and add #include statements
> +        # for all the SB API headers.
> +        public_headers = os.listdir(public_api_dir)
> +        # For different platforms, the include statement can vary.
> +        if self.hasDarwinFramework():
> +            include_stmt = "'#include <%s>' % os.path.join('LLDB', header)"
> +        else:
> +            include_stmt = "'#include <%s>' % os.path.join(public_api_dir, header)"
> +        list = [eval(include_stmt) for header in public_headers if (
> +            header.startswith("SB") and header.endswith(".h"))]
> +        includes = '\n'.join(list)
> +        new_content = content.replace('%include_SB_APIs%', includes)
> +        src = os.path.join(os.getcwd(), source)
> +        with open(src, 'w') as f:
> +            f.write(new_content)
> +
> +        self.addTearDownHook(lambda: os.remove(src))
> +
> 
> The non hasDarwinFramework codepath is broken here, and I don't believe it to be a Windows specific issue.  I'm getting the following error in multiple tests.
> 
> Traceback (most recent call last):
>   File "C:\src\llvm\tools\lldb\packages\Python\lldbsuite\test\functionalities\plugins\commands\TestPluginCommands.py", line 23, in setUp
>     self.generateSource('plugin.cpp')
>   File "C:\src\llvm\tools\lldb\packages\Python\lldbsuite\test\lldbtest.py", line 1868, in generateSource
>     list = [eval(include_stmt) for header in public_headers if (
>   File "C:\src\llvm\tools\lldb\packages\Python\lldbsuite\test\lldbtest.py", line 1869, in <listcomp>
>     header.startswith("SB") and header.endswith(".h"))]
>   File "<string>", line 1, in <module>
> NameError: name 'public_api_dir' is not defined
> Config=i686-C:\src\llvmbuild\ninja_release\bin\clang.exe 
> 
> I'm hypothesizing that the problem is that from inside of a list comprehension, your set of locals is not the same as outside of the list comprehension, and so the eval statement does not see the variable `public_api_dir`.  Is there any way you could provide a fix for this?

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20161108/8625afa8/attachment-0001.html>


More information about the lldb-commits mailing list