Tim Chevalier
40443768b1
Fix breakage
2012-03-23 20:53:38 -07:00
Tim Chevalier
8bbd78075f
Handle self correctly when translating classes
...
This change uses the same code for handling the "self" reference for
classes as is already used for impls/ifaces. This allows removing the
extra maybe_self_id argument (which was just for classes) to trans_closure
that I added before. I also rewrote the translation for class ctors so
that it doesn't generate new AST nodes (instead translating directly).
Also changed visit so that it visits class ctors correctly with visit_fn,
and changed typestate to not do return-checking when visiting a class ctor.
2012-03-23 20:37:50 -07:00
Patrick Walton
713b3585c6
rustc: Remove // */
sequence from trans/base.rs; it breaks vi syntax highlighting
2012-03-23 18:21:23 -07:00
Marijn Haverbeke
84019aa0dc
Keep an explicit map of things that have to be spilled
...
This prevents us from spilling locals more than once.
Closes #2040
2012-03-23 16:08:01 +01:00
Marijn Haverbeke
1b81c5112a
Remove last vestiges of old-style intrinsics
...
Closes #2048
2012-03-23 16:08:01 +01:00
Marijn Haverbeke
a84b56bc70
Remove more needless context threading in trans
2012-03-23 14:45:47 +01:00
Marijn Haverbeke
52d618a99a
Revert removal of intrinsics
...
Oops. We can't do this yet until the next snapshot.
2012-03-23 12:51:20 +01:00
Marijn Haverbeke
562afef216
Rename builtin back to intrinsic
...
As per Graydon's request
Issue #1981
2012-03-23 12:21:56 +01:00
Marijn Haverbeke
f5024692d4
Remove support for the old-style intrinsics
...
Closes #2042
Closes #1981
2012-03-23 12:21:55 +01:00
Marijn Haverbeke
0545e4a920
Support [rust_stack] annotation on native functions (crudely)
2012-03-23 10:49:47 +01:00
Marijn Haverbeke
ea2e379e4f
Implement built-in native modules as an alternative to intrinsics
...
Issue #1981
2012-03-23 10:49:47 +01:00
Graydon Hoare
b224bcf6e1
Add an LLVM-instruction-counting mode to trans.
...
Pipe to xdu to see a trans call graph of generated insns.
2012-03-22 13:44:20 -07:00
Niko Matsakis
b653a18416
add mut decls to rustc and make them mandatory
2012-03-21 21:04:14 -07:00
Brian Anderson
75ee4633eb
rustc: Long lines
2012-03-21 16:10:39 -07:00
Josh Matthews
8142438938
Avoid mangling names differently in debug builds to work around a build error. Fix up file name and path debug information, and build one compilation unit for a crate instead of one per source file.
2012-03-21 18:56:36 -04:00
Tim Chevalier
30c272cb3a
methods work
...
Cross-crate method calls don't work yet. Added
run-pass/class-method-cross-crate to test that, but it's xfailed
References to fields within methods don't work yet. Added
run-pass/class-methods to test that, but it's also xfailed
2012-03-21 13:53:21 -07:00
Niko Matsakis
cfcbec3cc3
Implement an initial version of placement new.
2012-03-20 20:39:40 -07:00
Graydon Hoare
56828d49fd
Remove unused "flav" parameter from function registration paths.
2012-03-20 15:16:12 -07:00
Graydon Hoare
d282481c12
Fix naughty mangling-breakage from stringifying a node ID. Close #1344 .
2012-03-20 15:16:12 -07:00
Graydon Hoare
8e911cbd65
Work on fixing name mangling.
2012-03-20 15:16:12 -07:00
Marijn Haverbeke
928364b98b
Only make symbols external when they are actually externally accessible
...
Closes #2030
2012-03-20 13:19:33 +01:00
Marijn Haverbeke
ade1207ba3
Move external-reachability checker to trans
...
Preparation for a fix for issue #2020
2012-03-20 12:28:46 +01:00
Tim Chevalier
e3a1c5c96a
Encode both private and public class fields in metadata
...
This is necessary to calculate the correct offsets for field references.
Simple cross-crate class tests (still with fields only) now pass.
2012-03-16 20:36:07 -07:00
Josh Matthews
d958123d8a
Don't break -g in the presence of monomorphization.
2012-03-16 20:19:52 -04:00
Tim Chevalier
1680ccce1e
Classes WIP
...
Cross-crate metadata for classes works well enough that programs with
classes in other crates compile successfully, but output wrong results.
Checking in work so far to avoid merge hassles. (Tests are xfailed.)
2012-03-16 15:28:05 -07:00
Marijn Haverbeke
25c2be0ff4
Forbid boxed ifaces with self types or generic methods in bounded params
...
They are a soundness hole.
Closes #1994
2012-03-16 15:39:07 +01:00
Marijn Haverbeke
22bef74b55
Remove shared tydescs
...
All tydescs are static now, there's no need to worry about
marshalling them between threads anymore.
2012-03-16 15:38:42 +01:00
Marijn Haverbeke
15a325f267
Support binding of methods off boxed iface values
...
Closes #435
2012-03-16 12:58:26 +01:00
Marijn Haverbeke
24ed441a05
Reuse monomorphized functions more aggressively
...
Adds a trans::type_use pass that, given a function body, detects how
dependant that function is on properties of its type parameters.
2012-03-15 15:08:31 +01:00
Marijn Haverbeke
3ab9978b9b
Remove support for dynamically-sized types from translation code
2012-03-15 15:08:31 +01:00
Marijn Haverbeke
a4d75a4ed1
Remove GEP_tup_like
2012-03-15 15:08:31 +01:00
Marijn Haverbeke
c3a93ecd3f
Remove dynastack code from compiler
2012-03-15 15:08:30 +01:00
Marijn Haverbeke
bc8a43a776
Remove lltyparams field in trans::common::fn_ctxt
2012-03-15 15:08:30 +01:00
Marijn Haverbeke
332329f161
Don't pass an undef retptr to generic intrinsics
...
It leads to segfaults
2012-03-15 10:22:46 +01:00
Marijn Haverbeke
b6ad34bef4
Properly recognize external intrinsics
2012-03-15 10:22:46 +01:00
Marijn Haverbeke
e4cbd43c43
Huge kludge to get intrinsics' type parameters passed
2012-03-15 09:41:21 +01:00
Marijn Haverbeke
9aa78e34e4
Never pass tydesc to functions
...
My assumption that native generics needed them was wrong, so tydescs
can be eliminated from function signatures completely.
2012-03-15 09:40:52 +01:00
Marijn Haverbeke
47f35c9d34
Properly replace iface tps with impl tps in static method calls
...
Un-xfail iface-generic.rs
2012-03-15 09:32:53 +01:00
Marijn Haverbeke
2c8c50d6cb
Make sure enum and resource constructors are inlined properly
2012-03-15 09:32:53 +01:00
Marijn Haverbeke
4650e8bcf4
Make sure resource destructors are properly monomorphized
2012-03-15 09:32:53 +01:00
Marijn Haverbeke
8f84d4c8b6
Remove a large part of the tydesc-passing code
2012-03-15 09:31:34 +01:00
Marijn Haverbeke
83c9f58534
Rename dict to vtable throughout the compiler
...
The difference went away.
2012-03-15 09:28:50 +01:00
Marijn Haverbeke
4511f936b1
Hugely simplify iface handling
...
With the assumption of monomorphization
2012-03-15 09:26:54 +01:00
Marijn Haverbeke
168398bb3d
Stop generating generic versions of generic functions
...
Monomorphic instances are generated on demand.
2012-03-15 09:00:21 +01:00
Marijn Haverbeke
75e6fb4feb
Fix monomorphization of resource constructors
2012-03-15 08:59:29 +01:00
Marijn Haverbeke
0e5da379dd
Turn on monomorphization by default
2012-03-15 08:59:29 +01:00
Brian Anderson
2a293ed8b8
Convert *u8 native string users to *c_char
2012-03-14 18:20:14 -07:00
Brian Anderson
3864d6d845
std: Rename the hashmap constructors to conform to new standards
...
Instead of using the new_ prefix just name them after their type
2012-03-14 18:19:08 -07:00
Patrick Walton
273c5e5f11
rustc: Lift the @ from the type definition of crate_ctxt into its uses
...
This will make it easier to convert crate_ctxt into a region pointer, since
there are functions that return crate contexts. There would be no way to type
these functions if crate_ctxt had to be an inferred region pointer.
2012-03-14 17:31:16 -07:00
Patrick Walton
1e0e089185
rustc: Fix a couple of bugs that prevented taking addresses of rvalues
2012-03-14 16:50:20 -07:00
Patrick Walton
0cd72d24dc
rustc: Autoderef through region pointers
2012-03-14 16:13:05 -07:00
Marijn Haverbeke
de79caa97e
Add crude support for casts in constant expressions
...
Only casts to integral and float types are supported
Closes #1975
2012-03-14 18:05:28 +01:00
Brian Anderson
aeb445b2ea
rustc: Don't make the while loop body's basic block a child of the condition
...
As a child of the condition, when the body encounters a ret or break it
incorrectly re-runs the cleanups of the condition.
2012-03-13 17:27:17 -07:00
Brian Anderson
cd72b1f848
Overhaul constructor naming in libs
2012-03-13 11:07:22 -07:00
Marijn Haverbeke
463cf837eb
rustc: Teach trans::alt.rs about exhaustive alts
...
Closes #1971
2012-03-13 16:20:31 +01:00
Graydon Hoare
6f5853f5a1
Libc/os/run/rand/io reorganization. Close #1373 . Close #1638 .
...
- Move io, run and rand to core.
- Remove incorrect ctypes module (use libc).
- Remove os-specific modules for os and fs.
- Split fs between core::path and core::os.
2012-03-12 20:08:29 -07:00
Patrick Walton
dd610a151b
rustc: Add node IDs to AST types so we can associate them with region environments
2012-03-12 17:34:37 -07:00
Patrick Walton
59a56ad043
Revert "rustc: Add node IDs to AST types so we can associate them with region environments"
...
This reverts commit 96e1bbd4a0
.
2012-03-12 16:33:55 -07:00
Patrick Walton
96e1bbd4a0
rustc: Add node IDs to AST types so we can associate them with region environments
2012-03-12 16:28:15 -07:00
Tim Chevalier
35400e13ad
Use loop instead of while(true) in libraries and compiler itself
...
And remove spurious fails/unreachable() calls.
2012-03-10 20:34:17 -08:00
Tim Chevalier
321fd80219
Add an infinite loop construct
...
Add a loop {} construct for infinite loops, and use it in test
cases. See #1906 for details.
2012-03-09 16:40:58 -08:00
Patrick Walton
ddeaea2287
rustc: Change the address-of operator to an explicit production so that we can parse the mutability
2012-03-08 16:34:36 -08:00
Patrick Walton
0722786664
rustc: Add some missing cases in various folds for reference types and some broken trans code for the address-of operator
2012-03-08 15:55:28 -08:00
Marijn Haverbeke
c71306b0db
Explicitly store self_ids use for self locals in methods
...
This makes it possible to move them between crates without confusion,
and to instantiate them at a point where the monomorphizing
substitutions are known.
Issue #1944
2012-03-08 21:17:32 +01:00
Marijn Haverbeke
fd465f91a8
Drop collect_items pass, create decls on demand
...
This solves a problem with inlined functions that have inner functions.
2012-03-08 21:17:32 +01:00
Patrick Walton
ec8380f9b1
rustc: Add the safe address-of operator to the AST
2012-03-08 12:04:02 -08:00
Niko Matsakis
2bfed908e3
Fix #1941 : inlining of items that themselves contain nested items
...
The fix is to drop nested items from the encoded AST. Nested items may
themselves be inlined, but that is an independent question.
2012-03-07 18:06:29 -08:00
Niko Matsakis
712dd23541
make inline enabled by default
2012-03-06 09:01:40 -08:00
Marijn Haverbeke
19508c7d53
Make trans pass responsible for pulling in inlined functions
...
This makes the logic for finding the inlinable items much easier --
they are simply pulled in lazily when encountered.
2012-03-06 14:00:21 +01:00
Brian Anderson
0ee96de4ee
rustc: Lower case error messages
2012-03-05 17:05:20 -08:00
Niko Matsakis
0416a946b7
give user control of whether we use inline hint or inline always
...
supply inline hints for resource ctors/dtors
2012-03-05 16:47:51 -08:00
Niko Matsakis
cc2ebfc105
set LLVM inline hint for all #[inline] methods, whether CC or local
2012-03-05 16:47:51 -08:00
Brian Anderson
15df3950ad
rustc: Remove remaining non-inbounds GEPs
2012-03-05 15:12:36 -08:00
Tim Chevalier
e2fa6f03f5
Translate simple classes
...
Programs using classes with fields only (no methods) compile and run,
as long as nothing refers to a class in a different crate (todo).
Also changed the AST representation of classes to have a separate
record for constructor info (instead of inlining the fields in the
item_class node), and fixed up spans and pretty-printing for
classes.
2012-03-04 12:43:17 -08:00
Graydon Hoare
87c14f1e3d
Move src/comp to src/rustc
2012-03-02 18:46:13 -08:00