Commit Graph

20516 Commits

Author SHA1 Message Date
Chris Lattner
0ad8498114 declare DeclData and create it in sema.
Swift SVN r174
2010-10-09 20:40:19 +00:00
Chris Lattner
57c697172a Split NamedDecl into NamedDecl with a ValueDecl subclass that has the type and value of the decl.
Swift SVN r173
2010-10-09 20:28:11 +00:00
Chris Lattner
3ea5878390 add scafolding for sema of datas.
Swift SVN r172
2010-10-09 19:33:50 +00:00
Chris Lattner
ecdc8da738 add parser support for type specifiers in data descriptors.
Swift SVN r171
2010-10-09 18:58:18 +00:00
Chris Lattner
17c36aa749 add parser support for simple data declarations
Swift SVN r170
2010-10-09 18:42:54 +00:00
Chris Lattner
19e5390b78 twinify more diagnostics.
Swift SVN r168
2010-10-09 17:50:40 +00:00
Chris Lattner
1bef5bd648 Bertrand prefers $0 to _1 for anonymous closure arguments.
Swift SVN r165
2010-09-18 16:57:10 +00:00
Chris Lattner
29503975d2 Enhance juxtaposition binding handling to handle binary operators and functions in a more fine-grained way, allowing if/else to work without braces.
Swift SVN r163
2010-09-04 19:25:56 +00:00
Chris Lattner
d2abfde434 introduce a new builtin type to represent the result of the else binary operator (which is a temporary hack until we get user defined types).
Use it to define ife/else.  Fix some precedence/parsing bugs that implementing else exposed. 

Swift SVN r162
2010-08-08 22:37:56 +00:00
Chris Lattner
45610c0ecc rework func argument parsing to be more consistent across ->'s.
Swift SVN r161
2010-08-08 21:36:26 +00:00
Chris Lattner
d5f834512e Next step to allow use of named arguments: Create a new ArgDecl AST node, and have SemaDecl form them. We now correctly diagnose argument name redefinitions (though the diagnostic sucks because we don't have loc info)
Swift SVN r159
2010-08-07 20:25:05 +00:00
Chris Lattner
b927b55863 Finally get around to allowing *use* of a named incoming function argument. The first step is to set up a scope for them and walk the argument names, keeping track of access path info.
Swift SVN r158
2010-08-07 20:10:19 +00:00
Chris Lattner
025143611f implement support for tuple expressions with names specified for the elements.
Swift SVN r157
2010-08-07 06:51:12 +00:00
Chris Lattner
5afc6bdbd0 Add Type::getAs<> and support for minimally desugaring types. Start preserving more type sugar in the type conversion code.
Swift SVN r154
2010-08-05 23:05:54 +00:00
Chris Lattner
429ecb81da Finish ast and sema support for name binding elements of tuples in var decls.
Swift SVN r152
2010-08-05 22:22:22 +00:00
Chris Lattner
bf63029ecd rework tuple element parsing to not use ParseDeclVar, since tuple elements are fundamentally different. While we're at it, switch to an arguably more natural syntax for field elements, naming them with .x : type instead of var x : type
Swift SVN r150
2010-08-05 05:03:55 +00:00
Chris Lattner
34a1beac31 inline ParseTypeOrDeclVar and ParseExprOrDeclVar into their single callers and simplify the code around them.
Swift SVN r149
2010-08-05 04:42:13 +00:00
Chris Lattner
43a526f1f5 a step towards parsing richer names. I need to do some refactoring of var parsing before going further.
Swift SVN r148
2010-08-05 04:28:32 +00:00
Chris Lattner
c1294622bf Cleanup type stuff.
Swift SVN r147
2010-08-04 06:35:54 +00:00
Chris Lattner
e1e335610f int is no longer a keyword, it is a type alias for the new __builtin_int32_type type.
Swift SVN r146
2010-08-04 05:27:45 +00:00
Chris Lattner
69133a6ed2 now that we have type aliases, eliminate void as a keyword.
Swift SVN r145
2010-08-04 05:16:37 +00:00
Chris Lattner
a8916a6106 implement semantic analysis and AST representation for AliasType (aka typedefs in C).
Swift SVN r144
2010-08-04 05:14:57 +00:00
Chris Lattner
8f86874c19 add parser support for typealiases, we have to be able to exercise the canonical type system somehow.
Swift SVN r143
2010-08-04 04:42:13 +00:00
Chris Lattner
f704c58c42 Two significant changes:
1. Change the representation of TupleType to contain TupleTypeElt structs instead of PointerUnion<Type*, NameDecl*>
 2. Change type canonicalization to not strip field names off tuples, and change type conversion logic to use canonical types again.

Also adds some stuff to the todo list, destined to never be short.

Swift SVN r141
2010-08-04 03:35:53 +00:00
Chris Lattner
807a82cd3d Resolve a fixme involving precedence of juxtaposition.
Swift SVN r140
2010-08-04 00:34:27 +00:00
Chris Lattner
04f7a08621 add support for tuple field access with ".", e.g.:
var a : (int, var f : int, int);
  var b = a.field0+a.field1+a.f;

This also eliminates TupleConvertExpr.

Swift SVN r137
2010-08-03 06:55:08 +00:00
Chris Lattner
6858e37cf2 implement a lot more semantic analysis for tuple conversions.
Swift SVN r136
2010-08-03 05:25:10 +00:00
Chris Lattner
1bb344c282 strength reduce our handling of dependent types. Now, you can't compose dependent types, there isn't a (dep, int) type, the whole tuple gets dependent type. This simplifies things a bit.
Swift SVN r134
2010-08-03 04:36:05 +00:00
Chris Lattner
7a5b428772 start reworking tuple compatibility: two different tuples aren't compatible because their canonical type is the same, they are compatible because one can be converted to the other. I'm just going to rip out canonical type support for now.
Swift SVN r133
2010-08-03 04:17:26 +00:00
Chris Lattner
c6499fe1ed Fixme patrol, clean some up.
Swift SVN r131
2010-08-01 07:09:40 +00:00
Chris Lattner
c2fdbb65c6 Tuple types with a single element are now valid. var x : (((int))); is now a triply nested tuple. To make this work, values are allowed to convert to tuples with one element.
Swift SVN r130
2010-08-01 07:02:05 +00:00
Chris Lattner
47afc23bac Expand lexer to cover a broader range of punctuators for function names. Add comparison functions to standard prolog.
Swift SVN r128
2010-08-01 05:58:41 +00:00
Chris Lattner
9b30ba0b2c refactor function body parsing+sema a bit.
Swift SVN r126
2010-08-01 04:55:49 +00:00
Chris Lattner
eae524427b start refactoring to allow bottom-up type inference with re-sema. Still much to be done.
Swift SVN r122
2010-07-30 23:03:23 +00:00
Chris Lattner
1a9f102090 switch expression printing over to use a visitor instead of hand rolled dispatch.
Swift SVN r120
2010-07-30 21:08:58 +00:00
Chris Lattner
84c765dbc5 Start building out type propagation framework for inferring expression types in specified contexts. To do this, build a simple expr visitor class.
Swift SVN r119
2010-07-30 20:56:28 +00:00
Chris Lattner
483b8a242d Enhance HandleConversionToType to take a conversion reason and to produce diagnostics itself instead of relying on clients to do it.
Swift SVN r118
2010-07-30 20:04:57 +00:00
Chris Lattner
9107a90d55 add support for representing dependent types.
Swift SVN r117
2010-07-30 18:18:28 +00:00
Chris Lattner
b3c9942644 Rework handling of sequence expressions and juxtaposition to eagerly bind arguments to functions. This means that in situations like:
foo (_0)  bar (_0)

that _0 will be bound properly and individually to foo and bar when they are functions, but if they aren't, then this is just one big 4-element sequence.

Swift SVN r115
2010-07-30 17:53:43 +00:00
Chris Lattner
ba04392294 Tighten up sema of anon closure arguments to reject invalid code like this:
func funcdecl6(a : int, b : int) -> (int,int) -> int = _0+_1;
var funcdecl7 : (int,int)->(int,int)->int = _0+_1;

It's not valid to bind anon closure arguments to functions, use named arguments instead.

Swift SVN r112
2010-07-28 06:51:12 +00:00
Chris Lattner
667078650a Implement support for anonymous closure arguments. For example, we can now compile this:
var func6 : ((int,int) -> int) -> ();  // Takes a function, returns nothing.
func funcdecl5() {
  func6(_0 + _1);         // Closure with two named anonymous arguments
}
into:

  (apply_expr type='()'
    (declref_expr type='(int, int) -> int -> ()' decl=func6)
    (closure_expr type='(int, int) -> int'
     (anondecl '_0' type='int')
     (anondecl '_1' type='int')
     (tuple_expr type='int'
      (binary_expr '+' type='int'
       (declref_expr type='int' decl=_0)
       (declref_expr type='int' decl=_1))))))))

However, there are still some problems with this (and we're definitely not doing type inference yet, all anon args are assumed 'int').

Swift SVN r111
2010-07-28 06:25:16 +00:00
Chris Lattner
9d33ef3616 add infrasturctuer for binding to "named anonymous" arguments.
Swift SVN r108
2010-07-27 21:37:29 +00:00
Chris Lattner
ce55229f0f Allow arbitrary expressions as the body of a function, don't require brace-expr.
Swift SVN r103
2010-07-27 06:36:04 +00:00
Chris Lattner
874421d4ce Implement AST and Sema support for auto-closures. We now parse:
var closure1 : () -> int = 4;  // Function producing 4 whenever it is called.
var closure2 : (int,int) -> int = 4; // Has some (dead) arguments.

into:

(vardecl 'closure1' type='() -> int'
 (closure_expr type='() -> int'
  (integer_literal type='int' value=4)))
(vardecl 'closure2' type='(int, int) -> int'
 (closure_expr type='(int, int) -> int'
  (integer_literal type='int' value=4)))


Swift SVN r101
2010-07-27 06:27:02 +00:00
Chris Lattner
1afe647841 add basic sema support for funcdecl, not verifying types yet though.
Swift SVN r96
2010-07-27 05:38:12 +00:00
Chris Lattner
fef3e71b42 stub out parsing of func declarations.
Swift SVN r95
2010-07-27 05:32:16 +00:00
Chris Lattner
da8a6af90a add a new expression to model sequences instead of hacking up braceexpr to do it.
Swift SVN r94
2010-07-25 23:22:29 +00:00
Chris Lattner
a6b810b3e6 Enforce type rules in SemaExpr::ActOnBinaryExpr, validating that proper types are passed into the LHS/RHS of the operator.
Swift SVN r92
2010-07-25 23:04:03 +00:00
Chris Lattner
fa78da101b implement lazy construction of canonical types, ala clang. This only affect tuples at the moment, but will affect type aliases someday.
Swift SVN r90
2010-07-25 22:41:05 +00:00
Chris Lattner
7e0123c768 Kill off add/sub/mul/div as special AST nodes. Instead, + is just yet-another identifier token and BinaryExpr is a generalized infix call expression.
Swift SVN r88
2010-07-25 19:16:45 +00:00