Skip to content

Python interpreter frame scope creation bug? #292

@timmwagener

Description

@timmwagener

As i am following the (rewarding) book i have come across a part in the Python Interpreter chapter for which i am having trouble following the logic. Specifically it is about make_frame() in the Virtualmachine class in this line.

Considering the call site in Function.__call__ vm.make_frame(...) seems to reset the local scope for the frame to the globals. Wouldn't this cause problems when functions modify their local scope? Is this an optimization or a bug? (I'd assume the later one as the logic in the main byterun repo changed here)

# Function
def __call__(self, *args, **kwargs):
        callargs = inspect.getcallargs(self._func, *args, **kwargs)
        frame = self._vm.make_frame(
            self.func_code, callargs, self.func_globals, {}
        )

# VirtualMachine
def make_frame(self, code, callargs={}, global_names=None, local_names=None):
        if global_names is not None and local_names is not None:
            local_names = global_names
...

Pinging the authors @akaptur @nedbat , if you guys find the time, a short clarification would be appreciated.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions