Abstract Syntax Tree Transformation for Dynamic Language Completion

Resolve Bottlenecks,
Find Innovative Solutions
Generate Solutions

Solution Overview

Problem

Dynamic languages lack a type system, making it difficult to generate complete and accurate completion lists at arbitrary points in code, as existing techniques used for strongly-typed languages are not applicable, and executing code outside the runtime context is challenging.

Innovation Solution

Transforming the abstract syntax tree of a dynamic language program to attach metadata to variables and force code execution to specific halt points, allowing for the generation of available symbol sets, such as completion lists, during authoring or evaluation.

Engineering Contradictions & Design Principles

VSEngineering Contradiction Analysis

1Loss of information

If code execution is performed outside the runtime context to analyze variable types, then type information can be obtained, but it becomes difficult to reliably execute code and guarantee halting at specific points

Engineering Contradiction:
Improvetype informationVSAvoidcode execution reliability
Core Design Contradiction:
Loss of informationVSReliability

Solution Approach 1:

The patent introduces an intermediary mechanism (the abstract syntax tree transformer) that mediates between the code execution engine and the analysis system. This transformer attaches metadata to variables during execution, allowing type information to be obtained without requiring external execution or complex halting mechanisms. The metadata acts as an intermediary carrier of type information that can be accessed reliably during normal execution.

Inventive Principle:
Principle #24Intermediary (Mediator)

2Loss of information

If the abstract syntax tree is transformed to attach metadata to variables, then completion list generation is enabled, but the code execution may be affected

Engineering Contradiction:
Improvevariable type metadataVSAvoidcode execution speed
Core Design Contradiction:
Loss of informationVSProductivity

Solution Approach 1:

The abstract syntax tree transformation attaches metadata to variables during the compilation/transformation phase before execution occurs. This preliminary action ensures that when code executes, the type information is already in place and can be immediately accessed for completion list generation, eliminating the need for runtime transformation overhead and maintaining execution speed.

Inventive Principle:
Principle #10Preliminary action

3Ease of operation

If code execution is forced to reach specific halt points, then completion lists can be generated at arbitrary points, but execution time may increase

Engineering Contradiction:
Improvecompletion list generationVSAvoidexecution time
Core Design Contradiction:
Ease of operationVSLoss of time

Solution Approach 1:

The system performs preliminary transformation of the abstract syntax tree to attach metadata before execution, so that when the code runs, the necessary type information is already prepared. This eliminates the need for time-consuming runtime analysis and allows completion lists to be generated quickly at arbitrary points without significantly increasing execution time.

Inventive Principle:
Principle #10Preliminary action

Data Source

PatentUS9047100B2Abstract syntax tree transformation
Publication Date: 2015.06.02 MICROSOFT TECHNOLOGY LICENSING LLC
  • US9047100B2 patent drawing
  • US9047100B2 patent drawing
  • US9047100B2 patent drawing

AI summary

The transformation of an abstract syntax tree of a dynamic language program at evaluation time in a manner that is helpful for evaluating the program. For instance, the abstract syntax tree may be altered such that metadata is attached to variables generated during execution. The tree might also be altered to force code to execute faster or more likely than would occur otherwise. This might occur so that the dynamic language program might be executed at authoring time up to a halt point that represents a point of interest to the author. Without transformation of the abstract syntax tree, the execution might have not proceeded to the halt point or might have taken a long time. Once at the halt point, the program state at the halt point may be evaluated, allowing the program to perform functions such as generating an available symbol set at the halt point.