Daniel Kolesa
a9afa89af6
rework API for by-name lookups/assignments, simplify VM for that
2021-04-28 03:23:17 +02:00
Daniel Kolesa
92281e88c1
remove state::get_alias(), make get_ident() return an optional
2021-04-26 02:42:08 +02:00
Daniel Kolesa
43e6dc9341
remove get_ utilities from ident
...
this is not a good api (it prevents extensibility, requires
handling errors twice to be safe - once on user side, once
internally - and so on); just cast it
2021-04-25 00:44:45 +02:00
Daniel Kolesa
f19fd57549
get rid of some more pointers in API
2021-04-24 23:50:06 +02:00
Daniel Kolesa
3e8db1042a
fix ivar and fvar lookup code
2021-04-24 23:43:34 +02:00
Daniel Kolesa
f4b8d077bb
alias_local and get_ident() memory safety (always return refs)
2021-04-24 23:34:44 +02:00
Daniel Kolesa
e7578f7e17
document error, ident
2021-04-20 02:52:27 +02:00
Daniel Kolesa
84f6d1f0d6
make std::span user replaceable
...
this will allow usage on some older compilers for those who want it
2021-04-15 20:27:24 +02:00
Daniel Kolesa
a5003678da
fix build with libc++, and try using it in CI with clang
2021-04-12 19:53:24 +02:00
Daniel Kolesa
5e9aefb52a
disable mac and mingw cross CI builds for now
...
apparently macos c++ stdlib is missing c++20 features (particularly
string_view doesn't seem to accept two pointers in a constructor)
and mingw is only present as gcc9 in ubuntu 20.04 (too old)
2021-04-12 03:59:01 +02:00
Daniel Kolesa
8114279816
fix warning with msvc
2021-04-12 00:17:07 +02:00
Daniel Kolesa
8207ef0ce3
use overloads for new var methods
2021-04-11 20:49:26 +02:00
Daniel Kolesa
b26bae3ec5
move standard library init outside state, make it never error
2021-04-11 19:36:41 +02:00
Daniel Kolesa
a2c50744da
remove public state::destroy()
2021-04-11 18:56:08 +02:00
Daniel Kolesa
e644674724
hide internal_state from all public headers
2021-04-11 18:46:45 +02:00
Daniel Kolesa
3ed7b59d0b
only store trivial types in any_value (manage strrefs manually)
2021-04-11 03:55:16 +02:00
Daniel Kolesa
d358dd83e7
halve the size of any_value by removing state pointer from it
...
this brings more advantages too like actually being default
constructible, so it can be used more easily in data structures etc
2021-04-11 03:32:33 +02:00
Daniel Kolesa
7229672f56
clean up command call parsing
2021-04-11 00:13:10 +02:00
Daniel Kolesa
0ee0ebfb42
clean up the main parser path
2021-04-10 19:32:01 +02:00
Daniel Kolesa
51f09c3dfb
clean up some more parser routines
2021-04-10 07:32:44 +02:00
Daniel Kolesa
a6426c60ee
rewrite compilearg
2021-04-10 05:53:17 +02:00
Daniel Kolesa
e5cf9452f2
rewirte compileblockmain
2021-04-10 05:32:07 +02:00
Daniel Kolesa
eac137e3c8
rewrite compileblocksub
2021-04-10 04:51:11 +02:00
Daniel Kolesa
c4d39caa61
rewrite compilelookup
2021-04-10 04:40:58 +02:00
Daniel Kolesa
416c6ba8fb
do not access parser state from error
2021-04-10 03:51:08 +02:00
Daniel Kolesa
83aa8bfd07
hide bcode pointers from public api
2021-04-10 03:37:59 +02:00
Daniel Kolesa
6d6a115d0c
remove leftover junk
2021-04-10 03:01:41 +02:00
Daniel Kolesa
d2b53b174e
move all codegen stuff, make instruction vector private
2021-04-10 02:56:49 +02:00
Daniel Kolesa
05661662d2
more codegen conversions
2021-04-10 02:15:06 +02:00
Daniel Kolesa
63023f8c5e
remove parser_state::gen_main
2021-04-10 00:54:28 +02:00
Daniel Kolesa
1bc94bf5af
move some more codegen into proper place
2021-04-10 00:42:01 +02:00
Daniel Kolesa
295c905c32
more codegen utils
2021-04-09 03:34:48 +02:00
Daniel Kolesa
3790435c34
add more codegen utils
2021-04-09 03:22:34 +02:00
Daniel Kolesa
51da22be06
add ivar/fvar/svar lookup funcs in codegen
2021-04-09 03:14:34 +02:00
Daniel Kolesa
bac186a0c7
move compileblockstr/compileunescapestr logic into gen
2021-04-09 02:54:36 +02:00
Daniel Kolesa
c0fc1aa452
abstract away ugly bcode reference creation
2021-04-09 01:12:52 +02:00
Daniel Kolesa
dcd5f61748
fewer direct accesses to code vector
2021-04-09 01:03:29 +02:00
Daniel Kolesa
e5a05a3199
remove parser_state::done()
2021-04-09 00:56:58 +02:00
Daniel Kolesa
283f23394d
add more codegen utilities
2021-04-09 00:50:13 +02:00
Daniel Kolesa
5f67b205df
initial bits for separation of codegen from parser
2021-04-09 00:41:55 +02:00
Daniel Kolesa
ccb0c09d59
rename codegen_state to parser_state and move it
...
later commits will rewrite the parser and separate the codegen
bits into their own API
2021-04-08 23:35:30 +02:00
Daniel Kolesa
9a2de6ffd3
move include install logic outside src/
2021-04-07 02:03:41 +02:00
Daniel Kolesa
f03407400c
remove pic: true in the build
...
since meson will always default to pic for static libraries unless
overridden with -Db_staticpic=false, we don't want to mess with
this
2021-04-07 02:01:05 +02:00
Daniel Kolesa
34959f44f3
support -Ddefault_library=both for windows
2021-04-07 01:58:58 +02:00
Daniel Kolesa
c09613c5ea
fill in missing headers to install
2021-04-07 01:44:40 +02:00
Daniel Kolesa
2de2c9b46c
remove get_raw_type from public interface
...
users of the library never need to know this
2021-04-07 00:30:39 +02:00
Daniel Kolesa
4da0cb54a8
use format contants in default ivar/fvar/svar handlers
2021-04-06 21:23:17 +02:00
Daniel Kolesa
f93042d7b9
add more utility methods for string_ref
2021-04-06 01:10:49 +02:00
Daniel Kolesa
e531ab3434
clean up any_value APIs for consistency
2021-04-06 00:54:46 +02:00
Daniel Kolesa
0b4f7573d2
no need to handle null result in alloc_buf
2021-04-05 20:07:25 +02:00
Daniel Kolesa
3d06157dbc
guarantee valid result from new_command
2021-04-05 20:05:41 +02:00
Daniel Kolesa
8c8aa26c20
return refs for new_*var and new_ident (guarantee valid result)
2021-04-05 19:52:13 +02:00
Daniel Kolesa
194d5f960b
drop ret-by-reference run APIs
2021-04-05 18:32:45 +02:00
Daniel Kolesa
f64df83dd8
add getter/setter api on alias, drop old broken api
2021-04-05 18:20:07 +02:00
Daniel Kolesa
06b1661afd
hide thread_state, remove state::thread_pointer()
2021-04-05 04:10:39 +02:00
Daniel Kolesa
59c0d16d50
make threads work
...
this means ensuring all required fields are set when creating
new threads. as well as respecting the "global" ident flags when
an alias is not pushed (in order to erase the UNKNOWN flag for
all threads)
2021-04-05 00:55:31 +02:00
Daniel Kolesa
c2de63be25
re-expose new_ident in a restricted way
2021-04-04 19:53:59 +02:00
Daniel Kolesa
1624938c0b
remove public is_in_loop api
2021-04-04 19:43:28 +02:00
Daniel Kolesa
7158a6979b
wipe thread state on destroy to prevent dangling pointer use
2021-04-04 19:40:15 +02:00
Daniel Kolesa
04441f206d
remove the 255 run-depth limitation
...
also add optional per-thread API that sets the maximum run depth
(0 means no limit, default) if you want it; since we no longer
store stuff on the stack it should not be necessary though
2021-04-04 19:31:29 +02:00
Daniel Kolesa
c177013ea2
remove reliance on hardcoded indexes entirely
2021-04-04 06:52:02 +02:00
Daniel Kolesa
e65e141741
sanitize var names, provide cached builtins for var handlers
2021-04-04 06:47:17 +02:00
Daniel Kolesa
a789659387
minor cleanups
2021-04-04 05:36:19 +02:00
Daniel Kolesa
529e34d268
add a variable value change trigger callback
2021-04-04 04:30:36 +02:00
Daniel Kolesa
bab8633a05
add proper var value setting helpers
2021-04-04 02:58:04 +02:00
Daniel Kolesa
e9fc023daa
implement override value saving
2021-04-04 02:44:35 +02:00
Daniel Kolesa
3d91cf2ee7
rea-add proper handling of variable overrides
2021-04-04 02:33:28 +02:00
Daniel Kolesa
6777eb73d5
re-add some support for persistent/overridable flags + fix unknown
2021-04-04 01:08:30 +02:00
Daniel Kolesa
f0bb6b1410
make more api private
2021-04-03 06:16:43 +02:00
Daniel Kolesa
238e5a6ac5
unexpose get_flags from ident, replace with specific methods
2021-04-03 05:39:19 +02:00
Daniel Kolesa
2a8d2103b8
allow alias_local for arg aliases
2021-04-03 05:26:59 +02:00
Daniel Kolesa
b2b83a8e5b
clean up some leftover cruft
2021-04-03 03:40:19 +02:00
Daniel Kolesa
b00a08ea88
remove most variable code and leave it to user-defined handlers
...
the user can now define commands '//ivar', '//fvar' and '//svar'
which take identity (which is the variable) as the first argument
followed by any number of user defined arguments with types (one
can use the N argument type to check argument count, and when no
value arguments are provided, print the variable); this allows us
to implement different styles of variable setting without the
interpreter itself knowing about it, as well as ditch all the
stuff with overridden vars and hex vars and whatnot since this is
all specific to the engine and has no place in here
there is still leftover code remaining, which will get cleaned up
afterwards...
2021-04-03 03:16:57 +02:00
Daniel Kolesa
95e7ae320c
simplify alias_stack push/pop a bit
2021-04-02 23:50:35 +02:00
Daniel Kolesa
52b305954f
per-thread alias stack (the vm should be mostly resumable now)
2021-04-02 19:13:34 +02:00
Daniel Kolesa
881ba4bce9
prepare codebase for per-thread alias stack
2021-04-02 05:47:49 +02:00
Daniel Kolesa
e8856f8f9d
rename alias_stack to alias_local
2021-04-02 04:43:57 +02:00
Daniel Kolesa
99ec1a8583
make push_alias/alias_stack responsible for unsetting unknown flag
2021-04-02 04:34:14 +02:00
Daniel Kolesa
9d7853a840
store cached compiled code on alias stack
...
this will reduce needless discards on push and simplify the code
2021-04-02 02:12:31 +02:00
Daniel Kolesa
2b0392e27e
remove some more raw bcode usage
2021-04-01 05:25:21 +02:00
Daniel Kolesa
b2caade276
remove all raw bcode passing in public api
2021-04-01 05:06:26 +02:00
Daniel Kolesa
039dec8ec5
always define LIBCUBESCRIPT_BUILD for build
2021-04-01 04:39:13 +02:00
Daniel Kolesa
e2b65000d5
hide value getter from public alias interface
...
since this will become thread-specific, this API makes no sense
2021-04-01 04:19:00 +02:00
Daniel Kolesa
6bb3dc2a57
avoid recompiling code when undo/redoing arguments
2021-04-01 03:54:34 +02:00
Daniel Kolesa
d8736a059b
greatly simplify internal alias stack handling
...
this should be more efficient too (no value moves)
2021-04-01 03:41:40 +02:00
Daniel Kolesa
b9c74d86b5
msvc warning fixes
2021-03-31 02:21:32 +02:00
Daniel Kolesa
e4c4c51055
remove more problematic public members
2021-03-31 01:48:56 +02:00
Daniel Kolesa
2270d8e41f
up the default warning level, turn off rtti by default
2021-03-31 01:35:02 +02:00
Daniel Kolesa
13d46881e8
windows fixes and other correctness/portability stuff
2021-03-31 01:13:35 +02:00
Daniel Kolesa
eddbf64c87
get rid of call_with_cleanup
2021-03-30 23:49:50 +02:00
Daniel Kolesa
89e5f5f004
move everything to alias_stack and remove stacked_value
2021-03-30 20:55:50 +02:00
Daniel Kolesa
1def48cf76
redo alias_stack for robustness (guarantee order of push/pop)
2021-03-30 20:37:50 +02:00
Daniel Kolesa
970e37f318
make alias pushing separate from setting value
2021-03-30 20:24:46 +02:00
Daniel Kolesa
d1243c5cc3
add better api to deal with alias stack
2021-03-30 03:57:43 +02:00
Daniel Kolesa
3dc6ad866f
make command argcount unlimited, remove maxargs checks from codegen
...
also adjust the bytecode appropriately, now you can call commands
with an unlimited number of args and aliases with max 32 args,
extra args will be ignored
2021-03-30 02:08:25 +02:00
Daniel Kolesa
c2bb8e4a3d
move ident_stack out of public interface
2021-03-30 00:31:11 +02:00
Daniel Kolesa
4154944726
remove fixed-size argument stacks and reliance on argument ids
2021-03-30 00:28:06 +02:00
Daniel Kolesa
9e82dc0d2f
get rid of cycle check from push_arg
2021-03-29 23:42:08 +02:00
Daniel Kolesa
47f24d6e2e
fix typo
2021-03-29 00:46:13 +02:00
Daniel Kolesa
8385ab01e7
use bitset to store usedargs and increase argcount to 32
2021-03-28 23:46:08 +02:00