Node
Function and structure nodes are a direct representation of Lexica source code. They are part of an abstract syntax tree. This module deals with the processing and verification of parsed nodes.
Structure
Structure
Description
Function Type
Represents the signature of a function including any parameters
Node Function
Represents a parsed function
Function Context
Contains the expressions of a function
Structure
Represents a structure and its fields
Queries
Function Type
Return
The processed function type of the requested function.
Dependencies
The parsed function type of the requested function.
Function
Return
The function node of the requested function.
Dependencies
The directly parsed function of the requested function.
Expressions
In Lexica, every logical unit of code is an expression. Every expression returns a particular value and type. Code that appears to not have any value such as bindings or mutations have the unit type.
Expressions are stored in a function context object and are accessed through an ExpressionKey
. Nested expressions are denoted with an ExpressionKey
rather than the nested expression itself. This indirection makes it cheaper to copy and process expressions.
Intentions
As the inference query depends on a fully processed function node, type information is not available at this stage of processing a function.
Shadow
Variables are implicitly shadowed when a new binding is made of an already bound variable name. The shadow module assigns generations to variables within the node to distinguish between shadowed variables with the same identifier.
Parameter variables always have a generation of zero as there can never be duplicate parameter identifiers in a function signature.
Resolution
When ascriptions and function calls are parsed, the actual path to the types and functions are unknown. The resolution module uses the context of a module and its inclusions to resolve the full path of a structure or function.
Last updated