Jass Helper maintains a separate native list. Unless you update it, it will throw a syntax error when you call hashtable natives or use the type since as far as it is aware they have not been declared.
JASSHelper doesn't maintain a separate native list. Every time you save, SFMPQ reads common.j and Blizzard.j from war3patch.mpq, and puts it in the jasshelper folder. Then it passes the common.j and Blizzard.j as arguments to pjass.exe.
The issue here is the version of PJASS. The wc3 syntax checker became very strict about type after patch 1.24, so certain Blizzard.j functions that relied on implicit typecasting no longer compiled. Because of that, Blizzard actually had to rewrite those functions:
JASS:
function GetFadeFromSeconds takes real seconds returns integer
if (seconds != 0) then
return 128 / R2I(seconds)
endif
return 10000
endfunction
// Before patch 1.24, this function looked like:
function GetFadeFromSeconds takes real seconds returns integer
if (seconds != 0) then
return 128 / seconds
endif
return 10000
endfunction
Keep in mind that PJASS is a user-developed syntax checker. When the editor was updated to disallow the return-bug typecasting (after 1.24), PJASS needed to be updated to throw an error on it. Otherwise, maps exploiting the return bug would save just fine in JNGP, but would fail to run in wc3. PitzerMike made the update to PJASS, and it was bundled in the latest release of JNGP.
Now, let's say you run version switcher to get to patch 1.20. If you try to save any map, PJASS will throw an error. Why? It is still the type-strict version from post 1.24, so it will throw errors on the old Blizzard.j it is reading (because it abused the return bug as well. not as severely as we did though
).
So what is the solution? (A) Update to any patch after 1.24 (B) Find an older version of PJASS (C) Disable PJASS (Grimoire -> Uncheck "Disable WE Syntax Checker").
It looks like the OP already solved it by copying the files, but hopefully this explanation will clear some things up. ;D