user.tokens and user.options are inlined all the way at the bottom of the page. This is causing bugs when modules depend on user.tokens (which none do yet, which is kind of bad when you think about it), because the following happens:
- loader resolves dependencies for foo
- loader loads foo|user.tokens
- mw.implement( 'user.tokens', ... ) is called
- foo is loaded normally and can use mw.user.tokens
- the inlined <script> tag call mw.implement( 'user.tokens', ... ) again, resulting in an exception
There is no good reason for user.tokens and user.options to be inlined at the /bottom/. We should inline them at the top, before the top-load queue.
Version: 1.17.x
Severity: normal