Commit Graph

2932 Commits

Author SHA1 Message Date
Patrick Walton
913383d775 rustc: Preserve more type information for interior vectors at the LLVM level, allowing SROA to take place. log ~[ 2 ].(0) now optimizes to just log 2. 2011-06-12 00:44:43 -07:00
Patrick Walton
770bf24d72 rustc: Use in-bounds GEPs for fetching length and data of interior vectors 2011-06-11 23:32:21 -07:00
Patrick Walton
4375329031 rustc: Translate interior vector index expressions 2011-06-11 23:15:16 -07:00
Patrick Walton
8b318be4ce rustc: Typecheck vector index expressions for interior vectors 2011-06-11 19:52:49 -07:00
Patrick Walton
ac206068d9 rustc: Bump the default interior vector size up to 64 bytes 2011-06-11 19:42:48 -07:00
Patrick Walton
182b933ac4 rustc: Link with main.o 2011-06-11 19:31:47 -07:00
Patrick Walton
00eb3f5798 rustc: Sketch out translation of interior vector literals and take/drop glue 2011-06-10 19:36:33 -07:00
Tim Chevalier
b0a80104a3 Un-XFAIL pred-on-wrong-slots 2011-06-10 19:17:15 -07:00
Tim Chevalier
698c6406ba Reject programs with unsatisfied predicate constraints
Generate appropriate constraints for calls to functions with
preconditions, and reject calls where those constraints don't
hold true in the prestate.

...by which I mean that it works for one test case :-)
2011-06-10 19:17:15 -07:00
Graydon Hoare
a1bc2b17cc Make darwin happy. 2011-06-10 18:32:38 -07:00
Graydon Hoare
603ad1748b Fix printf flags. 2011-06-10 17:59:34 -07:00
Brian Anderson
10a4ecbd96 stdlib: Remove a FIXME for issue #452 2011-06-11 00:42:52 +00:00
Brian Anderson
2723e1c48f test: Add tests for issue #452 2011-06-11 00:42:52 +00:00
Graydon Hoare
c734c969fb Merge branch 'master' of github.com:graydon/rust 2011-06-10 17:36:23 -07:00
Graydon Hoare
1d1010cac0 Move rt:: logging namespace to ::rt:: and implement RUST_LOG=? and RUST_LOG=::help as synonyms that dump the crate logging map. Also warn when some logging specs don't match. 2011-06-10 17:31:48 -07:00
Lindsey Kuper
f6d7d75699 More work on typechecking anon objs. 2011-06-10 17:18:08 -07:00
Graydon Hoare
8876e2c29e Oops, fix logging string specs. Nobody likes writing RUST_LOG=_ZN5rustc5front7creaderE, do they? 2011-06-10 16:32:21 -07:00
Graydon Hoare
9671d21408 Implement meta tag matching in creader. Start using it in rustc.rc. Close #459. Close #457. 2011-06-10 15:54:41 -07:00
Tim Chevalier
774c6d0198 Friendlier error message for break outside a loop
The typechecker should really check for this, but at least now
there's an error message rather than an inexhaustive match failure
in trans.
2011-06-10 14:34:01 -07:00
Tim Chevalier
e5eacf8ea9 Use RHS type when translating assignments
In code like "auto foo = fail", a type gets inferred for foo
depending on how it's used. However, fail still has type _|_ and
still should be treated that way: particularly, its value shouldn't
be copied. Fixed trans to reflect that.
2011-06-10 14:05:06 -07:00
Patrick Walton
f1431adb40 rustc: Add a generic struct_elt() function to trans 2011-06-10 13:49:22 -07:00
Patrick Walton
451fc176d3 rustc: Derive flags for unsafe pointers. Puts out burning tinderbox. 2011-06-10 13:13:46 -07:00
Graydon Hoare
52c4c9014f Encode meta tags in the crate and start sketching enhanced logic for resolving crate "use" directives.
Now with extra "works on OSX" kludging.
2011-06-10 12:57:29 -07:00
Patrick Walton
4634f236a9 rustc: Add some missing cases to ty.rs for interior vectors, and modify the pattern match so this is less likely to happen again. Add the LLVM type mapping as well. 2011-06-10 12:07:38 -07:00
Patrick Walton
d8b271e3b1 test: Change bitwise.rs to use ! instead of ~. Should put out burning tinderbox. 2011-06-10 11:34:07 -07:00
Patrick Walton
cc3d484d9d rustc: Add missing cases for istr and ivec to equal_type_structures() 2011-06-10 11:00:56 -07:00
Lindsey Kuper
3ce82d2e70 Fix a non-exhaustive match failure. 2011-06-10 10:58:55 -07:00
Patrick Walton
7b7c746c1e Merge pull request #447 from paulstansifer/quick_error_message_fix
Error message, instead of segfault, when recursive types are used.
2011-06-10 10:53:42 -07:00
Patrick Walton
dfdd6dbc54 rustc: Remove the bitwise not operator 2011-06-10 10:47:33 -07:00
Lindsey Kuper
7a066ba547 Dead code elimination. 2011-06-10 10:23:48 -07:00
Marijn Haverbeke
1dbf3e8477 Minimal comment for visit.rs 2011-06-10 17:29:34 +02:00
Marijn Haverbeke
97576bd149 Move some uses of walk to visit in trans.rs 2011-06-10 17:24:20 +02:00
Marijn Haverbeke
e25e05539e Handle mutable references in alias analysis 2011-06-10 16:44:33 +02:00
Marijn Haverbeke
f28796ed99 Fix unsafe uses of mutable references 2011-06-10 16:44:32 +02:00
Marijn Haverbeke
fccf065266 Implement mutable/immutable alias distinction.
Before, all aliases were implicitly mutable, and writing
&mutable was the same as writing &. Now, the two are
distinguished, and assignments to regular aliases are
no longer allowed.
2011-06-10 12:15:58 +02:00
Marijn Haverbeke
798bbd2e22 Fix all occurrences of writing to immutable aliases
You'd be surprised.
2011-06-10 12:15:28 +02:00
Lindsey Kuper
c51c6ba354 Sketching trans_anon_obj. 2011-06-09 18:16:28 -07:00
Patrick Walton
40e3a9fcbc Revert "Encode meta tags in the crate and start sketching enhanced logic for resolving crate "use" directives." due to tree bustage
This reverts commit ab3635eebe.
2011-06-09 18:15:13 -07:00
Patrick Walton
60706f1e35 rustc: Write interior vecs and strings into the metadata and add logic for them in ty_to_str 2011-06-09 18:00:46 -07:00
Graydon Hoare
ab3635eebe Encode meta tags in the crate and start sketching enhanced logic for resolving crate "use" directives. 2011-06-09 17:24:32 -07:00
Patrick Walton
c9c1d860f1 rustc: Report type errors in terms of the actual types involved, not type variables 2011-06-09 17:23:15 -07:00
Patrick Walton
5318248f24 rustc: Annotate vector and string literals in the AST with their uniqueness or lack thereof 2011-06-09 17:11:21 -07:00
Patrick Walton
1c48102838 rustc: Add ty_istr and ty_ivec types 2011-06-09 16:23:19 -07:00
Patrick Walton
1408e1aa16 snap: Register new snapshots 2011-06-09 15:59:31 -07:00
Patrick Walton
54d34bec59 rustc: Parse istr and ivec 2011-06-09 15:05:08 -07:00
Tim Chevalier
1cc3fe567c Improve error message for wrong number of type arguments
Improve error message in the case where a use of a polymorphic tag has
insufficient type arguments given. Before, the typechecker was
just crashing with a bounds check error.
2011-06-09 14:50:49 -07:00
Patrick Walton
efcf8570f0 rustc: Remove comment dating back to the rustboot days from typeck 2011-06-09 14:19:04 -07:00
Patrick Walton
c7ca08d1b6 rustc: Remove all calls to resolve_all_vars and the function itself 2011-06-09 14:17:50 -07:00
Patrick Walton
06d706e197 rustc: Remove the call to resolve_all_vars when typechecking field exprs 2011-06-09 14:04:11 -07:00
Patrick Walton
3009574165 rustc: Unify with the root types 2011-06-09 14:04:11 -07:00
Erick Tryzelaar
501201a431 Remove executable bit from lock_and_signal.cpp. 2011-06-09 12:30:57 -07:00
Marijn Haverbeke
1146136fa8 Fix double import that now somehow gets caught by resolve 2011-06-09 20:48:06 +02:00
Marijn Haverbeke
4ab862a50d Switch resolve pass to use visit.rs rather than walk.rs 2011-06-09 20:44:04 +02:00
Marijn Haverbeke
d8516178e5 Pass ty params to visit::visit_fn 2011-06-09 20:44:04 +02:00
Tim Chevalier
d1819fb747 Improve an error message in resolve 2011-06-09 11:37:52 -07:00
Tim Chevalier
b34a97de39 Start to check expr_check and expr_call constraints in typestate
Start writing the cases for expr_check and expr_call to take
predicates into account, but this isn't working yet.
2011-06-09 11:37:52 -07:00
Tim Chevalier
17ff2a0d79 Further support for predicate constraints
Changed function types to include a list of constraints. Added
code for parsing and pretty-printing constraints. This necessitated
splitting pprust into two files (pprust and ppaux) to break a
circulate dependency, as ty_to_str now needs to print out constraints,
which may include literals, but pprust depended on ty.
2011-06-09 11:37:52 -07:00
Rafael Ávila de Espíndola
46920e073b Remove hack now that stage0 doesn't use it. 2011-06-09 14:26:10 -04:00
Patrick Walton
a4663d2845 rustc: Add fast paths for vars and param folds. 3x typechecking speedup. 2011-06-09 11:20:47 -07:00
Patrick Walton
73ae684536 rustc: Don't resolve all type variables eagerly for paths 2011-06-09 10:51:51 -07:00
Patrick Walton
80f86d1e9b stdlib: Make union-find not create loops when unifying two already-unified sets 2011-06-09 10:51:51 -07:00
Marijn Haverbeke
537d879dc1 Properly handle lifetime of aliases in nested blocks
There was a bug that would cause the alias analyser to allow you to
invalidate an alias that was no longer directly referred to, even if
another alias was rooted in it. It now properly tracks dependencies
between live aliases.

Required another case of copying values in map.rs.
2011-06-09 14:19:13 +02:00
Marijn Haverbeke
beda82ddf1 A revised, improved alias-checker
The old system tried to ensure that the location an alias pointed at
would retain its type. That turned out to not be strong enough in the
face of aliases to the inside of tags.

The new system instead proves that values pointed to by aliases are
not replaced (or invalidated in some other way) at all. It knows of
two sufficient conditions for this, and tries to prove at least of
them:

A) The alias is 'immutably rooted' in a local, and this local is not
   reassigned for the lifetime of the alias. Immutably rooted means
   the alias refers to the local itself, or to something reachable
   from the local through immutable dereferencing.

B) No value whose type might include the type of the 'inner mutable
   element' of the thing the alias refers to (for example, the box in
   rec(mutable x = @mutable int)) is from the outer scope is accessed
   for the lifetime of the alias. This means for functions, no other
   argument types may include the alias's inner mutable type. For alt,
   for each, and for, it means the body does not refer to any locals
   originating from outside their scope that include this type.

The lifetime of an alias in an alt, for each, or for body is defined
as the range from its definition to its last use, not to the point
where it goes out of scope. This makes working around these
restrictions somewhat less annoying. For example, you can assign to
your alt-ed value you don't refer to any bindings afterwards.
2011-06-09 13:11:29 +02:00
Marijn Haverbeke
43fbb07126 Add vec::member 2011-06-09 13:11:28 +02:00
Marijn Haverbeke
77c1b9650f Some more workarounds to please the alias checker
Some of the vec utilities now only work on immutable vecs, since they
would have to be rewritten to do a lot more copying to be alias-safe.

Some forced copying was added to map.rs, showing a weakness in the
alias checker (or maybe the alias system): when fn args are passed
into a function, calling them must assume all aliases that are not
immutably rooted (directly connected to a local or temporary without
any mutable edges) become invalid. This will be a drag on functional
programming in Rust.

Work around alias issues in the stdlib
2011-06-09 13:08:39 +02:00
Marijn Haverbeke
bd90c7a3cb Add new visitor framework 2011-06-09 13:08:38 +02:00
Patrick Walton
6feb1dfd76 rustc: Don't eagerly resolve type variables after unification 2011-06-08 18:42:34 -07:00
Patrick Walton
537d4ac65a rustc: Fix error pattern in compile-fail/arg-count-mismatch.rs 2011-06-08 18:42:34 -07:00
Patrick Walton
cc7a8b668f rustc: Make resolve_all_vars() check to see whether the type actually has vars before folding over it; also remove some debug code. 2x typechecking speedup. 2011-06-08 18:05:45 -07:00
Patrick Walton
7527084e62 rustc: Don't generate so many variables when typechecking functions; remove mo_either 2011-06-08 18:05:45 -07:00
Graydon Hoare
8691a1a1e5 Tidy up 'export meta' situation now that snapshot understands it. 2011-06-08 15:58:03 -07:00
Patrick Walton
99c72b98b5 rustc: Use cnames in ty_to_str again; debugging code crept in 2011-06-08 15:49:46 -07:00
Patrick Walton
cc06bd4aa5 rustc: Add some miscellaneous demands that pushdown had previously caught; put out burning tinderbox 2011-06-08 15:33:16 -07:00
Graydon Hoare
b02b50c695 Register new snapshots. 2011-06-08 14:58:58 -07:00
Patrick Walton
2f853ddb8d test: Add a test case for issue #362, "ret none". 2011-06-08 12:52:36 -07:00
Patrick Walton
4571172c03 rustc: Remove pushdown. 15 second improvement. 2011-06-08 12:24:05 -07:00
Graydon Hoare
f54f2799c3 Merge pull request #403 from espindola/newllvm
Update rust to build with newer llvm versions.
2011-06-08 11:41:01 -07:00
Rafael Ávila de Espíndola
698022d351 Update rust to build with newer llvm versions. 2011-06-08 14:08:24 -04:00
Patrick Walton
08dcb9306b rustc: Remove all traces of the unification cache 2011-06-08 10:52:12 -07:00
Rafael Ávila de Espíndola
d360c481e8 Don't force the fetch of main.o from main.a, we are not using main.a anymore. 2011-06-08 13:47:21 -04:00
Josh Matthews
2235fb73ef Add optional message to fail. 2011-06-08 04:02:55 -04:00
Patrick Walton
0857d22c04 rustc: Print out a real error message on unresolved types. Puts out burning tinderbox. 2011-06-07 23:03:41 -07:00
Patrick Walton
ddec6b5f47 rustc: Use a set-based approach to unification; remove ty_bound_param and ty_local.
Sorry, big perf regression; will fix soon.
2011-06-07 19:33:18 -07:00
Graydon Hoare
721c5bbee8 More work on proper linkage name-mangling. Almost right, aside from version numbers. 2011-06-07 18:08:17 -07:00
Rafael Ávila de Espíndola
7034a28241 Update the snapshot. 2011-06-07 20:40:31 -04:00
Lindsey Kuper
a4ca75e6af For consistency, use ctxt instead of ty_ctxt outside of unify. 2011-06-07 15:18:30 -07:00
Lindsey Kuper
ab69c4a98f Removing dead code and redundant fails; changing fails to sess.bug
calls (issue #444).
2011-06-07 14:12:34 -07:00
Rafael Ávila de Espíndola
b1d6f12a05 Don't put a copy of main (the C one) in each binary we produce. This is a step
in getting a driver that works on all linux systems.

Sorry for the linker hacks, I will remove them after snapshotting a new compiler.
2011-06-07 16:56:27 -04:00
Josh Matthews
df9cf0be9b Add multiline, whitespace-eating strings. 2011-06-07 11:21:10 +02:00
Graydon Hoare
319156c8d1 Begin tidying up name-mangling rules. 2011-06-06 15:48:47 -07:00
Rafael Ávila de Espíndola
ee54fa5c7d Implement enough support for pointer to get an identity function working. 2011-06-06 16:36:01 -04:00
Marijn Haverbeke
4bd5f834b0 First take on an alias-safety checker
The alias checker works by ensuring that any value to which an alias
is created is rooted in some way that ensures it outlives the alias.

It is now disallowed to create an alias to the content of a mutable
box, or to a box hanging off a mutable field. There is also machinery
in place to prevent assignment to local variables whenever they are
the root of a live alias.
2011-06-06 21:24:03 +02:00
Marijn Haverbeke
2b334f061a Change unsafe aliases
This litters aberrations like 'alt({foo.bar}) { ... }' and f({*baz})
though the code (mostly in trans.rs). These are a way to explicitly
copy the given value so that it can be safely aliased. At some point
we'll probably want a more explicit copy operator.
2011-06-06 21:09:55 +02:00
Brian Anderson
4d8f715dab rustc: Make resolve::unresolved return !. Remove redundant fails 2011-06-05 00:11:44 -04:00
Lindsey Kuper
2736d63db0 Adding comments; removing dead code. 2011-06-04 19:38:11 -07:00
Lindsey Kuper
5f95766a40 Remove redundant 'fail' exprs and dead code; use sess.bug or
sess.span_err instead of 'fail'.  (issue #444)
2011-06-04 18:34:40 -07:00
Brian Anderson
53ea2a4751 stdlib: Use spans for #fmt errors originating in std
Issue #444
2011-06-04 19:48:19 -04:00
Brian Anderson
a177dc485b rustc: Reenable debug logging in extfmt
This is not obnoxious now that logging is off by default
2011-06-04 17:57:53 -04:00
Brian Anderson
4b566fe7f9 rustc: Hide the parser from syntax extensions
Eventually extensions will probably need access to the parser again, but it'll
be in a different form.
2011-06-04 17:51:59 -04:00
Brian Anderson
c88fa92de4 rustc: Generate extension annotations from ext_ctxt instead of parser 2011-06-04 17:44:24 -04:00
Brian Anderson
1d6f1dc58d rustc: Add a next_ann method to ext_ctxt
After this we can remove the parser from the syntax extensions, at least for
now.
2011-06-04 17:31:44 -04:00
Brian Anderson
3ca5fff195 rustc: Use spans for #env errors
Issue #444
2011-06-04 17:14:32 -04:00
Brian Anderson
ac83e34dc6 rustc: Report unimplemented #fmt features with spans 2011-06-04 17:10:08 -04:00
Brian Anderson
dd588519bd rustc: Add a span_unimpl method to ext_ctxt 2011-06-04 17:10:08 -04:00
Brian Anderson
ecf1bd7651 rustc: Use spans on extfmt error messages
Issue #444
2011-06-04 17:10:04 -04:00
Brian Anderson
794221b353 rustc: Return the correct span from parse_seq 2011-06-04 16:36:08 -04:00
Brian Anderson
c18f2e2dac rustc: Pass the correct span to syntax extensions 2011-06-04 15:57:13 -04:00
Brian Anderson
af46f3ed0d rustc: Introduce ext module. Move some things from parser to ext.
Introduce an ext_ctxt record to provide a span_err method for use while
expanding syntax extensions. Hopefully it will be useful for other things.
2011-06-04 15:49:42 -04:00
Paul Stansifer
dbd066a02a "macro" -> "syntax extension" for now 2011-06-03 18:47:11 -07:00
Paul Stansifer
79fcd51b46 Make the macro system more modular. 2011-06-03 18:47:11 -07:00
Graydon Hoare
cfc75695a5 Register new snapshots. 2011-06-03 18:47:08 -07:00
Graydon Hoare
f29d04672b Remove zerobreak between foo and ( on a call expr. Never looks right. 2011-06-03 17:32:29 -07:00
Graydon Hoare
f34d19a242 Make pp more conservative about inserting trailing comments mid-list. 2011-06-03 17:32:29 -07:00
Lindsey Kuper
69325f815d More comments. 2011-06-03 17:16:28 -07:00
Lindsey Kuper
dcf7fbf833 Comments and cleanup. 2011-06-03 17:09:50 -07:00
Patrick Walton
cb4c969ba6 rustc: Add a "smallintmap" implementation 2011-06-03 16:15:14 -07:00
Graydon Hoare
088ab03fdb Add spans to fields, args, methods. Improve pp of same. 2011-06-03 15:42:42 -07:00
Graydon Hoare
8235e76a47 Tidy up printing of ty_fn. 2011-06-03 15:42:42 -07:00
Rafael Ávila de Espíndola
429e21414b Parse pointers in metadata. 2011-06-03 15:13:10 -04:00
Rafael Ávila de Espíndola
ba74c6cfdc Boilerplate for pointers. Sorry for missing this on the first patch. 2011-06-03 15:02:58 -04:00
Rafael Ávila de Espíndola
18b63865ce Accept *foo as a pointer to foo.
This is accepted everywhere, since just passing a pointer is safe.
2011-06-03 14:34:19 -04:00
Marijn Haverbeke
07667d29aa Temporarily xfail compile-fail/pattern-tyvar
So that the tinderboxes can go green again. Patrick, please look into
this at some point.
2011-06-03 10:23:13 +02:00
Lindsey Kuper
dc29dead2e Removing redundant "fail"s. 2011-06-02 18:15:29 -07:00
Patrick Walton
ad9afefa10 rustc: Typecheck patterns from the top down; remove pushdown_pat 2011-06-02 18:11:26 -07:00
Tim Chevalier
76bcbfd269 Un-XFAIL break-value
It passes thanks to the previous two commits.
2011-06-02 17:52:04 -07:00
Tim Chevalier
ba377c043d Handle _|_ values properly in trans
Generate an LLVMUndef value of the proper type for an argument of
type _|_. Otherwise we get an LLVM assertion failure.
2011-06-02 17:52:04 -07:00
Tim Chevalier
468786e36d Fix unification bug
Hello from SFO Terminal 3!

unify_fn_common had the expected and actual types reversed in one
place. This was causing the type of an occurence of a function f
with type fn(int) -> T to be set to fn(_|_) -> T at a call site like
f(fail); I think this was also making some of the type error messages
come out backwards, but I haven't checked.

Also: ty_bot does not contain pointers
2011-06-02 17:52:04 -07:00
Patrick Walton
c515ed13de Merge pull request #450 from paulstansifer/quick_error_message_fix_2
Flatten functions and objects in trans::simplify_type.
2011-06-02 17:43:11 -07:00
Paul Stansifer
20bd927c3f Flatten functions and objects in trans::simplify_type. 2011-06-02 17:40:12 -07:00
Graydon Hoare
cb61d7b38e Pretty-print literals exactly as we saw them in the source. 2011-06-02 17:18:49 -07:00
Lindsey Kuper
3a6b5576ac Refactor make_fp_cmp_glue and make_integral_cmp_glue into one. 2011-06-02 16:35:25 -07:00
Paul Stansifer
1377e9b341 Implement pcwalton's code review suggestions. 2011-06-02 15:12:17 -07:00
Paul Stansifer
5cd10d2fef Error message, instead of segfault, when recursive types are used. 2011-06-02 14:03:17 -07:00
Patrick Walton
12f86e6f2f rustc: Print node IDs for more types of nodes 2011-06-02 11:29:17 -07:00
Patrick Walton
7c6a0f189e rustc: Tiny style fix in pprust::rust_printer 2011-06-02 11:29:17 -07:00
Graydon Hoare
f919af0f8f Remove offending hyphen. 2011-06-02 10:34:19 -07:00
Marijn Haverbeke
fd5428a95e Re-xfail lib-io test. Seems to only work on Linux 2011-06-02 17:58:49 +02:00
Marijn Haverbeke
5144f790fe Fix and un-xfail vec-append test 2011-06-02 16:45:26 +02:00
Marijn Haverbeke
75ffe657db Un-xfail multi test 2011-06-02 16:21:14 +02:00
Marijn Haverbeke
8ac94d59e8 Un-xfail lib-io test 2011-06-02 16:19:30 +02:00
Marijn Haverbeke
830c58b651 Un-xfail obj-dtor-2 2011-06-02 16:12:20 +02:00
Patrick Walton
78374d11ce rustc: Add a new mode to the pretty printer that prints out node IDs, for debugging 2011-06-01 18:53:52 -07:00
Patrick Walton
eae3036179 rustc: Remove else-after-return in main 2011-06-01 18:38:00 -07:00
Patrick Walton
d43f60e5d4 rustc: Fold --pretty and --typed-pretty into a single option with an optional argument 2011-06-01 18:32:05 -07:00
Patrick Walton
8c3809afd0 stdlib: Add some functions to getopts to deal with optional arguments more easily 2011-06-01 18:32:05 -07:00
Tim Chevalier
24c9d7e5f8 Improve type error message for non-constructor in pattern 2011-06-01 18:15:12 -07:00
Tim Chevalier
1402cd101b Redo typestate-related data structures to support predicate constraints. No actual support yet, just infrastructure. 2011-06-01 18:14:48 -07:00
Tim Chevalier
af4554aadf Add a few more to_str functions 2011-06-01 17:47:59 -07:00
Tim Chevalier
ac4ef1741e Allow constraint args to be literals 2011-06-01 17:45:13 -07:00
Lindsey Kuper
528c6516f0 Use span_err instead of err. Fixes issue #444. 2011-06-01 17:22:23 -07:00