-
-
Notifications
You must be signed in to change notification settings - Fork 184
Description
Description of the issue
In my current project, I created a namespace that is split across different files with the goal of containing declarations of classes that I later declare as global, and make actually global using a decorator, as described in the docs.
However, using a decorator produces, in the compiled files, an assignation to ___exports as the last instruction of the namespace definition.
Reproduction
Aside from the declaration and definition of a simple decorator (aptly named Decorator), I've made two files which both add a class to a namespace (Repro).
WithoutDecorator.ts
namespace Repro {
export class WithoutDecorator {}
}WithDecorator.ts
namespace Repro {
@Decorator
export class WithDecorator {}
}Here's the produced lua for those files:
WithoutDecorator.lua
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
Repro = Repro or ({})
do
Repro.WithoutDecorator = __TS__Class()
local WithoutDecorator = Repro.WithoutDecorator
WithoutDecorator.name = "WithoutDecorator"
function WithoutDecorator.prototype.____constructor(self)
end
endWithDecorator.lua
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__Decorate = ____lualib.__TS__Decorate
Repro = Repro or ({})
do
Repro.WithDecorator = __TS__Class()
local WithDecorator = Repro.WithDecorator
WithDecorator.name = "WithDecorator"
function WithDecorator.prototype.____constructor(self)
end
WithDecorator = __TS__Decorate(WithDecorator, WithDecorator, {Decorator}, {kind = "class", name = "WithDecorator"})
____exports.WithDecorator = WithDecorator -- [editor's note]: throws "attempt to index global '____exports' (a nil value)"
endTo test it for yourself, you can download this minimal reproduction repo: https://github.com/SirWrexes/tstl-decorator-bug.
A run.lua file is provided to set the package.path to see results of compilation (inside ./lua/) and require the two compiled sources.
npm install
npx tstl
lua ./run.luaExpected behaviour
This assignation should not happen. Behaviour should not be different with and without a decorator on the classes inside a namespace.
The namespace itself is global, and it is not exported from its file, so the source rightly doesn't have a local named ___exports to assign to.