Commit Graph

4856 Commits

Author SHA1 Message Date
Michael Gottesman
30c5e8702d Respond to changes in SetVector in r253439. 2016-02-06 11:22:25 -08:00
Slava Pestov
bbbe307980 SIL: Introduce SILDefaultWitnessTable and start plumbing
This will be used to help IRGen record protocol requirements
with resilient default implementations in protocol metadata.

To enable testing before all the Sema support is in place, this
patch adds SIL parser, printer and verifier support for default
witness tables.

For now, SILGen emits empty default witness tables for protocol
declarations in resilient modules, and IRGen ignores them when
emitting protocol metadata.
2016-02-05 20:57:11 -08:00
Xi Ge
a25551e54d [SourceKit] Surface group names via cursor info query. 2016-02-05 16:56:41 -08:00
Xi Ge
33b4de7ff6 [Serialization] Add grouping information of Stdlib to its module documentation file and deserialize it into ModuleFile.
We currently do not support more sophisticated naming mechanisms; group names are stemmed source file names.
2016-02-05 16:56:41 -08:00
Max Moiseev
61c837209b Merge remote-tracking branch 'origin/master' into swift-3-api-guidelines 2016-02-04 16:13:39 -08:00
Chris Lattner
0619e57a61 Switch the stdlib to use #file instead of __FILE__, and deprecate the __FILE__ identifiers.
This also updates the tests that would otherwise fail.
2016-02-04 15:08:31 -08:00
Ted Kremenek
7f77733b0c Merge pull request #1137 from ahoppen/master
Fixes SR-642: Code completion does not instantiate generic arguments of a type wrapped in an optional.
2016-02-04 14:27:01 -08:00
Chris Lattner
8dedfb31e3 Add support for #file/#line, etc according to SE-0028. __FILE__ and friends
are still accepted without deprecation warning as of this patch.
2016-02-04 14:22:22 -08:00
Joe Groff
ddc05a39a0 Remove unused SILParameterInfo/SILResultInfo::subst helpers.
NFC.
2016-02-04 13:45:22 -08:00
Joe Groff
54903d2223 Remove unused PolymorphicFunctionType::substGenericArgs.
NFC.
2016-02-04 11:47:21 -08:00
Slava Pestov
99b0e77d35 Merge pull request #1160 from gregomni/generic-func-args
[Sema] Extend callee diagnosis to complex args including generics, e.g. (Void) -> T
2016-02-03 22:55:15 -08:00
gregomni
6b30695869 Extend callee diagnosis to complex args including generics, e.g. (Void) -> T
Correctly determine callee closeness for func/ops that include generics
as part of more complicated parameters, i.e. tuple or closure args
containing generics as elements or args/results. Still only handling
single archetypes.

Also added code to check generic substitutions already made in the callee
parameters, which further helps diagnosis.
2016-02-03 22:54:19 -08:00
Xi Ge
6837c17c17 [SourceKit][CursorInfo] Replace archetypes in cursor info results to actual types. rdar://24494225 2016-02-03 17:14:13 -08:00
David Farler
a6a5ece206 IRGen: Emit type references for remote reflection
- Implement emission of type references for nominal type field
  reflection, using a small custom encoder resulting in packed
  structs, not strings. This will let us embed 7-bit encoded
  32-bit relative offsets directly in the structure (not yet
  hooked in).
- Use the AST Mangler for encoding type references
  Archetypes and internal references were complicating this before, so we
  can take the opportunity to reuse this machinery and avoid unique code
  and new ABI.

Next up: Tests for reading the reflection sections and converting the
demangle tree into a tree of type references.

Todo: For concrete types, serialize the types for associated types of
their conformances to bootstrap the typeref substitution process.

rdar://problem/15617914
2016-02-03 13:52:26 -08:00
Chris Lattner
0d57fe5b34 Fix <rdar://problem/24467411> QoI: Using "&& #available" should fixit to comma
This tweet: https://twitter.com/radexp/status/694561060230184960 pointed out
the sad truth that most people don't know that stmt-condition can contain
(including a fixit) when they try to use && instead of commas between clauses.

Before:

t.swift:4:16: error: #available may only be used as condition of an 'if', 'guard' or 'while' statement
  if x == y && #available(iOS 9, *) { }
               ^
t.swift:5:27: error: expected '{' after 'if' condition
  if #available(iOS 9, *) && x == y {}
                          ^
t.swift:5:37: error: braced block of statements is an unused closure
  if #available(iOS 9, *) && x == y {}
                                    ^
t.swift:5:37: error: expression resolves to an unused function
  if #available(iOS 9, *) && x == y {}
                                    ^~

After:

t.swift:4:13: error: expected ',' joining parts of a multi-clause condition
  if x == y && #available(iOS 9, *) { }
            ^~
            ,
t.swift:5:27: error: expected ',' joining parts of a multi-clause condition
  if #available(iOS 9, *) && x == y {}
                          ^~
                          ,
2016-02-02 22:20:20 -08:00
Jordan Rose
5e0f4b704d [AST] Introduce AvailabilityContext to wrap VersionRange.
This is the beginning of the extension of the availability model
introduced in Swift 2.0 to support two interesting things: inlineable
code and binary frameworks not tied to an OS. The former is critical
to having a stable standard library that isn't shipped with a client app.

(For more information on both of these, see docs/LibraryEvolution.rst.)

The existing availability model enforces that API is not used unless
the developer has already guaranteed its existence. We want to reuse
this logic for these new purposes. Additionally, certain queries about
the AST are dependent on this type of information as well, e.g. "can I
assume this enum will not grow any additional cases?" If the enum comes
from the module being compiled, the answer is usually "yes", but not if
the code asking the question may be inlined into another binary!

(This latter purpose is currently served by ResilienceExpansion down at
the SIL level; my goal is to replace ResilienceExpansion with
AvailabilityContext. It's a bit heavier but would also allow additional
optimization in the future.)

This commit does not change any logic; it only wraps existing uses of
VersionRange in AvailabilityContext if they're not strictly referring to
the OS version.
2016-02-02 17:41:29 -08:00
Xi Ge
ae60159816 [ModulePrint] Add the initial implementation for printing synthesized extensions.
For a concrete type, members from its conforming protocols' extensions can be hard
to manually surface. In this commit, when printing Swift modules, we start to replicate these
extensions and synthesize them as if they are the concrete type's native extensions.

Credit to Doug for suggesting this practice.
2016-02-02 14:53:21 -08:00
Xi Ge
7833a47e08 Merge pull request #1152 from ahoppen/SR-627
[CodeCompletion] Fix SR-627 Code Completion does not resolve generics…
2016-02-02 10:34:15 -08:00
Doug Gregor
6b0febf401 Merge pull request #1009 from gregomni/sr-547
[SR-547][Sema] Invalidate more parts of protocols involved in recursive definitions
2016-02-02 09:13:04 -08:00
Alex Hoppen
722193a5f9 [CodeCompletion] Fix SR-627 Code Completion does not resolve generics that have been assigned a concrete type 2016-02-02 12:34:35 +01:00
Slava Pestov
9ae2a5a90b Merge pull request #1151 from slavapestov/sil-parser-interface-types-cleanup
Move SIL parser to GenericFunctionTypes
2016-02-01 21:31:26 -08:00
Chris Lattner
94dd92fcb8 Fix compiler_crashers 22725 & 28236 by reworking parameter parsing error
recovery a bit.
2016-02-01 20:50:32 -08:00
Slava Pestov
b0b9fda09f AST: Start hollowing out GenericParamList, NFC
After the SIL parser refactoring, a bunch of code here is now dead.
2016-02-01 20:49:14 -08:00
Slava Pestov
924b959f75 AST: Add GenericSignature field to FunctionTypeRepr
This will be used to wean the SILParser off contextual types.

It is unfortunate that we now bloat each FunctionTypeRepr by
16 bytes to allow generic function types to be written down
in SIL. Perhaps we could use a different TypeRepr subclass
for function types in SIL mode.
2016-02-01 20:49:14 -08:00
Slava Pestov
0ecaa72b9d AST: Add ArchetypeBuilder::mapTypeOutOfContext(), NFC
This is the inverse of mapTypeIntoContext(). There were three
implementations of similar algorithms elsewhere, in Sema,
SIL type lowering, and some code in GenericParamList that is
only used by the SIL parser.

This new function will replace the first two, and the final one
will be refactored away.
2016-02-01 20:49:13 -08:00
Slava Pestov
e220b0ac55 AST: Add SubstFlags::AllowLoweredTypes
This will let us combine the Sema and SIL logic for mapping
contextual types to interface types. Recursing into SILFunctionType
in this case is fine, since going from a contextual type to an
interface type should never change conventions.
2016-02-01 20:49:12 -08:00
Dmitri Gribenko
1f6fe29e49 Merge pull request #1155 from practicalswift/typo-fixes-20160201
[gardening] Fix typos: "specalized" → "specialized", "uniqueing" → "uniquing"
2016-02-01 14:57:18 -08:00
Adrian Prantl
aa102c16a7 Document Pattern's implicit flag. 2016-02-01 14:12:54 -08:00
practicalswift
4e033708a3 [gardening] Fix recently introduced typo: "Specalized" → "Specialized" 2016-02-01 23:07:17 +01:00
Erik Eckstein
3464c89549 Add a hash function in IRGenOptions and use it for the incremental compilation hash in IRGen 2016-02-01 08:57:59 -08:00
David Farler
8a5ed405bf Make var parameters an error for Swift 3
This finishes up revisions to SE-0003 - only var function parameters
are disallowed for Swift 3.
2016-01-30 12:39:17 -08:00
saisi
6b3c5898e4 Fixed some niggling typos 2016-01-30 04:46:12 -05:00
practicalswift
a76e53a739 Remove unused diagnostic "non_func_decl_pattern_init". 2016-01-30 08:37:34 +01:00
Chris Lattner
061c7eb475 Merge pull request #1142 from Saisi/niggling_typos
Fixed niggling typos
2016-01-29 20:19:54 -08:00
saisi
535d400dc6 Fixed niggling typos 2016-01-29 23:16:25 -05:00
Dmitri Gribenko
b51bc1c895 Merge pull request #901 from hpux735/master
Support ARMv6 (original Raspberry Pi), ARMv7 bugfixes
2016-01-29 20:07:59 -08:00
David Farler
3f635d04c7 Reinstante var bindings in refutable patterns, except function parameters.
This reverts commits: b96e06da44,
                      8f2fbdc93a,
                      93b6962478,
                      64024118f4,
                      a759ca9141,
                      3434f9642b,
                      9f33429891,
                      47c043e8a6.

This commit leaves 'var' on function parameters as a warning to be
merged into Swift 2.2. For Swift 3, this will be an error, to be
converted in a follow-up.
2016-01-29 15:27:08 -08:00
Alex Hoppen
e6a1dae8ea Update old to new array notation in comment 2016-01-29 22:48:09 +01:00
William Dillon
ab7c87e7e8 Implemented ARMv6 and fixed up ARMv7 2016-01-29 21:41:22 +00:00
Doug Gregor
9a0241bb3b SE-0022: Address Jordan's review comments about #selector. 2016-01-28 12:09:57 -08:00
Doug Gregor
1a830fa541 SE-0022: Deprecate string-literal-as-selector in favor of #selector.
Introduce Fix-Its to aid migration from selectors spelled as string
literals ("foo:bar:", which is deprecated), as well as from
construction of Selector instances from string literals
(Selector("foo:bar"), which is still acceptable but not recommended),
to the #selector syntax. Jump through some hoops to disambiguate
method references if there are overloads:

    fixits.swift:51:7: warning: use of string literal for Objective-C
         selectors is deprecated; use '#selector' instead
      _ = "overloadedWithInt:" as Selector
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          #selector(Bar.overloaded(_:) as (Bar) -> (Int) -> ())

In the cases where we cannot provide a Fix-It to a #selector
expression, we wrap the string literal in a Selector(...) construction
to suppress the deprecation warning. These are also easily searchable
in the code base.

This also means we're doing more validation of the string literals
that go into Selector, i.e., that they are well-formed selectors and
that we know about some method that is @objc and has that
selector. We'll warn if either is untrue.
2016-01-28 10:58:27 -08:00
Doug Gregor
f7407f6a4d [SILGen] SE-0022: emit SIL for #selector expressions.
This completes the core of the #selector feature, which can now be
used to reference the selectors of @objc methods and initializers.
2016-01-27 13:57:40 -08:00
Denis Vnukov
4f92a08987 Adding a location of the var/let/inout to ParamDecl 2016-01-27 13:43:42 -08:00
Denis Vnukov
621e1173ce Preserving source range of PBD entry's original initialization.
After typechecking removes the initializer from the var there was no way to
restore information about the original source range of the declaration.
2016-01-27 13:43:40 -08:00
Denis Vnukov
7c321c0d1f Fixed interpolated string literal end location 2016-01-27 13:43:38 -08:00
Xi Ge
d6f8ad0008 Add a method to RequirementRepr that breaks the deserialized written string into detail. NFC 2016-01-27 13:23:20 -08:00
Doug Gregor
dccf3155f1 SE-0022: Implement parsing, AST, and semantic analysis for #selector. 2016-01-26 21:12:04 -08:00
David Farler
640cefd5b5 IRGen FieldRecordFlags: Use already-defined Ownership type 2016-01-26 09:33:54 -08:00
David Farler
bb2391adbd Add -strip-field-names and -strip-field-metadata IRGen options
This controls emission of field metadata for reflection, providing
the default decision. We might want to explore finer-grained
control per type, likely as a source code annotation.

  -strip-field-names
    Strip field names from nominal type metadata.

  -strip-field-metadata
    Strip all field metadata for nominal types. This also implies
    -strip-field-names.

NFC yet.
2016-01-26 09:33:54 -08:00
Doug Gregor
8336419844 Include completion source location information compound DeclNames.
When one spells a compound declaration name in the source (e.g.,
insertSubview(_:aboveSubview:), keep track of the locations of the
base name, parentheses, and argument labels.
2016-01-25 14:13:13 -08:00