Giter VIP home page Giter VIP logo

Comments (2)

evanw avatar evanw commented on April 28, 2024 2

Thanks for the report. This is something that I already know about and am working on fixing. It's my top priority. Unfortunately fixing it isn't straightforward because it requires a change to how scopes work.

The problem is caused by variables that are defined in a nested scope and then used in a sibling or parent scope. I have surprisingly not run in to this on all of the code bases I've tested so far. I only discovered it because of the library mentioned in #24.

This came up because I have a somewhat different way of doing scope analysis. I'm trying to keep the number of full-tree passes required to a minimum for speed, so I'm attempting to set up scopes and bind variables in the same pass. That mostly works except for this case.

I've already tried to fix this by doing a bottom-up algorithm instead of the top-down algorithm I'm currently using. It mostly works except that I'm also doing some AST transforms during the same pass that need to know if a given identifier is a specific global or not, which is information that isn't available at that point when using the bottom-up algorithm.

I think it should work without a performance penalty if I move scope construction from the binding pass to the parsing pass. That's what I plan to try next.

from esbuild.

maltsev avatar maltsev commented on April 28, 2024

So here is more simpler example:

var a = function () {
    var loop$1 = function () {
        console.log(name$1);
    };

    for (var name$1 in {c: 'c', d: 'd'}) loop$1();
};

a();

translates to

var a = function() {
    var loop$1 = function() {
        console.log(name$1);
    };
    for (var name$12 in {
        c: "c",
        d: "d"
    })
        loop$1();
};
a();

which produces the same error:

Uncaught ReferenceError: name$1 is not defined at loop$1

The same code bundled with browserify or just included without bundling produces no error.

from esbuild.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.