A lightweight and fast Jass2 parser for bison/yacc
Original by Rudi Cilibrasi
And improved by many others
This repo now maintained by lep
To use this program, list the files you would like to parse in order.
If you would like to parse from standard input (the keyboard), then
use -
as an argument. If you supply no arguments to pjass, it will
parse the console standard input by default.
To test this program:
$ pjass common.j common.ai Blizzard.j
If you are using pjass via JNGP replace the pjass.exe
in JNGP/jasshelper/
with the updated one.
Blizzard ships their own pjass signed by them so you can't just replace the
.exe-file. But you can still use the new pjass by using jasshelper.conf
like this:
[jasscompiler]
"pjass-fresh.exe"
"$COMMONJ $BLIZZARDJ $WAR3MAPJ"
pjass-fresh.exe
is of course the newly downloaded pjass executable (just put
it next to the original pjass.exe).
pjass provides a bunch of command line flags to customize and turn on specific
checks. pjass provides a special system to easily enable and disable features
for specific files. Say you want to enable the "returnbug" but only for
Blizzard.j
, here is how you would do that:
$ pjass common.j +rb Blizzard.j -rb war3map.j
So any +
-flag enables the flag until the next -
-flag. If you want to have
flag on for all your files just put before any file arguments.
$ pjass +checkstringhash common.j Blizzard.j war3map.j
You can also (de)activate the flags on a per function base directly in your .j-file like this:
//# +rb
function H2I takes handle h returns integer
return h
return 0
endfunction
Here is a table of all currently supported flags. All of these options are off by default.
Flag | Description |
---|---|
rb |
When enabled pjass allows the old returnbug usage. |
filter |
When enabled pjass checks for functions in Filter or Condition to return boolean. |
shadow |
When enabled this checks if a local variable name is same as a previously defined global variable name. |
checkglobalsinit |
When enabled pjass checks for potentially usage of uninitialized global variables. |
checkstringhash |
When enabled pjass checks for calls to StringHash and reports when two different strings hash to the same integer. |
noruntimeerror |
When enabled pjass ignores all runtime errors. Runtime errors are wrong usage of specific natives for example. |
nosemanticerror |
When enabled pjass ignores all semantic errors. This is/was used to be able to check the memhack scripts. |
nosyntaxerror |
When enabled pjass ignores all syntax errors. |
nomodulooperator |
When enabled pjass reports any usage of the modulo (% ) operator. |
checklongnames |
When enabled pjass checks if any name is longer than 3958 characters. |
checknumberliterals |
When enabled pjass checks if any number literal overflows. |
oldpatch |
Enables +rb , +filter , +nomodulooperator and +checklongnames at once. |
This uses flex and bison (atleast version 3.0), so install them first.
Then just run GNUMake (e.g. make
or gmake
).
You can also run make help
to get a bunch of options but the other most
important make-target is probably test
which builds pjass and runs all
supplied tests in tests/
.
In this repo i tried to capture the whole history of pjass. For this i imported the cvs repo from sourceforge and went through the pjass-thread on wc3c. On top of that i added my own modifications. This probably isn't the real history as for one some attachments on wc3c were faulty but i guess it's as good as it can get.
You can find news about this program and updates at http://hiveworkshop.com/threads/pjass-updates.258738/ and http://www.wc3c.net/showthread.php?t=75239 and http://jass.sourceforge.net