Commit graph

524 commits

Author SHA1 Message Date
Kevin Eady
1b879bc59f
Add script helpers to implement stealing skill (#493)
* add item.character_owner

* Address review comments
- Cleanup chr_from_wornitems
- Return BError if no character owner

* Add Target option TGTOPT_ALLOW_NONLOCAL

* Address review comments
- Remove `Core::chr_from_wornitems`

* Add pol tests for snooping

* Add tests for TGTOPT_ALLOW_NONLOCAL

* target_nonlocal_checklos pol test debugging

* target_nonlocal_checklos pol test debugging
- Remove destroy of obstacle
- Add a CheckLosAt call to error return

* target_nonlocal_checklos pol test debugging
- Enable USAN build

* undo test debugging changes

* use mobile for los when targetting snoopable items

* Update core-changes

* Persist SnoopScript for items on save

* Add snoop_script_ to Item::estimatedSize

* document SnoopScript script type
2023-01-08 16:59:28 +01:00
Kevin Eady
999ca84aea
Add Support for Snooping via Item Descriptor element SnoopScript (#491)
* Initial work on adding SnoopScript

* use message "That doesn't belong to you..." if lifting a snoopable item

* fix configfile changes

* Update core-changes
2022-12-20 21:32:47 +01:00
turleypol
37c2fb0299
Method function crash (#477)
* Crash reproducer with methods

* potential crash fix

* removed ASan build, added core changes

* do not store valuestack reference before calling method to fix potential
dangling reference

* Take into account that the ValueStack can grow due to method calls.
2022-10-16 19:39:25 +02:00
Kevin Eady
52c24101b9
Add support for cursed items (#466)
* Add support for cursed items

* Fix poldbg localvarmembers
2022-08-03 01:05:12 -04:00
Kevin Eady
5c969ede36
Add support for programmatically disabling inactivity timeout on a client (#458)
* Implementation of disable_inactivity_timeout

* Add documentation

* move client idle check

* fix core-changes date
2022-04-24 23:48:26 +02:00
turleypol
0eb6aa624d
use std::filesystem to iterate over directories (#448)
* use std::filesystem to iterate over directories
realms folder can now contain files

* Ignore unix like hidden dir entries

* simplified recursive compilation
2021-12-30 07:21:20 +01:00
Peter Wedder
f404591b1d
Fix SetString packet hook method writing UTF-8 instead of CP-1252 (#442)
* Fix SetString packet hook method writing UTF-8 instead of CP-1252. Add a new method, SetUtf8String, for writing UTF-8.

* Add functions that operate on whole strings.

* Fix a couple of bugs and add unit tests.

* Do not convert if the string doesn't contain any UTF-8

* Convert 0x80..0x9f control characters, which don't exist in cp1252, to question marks

* Fix SetUtf8String writing too few bytes if the string contained multi-byte UTF-8 characters

* Remove extraneous parameter from TextCommandScript documentation

* Update changes and docs
2021-11-02 22:00:36 +01:00
turleypol
95783a3226
removed ufacing move_delta, added getPos*Param (#424)
* removed ufacing move_delta, added getPos*Param

* renamed move_self to move_to
2021-09-12 14:39:06 +02:00
Kevin Eady
8a0ca48cfc
Add -Wnonportable-include-path for ANTLR warnings (#419)
* Add -Wnonportable-include-path for antlr warnings

* add __APPLE__ check
2021-09-06 13:44:39 +02:00
Fernando Rozenblit
ab96d4ce60
Add more details to "Return without GOSUB" error. Also fix printing of INS_CALL_METHOD_ID in the .lst (#395)
For INS_CALL_METHOD_ID, the number of parameters 'type' is u8 and was being printed as char.
2021-08-31 08:06:20 +02:00
turleypol
cccf84dfc8
Fewer compile warnings (#413)
* added escriptgrammar as external lib where it belongs. Silenced warnings.

* bscript compiler warning fixes

* special include file to get rid of gcc warnings about antlr4

* misc windows warnings

* time specifc warnings

* buildfix + apple warnings

* never trust apple

* windows debug build warnings

* some windows clang warnings

* last warning fix
2021-08-28 22:26:15 +02:00
Kevin Eady
3bd1fdd32a
Throw compile error on function name conflict (#408)
Fixes: #407
2021-08-11 23:01:14 +02:00
Fernando Rozenblit
2cb05d81be
Update Boost.cmake and add missing include (#401)
- Updated download URL for boost because bintray has been sunset
- Missing include `limits` in DataEmitter.cpp
2021-05-19 20:45:38 +02:00
Kevin Eady
c6301c0c52
Fix constant declaration production (#399)
* Fix constant delcaration production

* Add tests
2021-04-19 21:58:36 +02:00
Kevin Eady
0ca7912fcd
Add support for conditional operator (#387)
* Grammar update

* AST generation

* Emit instructions

* Add initial tests

* Additional tests

* Rename to ConditionalOperator

* Add docs
2021-03-14 23:20:20 +01:00
Kevin Eady
e41f70d72e
Add support for interpolated strings ("interstrings") (#369)
* Update grammar to support interpolated strings

* Struct initializers, case switchs are regular strings

* Initial stub for interpolated string in AST
This splits the previous STRING_LITERAL terminal into a production,
stringLiteral, to handle REGULAR_STRING terminal and interpolatedString
production.

* Change interpolated strings to expressions

* Fix mode handling in grammar

* Grammar fixes
- Fix mode handling in lexer
- Interpolated strings only have one expression

* Can successfully parse, stub compile interstrings
$"He {there + print("hello")}";

* Add formatting string to grammar

* Fix tests, and add test stubs

* Rename curleys to brace; better AST generation

* initial work interstring instruction

* Initial work on formatted string instruction: emit

* Formatted string instruction: execution

* Add simple formatted string test

* Add formatted string test src

* Review changes #1
- Rename `FormattedString` to `FormatExpression`
- Rename overloaded `try_to_format()` to `get_formatted()`

* Review changes part 2
- Rename `InterpolatedString` ast node to `InterpolateString`

* Review changes part 3
- Modify `ins_interpolate_string`

* Review changes part 4
- Remove unused formal parameter

* Add negative tests

* Spruce up positive tests

* Fix braces, escape chars inside interstring

* Fix, add tests for escaped char and double brace

* Address differences for new lines in tests

* Update Escript version

* Make empty expression an error

* Add documentation for interpolated strings

* Quick touchup on docs
2021-03-11 22:48:16 +01:00
Kevin Eady
9c36b977cd
Internal work to remove OGC (#384)
* Remove LegacyFunctionOrder

* Remove compiler.cpp, compiler.h

* Remove parser.cpp/h and wordlist generation

* Update breaking-changes, core-changes
2021-03-06 01:39:26 +01:00
Kevin Eady
ae96ecbf77
Remove OGC from EcompileMain, testsuites (#383)
* Remove OGC from escript testsuite

* Remove compiler options

* Remove Facility::Compiler

* Update docs and options in ecompile help usage

* Update core-changes, breaking-changes
2021-03-04 17:39:14 +01:00
Kevin Eady
44c864b917
Remove erroneous lexing productions (#371)
* Remove erroneous lexing productions

* Fix hex float literals

* Address review comments.
2021-02-27 23:54:07 +01:00
turleypol
90b92f4002
Get environment variable/Extended Testsuite (#359)
* added os:GetEnvironmentVariable to list all environs or get a single one

* first version of restarting the core to test save/load
added environment variable to filter tests

* fixed string constructor (size_t instead of signed int)

* added string_view constructor

* splitted and extended restart tests

* added docs

* added pol.cfg setting to disallow environment variable access

* Change environmental variable access rules
Instead of defaulting to all values allowed, now defaults to none. May
specify either `*` to allow all variables, or a comma-delimited list.

* Address review changes
- Use Clib lower instead of boost
- const auto references
- Separate tests for access and finding env vars

* Update documentation

* Apply suggestions from code review

Co-authored-by: Kevin Eady <8634912+KevinEady@users.noreply.github.com>
Co-authored-by: Fernando Rozenblit <rozenblit@gmail.com>
2021-02-27 08:36:22 +01:00
Kevin Eady
c29c4ebfab
Undo breakage caused by multiline strings (#375)
* Undo breakage caused by multiline strings

* Use different newline string test
2021-02-26 22:59:55 +01:00
Kevin Eady
0cd9412066
Properly scope the compiler includes to the Bscript folder. (#360) 2021-02-25 16:53:22 +01:00
turleypol
6d73472029
Testsuite reorganization, new feature to call exported functions (#237)
* restructured pol testscripts
pkg based (dedicated pkgroot)
runs per pkg:
setup.ecl if exists
all scripts starting with "test"
cleanup.ecl if exists

return 1 for success everything else is an error

* Scripts can now be loaded and exported functions called
adapted testscripts to use this feature
critical script handling missing

* added support for used in critical scripts

* use weakptr instead of pid
moved keep_alive flag to uoexecutor

* Function and nethod accept now a argument list

* added docs

* missing docs

* faster shutdown time

* fixed typo

* fixed weird cornercase

* shorter test functions names, the length is limited, renamed
loadexported test script to have a dedicated testscript

* generate tiledata/multi for small boat
added generate scripts for generation..
adapted testdata set

* boat tests

* extended scripttests
scheduler will now always know about the loaded script
secured scheduler api

* cleanuo scripts for boat and npc

* shorter function for error return
fixed cleanup: npcs have gravestones, chars was one off and scripted
create of a char made it permanent logged in (until next restart),
which also means that it cannot be deleted

* bypass windows specific ecompile.cfg logic

* fix for parallel execution

* on windows its called .exe ..

* use target binary directly, so cmake can replace it with the actual path
use absolute path to testsuite
disabled temporary the copy of ecompile

* configure ecompile.cfg to add absolute path

* early sleepms calls can lead to endless waiting

* Code coverage (#260)

* play with coverage reports

* fix yml

* use 0 as default for gcov cmake var

* fixed used cov version, hopefully fixed now cmake

* demangle function names

* removed debug msg

* added a few polcore tests (basically just for coverage)
first set executor to noncritical before blocking

* added https://coveralls.io/github/polserver/polserver

* added a stackable item
added a few backpack insert tests
do coverage build only on push events not also for PR merge builds

* added storage tests..
docs need fixes, the Imps are not working at all

* fixed storage test to really move items

* added a house
corrected static/dynamic flag
created a few house tests

* updated yml file to new github api

* corrected coverage discord job name

* always put to runlist even if not necessary

* extended aos prop tests

* equip/unequip aos mod

* extra ci step for shard test fixtures and activated verbose shard test

* use extra ci step for all build configs, sorted testscripts for
execution

* fixed sorting

* added param to syslog to not print the context (cleaner testscript
visualization)

* added build targets for tests

* sleep api cleanup

* more aos property tests

* build for coveralls also on pullrequest

* readded debug state reset on schedule

* updated checkout ci action

* updated checkout in all ci runs
2020-12-16 18:56:10 +01:00
Eric Swanson
c2e6722ed5
Clean up warnings: size_t/unsigned mixing, unused private variables (#352) 2020-12-01 02:23:03 -08:00
Eric Swanson
78243c208e
Disallow multiline string literals (#341) 2020-10-20 22:39:56 -07:00
Eric Swanson
3609d7e9d2
Move more specialized expression types from optimizer to AST builder (#334)
* Move more specialized expression types from optimizer to AST builder

VarStatement now handles its own value consumption

* Move assign-multisubscript-consume logic to the instruction generator
2020-09-30 08:19:05 -07:00
Eric Swanson
72ae01414c
AST nodes are nouns. (#333)
Renamed:
  - GetMember to MemberAccess
  - SetMember to MemberAssignment
  - SetMemberByOperator to MemberAssignmentByOperator
  - AssignVariableConsume to VariableAssignmentStatement
2020-09-28 08:11:10 -07:00
Eric Swanson
b508dd24aa
Build ElementAssignment and SetMember in the AST builder rather than the optimizer (#332) 2020-09-28 06:21:42 -07:00
Eric Swanson
5469e0d30f
remove dead code; call method instead of inline equivalent (#331) 2020-09-27 13:08:09 -07:00
Eric Swanson
2b348b752d
Use std::optional rather than boost::optional (#330) 2020-09-27 12:25:02 -07:00
Eric Swanson
3eb030090c
refactor: move membership operator handling into binary_operator (#329) 2020-09-27 12:08:52 -07:00
Eric Swanson
58a04c3097
refactor: ExpressionBuilder token id lookup for binary operators (#328) 2020-09-27 11:43:00 -07:00
Eric Swanson
2cae8137f3
Enable building on OSX (clion) (#318)
* Build on OSX

* Add macos-latest to build matrix

* Fix case sensitivity checks/tests

* On osx builds, cope with unpacking a double that might be followed by either an exponent or an error (as part of an array).

Also, remove static unpack(const char*) forms that were never called.

Co-authored-by: turleypol <turley@polserver.com>
2020-09-26 06:57:10 -07:00
Eric Swanson
cbd2f97c5b
Add an error message about known reserved words (#322) 2020-09-22 03:11:25 -07:00
Eric Swanson
d74146a2f9
Report location of integer values that are out of range (#319) 2020-09-20 11:04:37 -07:00
Eric Swanson
ac85290b12
Make the new compiler be the default (#305)
* Make new compiler the default; update core-changes and breaking-changes

* Add docs for new config file options

* Do not allow configuration of CompareCompilerOutput through the config file.  It only makes sense to change it temporarily on the command line.
2020-09-15 07:25:00 -07:00
Eric Swanson
cc04a1837f
New compiler: warn on double assignment to the same variable (#314)
Warn on assignment statements like this, for which the OG compiler and the new compiler generate different code:
    x := x := expr;

This fixes https://github.com/polserver/polserver/issues/311

The OG compiler doesn't optimize the leftmost assignment to an 'assign-variable-consume',
so a listfile for the above looks like this:
  0: decl global #0
  1: #
  2: global #0
  3: global #0
  4: :=
  5: "hi"
  6: := #
  7: progend

The new compiler optimizes like this:
  0: decl global #0
  1: #
  2: global #0
  3: "hi"
  4: :=
  5: global0 :=
  6: progend

For reference, this is what a single assignment looks like:
  0: declare global #0
  1: # (consume)
  2: "hi" (string) len=2 offset=0x1
  3: global #0 :=
  4: progend
2020-09-14 22:44:06 -07:00
Eric Swanson
0d191e01bc
Fixed incorrect error message when passing too many arguments to a function. (#312)
* Fixed: if too many parameters were passed in a function call, an incorrect error message was displayed, and the compiler could even crash.

Also updated all of the error messages related to function call parameters to include the function name.
2020-09-14 22:05:08 -07:00
turleypol
1bdbd5150b
fixed crash in str.format when invalid param index is given (#307) 2020-09-13 11:38:17 +02:00
Eric Swanson
fdc27a9083
Remove INFO_PRINT with code section and data section offsets (#306) 2020-09-13 02:30:32 -07:00
Eric Swanson
dcaa9cf4a1
New compiler: write dependencies (#304) 2020-09-13 01:13:23 -07:00
Eric Swanson
89d663ca00
Use new compiler (when configured) for compile_inc (#303) 2020-09-13 00:41:45 -07:00
Eric Swanson
1567241871
New compiler: write debug info (.dbg and .dbg.txt) (#302)
Also: OG compiler debug info for foreach iterator changed to match actual variable name

Adds:
- ast/DebugStatementMarker: for "intrusive debug" (ecompile -i) instructions
- codegen/DebugBlockGuard: pushes and pops debug block #
- format/DebugStoreSerializer: writes .dbg and .dbg.txt files
- representation/DebugBlock: holds parent block # and local variable names for each block
- representation/DebugStore: holds all debug information
2020-09-12 14:26:58 -07:00
Eric Swanson
e344a8a483
Consolidate local variable scope information (#301)
Adds:
- model/LocalVariableScopeInfo.h

Stores, for local variable blocks:
- the names of the local variables in the block
- the "base index" of those local variables within the current scope

The code generator uses these to clean up local variables as they go out of scope.

We also need this when writing debug information.
2020-09-12 09:31:52 -07:00
Eric Swanson
e6d9f78f2a
Disallow var names that match an unreferenced function. (#300)
Remember known user function names when they are declared, rather than when they are referenced.
2020-09-11 01:16:24 -07:00
Eric Swanson
7598c9486f
Disallow function names as variable, argument, and const names (#298) 2020-09-11 00:16:20 -07:00
Eric Swanson
3ffb02397f
New compiler: Disallow 0-parameter system calls as parameter defaults (#297)
There is one part that differs from const declarations: 0-parameter function calls are allowed (by accident) as const values, but not for default parameter values.
2020-09-10 01:39:57 -07:00
Eric Swanson
de171c1cdd
Allow empty array, dictionary, error, struct as constants. (#296)
Checkpoint: parity for ClassicDistro
2020-09-10 00:35:40 -07:00
Eric Swanson
f1caa7b0e4
Handle semicolon (empty statement) (#294) 2020-09-09 23:46:19 -07:00
Eric Swanson
e8c621136c
New compiler: add elvis operator (#293)
Adds:
- ast/ElvisOperator
2020-09-09 23:11:51 -07:00