Marijn Haverbeke
b11268780e
Fix arg order for vec::map call
2011-12-16 22:29:01 +01:00
Marijn Haverbeke
58a81a68ed
Finish resolving and calling of crate-external impls
...
Issue #1227
2011-12-16 22:18:38 +01:00
Marijn Haverbeke
dd9693f211
Reserve node_id 0 for the crate top-level module
...
And define a const to refer to it.
2011-12-16 22:17:47 +01:00
Niko Matsakis
21cc0c6e69
revoke cleanup of sendable closure once construction completes
2011-12-16 08:06:44 -08:00
Niko Matsakis
52f76400b5
extend with ty_send_type and ty_opaque_closure
2011-12-16 08:06:44 -08:00
Niko Matsakis
ac6aba016e
rename iter2 to iteri to match typical convention
2011-12-16 07:17:29 -08:00
Niko Matsakis
2833ca478c
reorder args to the various vec, option fns so blk comes last
2011-12-16 07:17:23 -08:00
Marijn Haverbeke
d529757515
Make polymorphic impl methods work
...
Something will still have to be done to the AST to make it possible to
say `x.foo::<int>()`, since currently field access never allows type
parameters.
Issue #1227
2011-12-16 13:47:48 +01:00
Marijn Haverbeke
14fcb135a9
Improve resolution of impls
...
Issue #1227
2011-12-16 11:46:57 +01:00
Marijn Haverbeke
7efef98901
Make uses of self in impls compile
...
Get rid of expr_self_call, introduces def_self. `self` is now,
syntactically, simply a variable. A method implicitly brings a `self`
binding into scope.
Issue #1227
2011-12-16 11:46:57 +01:00
Marijn Haverbeke
1dd2f1ec03
Get very simple impl method calls to compile
...
Resolution is still dumb, and no self support yet.
2011-12-16 11:46:57 +01:00
Marijn Haverbeke
6a16f57c0a
Get a very primitive form of typechecking/resolving to work for impls
...
No conflict resolution or polymorphism yet.
Issue #1227
2011-12-16 11:46:57 +01:00
Marijn Haverbeke
888bc80025
Parse and resolve implementations.
...
Issue #1227
2011-12-16 11:46:57 +01:00
Haitao Li
9bb290c725
rustc: Implement non-renamed re-export across crates
...
First patch for issue #1115 . Not yet ready for re-exported modules which
are renamed when importing them.
2011-12-16 17:16:00 +08:00
Brian Anderson
1f8f6054d2
rustc: Box tag variants to avoid copies
2011-12-15 17:25:58 -08:00
Brian Anderson
26db74c811
rustc: Box the vectors returned from ty::tag_variants
2011-12-15 17:14:58 -08:00
Brian Anderson
a1b3e3ea10
rustc: Cache results of ty::tag_variants
2011-12-15 16:27:18 -08:00
Niko Matsakis
aa3d58c8c0
restore old buggy behavior where n_obj_params is always 0 for fns
2011-12-15 13:44:06 -08:00
Niko Matsakis
1e3259e119
massive refactor of how closures work
2011-12-15 13:44:06 -08:00
Niko Matsakis
d381cc072a
resurrect tps_fn() and put it to use this time.
2011-12-15 13:44:06 -08:00
Marijn Haverbeke
2cd3d1ff59
Don't try to look up crate modules in ext_map in resolve
...
Closes #1305
2011-12-15 08:17:13 +01:00
Niko Matsakis
f7540b165c
remove unused tps_fn(); comment out unused var
2011-12-14 15:41:41 -08:00
Niko Matsakis
6cdb69cccb
refactor trans into trans_closure; restore original closure repr
2011-12-14 14:32:28 -08:00
Niko Matsakis
5a5f33c779
treat native fns as shared closures
2011-12-14 14:32:27 -08:00
Niko Matsakis
d32d0f28d5
insert a field into the closure storing number of ty descs
2011-12-14 14:32:27 -08:00
Niko Matsakis
f7cce6b819
pull out the code from iter_structural_ty for handling functions,
...
as we will have to do very careful and non-generic things
2011-12-14 14:32:26 -08:00
Niko Matsakis
7c7cb26487
treat different kinds of closures differently
2011-12-14 14:32:25 -08:00
Niko Matsakis
eaaa3c30bf
translate unique closure env better
2011-12-14 14:32:23 -08:00
Niko Matsakis
e51c29fab0
remove unused options
2011-12-14 14:32:22 -08:00
Niko Matsakis
ba6da950f1
restore old functionality for now
2011-12-14 14:32:21 -08:00
Niko Matsakis
6a8cb704d9
get basic code generation working, clone type descs for lambda[send]
2011-12-14 14:32:20 -08:00
Niko Matsakis
36177dd3e9
make fact that trans'ing lvar does not modify bcx explicit in type
2011-12-14 14:32:20 -08:00
Niko Matsakis
7fbca4e31c
sendable functions now "work", meaning pass through trans/typestate
...
but they do not generate correct code
2011-12-14 14:32:19 -08:00
Niko Matsakis
aa1cd61c84
push changes through to get things compiling, if not running.
2011-12-14 14:32:18 -08:00
Niko Matsakis
c28ada0368
first attempt, not happy with it
2011-12-14 14:32:18 -08:00
Niko Matsakis
941101a9cd
define ty and update parser for sendable lambdas
2011-12-14 14:32:17 -08:00
Graydon Hoare
fa9ad984fb
Copy first batch of material from libstd to libcore.
2011-12-13 16:34:50 -08:00
Marijn Haverbeke
7c3d78013a
Reorganize some code in typeck
...
This should cut down a lot on the amount of closures being allocated, and removes
some duplicated code.
2011-12-13 15:28:22 +01:00
Haitao Li
6dbd4c21e9
rustc: build versioned library with hash in its name
...
Also updated build to install versioned libraries and added a few
missing actions for `make clean`.
2011-12-12 16:15:29 -08:00
Marijn Haverbeke
e47f8fc709
Handle external-crate case when printing full unresolved paths
...
Closes #1283
2011-12-12 13:36:29 +01:00
Brian Anderson
fd81fb6a24
rustc: Determine the crate type (lib/bin) in the session, not session opts
...
This is in preparation for adding a #[crate_type] attribute
2011-12-08 20:08:00 -08:00
Marijn Haverbeke
9a269a3aa8
Allow binding of nested patterns
...
See src/test/run-pass/nested-patterns.rs for some examples. The syntax is
boundvar@subpattern
Which will match the subpattern as usual, but also bind boundvar to the
whole matched value.
Closes #838
2011-12-08 12:03:48 +01:00
Marijn Haverbeke
8c966b7b18
Stop passing around some unused information in typeck
2011-12-08 10:53:04 +01:00
Marijn Haverbeke
a7c6cb7385
Consider variant constructors pure functions for the purpose of purity checking
...
Closes #1269
2011-12-08 10:26:42 +01:00
Graydon Hoare
799690bea0
Remove stmt_crate_directive, it's vestigial and confusing.
2011-12-07 13:33:00 -08:00
Marijn Haverbeke
3d0610b072
Check for literals that are out of range for their type
2011-12-07 21:53:05 +01:00
Marijn Haverbeke
e3eca9174b
Change literal representation to not truncate
...
Also shuffles around the organization of numeric literals and types,
separating by int/uint/float instead of machine-vs-non-machine types.
This simplifies some code.
Closes #974
Closes #1252
2011-12-07 21:08:28 +01:00
Niko Matsakis
6c95e400d8
repair more hash functions
2011-12-07 07:35:25 -08:00
Marijn Haverbeke
03a6e54212
Disallow binding by-mut-ref and by-move arguments
...
Fix bug in bound by-copy arguments.
Closes #1261
2011-12-07 15:28:57 +01:00
Marijn Haverbeke
d28e0c0c0a
Make typestate properly descend pattern guards
...
Closes #1265
2011-12-07 14:09:45 +01:00
Niko Matsakis
aa99bfa170
do not stringify AST nodes unless emitting comments
2011-12-06 19:55:45 -08:00
Brian Anderson
9a738fd61d
rt: Various tweaks to make __morestack unwinding work on linux
...
When unwinding through __morestack the stack limit in the TLS is invalidated
and must be reset. Instead of actually landing at __morestack we're
just going to make all our Rust landing pads call upcall_reset_stack_limit,
which will find the stack segment that corresponds to the current stack
pointer and put the limit in the TLS.
Also massively expand the stack segment red zone to make more room for the
dynamic linker. Will fix in the future.
2011-12-06 16:32:41 -08:00
Brian Anderson
12e401cc7e
rustc: Remove whitespace
2011-12-05 11:21:44 -08:00
Haitao Li
47ea57fead
rustc: Add suffix ".rc" to LLVM module identifier
...
LLVM code generator emits the ".file filename" directive for ELF
backends. Value of the "filename" is set as the LLVM module identifier.
Due to a LLVM MC bug[1], LLVM crashes if the module identifer is same as
other symbols such as a function name in the module.
This patch adds a ".rc" suffix (means crates) to LLVM module identifier
to workaround the bug.
Fixes issue #1251 .
1. http://llvm.org/bugs/show_bug.cgi?id=11479
2011-12-05 17:21:20 +08:00
Stefan Plantikow
a69eab16ec
typeck: Fix for #932
2011-12-05 01:23:10 +01:00
Haitao Li
96b0881a68
rustc: Fix memory leak in do-while loop
...
Issue #1257
2011-12-05 00:38:38 +08:00
Stefan Plantikow
68a82e4468
const_check: trans: added support for trivial casts
...
Part of #1215
2011-12-02 11:58:35 -08:00
Stefan Plantikow
4ba3158e4f
parse: typeck: enabling trivial casts of tail-call return values
...
introduces ctypes::m_* machine type aliases for int, uint, float
depending on cfg(target_arch) that are used in tests
2011-12-02 11:38:24 -08:00
Stefan Plantikow
29f7cdffa4
ty: trans: added support for dropping trivial casts
2011-12-02 11:38:24 -08:00
Stefan Plantikow
d116a6f2d3
ty: added type comparison that subs prim types with targ_cfg machine types
2011-12-02 11:38:24 -08:00
Marijn Haverbeke
817c9f2a54
Include full module path in unresolved errors when looking in module
...
Closes #1228
2011-12-02 16:46:19 +01:00
Marijn Haverbeke
0f918ddd8b
Make import ignore imports coming after them
...
This broke no code at all, so I guess people were already writing
imports in this style.
Issue #1228
2011-12-02 16:06:55 +01:00
Marijn Haverbeke
8a1cc738fa
Finally make the -1 crate id in resolve.rs a const
2011-12-02 14:00:45 +01:00
Marijn Haverbeke
64ce092c27
Allow literal patterns to contain arbitrary literal expressions
...
This removes the need for the unary minus hacks, and allows some other
neat things like matching on 1 >> 4.
Issue #954
2011-12-02 13:42:51 +01:00
Marijn Haverbeke
98ca6d0c61
Fix mistake in last use pass
...
Closes #1243
2011-12-01 16:47:07 +01:00
Marijn Haverbeke
b40c6773c2
Box ast::path values
...
It seems inefficient to copy them around. Let's measure whether that's actually
> the case
2011-11-30 13:38:38 +01:00
Niko Matsakis
152bb314f5
fix bug in shape concerning size of tag variant
2011-11-29 12:51:08 -08:00
Marijn Haverbeke
8746ebe2e6
Add some changes that *should* have been in e98286b594
...
Forgot to amend the commit after fixing the failure.
2011-11-23 21:22:56 +01:00
Marijn Haverbeke
e98286b594
Allow import directives in any block
...
Closes #49
2011-11-23 20:57:34 +01:00
Marijn Haverbeke
03f6060e80
Make type_kind properly recognize ty_ptr as sendable
2011-11-23 13:27:04 +01:00
Marijn Haverbeke
9fb3719ded
Rollback return-by-reference
...
It's proving too inflexible, so I'm ripping out the extra complexity
in the hope that regions will, at some point, provide something
similar.
Closes #918
2011-11-23 11:02:27 +01:00
Marijn Haverbeke
acbc4aa9f8
Remove deep scope traversal in revoke_clean
...
It is not needed anymore.
2011-11-23 11:02:27 +01:00
Stefan Plantikow
148a6c1a38
comp: allowed the declaration of pure fn's in native mods
...
This is especially useful for the native calls in std::math
This commit does NOT yet point to new snapshots
2011-11-22 20:01:25 +01:00
Marijn Haverbeke
1b8b0b8584
Properly check for copies when constructing a record using with
...
Closes #989
2011-11-22 13:27:40 +01:00
Marijn Haverbeke
1ce3a84a8f
Make type_needs_drop accurate, get rid of type_has_pointers
...
Closes #1209
2011-11-22 13:16:23 +01:00
Marijn Haverbeke
bd16aac903
Fix inconsistency in ordering of patterns during alt compilation
...
Closes #1153
2011-11-22 12:44:59 +01:00
Marijn Haverbeke
5d6a74f020
Only warn about unreachable range patterns when appropriate
...
Also simplifies the literal-munging, and moves it into ast_util
Closes #1170
2011-11-22 11:49:29 +01:00
Marijn Haverbeke
8cc852af8c
Make ast::visit only descend into types when necessary
...
If visit_ty is not overridden, it uses a stub function which does not
descend into types.
Closes #1204
2011-11-22 10:57:47 +01:00
Haitao Li
5ca83553bc
rustc: Remove abi from ast::native_mod
2011-11-21 13:49:52 +01:00
Marijn Haverbeke
02574a5bdb
Close hole in safe-reference analysis
2011-11-21 12:07:40 +01:00
Marijn Haverbeke
b4217b383b
Add a pass that checks that blocks are only used in safe ways
...
Closes #1188
2011-11-21 11:01:15 +01:00
Marijn Haverbeke
86c1f16a10
Fix bad interaction between last-use finding and references
...
The last-use pass now takes input from the alias pass to not mark things
as last uses that are still accessed through a reference.
Issue #925
2011-11-21 09:25:42 +01:00
Niko Matsakis
9fa44a41e6
get pure wrappers approach running
2011-11-18 16:32:19 -08:00
Niko Matsakis
6072ddad33
sketch out design
2011-11-18 16:32:19 -08:00
Marijn Haverbeke
0e21df4610
Add some comments to kind.rs and last_use.rs
2011-11-18 17:09:36 +01:00
Marijn Haverbeke
8cf3ca3b55
Make sure by-copy arguments take last-use into account
2011-11-18 16:43:30 +01:00
Marijn Haverbeke
196b2b920f
Make sure trans translates record fields in the order they appear in code
...
This prevents surprising side-effect orders, and makes them easier for
the other passes to deal with.
2011-11-18 15:59:47 +01:00
Marijn Haverbeke
68db68c4cc
Make trans use last_use info to not actually generate copies
...
Issue #925
2011-11-18 15:56:53 +01:00
Marijn Haverbeke
f6491bb426
Update stdlib, compiler, and tests to new kind system
...
This involved adding 'copy' to more generics than I hoped, but an
experiment with making it implicit showed that that way lies madness --
unless enforced, you will not remember to mark functions that don't
copy as not requiring copyable kind.
Issue #1177
2011-11-18 12:49:01 +01:00
Marijn Haverbeke
8f8ebb550c
Implement a last-use-of-local finding algorithm
...
Issue #925
2011-11-18 12:49:01 +01:00
Marijn Haverbeke
0c97fcbf66
Properly check kinds in instantiation of generics
...
Issue #1177
2011-11-18 12:49:01 +01:00
Marijn Haverbeke
7bef89f9b5
Prevent alias pass from inserting implicit copies for noncopyable types
...
Issue #1177
2011-11-18 12:49:01 +01:00
Marijn Haverbeke
17b78c4a7a
Overhaul the kind-checking pass
...
Not really useful yet because missing last-use-of-local optimization.
Also: instantiation of type parameters needs to be checked.
Issue #1177
2011-11-18 12:49:01 +01:00
Marijn Haverbeke
cefff237bf
Make tag, resource and object constructors take their arguments by copy
...
Doing something like some([1, 2, 3]) will now no longer create a temporary
copy of the vector. It will also be easier for the kind checker to see that
putting a resource into a data-structure constructor is safe.
2011-11-18 12:49:01 +01:00
Marijn Haverbeke
4e03112141
Add a pass-by-copy parameter passing convention
...
This is intended to solve the problem of how to pass arguments to
constructor functions -- you want to move in rvalues, but not have to
explicitly copy stuff that is not an rvalue. The by-copy passing
convention will ensure the callee gets its own copy of the value. For
rvalues, it'll just pass off the value. For lvalues, it'll make a
copy.
Issue #1177
2011-11-18 12:49:00 +01:00
Marijn Haverbeke
9cf48d3753
Preparation for kind system overhaul
...
This goes before a snapshot, so that subsequenct patches can make the
transition without breaking the build. Disables kind checking pass, makes
parser accept both new and old-style kind annotation.
Issue #1177
2011-11-18 10:52:28 +01:00
Niko Matsakis
b30f7af98b
remove blank line
2011-11-17 15:11:52 -08:00
Niko Matsakis
8925875ccb
add FIXME for issue #1184
2011-11-17 13:44:13 -08:00
Niko Matsakis
0d874476cf
fix resource-generic
2011-11-17 13:44:13 -08:00
Brian Anderson
dd275cd749
Stop using temporary intrinsic_2 functions
2011-11-17 11:55:04 -08:00
Niko Matsakis
adc79e2f44
remove compile-command from local variable blocks
2011-11-17 11:46:13 -08:00
Haitao Li
388eed383f
rustc: Add a flag '--warn-unused-imports'
...
Followup of issue #889
2011-11-17 09:28:30 +01:00
Haitao Li
fe6484d3e6
rustc: Fix warn on unused import bug
...
rustc generates incorrect warning for cascaded import declarations like:
use std;
import std::io;
import io::println;
fn main() { println("hello"); }
warning: unused import io
A followup of issue #889
2011-11-17 09:27:17 +01:00
Niko Matsakis
809ca13bfa
fix minor merge errors
2011-11-16 16:13:43 -08:00
Niko Matsakis
037a1de405
apply calling convention at call site too
2011-11-16 15:27:09 -08:00
Niko Matsakis
834b6879ea
temp workaround for failure to pass ulonglong successfully
2011-11-16 15:27:09 -08:00
Niko Matsakis
cbcdeb80d9
remove wrappers from intrinsics
2011-11-16 15:27:08 -08:00
Niko Matsakis
e3699a2636
make stdcall use shim
2011-11-16 15:24:56 -08:00
Niko Matsakis
319f3b02f3
fix natives with user-specified link names, remove unused imports
2011-11-16 15:24:38 -08:00
Niko Matsakis
b27a88e99c
fix bug in shape where s_int/s_uint were not customized to platform
2011-11-16 15:16:43 -08:00
Niko Matsakis
b3ae63c9d9
temporarily disable these tests b/c they crash rustc
2011-11-16 15:16:43 -08:00
Niko Matsakis
cb9675259f
enable comments in generated asm, ll
2011-11-16 15:16:42 -08:00
Niko Matsakis
96cdfa11db
correct translation of neg. numbers in 64-bit architectures
2011-11-16 15:16:42 -08:00
Niko Matsakis
5cabfb3a39
remove fixed FIXME
2011-11-16 15:16:42 -08:00
Niko Matsakis
4fc34e23fa
wrap long line
2011-11-16 15:16:40 -08:00
Niko Matsakis
d77968dd7c
finish up the shim approach
2011-11-16 15:16:40 -08:00
Niko Matsakis
4f28419d0c
add back call to zero_and_revoke
2011-11-16 15:16:40 -08:00
Niko Matsakis
85083ec51b
begin efforts to use shim functions for c-stack calls
2011-11-16 15:16:40 -08:00
Haitao Li
3b683f5205
rustc: Use link_name attribute for native function
...
Fixes issue #906
2011-11-16 23:45:07 +08:00
Brian Anderson
a7188a6577
rustc: Don't sign extend uints during translation
...
Doing so produces incorrect results on a 32-bit compiler targeting 64-bits
2011-11-15 17:53:44 -08:00
Haitao Li
eae478cd74
Use native fn's link name attribute if given
...
Fixes issue #905
2011-11-15 22:31:33 +08:00
Marijn Haverbeke
9ff6f816ba
Fix handling of loops and conditionals in alias.rs
...
It now threads information about invalidated aliases through the AST
properly. This makes it more permissive for conditionals (invalidating
an alias in one branch doesn't prevent you from using it in another),
and less permissive for loops (it now properly notices when a loop
invalidates an alias that it might still use in another iteration).
Closes #1144
2011-11-15 13:29:57 +01:00
Haitao Li
b8dd148444
rustllvm: Add a GetOrInsertFunction wrapper
...
Fixes issue #1161
Test-case-by: Brian Anderson <banderson@mozilla.com>
Signed-off-by: Haitao Li <lihaitao@gmail.com>
2011-11-15 00:33:29 +08:00
Brian Anderson
3cc2641fc3
Make various binops not typecheck for unsafe pointers. Closes #1173
2011-11-13 13:55:12 -08:00
Haitao Li
5a7249c935
Cleanup unused imports
2011-11-10 19:19:40 -08:00
Haitao Li
9bc2f1800d
rustc: Add support of warning on unused imports
...
Fixes issue #889
2011-11-10 19:19:10 -08:00
Brian Anderson
1afc943c91
rustc: Rename native_abi_c_stack_cdecl to native_abi_cdecl
2011-11-09 16:47:44 -08:00
Brian Anderson
10c35959e7
rustc: Rename native_abi_c_stack_stdcall to native_abi_stdcall
2011-11-09 16:47:44 -08:00
Brian Anderson
c7f0ca6063
Remove native "x86stdcall" ABI
2011-11-09 16:47:43 -08:00
Brian Anderson
4a4d31cf0e
Make native "c-stack-stdcall" ABI work
...
The symbol name is based on the number of arguments, so we have to declare
it correctly.
For some reason GetLastError doesn't work now.
2011-11-09 15:29:53 -08:00
Joshua Wise
c8fae5dc75
trans: Add binops (except for logic and comparators) and unops to trans_const_expr. Working towards issue #570 .
2011-11-09 14:33:06 -08:00
Joshua Wise
e674a7e99f
middle: Add a pass to reject bad const expressions earlier. Currently just rejects unimplemented const expressions, but will be needed later.
2011-11-09 14:33:05 -08:00
Brian Anderson
4f3f04643f
Remove native "cdecl" ABI
2011-11-08 17:17:06 -08:00
Brian Anderson
fcd39b1191
Remove native "llvm" ABI
2011-11-07 15:29:05 -08:00
Brian Anderson
1103fe8ca0
Remove native "rust" ABI
2011-11-07 15:14:10 -08:00
Haitao Li
852e789e78
rustc: Set LLVM module identifier as crate name
2011-11-07 22:59:21 +08:00
Marijn Haverbeke
1a68a98824
Disallow writing to function arguments again
...
Remove implicit copying hack.
Closes #1118
2011-11-03 10:57:54 +01:00
Niko Matsakis
8385d77b32
fix line too long
2011-11-02 14:14:20 -07:00
Niko Matsakis
ec77144713
add -m64 to gcc args if appropriate
2011-11-02 14:14:20 -07:00
Niko Matsakis
e012fd03f3
correct more i32 vs int mismatches
2011-11-02 14:14:19 -07:00
Niko Matsakis
602ae9139c
convert various ints to i32 and vice versa
2011-11-02 14:14:19 -07:00
Niko Matsakis
4bd05e5be2
convert GEP to i32
2011-11-02 14:14:19 -07:00
Niko Matsakis
f1bc9307d8
get things checking on ia32
2011-11-02 14:14:19 -07:00
Niko Matsakis
c0e9c42bd2
thread the context through so that int can be 64 bits on x86_64
2011-11-02 14:14:19 -07:00
Niko Matsakis
2521cda1ec
work on making the size of ints depend on the target arch
2011-11-02 14:14:19 -07:00
Niko Matsakis
9146bb09a1
work on making the size of ints depend on the target arch
2011-11-02 14:14:19 -07:00
Niko Matsakis
5b3bddcd87
start to isolate target strings so that they can be configured for
...
x64 or other targets
2011-11-02 14:13:22 -07:00
Marijn Haverbeke
eef9a0bd39
Evaluate alt expressions in their own block context
...
Closes #785
2011-11-02 14:30:51 +01:00
Marijn Haverbeke
d8d35e7c40
Rename car/cdr to head/tail in std::list
...
Closes #1086
2011-11-02 14:23:49 +01:00
Marijn Haverbeke
5b0c103b39
Make it possible to cast unsafe pointers with the 'as' operator
2011-11-02 12:20:12 +01:00
Marijn Haverbeke
4e9b8a28f7
Make resolving of imports behave more sanely
...
An import now ignores itself when resolving its target. This gets rid of
the previously existing (problematic) behaviour where the import would start
looking one scope up when its name was the same as its target's first
component.
Closes #1114
2011-11-02 12:20:11 +01:00
Brian Anderson
61b604580b
Fix alignment of interior pointers of dynamic-size types. Closes #1112
...
GEP_tup_like finds interior pointers by creating a tuple of all the types
preceding the element it wants a pointer to, then asks for the size of that
tuple. This results in incorrect pointers when the alignment of that tuple
is not the alignment of the interior type you're getting a pointer to.
2011-11-01 12:13:00 -07:00
Matt Brubeck
b510a74a36
Cleanup: Remove uneccesary generic_cmp function.
2011-10-28 14:44:39 -07:00
Matt Brubeck
000b2fe9a6
Use IEEE 754 semantics for NaN (Issue #1084 )
2011-10-28 14:44:39 -07:00
Brian Anderson
f96ad30dfc
stdlib: Make reinterpret_cast and leak unsafe
2011-10-28 14:19:17 -07:00
Marijn Haverbeke
7dacccde94
Make shared kind the default only for generic functions
...
You almost never want a function with pinned type params. For
types, objects, resources, and tags, pinned types are actually often
more sane. For most of these, shared rarely makes sense. Only tricky
case is objs -- you'll have to think about the kinds you want there.
Issue #1076
2011-10-28 17:00:14 +02:00
Marijn Haverbeke
7a0aee74bf
Move to short type parameter keywords
...
Issue #1076
2011-10-28 15:25:33 +02:00
Matt Brubeck
5d6fe1a533
Remove uint::max/min in favor if math::max/min
2011-10-27 13:37:53 -07:00
Marijn Haverbeke
013107a25c
Properly take mutable object fields into account during alias analysis
...
Closes #1055
2011-10-25 17:57:26 +02:00
Marijn Haverbeke
cfdf193c46
Update our code to new type parameter kind syntax
...
Closes #1067
2011-10-25 15:56:55 +02:00
Niko Matsakis
c78b1639b4
fix c-stack-cdecl when used w/ i64
2011-10-24 17:03:18 -07:00
Niko Matsakis
d41385a69b
kill errant log_err
2011-10-24 16:06:18 -07:00
Niko Matsakis
8f2d75d53c
switch over sqrt from llvm to c-stack-cdecl, exposing a bug in
...
the supported return types of upcall_c_stack
2011-10-24 16:06:18 -07:00
Niko Matsakis
020726c981
update trans_c_stack_native_call() to use type_of_explicit_args()
...
currently trans_c_stack_native_call() had some ad-hoc code for
determining the type of the arguments. this code was not in
agreement with the rest of trans. now it uses the same code path.
2011-10-21 16:19:28 -07:00
Niko Matsakis
80102c9d24
avoid extra load for by_mutable_ref parameters
2011-10-21 16:19:27 -07:00
Marijn Haverbeke
7114702496
Change the way block calls are parsed, mark them as block-calls.
...
This makes it possible to omit the semicolon after the block, and will
cause the pretty-printer to properly print such calls (if
pretty-printing of blocks wasn't so broken). Block calls (with the
block outside of the parentheses) can now only occur at statement
level, and their value can not be used. When calling a block-style
function that returns a useful value, the block must be put insde the
parentheses.
Issue #1054
2011-10-21 14:24:14 +02:00
Marijn Haverbeke
0ce40f60e7
Drop support for iter, put, and for-each
...
Closes #1056
2011-10-21 13:47:24 +02:00
Marijn Haverbeke
050170d2af
Remove remaining uses of iter and for-each
...
Issue #1056
2011-10-21 13:34:35 +02:00
Marijn Haverbeke
fd5a08384d
Move ast_util::pat_bindings over to new iter system.
...
Issue #1056
2011-10-21 12:41:42 +02:00
Marijn Haverbeke
6bcb4a426c
Remove last uses of iterators from stdlib
...
Issue #1056
2011-10-21 12:31:48 +02:00
Marijn Haverbeke
4ebbbe597e
Move hash table iteration over to block-taking functions
...
Issue #1056
2011-10-21 12:21:27 +02:00
Brian Anderson
4ef2c37059
Give native functions proto_bare
2011-10-20 20:53:52 -07:00
Brian Anderson
6fb9d4f83b
Remove typeck::proto_to_ty_proto
2011-10-20 20:30:20 -07:00
Brian Anderson
9efdd0f326
Merge ast::proto_shared and ast::proto_closure
...
Now they are both just proto_shared and proto_shared takes an
argument indicating that it is sugared as 'lambda'
2011-10-20 18:23:48 -07:00
Brian Anderson
4b30a06abe
Rename ast::proto_fn to ast::proto_shared
2011-10-20 18:23:48 -07:00
Brian Anderson
29ad3bdb10
Make fn denote a bare function. Convert fn to fn@ as needed
2011-10-20 18:23:48 -07:00
Brian Anderson
391e12124b
Tweak typecheck to enforce covariance on higher-order function arguments
2011-10-20 18:23:48 -07:00
Brian Anderson
342a400e79
Remove type coercion from fn to block
...
fn is a proper subtype of block now
2011-10-20 18:23:48 -07:00
Brian Anderson
8136b92ee8
Give subtype relationships to function types
2011-10-20 18:23:48 -07:00
Brian Anderson
ed985b61d5
Bare functions can coerce to blocks
2011-10-20 18:23:48 -07:00
Brian Anderson
354bfc8292
Bare functions can coerce to shared closures
2011-10-20 18:23:48 -07:00
Brian Anderson
3bb020aaf8
Revert "Remove the environment argument from bare functions"
...
This reverts commit 1b0f1f0b79
.
2011-10-20 18:23:48 -07:00
Brian Anderson
0714bb5f7d
Fix the problem with check-fast randomly failing
...
Trans has been assuming that tag node id's are unique across crates and they
are not so, depending on which way the wind is blowing, it would choose to use
a crate-local tag variant instead of the correct one from std.
No test case since I can't come up with a reliable one that compiles in a
reasonable amount of time.
2011-10-20 15:38:51 -07:00
Marijn Haverbeke
ef63f09dcd
Don't rely on main.ll anymore
...
I'll remove the actual file after I register a snapshot.
Issue #992
2011-10-20 17:18:38 +02:00
Marijn Haverbeke
8124846b2c
Get rid of taskpointer-passing throughout the compiler
...
Only intrinsics still take a dummy taskptr. We'll have to do some
makefile stunts to snapshot a version without taskptrs-in-intrinsics.
Issue #466
2011-10-20 14:22:17 +02:00
Marijn Haverbeke
457683c7fe
Do not pass taskpointers to "rust" native functions
...
Issue #466
2011-10-20 14:22:17 +02:00
Marijn Haverbeke
6323a012bd
Remove taskptr argument from upcalls
...
Issue #466
2011-10-20 13:15:21 +02:00
Marijn Haverbeke
e927df17f7
Remove spawn_wrap and main_wrap kludges
...
This isn't needed now that our functions are cdecl (and was apparently
only still working by accident).
Issue #992
2011-10-20 13:15:09 +02:00
Brian Anderson
314c011d71
Immutable and mutable? are covariant on their inner types
...
Whereas [mutable T] is invariant with respect to T, [T] and [mutable? T]
are covariant with respect to T.
2011-10-18 10:37:04 -07:00
Marijn Haverbeke
71a4a66135
Add a math module to the standard lib
...
I need some rudimentary stdlib stuff for the tutorial.
Closes #1042
2011-10-18 13:54:35 +02:00
Marijn Haverbeke
d9d0782b5f
Don't try to build an LLVM switch on floats
...
Closes #1046
2011-10-18 13:54:35 +02:00
Brian Anderson
0f0fa26c72
Enforce variance rules for mutable types
2011-10-17 20:51:34 -07:00
Brian Anderson
48d351b21e
Add a variance transform for calculation of recursive variance
2011-10-17 19:37:34 -07:00
Brian Anderson
d6613384fd
Introduce covariance, contravariance and invariance to the type unifier
...
This will be used to resolve some problems with mutable? covariance and also
to implement function subtyping
2011-10-17 19:34:12 -07:00
Brian Anderson
b61578e1cd
Don't unify from mutable? to immutable
...
Immutable is supposed to be a subtype of mutable-huh.
2011-10-17 16:36:49 -07:00
Brian Anderson
f7a825c614
Split record_var_binding into methods for expected and actual
...
This allows unify to maintain the same subtype relationship between
expected and actual throughout unify, which we are going to need
for mutable? and for function types.
2011-10-17 16:36:49 -07:00
Brian Anderson
1a64153b24
Correct two more analyses of mutable? as mutable
...
I can't come up with test cases but this seems correct.
2011-10-17 16:35:33 -07:00
Brian Anderson
4d9d889dbf
Don't allow assignment to mutable-wha?
2011-10-17 16:35:33 -07:00
Marijn Haverbeke
0a01144797
Use trans_expr_save_in instead of trans_expr when appropriate
...
This guards against passing a save_in destination to nil or bot-typed things.
2011-10-14 11:27:16 +02:00
Marijn Haverbeke
06257d66e7
Don't crash when reporting an unresolved import in the nil scope
...
Closes #1027
2011-10-14 11:25:14 +02:00