Commit Graph

159 Commits

Author SHA1 Message Date
Sean Callanan
bf0a540b4e Updated the playground transform to log brace
entries and exits.

  - Added support to buildLoggerCall for different
    logger functions;

  - Added support to buildLoggerCall to handle
    source locations that fall outside the
    user-entered expression text; and

  - Added the necessary logging functions to the
    functions we check for before adding our
    instrumentation.

This involved some minor refactoring.  I still have
to add a stack of scopes that I can pop out of when
I see a break, continue, or return.


Swift SVN r16197
2014-04-11 03:28:08 +00:00
Sean Callanan
82ace2413d Fixed a problem in the playground instrumenter that
caused direct logging of expression to fail type
check sometimes.  We introduce an intermediate
variable, so instead of (pseudocode)

  3 -> log(3)

we have

  3 -> var tmp = 3; log(tmp)


Swift SVN r16189
2014-04-11 00:59:36 +00:00
Sean Callanan
b45bbde700 Fixed a bug in the playground transform, which
caused it not to emit log calls for mutations of
Objective-C objects.


Swift SVN r16146
2014-04-10 01:27:28 +00:00
Sean Callanan
00d6c54241 Updated the playground transform:
- Fixed a bug where it did not instrument a "for-in" loop.
    
  - Made sure nested function declarations' bodies are
    instrumented.
   
  - Added instrumentation for return statements.
  
<rdar://problem/16516131>


Swift SVN r15960
2014-04-04 22:24:53 +00:00
Sean Callanan
1aa676fe92 Updated the playground transform:
- Don't be so sensitive about how many of the
   required functions there are; and

 - Don't include the "header" parameter to
   playground_log any more; it's not needed.


Swift SVN r15755
2014-04-01 22:39:46 +00:00
Sean Callanan
69111164a3 Updated the playground transform to handle
loop constructs and mutations of variables.

We also try to ignore expressions that return
empty tuples, because this causes type-checking
failures.


Swift SVN r15568
2014-03-28 01:39:16 +00:00
Sean Callanan
4bb2d109b5 Updated the playground transform to handle
variable declarations, do a better job with
assignments, and handle bare expressions.  Also
adjusted to the new playground logger API.


Swift SVN r15313
2014-03-21 02:01:37 +00:00
Sean Callanan
8eb64b73c8 Modified the playground transform to
- use the most recent prototype for the logger
   function (playground_log), and

 - send the output of the logger function to
   DVTSendPlaygroundLogDataToHost.


Swift SVN r14892
2014-03-10 23:45:08 +00:00
Sean Callanan
3b95376949 Added a new AST transformation pass called the
"Playground Transform."  This is an
instrumentation pass that adds calls to a
function called playground_log at locations of
interest.  Roughly speaking, these locations are

- Initialization of variables
- Modification of variables
- Expressions returning values
- Application of mutating methods on objects

The playground transform currently only finds
modifications of variables, but the intent is to
make all of these cases work.

It is enabled by a frontend option, and can
also be invoked by calling

swift::performPlaygroundTransform(SF)

which is the way LLDB, its main client, will
use it.

The frontend option is intended for testing,
and indeed I will add tests for this
transformation in the coming week as I bring
more functionality online.


Swift SVN r14801
2014-03-07 22:59:19 +00:00