Commit Graph

620 Commits

Author SHA1 Message Date
Scott Olson
ee0dc452aa Move binop functions to operator module. 2016-12-10 17:03:12 -08:00
Scott Olson
e0013b2ae4 Clean up vtable imports. 2016-12-10 16:58:13 -08:00
Scott Olson
636b476eda Rename intrinsics to intrinsic for consistency. 2016-12-10 16:27:45 -08:00
Scott Olson
1af63171f8 Split primval into operator and value. 2016-12-10 16:23:07 -08:00
Scott Olson
bc5bd71922 Add support for untagged unions. 2016-12-07 23:25:47 -08:00
Scott Olson
a64d30b2c1 Replace some stray try!s with ?. 2016-12-07 22:56:28 -08:00
Scott Olson
829d97bde2 Move lvalue-related methods to lvalue mod. 2016-12-07 22:01:11 -08:00
Scott Olson
5ce6514f23 Dump allocations within PrimVal pointers. 2016-12-07 22:00:46 -08:00
Scott Olson
fe19a014ff Move lvalue data structures out of eval_context. 2016-12-07 20:58:48 -08:00
Scott Olson
4702d97093 Flatten 'interpreter' mod tree into the root. 2016-12-07 20:30:37 -08:00
Oliver Schneider
5dd01c309f
fix documentation 2016-12-07 09:52:22 +01:00
Oliver Schneider
3065273601
simplify the interpreter locals, since they always must be backed by an allocation 2016-12-07 09:19:14 +01:00
Oliver Schneider
bfe1efcbf8
stop leaking memory on closure calls 2016-12-06 18:13:11 +01:00
Oliver Schneider
360ef490f4
supply a real "caller" span to drop calls 2016-12-06 16:16:22 +01:00
Oliver Schneider
c303ac001d
rustup 2016-12-06 15:41:28 +01:00
Scott Olson
b96202b3cd Update for changes in rustc. 2016-12-02 19:44:59 -08:00
Scott Olson
244ae8eac7 Introduce try_read_value to avoid allocations.
Attempt reading a primitive value out of any source lvalue and write
that into the destination without making an allocation if possible.
2016-11-28 20:22:21 -08:00
Scott Olson
e4910e437b Remove useless map. 2016-11-27 19:08:06 -08:00
Scott Olson
71cc1226c7 s/init/zero/ 2016-11-27 13:46:34 -08:00
Scott Olson
fd02285788 Remove unnecessary transmute_primval function. 2016-11-26 23:42:17 -08:00
Scott Olson
0929201d60 Remove useless binding. 2016-11-26 23:37:40 -08:00
Scott Olson
f7cd07a615 Produce PrimValKinds for small, simple layout ADTs. 2016-11-26 23:21:25 -08:00
Scott Olson
49f784a3e4 Remove PrimValKind field from PrimVal. 2016-11-26 23:21:20 -08:00
Scott Olson
16f3b590e4 Remove unnecessary qualification. 2016-11-26 19:18:39 -08:00
Scott Olson
78b29b360a Dump return value when returning. 2016-11-26 19:13:22 -08:00
Scott Olson
020f0b782b Refactor passing of resource limits. 2016-11-26 17:54:19 -08:00
Scott Olson
3f764a5cfd Update for changes in rustc and refactor. 2016-11-26 17:36:31 -08:00
Scott Olson
16fa75c6cf Merge pull request #88 from oli-obk/patch-1
don't freeze globals twice
2016-11-19 00:10:36 -08:00
Oliver Schneider
ca7ae5a3d0 don't freeze globals twice 2016-11-19 08:33:13 +01:00
Oliver Schneider
0039ebc940
replace most uses of usize with u64 so the host architecture isn't exposed anymore 2016-11-18 12:55:14 +01:00
Oliver Schneider
e361b63fa0
remove a TODO that has been fixed in the previous commit 2016-11-18 10:39:00 +01:00
Oliver Schneider
986b3a07c2
layout computation can fail, make it fail with a miri error 2016-11-18 10:38:07 +01:00
Oliver Schneider
26ccc1e4bc
add a step counter that can be changed during interpretation 2016-11-18 10:38:07 +01:00
Oliver Schneider
fd6a90860c
simplify dumping of pointers to the zst or never alloc 2016-11-18 10:36:01 +01:00
Oliver Schneider
11a0594a1d
address comments 2016-11-18 10:35:41 +01:00
Oliver Schneider
51ff9fdaf6
deallocate all locals on function exit and transitively freeze constants through pointers 2016-11-18 10:05:55 +01:00
Oliver Schneider
a5aafbdfbf
rustup 2016-11-17 11:31:28 +01:00
Oliver Schneider
fd68670c0a
merge closures and function and implement some closure vtable cases 2016-11-15 17:19:37 +01:00
Oliver Schneider
64155ffd10
implement fn item -> trait object conversion 2016-11-15 16:32:21 +01:00
Oliver Schneider
1c5c6cd078
allow zsts in the zero case of a nullable pointer optimized enum 2016-11-15 16:15:17 +01:00
Oliver Schneider
4748587a77
fix creation of simd types 2016-11-15 15:23:19 +01:00
Oliver Schneider
1549c2d51e
erase all lifetimes from function types before creating pointers to them 2016-11-15 15:20:10 +01:00
Oliver Schneider
e2091ff934
add more atomic intrinsics 2016-11-15 15:19:38 +01:00
Oliver Schneider
f77a0ab10b
fix writing int->ptr transmuted primvals to memory 2016-11-15 15:18:49 +01:00
Oliver Schneider
14ff6411f0
make sure ByVal pointers act just like ByRef to a pointer 2016-11-15 14:12:49 +01:00
Oliver Schneider
4a39c228df
minor fixes
the FIXME was wrong here, there's no need for any special offsetting
2016-11-15 14:11:44 +01:00
Oliver Schneider
511fa40d23
add test for int -> fn ptr cast 2016-11-15 14:11:00 +01:00
Oliver 'ker' Schneider
2c34d6558c also address TyStr in the null pointer optimization 2016-11-13 21:56:57 +01:00
Oliver 'ker' Schneider
f71c31c0e8 cannot index into non-fat-pointers 2016-11-13 21:30:03 +01:00
Oliver 'ker' Schneider
75f56eb144 fix field indexing into fat pointers 2016-11-13 19:26:20 +01:00
Oliver 'ker' Schneider
d42a7d021d fix null optimizations for smaller than pointer enums
fixes #76
2016-11-11 13:10:47 +01:00
Oliver 'ker' Schneider
1c40fb0da1 report the bad integer size instead of just the fact that it is bad 2016-11-11 13:08:14 +01:00
Oliver 'ker' Schneider
b2d476eb38 type_size now returns None for unsized types 2016-11-11 13:07:41 +01:00
Oliver 'ker' Schneider
921f5af1fe ensure that integers cast to pointers will never point at a valid alloc, not even the zst alloc 2016-11-10 19:20:11 +01:00
Scott Olson
2d4301ea7e Simplify cast_ptr. 2016-11-06 22:30:56 -08:00
Scott Olson
a8d90ff12e Update for changes in rustc. 2016-11-06 22:25:54 -08:00
Scott Olson
33b1676bda Merge pull request #75 from oli-obk/master
implement more drop stuff
2016-11-06 01:29:14 -08:00
Oliver Schneider
9c85e203c5 remove leftover match 2016-11-05 17:09:37 +01:00
Paul Lietar
86062ef930 Read discriminant as a signed integer if specified by layout.
This ensures it gets sign extended correctly.

Fixes #78
2016-11-05 15:41:19 +00:00
Oliver Schneider
b6c7d76562 address nits 2016-11-05 13:02:29 +01:00
Oliver Schneider
392123552a
fix a bug error message 2016-11-04 17:55:06 +01:00
Oliver Schneider
53f1118517
remove needless allocations 2016-11-04 17:55:06 +01:00
Oliver Schneider
07c752cc82
fix the block processing for the drop_in_place intrinsic 2016-11-04 17:55:06 +01:00
Oliver Schneider
893f16389e
run drop on array elements 2016-11-04 17:34:33 +01:00
Oliver Schneider
5ef7924aa9
call drop for all elements of an owned slice 2016-11-04 16:51:43 +01:00
Oliver Schneider
c4c8764f53
generate a drop method pointer in the vtable and process it 2016-11-04 16:38:04 +01:00
Oliver Schneider
bd6e52d831
fix the drop_in_place intrinsic for fat pointers 2016-11-04 16:37:12 +01:00
Oliver Schneider
0420c27c8e
fix drop ordering and forward fat pointer extras to fields
this doesn't yet use the fat pointer extras
2016-11-04 15:55:05 +01:00
Oliver Schneider
859b7049c8
add method to ensure that a Value::ByRef is now a Value::ByVal* 2016-11-04 15:49:51 +01:00
Oliver Schneider
8003c570d8
don't panic on pointer to value comparison in primvals 2016-11-04 15:49:14 +01:00
Oliver Schneider
b12e7224af
move method to function so it can be used in map iterators without borrowing self 2016-11-04 15:48:45 +01:00
Oliver Schneider
73d7f1d41b
implement drop for NonZero optimized enums 2016-11-04 09:34:54 +01:00
Oliver Schneider
bd25230882
nit: move if let into match 2016-11-04 09:15:31 +01:00
Oliver Schneider
2a35b3e322
call user defined drop impls 2016-11-03 17:32:37 +01:00
Oliver Schneider
1e0d5b817d
implement a bunch of intrinsics 2016-11-03 17:32:06 +01:00
Oliver Schneider
50fd0765b5
call drop "glue" for enums 2016-11-03 15:55:09 +01:00
Oliver Schneider
b90cc77bac
basic struct and tuple drop "glue" 2016-11-03 15:22:39 +01:00
Oliver Schneider
feefb66ebd
recursively drop Box<Box<...Box<T>...>> 2016-11-03 13:30:54 +01:00
Oliver Schneider
a1acd9405d
don't allocate on drop calls 2016-11-03 13:27:35 +01:00
Oliver Schneider
a9b984d21e
don't always allocate for the uninit intrinsic 2016-11-03 13:13:47 +01:00
Oliver Schneider
92f6874ead
enable code sharing between global and local access 2016-11-03 12:52:13 +01:00
Oliver Schneider
bf73e7581e
don't always allocate during init intrinsic processing 2016-11-03 12:31:04 +01:00
Oliver Schneider
b3bf730513
don't panic on invalid primval types, report an error instead 2016-11-03 12:30:41 +01:00
Oliver Schneider
19c44dab05
rustup to rustc 1.14.0-nightly (7c69b0d5a 2016-11-01) 2016-11-03 10:38:08 +01:00
bluss
277a1ee869 rustup to rustc 1.14.0-nightly (3f4408347 2016-10-27) 2016-11-01 23:26:04 +01:00
Oliver Schneider
073f91654c
don't force allocate for most Unsize casts
only Arc<T> -> Arc<Trait> unsize casts are left
2016-10-21 15:18:12 +02:00
Oliver Schneider
9af5a0a420
don't force allocate for UnsafeFnPointer casts 2016-10-21 14:55:49 +02:00
Oliver Schneider
eb08a2e646
don't force allocate for ReifyFnPointer casts 2016-10-21 14:54:37 +02:00
Oliver Schneider
512f344a3b
don't force allocate for Misc casts 2016-10-21 13:56:38 +02:00
Scott Olson
7f3cb7fdb8 Merge pull request #68 from oli-obk/master
priroda requirements + static impl
2016-10-21 04:08:20 -06:00
Oliver Schneider
edc6b93b85
adjust some comments referencing locals 2016-10-21 12:03:34 +02:00
Oliver Schneider
9d0b903d9d
remove GlobalKind 2016-10-21 11:54:38 +02:00
Oliver Schneider
e82e6132ec
preemptively change some assertions into errors 2016-10-21 11:51:24 +02:00
Oliver Schneider
2f81729e76
rename more [Ss]tatic* to [Gg]lobal* 2016-10-21 11:48:56 +02:00
Oliver Schneider
d3b3c56b07
rename statics/Constant/ConstantId/ConstantKind to [gG]lobal* 2016-10-21 11:39:39 +02:00
Oliver Schneider
f6bbea0f08
choose better function and argument names 2016-10-21 11:24:10 +02:00
Oliver Schneider
9e9586da95
constant ids are Copy now 2016-10-21 11:21:52 +02:00
Scott Olson
e7bcf35f8a Simplify PrimValKind and remove a horrible hack.
This takes the `AllocId` out of PrimValKind, replacing it with a
`relocation` field on `PrimVal`, which is closer to an earlier design
for `PrimVal` I discussed with @eddyb.

This commit prepares the code for removing the `PrimValKind` from
`PrimVal` and making them more pure bitbags. The only code dealing with
`PrimValKind` will be code making decisions like "what kind of operation
do I need to do on these bits", like operators and casting. Transmutes
of `PrimVal`s will become true no-ops, not even adjusting a `kind`
field.

This commit also removes my horrible `value_to_primval` hack that made
an allocation for every `ByVal` passed in, so it could use `read_value`
to get a `PrimVal` with the right kind. Now I just compute the
`PrimValKind` from the `Ty` and re-tag the `PrimVal`.

The code got slightly messier in some areas here, but I think a _lot_ of
code will simplify in obvious ways once I remove the `kind` field from
`PrimVal`.

Gosh, if my commit messages aren't turning into essays these days.
2016-10-21 03:17:53 -06:00
Oliver Schneider
f81c4ac91b
more priroda requirements 2016-10-21 10:45:01 +02:00
Oliver Schneider
b8842b25e8
yield a miri error instead of panicking on uninitialized statics 2016-10-21 10:44:48 +02:00