Static specialization done

This commit is contained in:
Michael Schimmel
2025-11-19 21:22:01 +01:00
parent d0d1053faf
commit ae10f4eee0
3 changed files with 99 additions and 235 deletions
+76 -223
View File
@@ -16,24 +16,34 @@
}
],
"Body": {
"NodeType": "BinaryExpr",
"Operator": "+",
"Left": {
"NodeType": "BinaryExpr",
"Operator": "+",
"Left": {
"NodeType": "Identifier",
"Name": "a"
},
"Right": {
"NodeType": "Identifier",
"Name": "b"
}
},
"Right": {
"NodeType": "FunctionCall",
"Callee": {
"NodeType": "Identifier",
"Name": "c"
}
"Name": "+"
},
"Arguments": [
{
"NodeType": "FunctionCall",
"Callee": {
"NodeType": "Identifier",
"Name": "+"
},
"Arguments": [
{
"NodeType": "Identifier",
"Name": "a"
},
{
"NodeType": "Identifier",
"Name": "b"
}
]
},
{
"NodeType": "Identifier",
"Name": "c"
}
]
}
},
"repeat": {
@@ -74,22 +84,27 @@
"Body": {
"NodeType": "IfExpr",
"Condition": {
"NodeType": "BinaryExpr",
"Operator": ">",
"Left": {
"NodeType": "FunctionCall",
"Callee": {
"NodeType": "Identifier",
"Name": "counter"
"Name": ">"
},
"Right": {
"NodeType": "Constant",
"Value": {
"Kind": "Scalar",
"Arguments": [
{
"NodeType": "Identifier",
"Name": "counter"
},
{
"NodeType": "Constant",
"Value": {
"Kind": "Ordinal",
"Value": 0
"Kind": "Scalar",
"Value": {
"Kind": "Ordinal",
"Value": 0
}
}
}
}
]
},
"ThenBranch": {
"NodeType": "Block",
@@ -105,22 +120,27 @@
"NodeType": "Recur",
"Arguments": [
{
"NodeType": "BinaryExpr",
"Operator": "-",
"Left": {
"NodeType": "FunctionCall",
"Callee": {
"NodeType": "Identifier",
"Name": "counter"
"Name": "-"
},
"Right": {
"NodeType": "Constant",
"Value": {
"Kind": "Scalar",
"Arguments": [
{
"NodeType": "Identifier",
"Name": "counter"
},
{
"NodeType": "Constant",
"Value": {
"Kind": "Ordinal",
"Value": 1
"Kind": "Scalar",
"Value": {
"Kind": "Ordinal",
"Value": 1
}
}
}
}
]
}
]
}
@@ -128,8 +148,7 @@
},
"ElseBranch": {
"NodeType": "Block",
"Expressions": [
]
"Expressions": []
}
}
}
@@ -483,8 +502,21 @@
"Name": "series"
},
"Index": {
"NodeType": "Identifier",
"Name": "len"
"NodeType": "FunctionCall",
"Callee": {
"NodeType": "Identifier",
"Name": "-"
},
"Arguments": [
{
"NodeType": "Identifier",
"Name": "count"
},
{
"NodeType": "Identifier",
"Name": "len"
}
]
}
}
]
@@ -632,185 +664,6 @@
}
}
},
{
"NodeType": "VarDecl",
"Identifier": {
"NodeType": "Identifier",
"Name": "sum-product"
},
"Initializer": {
"NodeType": "LambdaExpr",
"Parameters": [
{
"NodeType": "Identifier",
"Name": "xs"
},
{
"NodeType": "Identifier",
"Name": "ys"
}
],
"Body": {
"NodeType": "Block",
"Expressions": [
{
"NodeType": "VarDecl",
"Identifier": {
"NodeType": "Identifier",
"Name": "loop"
},
"Initializer": {
"NodeType": "LambdaExpr",
"Parameters": [
{
"NodeType": "Identifier",
"Name": "i"
},
{
"NodeType": "Identifier",
"Name": "acc"
}
],
"Body": {
"NodeType": "IfExpr",
"Condition": {
"NodeType": "FunctionCall",
"Callee": {
"NodeType": "Identifier",
"Name": "="
},
"Arguments": [
{
"NodeType": "Identifier",
"Name": "i"
},
{
"NodeType": "FunctionCall",
"Callee": {
"NodeType": "Identifier",
"Name": "series-count"
},
"Arguments": [
{
"NodeType": "Identifier",
"Name": "xs"
}
]
}
]
},
"ThenBranch": {
"NodeType": "Identifier",
"Name": "acc"
},
"ElseBranch": {
"NodeType": "Recur",
"Arguments": [
{
"NodeType": "FunctionCall",
"Callee": {
"NodeType": "Identifier",
"Name": "+"
},
"Arguments": [
{
"NodeType": "Identifier",
"Name": "i"
},
{
"NodeType": "Constant",
"Value": {
"Kind": "Scalar",
"Value": {
"Kind": "Ordinal",
"Value": 1
}
}
}
]
},
{
"NodeType": "FunctionCall",
"Callee": {
"NodeType": "Identifier",
"Name": "+"
},
"Arguments": [
{
"NodeType": "Identifier",
"Name": "acc"
},
{
"NodeType": "FunctionCall",
"Callee": {
"NodeType": "Identifier",
"Name": "*"
},
"Arguments": [
{
"NodeType": "Indexer",
"Base": {
"NodeType": "Identifier",
"Name": "xs"
},
"Index": {
"NodeType": "Identifier",
"Name": "i"
}
},
{
"NodeType": "Indexer",
"Base": {
"NodeType": "Identifier",
"Name": "ys"
},
"Index": {
"NodeType": "Identifier",
"Name": "i"
}
}
]
}
]
}
]
}
}
}
},
{
"NodeType": "FunctionCall",
"Callee": {
"NodeType": "Identifier",
"Name": "loop"
},
"Arguments": [
{
"NodeType": "Constant",
"Value": {
"Kind": "Scalar",
"Value": {
"Kind": "Ordinal",
"Value": 0
}
}
},
{
"NodeType": "Constant",
"Value": {
"Kind": "Scalar",
"Value": {
"Kind": "Ordinal",
"Value": 0
}
}
}
]
}
]
}
}
},
{
"NodeType": "VarDecl",
"Identifier": {
@@ -1035,7 +888,7 @@
},
{
"NodeType": "Identifier",
"Name": "sum-y"
"Name": "sum-x"
}
]
}