Commit Graph

2159 Commits

Author SHA1 Message Date
Patrick Walton
0ee997cee6 rustc: Make structured comparison glue instead of emitting it inline 2011-04-19 15:29:27 -07:00
Tim Chevalier
b7dd75c904 Handle nested items correctly in typestate_check
Summary says it all. Actually, only nested objects and functions
are handled, but that's better than before. The fold that I was using
before to traverse a crate wasn't working correctly, because annotations
have to reflect the number of local variables of the nearest enclosing
function (in turn, because annotations are represented as bit vectors).
The fold was traversing the AST in the wrong order, first filling in
the annotations correctly, but then re-traversing them with the bit
vector length for any outer nested functions, and so on.

Remedying this required writing a lot of tedious boilerplate code
because I scrapped the idea of using a fold altogether.

I also made typestate_check handle unary, field, alt, and fail.

Also, some miscellaneous changes:
* added annotations to blocks in typeck
* fix pprust so it can handle spawn
* added more logging functions in util.common
* fixed _vec.or
* added maybe and from_maybe in option
* removed fold_block field from ast_fold, since it was never used
2011-04-19 14:56:28 -07:00
Graydon Hoare
3d9cf15d0b Remove half-baked 'opacity' layer qualifier. 2011-04-19 14:00:04 -07:00
Graydon Hoare
b7d680b57d Remove mention of effect system from manual. 2011-04-19 13:39:57 -07:00
Graydon Hoare
d2bd07dcb0 Remove effect system from src. 2011-04-19 13:35:49 -07:00
Patrick Walton
d9d5eb82a7 rustc: Allow glue to be emitted even for scalar types; this is necessary to support compare glue 2011-04-19 11:25:40 -07:00
Patrick Walton
6599b310f7 rustc: Don't return "result" types from glue helper functions. This allows glue to fail. 2011-04-19 11:17:01 -07:00
Patrick Walton
37b5e91544 rustc: Assert that each basic block isn't terminated before adding instructions to it 2011-04-19 10:40:38 -07:00
Marijn Haverbeke
9287641c86 add rustboot-specific log upcalls to .def file 2011-04-19 18:12:49 +02:00
Marijn Haverbeke
880be6a940 Overhaul logging system in runtime
See https://github.com/graydon/rust/wiki/Logging-vision

The runtime logging categories are now treated in the same way as
modules in compiled code. Each domain now has a log_lvl that can be
used to restrict the logging from that domain (will be used to allow
logging to be restricted to a single domain).

Features dropped (can be brought back to life if there is interest):
  - Logger indentation
  - Multiple categories per log statement
  - I possibly broke some of the color code -- it confuses me
2011-04-19 16:57:13 +02:00
Marijn Haverbeke
6511d471ba replace error logging with log_err in stdlib and rustc 2011-04-19 16:57:13 +02:00
Marijn Haverbeke
6d3a423094 add log_err to rustc 2011-04-19 16:57:13 +02:00
Marijn Haverbeke
9bfc8bf11e Add log_err to rustboot 2011-04-19 16:57:13 +02:00
Brian Anderson
7f90000ab6 Precision overrides 0-padding in #fmt 2011-04-18 22:53:26 -04:00
Brian Anderson
59d5267936 Rearrange ExtFmt.RT.pad to recover some horizontal space 2011-04-18 21:36:04 -04:00
Brian Anderson
869b28e393 Left-justification overrides 0-padding in #fmt 2011-04-18 21:36:04 -04:00
Brian Anderson
d4f1a48111 Support 0 flag in #fmt 2011-04-18 21:36:04 -04:00
Graydon Hoare
4763cd39ca Boilerplate city, for anyone who wants it. 2011-04-18 18:32:05 -07:00
Patrick Walton
5f2cfa7351 rustc: Add an operation field to compare glue with ==, <=, and < modes 2011-04-18 12:57:00 -07:00
Rafael Ávila de Espíndola
9657e5d2d3 Revert 9ab42038bb while I find what is
wrong on Windows.
2011-04-18 15:37:04 -04:00
Graydon Hoare
8a6590a75f Remove use of 'use' from type-params-in-for-each.rs, put out darwin fire. 2011-04-18 12:20:50 -07:00
Rafael Ávila de Espíndola
9ab42038bb Change the makefiles to use -c. 2011-04-18 15:00:17 -04:00
Lindsey Kuper
0c873993c9 'Type' renamed to 'type definition'.
This is basically so people don't confuse a Ref.Item.Type with a
Ref.Type.
2011-04-18 11:49:32 -07:00
Patrick Walton
abd78f2f04 rustc: Create stub glue for structural comparison 2011-04-18 11:14:38 -07:00
Marijn Haverbeke
ef62fae9db Add a proper check for rustboot
Uncomment log initialization.
2011-04-18 19:59:49 +02:00
Marijn Haverbeke
c40cf96656 Temporarily turn off logging initialization
Will be restored as soon as I find a way for the runtime
to figure out whether it is on rustboot or rustc.
2011-04-18 18:29:20 +02:00
Marijn Haverbeke
f6be25a870 Update foregoing patches to leave rust_crate alone.
Apparently it can't live in the main binary, since on non-Linux
platforms, dynamics libs won't find symbols in the binary. This
removes the crate_map pointer from rust_crate again, and instead
passes it as an extra argument to rust_start. Rustboot doesn't pass
this argument, but supposedly that's okay as long as we don't actually
use it on that platform.
2011-04-18 16:21:49 +02:00
Rafael Ávila de Espíndola
f12998e5d7 Add a -c option. 2011-04-18 10:02:52 -04:00
Marijn Haverbeke
148e6f7b00 Make log the log level configurable per module
This overloads the meaning of RUST_LOG to also allow
'module.submodule' or 'module.somethingelse=2' forms. The first turn
on all logging for a module (loglevel 3), the second sets its loglevel
to 2. Log levels are:

 0: Show only errors
 1: Errors and warnings
 2: Errors, warnings, and notes
 3: Everything, including debug logging

Right now, since we only have one 'log' operation, everything happens
at level 1 (warning), so the only meaningful thing that can be done
with the new RUST_LOG support is disable logging (=0) for some
modules.

TODOS:
 * Language support for logging at a specific level
 * Also add a log level field to tasks, query the current task as well
   as the current module before logging (log if one of them allows it)
 * Revise the C logging API to conform to this set-up (globals for
   per-module log level, query the task level before logging, stop
   using a global mask)

Implementation notes:

Crates now contain two extra data structures. A 'module map' that
contains names and pointers to the module-log-level globals for each
module in the crate that logs, and a 'crate map' that points at the
crate's module map, as well as at the crate maps of all external
crates it depends on. These are walked by the runtime (in
rust_crate.cpp) to set the currect log levels based on RUST_LOG.

These module log globals are allocated as-needed whenever a log
expression is encountered, and their location is hard-coded into the
logging code, which compares the current level to the log statement's
level, and skips over all logging code when it is lower.
2011-04-18 15:28:47 +02:00
Marijn Haverbeke
0bf75a203e collect crate meta info and ext crate names 2011-04-18 15:28:47 +02:00
Marijn Haverbeke
0984d1db2e move rust_crate structure into the actual crate code 2011-04-18 15:28:47 +02:00
Marijn Haverbeke
36c332a241 introduce local_ctxt in trans.rs to keep crate_ctxt global
This reduces crate_ctxt copying (which unfortunately did not
result in a noticeable speedup), and makes the role of that
type a bit more clear.
2011-04-18 15:28:47 +02:00
Brian Anderson
9976bb93d6 Support the space flag in #fmt 2011-04-17 19:50:58 -04:00
Brian Anderson
86a43c24d6 Support + flag in #fmt 2011-04-17 18:19:26 -04:00
Brian Anderson
1bec738c56 Support #fmt precision for bools, with same rules as strings
Not totally confident this is desirable. The alternative would be to make it a
compile error.
2011-04-17 17:24:17 -04:00
Brian Anderson
da996d6e6b Fix indentation in syntax-extension-fmt.rs 2011-04-17 17:12:20 -04:00
Brian Anderson
685e820465 Treat char #fmt conversions just like str conversions
Add missing tests
2011-04-17 17:06:55 -04:00
Brian Anderson
8f6603f58e Support #fmt precision for signed types 2011-04-17 16:51:17 -04:00
Brian Anderson
4c0aea69da Support #fmt precision for unsigned types 2011-04-17 16:18:25 -04:00
Brian Anderson
c7edcb3a72 Support #fmt precision for string types 2011-04-17 13:10:02 -04:00
Brian Anderson
96e3e29e88 Support left-justification in #fmt conversions 2011-04-16 19:43:29 -04:00
Brian Anderson
f7b68e9edd Add another test for #fmt conversion widths 2011-04-16 18:22:14 -04:00
Brian Anderson
dcfdb02fab Make #fmt support explicit conversion widths 2011-04-16 18:01:17 -04:00
Brian Anderson
07e820089f More tests for #fmt 2011-04-16 18:01:17 -04:00
Patrick Walton
0c288720b6 rustc: Capture type parameters into for-each blocks. Add a test case. 2011-04-15 18:14:29 -07:00
Patrick Walton
e37d9fc2b6 rustc: Use a regular vector instead of a hash table for type descriptors 2011-04-15 17:46:16 -07:00
Patrick Walton
3e922e2ecf stdlib: Add some vector functions: empty, empty_mut, grow_set, and freeze. Change _vec.grow to use uint arguments. 2011-04-15 17:46:16 -07:00
Rafael Ávila de Espíndola
099e094765 Produce PIC code and use -S in the Makefile. 2011-04-15 19:29:13 -04:00
Patrick Walton
cc6a9c8876 rustc: Remove the "boxed" check, and make the static_size_of_tag recursion-eliminating transformation deep 2011-04-15 15:16:06 -07:00
Rafael Ávila de Espíndola
2214b6835d Add a -S option for producing assembly. I will move more of it to
rust once the necessary APIs are available in C.
2011-04-15 17:41:14 -04:00