test

So it turns out that the functions I thought were taking float are actually taking int. So, with the only reason for float removed, the float type is removed as well. I'd rather have fixed point anyway.

Added constants, these are defined with const, take their value immediately and are replaced out with their value when used. The strlen operator can be used to get a string constant's length.

Some rework on variables

Good bunch of changes

Don't try to read expressions as statements. That yields nothing useful and inevidently bombs out anyway.

Fixed: parser allowed command calls with one too few arguments

- Fixed error display - peeking was pushing recorded `cursor` position out of sync

renamed to undefined labels, not unmarked labels...

goto is now allowed to reference labels that will get defined afterwards.

only print revision in version header if it's non-zero

Added support for continue-statements

Renamed 'block stack' to scope stack for more clarified code..

Fixed: else was alloed even without if strictly preceding it

Added support for else-statements

Added support for the ternary operator.

Added floating point support for the most part. However, decimals are somehow lost during a cast..

Added support for operators &&, ||, &, | and ^

Added ! operator support. It's not really an operator since it's just checked at the beginning of the expression value but eh.

Added <<= and >>= operator support. Zandronum does not provide these, thus they are translated to their longer forms by the compiler. Also aded << and >>.

Added default label for switch

rename ObjWriter::RecordBuffer to SwitchBuffer, as it is designed specifically for switch and will break if used genericly

Added switch support... fixed more problems with marks in the process

some cleanup

Expressions now allow multiple operators

Removed mark types as they served absolutely zero purpose

Added do-while loop support

Added for-loop support

FINALLY, marks and references work smoothly without hacks. if and while work properly.

Added while loop support. However, script marks keep getting wrong position numbers..

Committed the other changes done during a failed attempt of else

Fixed mark positioning - multiple if statements should work properly now

Added if() support

Added mark/reference system to be able to refer to positions in the buffered bytecode. Labels and go-to support.

Parser can now read expressions 100% properly and can perform variable assignment. I'd call this a milestone!

Negative literal integers work properly now..

Expression parser mostly up and running!! Still work to do on it though.

Added a preprocessor with proper #include support. Macro support via #define is planned too. God, was it a B-I-T-C-H to get working right, though..

- The output cmd-line argument is now optional - one is generated from the input file if not given.

Lifted the ';'-after-events rule, though it can still be present. C++ allows it for functions, so this feels like the best solution regarding consistency.. I'm not even sure am I going overboard with this kind of stuff

Negative numbers are now considered numbers too...

Moved CharByte inside DataBuffer since that's where it belongs anyway.

Added comment support

Rid the qbyte type as I just use long everywhere anyway

Mainloop and onenter definitions are now written into separate buffers first and only written to file after state ends. Why? Zandronum seems to demand that mainloop definitions MUST be written right after any onenter one. This way, mainloop and onenter definitions can be written without this restriction in the script. Also now I have a cool uchar-buffer class :)

Fixed unary operators..

Variables can now be assigned values, unfortunately not at top level.

Forgot the actual new code files out of previous commit

Added rudimentary global var support

Added -l command line parameter, if given, botc will list all available commands and exit.

Added string table and support for string parameters in commands.

Commands w/ arguments are now written correctly.

New rule: a semicolon is now required after events, mainloop, onexit and onenter definitions.

Events and commands are now treated properly case-insensitively.

Added mainloop/onenter/onexit support, fixed state writing.. this thing can compile the script for the `jumping arghbot` now!

Moved command parser to a new function.

If any optional parameters are skipped, default values are now filled in.

Parser now can read optional arguments properly.

MustString now behaves more like its siblings - sets token to result rather than returning it

Removed extdelimeters member, said delimeters are always enabled now.

Restructured the command def parser, added parameter lists to definition file.

Added proper string checking

Commands are now read properly.

Improved error handling; added parser warnings

(0) -64 +64 tip

mercurial