Commit Graph

3517 Commits

Author SHA1 Message Date
Haitao Li
bd300636ee rustc: Implement re-export of renamed modules
Issue #1115
2011-12-20 15:38:40 +08:00
Niko Matsakis
55a2fd18ec implement capture clauses (move, in particular) and integrate
them into type state and so forth
2011-12-19 14:07:46 -08:00
Niko Matsakis
41ae146057 integrate cap clause into type state, but not trans 2011-12-19 14:07:46 -08:00
Niko Matsakis
b2b2a430df resolve capture clauses 2011-12-19 14:07:46 -08:00
Niko Matsakis
b0f1a5f051 when collecting free vars, track the span where it is used too 2011-12-19 14:07:46 -08:00
Niko Matsakis
98cbbbb642 impl the proper partial order between fn types 2011-12-19 14:07:46 -08:00
Erick Tryzelaar
9db3525e42 Fix a typo. 2011-12-19 07:27:16 -08:00
Marijn Haverbeke
e4e2d6d1a1 Fix bug in type parameter handling for impl methods
The parameters of the impl weren't being combined in the right way
with the parameters of the methods. The test worked only by accident.

Issue #1227
2011-12-19 15:43:02 +01:00
Marijn Haverbeke
619d7c3f72 Associate names with types introduced by items
Issue #828

This is not a full solution yet. To really get sane error messages,
we'll also have to guess the name to apply to literals, which seems
non-trivial.
2011-12-19 13:52:58 +01:00
Marijn Haverbeke
60acae4df7 Add type argument field to expr_path
This way, you can explicitly provide type parameters when calling a
generic method.

Issue #1227
2011-12-19 10:43:23 +01:00
Marijn Haverbeke
4d524b957f Complain when multiple methods in the same scope match a call
Issue #1227
2011-12-19 10:13:42 +01:00
Marijn Haverbeke
7185ea35c3 Use quotes around tokens in parser error messages to make them more readable
Closes #1328
2011-12-19 09:59:51 +01:00
Josh Matthews
6637340c28 Properly calculate base working dir for compile units. 2011-12-19 03:42:58 -05:00
Josh Matthews
1d3d28bdf1 Long lines. 2011-12-19 02:52:21 -05:00
Josh Matthews
52dbe4cc1d Fix merge error and rebasing changes for debug information. 2011-12-19 01:36:37 -05:00
Josh Matthews
df6052c4f8 Remove source line generation craziness. Ensure incorrect subprogram caches are not conflated. Generate ast_map entries for object members and resource constructors and destructors. 2011-12-18 23:53:44 -05:00
Josh Matthews
c6f16ed2c4 Hide extended, unfinished debug information behind --xg compiler flag. 2011-12-18 23:48:04 -05:00
Josh Matthews
8597077b7a Clean up some names and factor out some common code. 2011-12-18 23:46:39 -05:00
Josh Matthews
61e8b44f20 Add support for vectors. 2011-12-18 23:46:39 -05:00
Josh Matthews
30d019d520 Add record debug information. 2011-12-18 23:46:39 -05:00
Josh Matthews
f43ed8f1bd Fix up ast types after literal changes. 2011-12-18 23:44:21 -05:00
Josh Matthews
134585bb06 Add debug information for boxed and unique values. 2011-12-18 23:44:21 -05:00
Josh Matthews
064d757ece Handle inferred basic types when generating debug information for types. 2011-12-18 23:44:21 -05:00
Josh Matthews
6c26b892e4 Add argument metadata and aborted return value code. 2011-12-18 23:44:21 -05:00
Josh Matthews
0752252737 Use proper size and alignment of types for debuginfo. 2011-12-18 23:44:21 -05:00
Josh Matthews
1da4b3b987 Fix build error after rebasing. 2011-12-18 23:44:21 -05:00
Josh Matthews
0b303523bd Fix up local variable support so it actually works. 2011-12-18 23:44:21 -05:00
Josh Matthews
e95c56f855 Fix up subprogram composite type nodes, and lexical block context nodes. 2011-12-18 23:44:21 -05:00
Josh Matthews
544bcfece2 Fix LLVM assertions when lowering log statements. 2011-12-18 23:44:21 -05:00
Josh Matthews
fa6d871e11 Build fix. 2011-12-18 23:43:37 -05:00
Josh Matthews
e383004985 Add debug info for local vars, basic fundamental types, and lexical blocks, along with source line information generation for individual instructions. 2011-12-18 23:41:03 -05:00
Josh Matthews
10030a37d5 Generate basic debug info for files, functions and compile units. 2011-12-18 23:39:54 -05:00
Stefan Plantikow
fa27724a4b std: getopts now uses result::t (fixes #1289) 2011-12-18 18:55:39 -08:00
Marijn Haverbeke
f4acaf6934 Only look for a matching method when normal field access fails
We should probalby warn when defining a method foo on {foo: int} etc.

This should reduce the amount of useless typevars that are allocated.

Issue #1227
2011-12-18 19:41:44 +01:00
Marijn Haverbeke
b36ade1367 Improve efficienty of impl cache in resolve
And fix a bug where importing anything from an external module would
import all impls in the module.

Issue #1227
2011-12-18 19:07:26 +01:00
Brian Anderson
cb5f636ff1 rustc: Don't emit compact unwind info on mac
It's not compatible with the subtlety of __morestack
2011-12-18 00:42:37 -08:00
Brian Anderson
555006a304 rustc: Remove --stack-growth option 2011-12-17 16:58:26 -08:00
Graham Fawcett
f14bc54b06 allow #[link_args] with #[nolink]. For now, fail if two modules link same lib, and second has link_args.
I think it should undefined to have multiple modules that link in the same
library, but provide different link arguments. Unfortunately we don't track
link_args by module -- they are just appended as discovered into the crate
store -- but for now, it should be an error to provide link_args on a module
that's already been included (with or without link_args).
2011-12-16 15:29:59 -08:00
Graham Fawcett
7ddd353ef6 implement #[nolink]; deprecate #[link_name = ""]; note in stdlib to remove empty link_name.
Can't remove them from stdlib until the snapshotted compiler supports #[nolink].
2011-12-16 15:29:59 -08:00
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
Graydon Hoare
d1bca753b8 Switch fmt extension to reference extfmt that's in core. 2011-12-16 10:59:11 -08: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
0a3626161d Write impl data to crate library files
(No one is actually reading it yet.)

Issue #1227
2011-12-16 14:17:52 +01: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
cff6bdd036 Change syntax for impl
Move the name of the bundle to the front, allow type parameters (not
handled yet), and add a 'for' keyword:

    impl utils for int {
        fn str() -> str { int::str(self) }
        fn times(f: block()) { ... }
    }
2011-12-16 11:46:57 +01:00
Marijn Haverbeke
4f826d81f6 Make 1.f parse as a field access on the integer 1
A dot is only considered part of a number when not followed by a letter

Closes #1306
2011-12-16 11:46:57 +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
Graydon Hoare
8f0c475562 Add an --out-dir option to rustc. 2011-12-15 13:52:43 -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
Graydon Hoare
7694689044 Fix bug in library output filename construction: /tmp/foo.rc was being linked as lib/tmp/foo-<hash>-<vers>.so not /tmp/foo-<hash>-<vers>.so 2011-12-15 11:33:57 -08:00
Marijn Haverbeke
f82d101511 Iterate over an array when creating the parser's reserved word table 2011-12-15 08:18:38 +01: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
1869306a7e change syntax from lambda[send] to sendfn 2011-12-14 14:32:24 -08:00
Niko Matsakis
85f381fb8a restructure, temporarily working around what looks like an LLVM bug 2011-12-14 14:32:23 -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
6b744b284e remove extra trailing semicolon 2011-12-14 14:32:21 -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
Brian Anderson
5b35c9caf5 rustc: Always write split stack prologues 2011-12-14 11:07:48 -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
76f13c95a0 rustc: Work around a segmentation fault
On Linux/Mac, I got a segmentation fault:

  (gdb) bt
  #0  0x00000000007519af in glue_take584 ()
  #1  0x00000000006d4bec in
    back::rpath::get_rpath_flags::_3899df2ca513c603 ()
  #2  0x00000000006c7655 in back:🔗:link_binary::_7afde00a9791031c ()
  #3  0x00000000007d3ff5 in driver::rustc::compile_input::thunk9212 ()
  #4  0x0000000000710f24 in driver::rustc::time::_3e691b2a4ba58aee ()
  #5  0x000000000071a79d in
    driver::rustc::compile_input::_7b4a41b87c18e034 ()
  #6  0x000000000072f0a9 in driver::rustc::main::_cd8b8c8185af3dee ()
  #7  0x000000000072f1ed in _rust_main ()
  #8  0x00007ffff7e6e146 in task_start_wrapper (a=<optimized out>) at
    ../src/rt/rust_task.cpp:176

The variable `output` or `out_filename` becomes (null) after the definition
of `fn unlib`. Move the function defintion to the beginning seems
prevent the crash on Linux.
2011-12-12 16:15:29 -08:00
Haitao Li
6c6f83f693 rustc: Refactor and get built on Windows 2011-12-12 16:15:29 -08:00
Haitao Li
ba0649cb41 rustc: Hash includes direct dependent crates 2011-12-12 16:15:29 -08:00
Haitao Li
f3c206c9f4 rustc: Encode crate hash into metadata 2011-12-12 16:15:29 -08: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
Haitao Li
b4f450a793 Using filename when finding libraries for linking
Revert #999 commit 16dad84f7b
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
Marijn Haverbeke
44ffd8e3aa Allow type annotations for blocks
I.e. {|foo: int| -> int foo + 2}

Issue #1275
2011-12-09 09:42:22 +01:00
Brian Anderson
54f72fbc10 rustc: Actually hook the crate_type attribute into session 2011-12-08 21:31:50 -08:00
Brian Anderson
4f17131855 Add crate_type attributes to rustc, std, core 2011-12-08 21:09:48 -08:00
Brian Anderson
9116a6d9b1 rustc: Support 'crate_type' attribute
[crate_type = "lib"] builds it as a library.
[crate_type = "bin"] builds it as an executable.

Executable is the default. --lib and --bin switches override.
2011-12-08 21:09:15 -08:00
Brian Anderson
6156295a4c rustc: Move linking into compile_input 2011-12-08 20:33:31 -08:00