Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/35 traits #205

Merged
merged 363 commits into from
Jun 11, 2021
Merged
Changes from 1 commit
Commits
Show all changes
363 commits
Select commit Hold shift + click to select a range
0678d10
SymbolResolverPass: fixed implement definition and added domain defin…
ppaulweber Nov 16, 2019
b74d88d
TypeCheckPass: added domain definition support
ppaulweber Nov 16, 2019
b0615c1
TypeInferencePass: added domain definition support
ppaulweber Nov 16, 2019
569d0ab
ExecutionVisitor: fixed domain definition support
ppaulweber Nov 16, 2019
ca58504
Expression: fixed type casting node
ppaulweber Nov 17, 2019
8febd41
Definition: format source code
ppaulweber Nov 17, 2019
46587d2
SourceToAstPass: added as string builtin
ppaulweber Nov 17, 2019
2ae95b3
TypeInferencePass: updated type casting support
ppaulweber Nov 17, 2019
ca5721d
ExecutionVisitor: updated type casting support
ppaulweber Nov 17, 2019
24cb5ed
Prelude: added type casting
ppaulweber Nov 17, 2019
9bb49aa
Expression: encapsulated target definition information inside new Tar…
ppaulweber Nov 17, 2019
1c7e468
TypeInferencePass: improved type and target call symbol resolving
ppaulweber Nov 17, 2019
7879022
Prelude: added cardinality
ppaulweber Nov 17, 2019
21417da
TypeInferencePass: updated cardinality and type casting expression
ppaulweber Nov 17, 2019
e39d27c
ExecutionVisitor: fixed cardinality expression evaluation
ppaulweber Nov 17, 2019
ea7cb41
Expression: unary and binary expressions are target call expressions
ppaulweber Nov 18, 2019
03da422
Grammar: updated binary expressions and removed predefined IR references
ppaulweber Nov 18, 2019
9db7ad7
Expression: removed IR operation/instruction member for binary expres…
ppaulweber Nov 18, 2019
4823b4f
Definition: fixed include
ppaulweber Nov 18, 2019
c15eca3
Frame: fixed include
ppaulweber Nov 18, 2019
7d73f7c
SourceToAstPass: added more builtin definitions
ppaulweber Nov 18, 2019
ac90e87
AstDumpDotPass: provided target call expression information
ppaulweber Nov 18, 2019
5269b5d
SymbolResolverPass: incorrect error message, use debug instead
ppaulweber Nov 18, 2019
3ff7948
PropertyResolverPass: fixed unary, binary, cardinality, and type cast…
ppaulweber Nov 18, 2019
a9385b5
FrameSizeDeterminationPass: removed semicolon
ppaulweber Nov 18, 2019
cc4b827
TypeInferencePass: changed unary and binary expression to feature-bas…
ppaulweber Nov 18, 2019
e6b733e
ExecutionVisitor: updated unary and binary expression evaluation
ppaulweber Nov 18, 2019
462f1b3
Grammar: generated source files
ppaulweber Nov 18, 2019
e10ca88
Grammar: allow enumeration as implement definition target
ppaulweber Nov 19, 2019
54a8d24
TypeInfo: register enumeration as type domain
ppaulweber Nov 19, 2019
ad36861
SourceToAstPass: added generic enumeration type domain and size builtin
ppaulweber Nov 19, 2019
840ebb5
SymbolResolverPass: generic 'enumeration' implement definitions for u…
ppaulweber Nov 19, 2019
b582a1b
TypeInferencePass: relax the generic enumeration object parameters
ppaulweber Nov 19, 2019
7ea2eea
Grammar: generated source files
ppaulweber Nov 19, 2019
f7d6745
SourceToAstPass: added logical builtin definitions
ppaulweber Nov 19, 2019
d5069bf
TypeInferencePass: updated logical feature method signatures
ppaulweber Nov 19, 2019
2377d01
Prelude: updated with several new feature and implement definitions
ppaulweber Nov 19, 2019
2d8fac5
SourcetoAstPass: updated builtin definitions and creation style
ppaulweber Nov 19, 2019
dbab1c8
SourceToAstPass: updated builtin domain types creation
ppaulweber Nov 19, 2019
49c8289
Prelude: added assert, assure, abort built-ins
ppaulweber Nov 19, 2019
f4b5366
SourceToAstPass: provided IR namespace for better readability
ppaulweber Nov 19, 2019
ded6fd4
TypeInferencePass: annotate binary sub-expressions
ppaulweber Nov 19, 2019
4970ce8
AstDumpDotPass: fixed typo in dot node name
ppaulweber Nov 19, 2019
3735d98
SourceToAstPass: added more builtin definitions
ppaulweber Nov 19, 2019
9f5adbe
Prelude: updated and implemented more default features
ppaulweber Nov 19, 2019
7c5eea1
Type: updated signature and added signature path creation
ppaulweber Nov 20, 2019
14628db
Grammar: added domain definition
ppaulweber Nov 21, 2019
cbd5d6f
Grammar: added builtin definition syntax
ppaulweber Nov 22, 2019
d695485
Grammar: structure definition template arguments
ppaulweber Nov 23, 2019
a006bd9
Node: deep-copy functionality support
ppaulweber Nov 24, 2019
3bf184d
Attribute: deep-copy functionality support
ppaulweber Nov 24, 2019
764d52f
Declaration: deep-copy functionality support
ppaulweber Nov 24, 2019
38a6662
Definition: deep-copy and templating functionality support
ppaulweber Nov 24, 2019
96e389c
Expression: deep-copy functionality support
ppaulweber Nov 24, 2019
ea436b7
Helper: deep-copy functionality support
ppaulweber Nov 24, 2019
92fbff2
Idenitifier: deep-copy and alter name functionality support
ppaulweber Nov 24, 2019
23b88da
Literal: deep-copy functionality support and fixed referencing
ppaulweber Nov 24, 2019
52d00f4
Rule: deep-copy functionality support
ppaulweber Nov 24, 2019
62ba86a
Span: deep-copy functionality support
ppaulweber Nov 24, 2019
f913343
Token: deep-copy functionality support
ppaulweber Nov 24, 2019
c7dee9a
Type: deep-copy and signature functionality support
ppaulweber Nov 24, 2019
553a5db
RecursiveVisitor: templating functionality and init handling
ppaulweber Nov 24, 2019
232040b
TypeInfo: updated internal IR types and symbols
ppaulweber Nov 27, 2019
b1f48f0
Grammar: added template-based direct call expressions
ppaulweber Nov 28, 2019
46b941c
Grammar: fixed record type syntax
ppaulweber Nov 29, 2019
126a11b
Test: added multi-agent case
ppaulweber Nov 30, 2019
2adfc1c
SourceToAstPass: removed built-in facilities
ppaulweber Dec 1, 2019
81e1e1d
Type: updated internals
ppaulweber Dec 2, 2019
fe64eb3
Type: fixed signature representation
ppaulweber Dec 3, 2019
e04a639
Namespace: added type definition mapping
ppaulweber Dec 6, 2019
d6411dd
Node: fixed description
ppaulweber Dec 7, 2019
e0c78b2
Helper: improved internal implementation
ppaulweber Dec 8, 2019
d084fb5
Type: fixed tuple and relation signature
ppaulweber Dec 10, 2019
186372f
Helper: removed object type setting functionality
ppaulweber Dec 10, 2019
163bcec
Declaration: setter to change return and argument type domains
ppaulweber Dec 10, 2019
45aca3a
Expression: updated target calls and removed 'self' target type
ppaulweber Dec 10, 2019
14448ff
Definition: merged TemplateTypeDefinition into TypeDefinition and rem…
ppaulweber Dec 10, 2019
68cc835
RecursiveVisitor: fixed using and init definition
ppaulweber Dec 10, 2019
c83b3ea
AttributionPass: provided support for domain, builtin, implement, and…
ppaulweber Dec 10, 2019
54223d8
SymbolRegistrationPass: feature and implement support
ppaulweber Dec 10, 2019
24f151b
AstToCasmIRPass: updated and fixed call target types
ppaulweber Dec 11, 2019
44167af
Type: added integer-based range literal support for fixed sized types
ppaulweber Dec 11, 2019
c59a5a9
Type: updated fixed sized types
ppaulweber Dec 12, 2019
86b3f94
LibraryLoaderPass: fixed registration of import definitions
ppaulweber Dec 13, 2019
5b040c3
Definition: fixed import definition symbol name
ppaulweber Dec 13, 2019
30d9153
Definition: updated init handling and provided external flag function…
ppaulweber Dec 13, 2019
3d04621
LibraryLoaderPass: mark imported init definitions as external
ppaulweber Dec 13, 2019
3b4cb43
SpecificationLoader: improved module handling and updated prelude int…
ppaulweber Dec 13, 2019
7dffbdf
SpecificationMergerPass: updated run functionality and added init def…
ppaulweber Dec 13, 2019
9ce2f23
Namespace: updated error message for already defined symbols
ppaulweber Dec 13, 2019
47ac1e7
RecursiveVisitor: updated init definition
ppaulweber Dec 13, 2019
c94b473
Expression: fixed target call arguments handling of method call
ppaulweber Dec 13, 2019
b692103
Codes: fixed name of invalid symbol error code
ppaulweber Dec 24, 2019
da13ba0
Repository: updated prelude target
ppaulweber Dec 24, 2019
0becd8c
Prelude: updated domains, built-ins, features, rules, and deriveds
ppaulweber Dec 27, 2019
49f41c3
Grammar: changed 'feature' to 'behavior'
ppaulweber Jan 3, 2020
7b82053
Definition: changed 'feature' to 'behavior'
ppaulweber Jan 3, 2020
edfe0c0
Prelude: changed 'feature' to 'behavior'
ppaulweber Jan 3, 2020
a5b28f4
Grammar: generated source files
ppaulweber Jan 3, 2020
75caa5e
AstDumpDotPass: changed 'feature' to 'behavior'
ppaulweber Jan 3, 2020
672bb0f
AttributionPass: changed 'feature' to 'behavior'
ppaulweber Jan 3, 2020
42852d5
SymbolRegistrationPass: behavior and implement functionality
ppaulweber Jan 3, 2020
844fd5c
SymbolResolverPass: behavior and implement functionality
ppaulweber Jan 3, 2020
579661e
TypeCheckPass: behavior and implement functionality
ppaulweber Jan 3, 2020
8e66bd9
TypeInferencePass: behavior and implement functionality
ppaulweber Jan 3, 2020
689121e
ConsistencyCheckPass: types, behavior, and implement functionality
ppaulweber Jan 3, 2020
f94279e
PropertyResolverPass: dropped using definition
ppaulweber Jan 3, 2020
3d72bbd
FrameSizeDeterminationPass: fixed builtin functionality
ppaulweber Jan 3, 2020
697a47b
ExecutionVisitor: changed expression calling to target call evaluatio…
ppaulweber Jan 3, 2020
f27e2fd
Prelude: updated Equality behavior
ppaulweber Jan 6, 2020
eb2affd
Grammar: reordered template syntax position and unified style to dire…
ppaulweber Jan 6, 2020
4a0631f
Helper: added template node
ppaulweber Jan 6, 2020
4d868a9
Definition: updated template handling
ppaulweber Jan 6, 2020
aab87d9
Expression: updated template handling
ppaulweber Jan 6, 2020
21be697
Visitor: updated template handling
ppaulweber Jan 6, 2020
e8ea6da
AstDumpSourcePass: added template support
ppaulweber Jan 6, 2020
b58d139
AstDumpDotPass: added template support
ppaulweber Jan 6, 2020
8cfa0a2
Prelude: updated template syntax
ppaulweber Jan 6, 2020
5f745da
SymbolRegistrationPass: updated template handling
ppaulweber Jan 6, 2020
53c85c8
SymbolResolverPass: updated template handling
ppaulweber Jan 6, 2020
dc33fb6
TypeCheckPass: updated template handling
ppaulweber Jan 6, 2020
96aa8bb
TypeInferencePass: updated template handling
ppaulweber Jan 6, 2020
7a2d8b7
ConsistencyCheckPass: updated template handling
ppaulweber Jan 6, 2020
bb4120e
Grammar: generated source files
ppaulweber Jan 6, 2020
67ea33b
Happy New Year :tada:
ppaulweber Jan 6, 2020
7bedcd8
Rebase: missing fixes
ppaulweber Jan 6, 2020
1efd33e
Grammar: generated source files
ppaulweber Jan 7, 2020
4c6b588
AST: renamed namespace from 'Ast' to 'AST'
ppaulweber Jan 7, 2020
ac567f2
Grammar: generated source files
ppaulweber Jan 7, 2020
26058fb
CST: Concrete Syntax Tree
ppaulweber Jan 13, 2020
681dd8c
AST: Abstract Syntax Tree
ppaulweber Jan 13, 2020
4220b20
LST: Lowered Abstract Syntax Tree
ppaulweber Jan 13, 2020
1622648
AST: clean-up
ppaulweber Jan 13, 2020
39b3c22
CST: updated test cases
ppaulweber Jan 13, 2020
607a0c9
Grammar: changed to CST creation and added several new rules
ppaulweber Jan 13, 2020
da2bc0b
Grammar: generated source files
ppaulweber Jan 13, 2020
0027af0
Grammar: fixed token generation script
ppaulweber Jan 13, 2020
40b9ee2
Codes: updated
ppaulweber Jan 13, 2020
2dd4cbb
Lexer: updated to CST
ppaulweber Jan 13, 2020
01b5099
Namespace: updated functionality
ppaulweber Jan 13, 2020
29aa937
Specification: consists of CST, AST, and LST
ppaulweber Jan 13, 2020
d1f439a
SourceToCstPass: renamed and updated to CST
ppaulweber Jan 13, 2020
a57b9be
CstDumpPass: renamed and updated to CST
ppaulweber Jan 13, 2020
d7c1996
CstEmitPass: renamed and updated to CST
ppaulweber Jan 13, 2020
aaa0100
CstToAstPass: translation of CST to AST representation
ppaulweber Jan 13, 2020
b92ebf7
AstDumpPass: added
ppaulweber Jan 13, 2020
9d863cd
AstToLstPass: transformation of AST to LST represenation
ppaulweber Jan 13, 2020
0c7d2c0
LstToIrPass: renamed and updated
ppaulweber Jan 13, 2020
a1b997a
LstDumpPass: added
ppaulweber Jan 13, 2020
8c39ed9
AttributionPass: added template name and symbol attribute node
ppaulweber Jan 13, 2020
177d614
ConsistencyCheckPass: updated
ppaulweber Jan 13, 2020
0dcd784
FrameSizeDeterminationPass: updated
ppaulweber Jan 13, 2020
8d9984b
ProjectResolverPass: clean-up
ppaulweber Jan 13, 2020
d9f6aa3
PropertyResolverPass: updated
ppaulweber Jan 13, 2020
28ee719
PropertyRevisePass: updated
ppaulweber Jan 13, 2020
e406b6c
SymbolRegistrationPass: updated
ppaulweber Jan 13, 2020
c56b6ce
SymbolResolverPass: updated
ppaulweber Jan 13, 2020
ff20254
TemplatingPass: added, which instances resolved template symbols
ppaulweber Jan 13, 2020
3c38b71
TypeCheckPass: updated
ppaulweber Jan 13, 2020
f9bdeb2
TypeInferencePass: updated
ppaulweber Jan 13, 2020
0823b7c
ReferenceConstant: updated to LST
ppaulweber Jan 13, 2020
8ead98b
SpecificationLoader: updated
ppaulweber Jan 13, 2020
5be2432
SpecificationMergerPass: updated
ppaulweber Jan 13, 2020
5c45313
LibraryLoaderPass: udpated
ppaulweber Jan 13, 2020
1dc26e3
Configuration: updated sources
ppaulweber Jan 13, 2020
2c3ae30
Tests: updated
ppaulweber Jan 13, 2020
9b0aa92
UpdateException: updated to LST
ppaulweber Jan 13, 2020
262315f
Frame: updated to LST
ppaulweber Jan 13, 2020
b08eda7
ExecutionVisitor: updated to LST
ppaulweber Jan 13, 2020
e8801f0
Header: updated includes
ppaulweber Jan 13, 2020
ade56d4
Configuration: updated folder structure for format target
ppaulweber Jan 13, 2020
28e5245
NumericExecutionPass: updated to LST
ppaulweber Jan 13, 2020
51ab428
CST::Expression: fixed members
ppaulweber Jan 16, 2020
66215df
CstToAstPass: updated
ppaulweber Jan 16, 2020
62985d8
Prelude: updated
ppaulweber Jan 31, 2020
6443754
AST: updated and removed embraced expressions
ppaulweber Feb 3, 2020
c2c2d6f
ExecutionVisitor: fixed exception handling
ppaulweber Feb 3, 2020
f52a0d2
CST: updated method call expressions
ppaulweber Feb 3, 2020
9427095
AST: changed method call argument handling
ppaulweber Feb 4, 2020
f10c488
TemplatingPass: updated
ppaulweber Feb 4, 2020
2e50194
ConsistencyCheckPass: updated
ppaulweber Feb 4, 2020
c7d661f
PropertyResolverPass: removed deprecated AST node
ppaulweber Feb 4, 2020
888a6a0
AstDumpPass: updated
ppaulweber Feb 4, 2020
7c7d9f8
CstToAstPass: updated
ppaulweber Feb 4, 2020
cf146ea
AstToLstPass: updated
ppaulweber Feb 4, 2020
95da602
SpecificationLoaderPass: updated
ppaulweber Feb 4, 2020
c15d76f
SpecificationMergerPass: updated
ppaulweber Feb 4, 2020
ba06361
SymbolResolverPass: updated
ppaulweber Feb 4, 2020
9a455ff
TemplatingPass: updated
ppaulweber Feb 4, 2020
67e4cdc
TypeCheckPass: updated
ppaulweber Feb 4, 2020
96330bc
TypeInferencePass: updated
ppaulweber Feb 4, 2020
346beb0
TemplatingPass: updated
ppaulweber Feb 4, 2020
ec3fde2
Namespace: updated symbol identifier path resolving
ppaulweber Feb 5, 2020
60c89db
AstToLstPass: updated
ppaulweber Feb 5, 2020
8afc425
SymbolResolverPass: updated
ppaulweber Feb 5, 2020
e65c10d
TemplatingPass: updated
ppaulweber Feb 5, 2020
230eda0
TypeInferencePass: updated
ppaulweber Feb 5, 2020
213e686
AST::Definition: removed unused variables
ppaulweber Feb 7, 2020
fc16b66
SymbolResolverPass: updated
ppaulweber Feb 7, 2020
cc25b94
Tests: updated passes
ppaulweber Feb 7, 2020
e24670a
Grammar: updated identifiers
ppaulweber Feb 7, 2020
75759b7
Grammar: generated source files
ppaulweber Feb 7, 2020
ea046a6
CST::Definition: provide ability to store operation annotation
ppaulweber Feb 7, 2020
175d379
AttributionPass: support for operator annotation through attributes
ppaulweber Feb 7, 2020
3f7ac9b
TypeInferencePass: updated
ppaulweber Feb 7, 2020
8dc316c
Prelude: updated
ppaulweber Feb 7, 2020
4275026
Namespace: updated includes
ppaulweber Feb 10, 2020
1e7a367
TypeInfo: updated static helper variable initializations
ppaulweber Feb 11, 2020
1cadb57
SpecificationLoader: fetch temporary directory path from libstdhl
ppaulweber Feb 11, 2020
bcfc963
Configuration: updated to C++14 standard
ppaulweber Feb 11, 2020
249edd6
Prelude: updated
ppaulweber Feb 11, 2020
eb316b6
SpecificationMergerPass: updated
ppaulweber Feb 11, 2020
0eeda68
SymbolResolverPass: updated
ppaulweber Feb 11, 2020
fea6555
TemplatingPass: updated
ppaulweber Feb 11, 2020
3874306
TypeCheckPass: updated
ppaulweber Feb 11, 2020
39c069f
TypeInferencePass: updated
ppaulweber Feb 11, 2020
95d3c32
Grammar: updated token generation
ppaulweber Feb 12, 2020
f7ca9bf
Grammar: generated source files
ppaulweber Feb 12, 2020
37faa87
Grammar: renamed internal domain token symbol
ppaulweber Feb 12, 2020
0cfae40
AST::Expression: renamed internal domain token symbol
ppaulweber Feb 12, 2020
e04d0c6
CST::Expression: renamed internal domain token symbol
ppaulweber Feb 12, 2020
5ea3104
PropertyResolverPass: updated
ppaulweber Feb 12, 2020
c700141
SymbolResolverPass: updated
ppaulweber Feb 12, 2020
ee71a1d
TypeCheckPass: updated
ppaulweber Feb 12, 2020
06cd3ee
TypeInferencePass: updated
ppaulweber Feb 12, 2020
29cadff
ExecutionVisitor: updated
ppaulweber Feb 12, 2020
9798db1
Grammar: generated source files
ppaulweber Feb 12, 2020
b73d90e
CST::Span: fixed return value
ppaulweber Feb 12, 2020
a1cf8f8
UpdateSet: fixed return value
ppaulweber Feb 12, 2020
e2a31b2
Configuration: updated prelude source generation
ppaulweber Feb 12, 2020
e27cbe4
LstToIrPass: updated
ppaulweber Mar 5, 2020
d321bcb
AstToLstPass: updated
ppaulweber Mar 5, 2020
c0f14da
CstToAstPass: updated
ppaulweber Mar 5, 2020
5e9aeee
SymbolResolverPass: fixed initialization order of program function
ppaulweber Mar 6, 2020
17b9986
ExecutionVisitor: updated
ppaulweber Mar 6, 2020
a2a5796
TypeInferencePass: updated
ppaulweber Mar 6, 2020
1dc65c0
Prelude: updated
ppaulweber Apr 6, 2020
aab482b
Grammar: fixed span and 'this' keyword handling
ppaulweber Jun 10, 2021
016bee2
Grammar: generated source files
ppaulweber Jun 10, 2021
64756b9
Library: added LST to IR lowering
ppaulweber Jun 10, 2021
92585fa
TemplatingPass: added missing property set calls
ppaulweber Jun 10, 2021
d2021bb
TypeInferencePass: updated format and added 'internal' error message
ppaulweber Jun 10, 2021
586f2eb
CstToAstPass: fixed property settings
ppaulweber Jun 10, 2021
e178360
Test: updated test cases regarding namespace changes
ppaulweber Jun 11, 2021
4cbcd6e
LST: temporary 'setSymbolic' facility which will be removed after sym…
ppaulweber Jun 11, 2021
b0004a5
Symbolic Execution: rebase and move from AST to LST -- first integrat…
ppaulweber Jun 11, 2021
0e45ff2
Symbolic Execution: disabled consistency checking due to missing inte…
ppaulweber Jun 11, 2021
6af7322
Namespace: added temporary 'string'-based type/id/definition lookup
ppaulweber Jun 11, 2021
da46fc4
TypeCheckPass: updated DomainDefinition handling
ppaulweber Jun 11, 2021
3ebe70a
TypeInferencePass: added type fallback lookup
ppaulweber Jun 11, 2021
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
AstToLstPass: updated
  • Loading branch information
ppaulweber committed Jun 10, 2021
commit d321bcbdd0404a19f4164de01621d0775f809a6b
113 changes: 98 additions & 15 deletions src/transform/AstToLstPass.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -263,6 +263,8 @@ void AstToLstVisitor::visit( Root& node )

void AstToLstVisitor::visit( InitDefinition& node )
{
// `init` definition does not get transformed to LST form, because the `program` already
// contains the initially setup of the starting agent(s)
}

void AstToLstVisitor::visit( VariableDefinition& node )
Expand Down Expand Up @@ -380,19 +382,33 @@ void AstToLstVisitor::visit( UsingPathDefinition& node )

void AstToLstVisitor::visit( ImportDefinition& node )
{
// `import` does not get lowered to LST form, because all imports are already resolved in
// previous passes
}

void AstToLstVisitor::visit( InvariantDefinition& node )
{
// astNode->setExported( node.exported() );
const auto& identifier = fetch< LST::Identifier >( node.identifier() );
const auto& expression = fetch< LST::Expression >( node.expression() );
const auto& lstNode = store< LST::InvariantDefinition >(
node,
node.type(),
node.properties(),
identifier,
node.maximumNumberOfLocals(),
expression );

m_lstDefinitions->add( lstNode );
}

void AstToLstVisitor::visit( DomainDefinition& node )
{
// const auto& templateSymbols =
// fetch< LST::VariableDefinitions, LST::VariableDefinition, AST::VariableDefinition >(
// node.templateNode()->symbols() );
// const auto& domainType = node.domainType();
if( node.templateSymbols()->size() != 0 )
{
m_log.debug( { node.sourceLocation() }, "omit transformation of " + node.description() );
return;
}

const auto& identifier = fetch< LST::Identifier >( node.identifier() );
const auto& lstNode = store< LST::DomainDefinition >(
node, node.type(), node.properties(), identifier, node.maximumNumberOfLocals() );
Expand All @@ -402,10 +418,11 @@ void AstToLstVisitor::visit( DomainDefinition& node )

void AstToLstVisitor::visit( StructureDefinition& node )
{
// const auto& templateSymbols =
// fetch< LST::VariableDefinitions, LST::VariableDefinition, AST::VariableDefinition >(
// node.templateNode()->symbols() );
// const auto& domainType = node.domainType();
if( node.templateSymbols()->size() != 0 )
{
m_log.debug( { node.sourceLocation() }, "omit transformation of " + node.description() );
return;
}

const auto& lstFunctionDefinitions =
fetch< LST::FunctionDefinitions, LST::FunctionDefinition, AST::FunctionDefinition >(
Expand All @@ -419,6 +436,8 @@ void AstToLstVisitor::visit( StructureDefinition& node )

void AstToLstVisitor::visit( BehaviorDefinition& node )
{
// 'behavior' does not get lowered to LST form, because its type information is only used during
// analysis passes of type checking and type inference
}

void AstToLstVisitor::visit( ImplementDefinition& node )
Expand All @@ -427,9 +446,12 @@ void AstToLstVisitor::visit( ImplementDefinition& node )

void AstToLstVisitor::visit( BuiltinDefinition& node )
{
// const auto& templateSymbols =
// fetch< LST::VariableDefinitions, LST::VariableDefinition, AST::VariableDefinition >(
// node.templateNode()->symbols() );
if( node.templateSymbols()->size() != 0 )
{
m_log.debug( { node.sourceLocation() }, "omit transformation of " + node.description() );
return;
}

const auto& identifier = fetch< LST::Identifier >( node.identifier() );
const auto& lstNode = store< LST::BuiltinDefinition >(
node,
Expand Down Expand Up @@ -509,10 +531,14 @@ void AstToLstVisitor::visit( AbstractExpression& node )

void AstToLstVisitor::visit( NamedExpression& node )
{
const auto& identifier = fetch< LST::Identifier >( node.identifier() );
const auto& expression = fetch< LST::Expression >( node.expression() );
store< LST::NamedExpression >( node, node.type(), node.properties(), identifier, expression );
}

void AstToLstVisitor::visit( MappedExpression& node )
{
// TODO: @ppaulweber
}

void AstToLstVisitor::visit( DirectCallExpression& node )
Expand All @@ -535,6 +561,7 @@ void AstToLstVisitor::visit( MethodCallExpression& node )

void AstToLstVisitor::visit( IndirectCallExpression& node )
{
// TODO: @ppaulweber
}

void AstToLstVisitor::visit( TypeCastingExpression& node )
Expand Down Expand Up @@ -584,6 +611,12 @@ void AstToLstVisitor::visit( CardinalityExpression& node )

void AstToLstVisitor::visit( LetExpression& node )
{
const auto& variableBindings =
fetch< LST::VariableBindings, LST::VariableBinding, AST::VariableBinding >(
node.variableBindings() );
const auto& expression = fetch< LST::Expression >( node.expression() );
store< LST::LetExpression >(
node, node.type(), node.properties(), variableBindings, expression );
}

void AstToLstVisitor::visit( ConditionalExpression& node )
Expand All @@ -597,14 +630,35 @@ void AstToLstVisitor::visit( ConditionalExpression& node )

void AstToLstVisitor::visit( ChooseExpression& node )
{
const auto& variables =
fetch< LST::VariableDefinitions, LST::VariableDefinition, AST::VariableDefinition >(
node.variables() );
const auto& universe = fetch< LST::Expression >( node.universe() );
const auto& expression = fetch< LST::Expression >( node.expression() );
store< LST::ChooseExpression >(
node, node.type(), node.properties(), variables, universe, expression );
}

void AstToLstVisitor::visit( UniversalQuantifierExpression& node )
{
const auto& predicateVariables =
fetch< LST::VariableDefinitions, LST::VariableDefinition, AST::VariableDefinition >(
node.predicateVariables() );
const auto& universe = fetch< LST::Expression >( node.universe() );
const auto& proposition = fetch< LST::Expression >( node.proposition() );
store< LST::UniversalQuantifierExpression >(
node, node.type(), node.properties(), predicateVariables, universe, proposition );
}

void AstToLstVisitor::visit( ExistentialQuantifierExpression& node )
{
const auto& predicateVariables =
fetch< LST::VariableDefinitions, LST::VariableDefinition, AST::VariableDefinition >(
node.predicateVariables() );
const auto& universe = fetch< LST::Expression >( node.universe() );
const auto& proposition = fetch< LST::Expression >( node.proposition() );
store< LST::ExistentialQuantifierExpression >(
node, node.type(), node.properties(), predicateVariables, universe, proposition );
}

void AstToLstVisitor::visit( SkipRule& node )
Expand All @@ -614,11 +668,17 @@ void AstToLstVisitor::visit( SkipRule& node )

void AstToLstVisitor::visit( ConditionalRule& node )
{
// use skip rule for else!
const auto& condition = fetch< LST::Expression >( node.condition() );
const auto& thenRule = fetch< LST::Rule >( node.thenRule() );
const auto& elseRule = fetch< LST::Rule >( node.elseRule() );
store< LST::ConditionalRule >( node, condition, thenRule, elseRule );
}

void AstToLstVisitor::visit( CaseRule& node )
{
const auto& expression = fetch< LST::Expression >( node.expression() );
const auto& cases = fetch< LST::Cases, LST::Case, AST::Case >( node.cases() );
store< LST::CaseRule >( node, expression, cases );
}

void AstToLstVisitor::visit( LetRule& node )
Expand All @@ -632,20 +692,38 @@ void AstToLstVisitor::visit( LetRule& node )

void AstToLstVisitor::visit( LocalRule& node )
{
const auto& localFunctions =
fetch< LST::FunctionDefinitions, LST::FunctionDefinition, AST::FunctionDefinition >(
node.localFunctions() );
const auto& rule = fetch< LST::Rule >( node.rule() );
store< LST::LocalRule >( node, localFunctions, rule );
}

void AstToLstVisitor::visit( ForallRule& node )
{
// std::make_shared< ValueLiteral >(
// libstdhl::Memory::get< libcasm_ir::BooleanConstant >( true ) )
const auto& variables =
fetch< LST::VariableDefinitions, LST::VariableDefinition, AST::VariableDefinition >(
node.variables() );
const auto& universe = fetch< LST::Expression >( node.universe() );
const auto& condition = fetch< LST::Expression >( node.condition() );
const auto& rule = fetch< LST::Rule >( node.rule() );
store< LST::ForallRule >( node, variables, universe, condition, rule );
}

void AstToLstVisitor::visit( ChooseRule& node )
{
const auto& variables =
fetch< LST::VariableDefinitions, LST::VariableDefinition, AST::VariableDefinition >(
node.variables() );
const auto& universe = fetch< LST::Expression >( node.universe() );
const auto& rule = fetch< LST::Rule >( node.rule() );
store< LST::ChooseRule >( node, variables, universe, rule );
}

void AstToLstVisitor::visit( IterateRule& node )
{
const auto& rule = fetch< LST::Rule >( node.rule() );
store< LST::IterateRule >( node, rule );
}

void AstToLstVisitor::visit( BlockRule& node )
Expand Down Expand Up @@ -722,10 +800,15 @@ void AstToLstVisitor::visit( IdentifierPath& node )

void AstToLstVisitor::visit( ExpressionCase& node )
{
const auto& expression = fetch< LST::Expression >( node.expression() );
const auto& rule = fetch< LST::Rule >( node.rule() );
store< LST::ExpressionCase >( node, expression, rule );
}

void AstToLstVisitor::visit( DefaultCase& node )
{
const auto& rule = fetch< LST::Rule >( node.rule() );
store< LST::DefaultCase >( node, rule );
}

void AstToLstVisitor::visit( VariableBinding& node )
Expand Down