Asar is a Super Nintendo assembler based on xkas v0.06. It's the assembler used primarily on SMW Central.
Asar's got a freespace finder, will ask for filenames if double clicked, can use parentheses and proper priority in math, can assemble SPC-700 and SuperFX codes, and has many, many other neat little features. The full list of features can be found in the manual.
Some of the highlights in Asar v1.61:
Support for include search paths
An entirely new, more complete, HTML-based manual
New types of macro labels
Many, many other new commands, functions etc.
Many, many bug fixes
For a full list of changes, please check the changelog.
Source code can be found on GitHub, where you can also contribute using pull requests.
I'm approving this without a proper moderation process since both of the tool moderators (me and RPG Hacker) are important contributors to this, which means neither of us can test it "properly". But it has been used by hundreds of people by now and there haven't been any serious bugs so it's good enough.
@TheBiob: that feature was removed because it was undocumented and, after looking at the code for a lengthy amount, I could not figure out how to make use of it and was pretty sure that it was unusable in the first place and that thus no patch could be using it. Apparently I was wrong and it was usable in the form of !!Define, causing this incompatibility (though I'm still surprised about the fact that people actually did, considering it was undocumented - I think it was only ever mentioned in one of Alcaro's old changelogs, but not in the manual, and the source code even contains a comment stating "this feature is undocumented", making it seem like that was actually on purpose).
So yeah, not quite sure what to do about it in the future. I think randomdude proposed reintroduing the feature, but marking it as "deprecated" and making it throw a warning.
Fair point, although changing the default behavior would mean making the syntax context-dependent. In other words,
would mean different things, depending on if they were used inside or outside of a macro. In my opinion not an ideal solution, either. With the current implementation, the syntax is clear and means just a single thing, no matter the context (of course ?Label can't be used outside of macros, anyways, so the context doesn't matter there, but Label and #Label do the same thing, no matter where they are used).
I think one reason for this mess is that the concept of macros in xkas/Asar is kinda shaky to begin with. I personally like to think of macros as a text replacement mechanism, kinda like in C preprocessors, and that's mostly how I treat them, though in xkas and Asar, they also have traits/behaviors that are more function-like. This makes everything regarding them a bit tricky to deal with. When working with them, though, I prefer to lean more towards the "text replacement" side, which also influenced my decision here. Letting labels "leak" outside of macros by default is more "text replacement"-like, while not letting them leak outside is more "function"-like.
And I'd disagree. There can be legitimate use cases for actually wanting labels in macros to be accessible from the outside and/or modify label hierarchies, so I strictly oppose removing that possibility.