Skip to content

Releases: pawn-lang/compiler


08 Feb 14:38
Choose a tag to compare
  • Back-ported some PAWN 4 natives and features (#287)
  • Fixed empty warnings causing crashes (#369)
  • Improved "indeterminate array size" warning: now it shows the symbol name (#370)
  • Fixed bugs related to const-correctness checks (#372)
  • Fixed issues related to undefined symbol resolution suggestions (#374, #397, #451)
  • Improved assembly listing generation (#375)
  • Added #pragma unwritten (#377)
  • Added #pragma nodestruct (#378)
  • Various __emit bug fixes and improvements (#421)
  • Other minor bug fixes (#423)
  • Minor pawndisasm fixes and cleanup (#424)
  • Added support for unknown preprocessor directives inside #if ... #endif (#427)
  • Added compile-time checks to prevent variable self-assignment (#436)
  • Added __addressof operator (#445)
  • Tags inside unnamed enums are no longer allowed (#454)
  • Removed emit keyword (#459)
  • Fixed a crash when #pragma option argument exceeded 31 characters (#462)


29 Sep 17:28
Choose a tag to compare
  • Fixed #276
  • Fixed #308
  • Fixed #310
  • Fixed #314
  • Implemented suggestions for mistyped identifiers, more information: #353


12 Aug 23:24
Choose a tag to compare
  • Fix multi-line strings getting extra spaces from leading spaces with continuations. This:
new str[] = "Hello \

Again gives:

Hello there

Instead of

Hello     there
  • Reverted allowing continuations in single-line comments. This will (again) give an error:
// I'm a comment\
and so was I.
  • Added one exception to the above rule. No error will be given if the following line is also commented:
// I'm a comment\
// and so am I

This makes it easy to comment out code that uses line-continuations (such as defines).

  • Added more information to tag mismatch warnings:
native printf(str[], {Float, _}:...);

	new File:a;
	printf("%d", a);


warning 213: tag mismatch: expected tags "Float", or none ("_"); but found "File"
  • Proper (fixed) continuation handling in pre-processor messages:
#pragma deprecated Please\
Func() {}



warning 234: function is deprecated (symbol "Func") Please use something else

Note that unlike in strings (which retain their old behaviour for backwards-compatibility reasons) the \ is replaced by a space.

  • Fix continuations in defines. This no longer declares a macro called MACRO5, but a macro called MACRO with a value of 5.
#define MACRO\


24 Apr 10:24
Choose a tag to compare
  • Fixed various __emit bugs (#279)
  • Fixed various bugs related to tagof operator (#245, #274)
  • Fixed various bugs related to destructors (#260)
  • Fixed incorrect values of __compat and debug constants when set through #pragma option (#253)
  • Fixed a bug in argument count check leading to crash when call functions with more than 128 arguments (#298)
  • Fixed crash when #pragma deprecated is used without a message
  • Fixed wrong argument in switch disassembly listings produced by pawndisasm (#236)
  • Fixed a bug in multidimensional array initialization that caused compiler crash in some cases (#220)
  • Fixed formatting of multiline messages from #pragmas in compiler output
  • Added a new warning for meaningless combinations of class specifiers (#246)
  • Added more info to tag mismatch warnings (#265)
  • Made the unused symbol warning show the line where the symbol is declared (#252)
  • Improved code generation for naked functions (#271)
  • Various speed optimization (#255, #269)
  • Changed the Visual C++ runtime version back to 2010 (v100) to make the compiler run on a wider range of Windows systems by default (without installing anything)
  • Switched to another hash table library because of some licensing issues (#240)


01 Jan 10:39
Choose a tag to compare


31 Dec 12:45
Choose a tag to compare
  • Improved emit operator implementation (#211)
  • Added ## concatenation operator (#205)
  • Redefinition of labels is not allowed now (#215)


05 Nov 12:50
Choose a tag to compare
  • HUGE compile speed improvements by @maddinat0r and @Daniel-Cortez (#199)
  • Added -E flag that turns warnings into errors (#202) (thanks to @Y-Less)
  • Added #pragma option (#204) (thanks to @Y-Less)
  • Fixed a bug in line continuation handling that caused whitespace characters to disappear from string literals consisting of multiple lines


24 Oct 02:13
Choose a tag to compare
  • Optimized allocation of large arrays of repeated values
  • Added a new emit / __emit operator (#180, more details in that PR)
  • Returning arrays of unknown size is now a compile time error (#190)
  • Fixed false "variable is assigned to itself" warnings (#78)
  • Fixed muti-dimensional array initialization bugs (#152, #153)
  • Fixed a crash with #emit and unused functions (#157)
  • Fixed generation of documentation for state transitions (#185)
  • Fixed an issue where preprocessor symbols passed as command line arguments would not be recognized (#159)
  • Fixed a bug where user-supplied #pragma messages contained extra newline and \a characters (#187)
  • Fixed extra newlines in assembly listings
  • Fixed Android build errors
  • Added installation instructions for openSUSE/SLES to readme (#174)
  • Added build instructions for Windows, Linux, macOS to readme


04 Feb 11:32
Choose a tag to compare
  • Added __file, __date and __time constants (#105)
  • Improved fix for global-var-as-argument bug, you will no longer see extra "forcing reparse" warnings


22 Jan 11:42
Choose a tag to compare

Build 1

Beginning with this release compiler version will include a build number instead of a date, so "1" in "3.10.1" means "build 1". It will be incremented with each release.

Changes since previous release:

  • Fixed a bug where passing a global variable to a function before the function is defined caused the variable to be removed from the AMX file as unused (#131)
  • Added -R option that turns on recursion detection and report (#121)
  • Added support for negative and floating-point numbers in #emit (#128, #133)
  • Added __PawnBuild constant that is set to the current compiler build number (#132)