projects
/
fur
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Start implementing functions
[fur]
/
desugaring.py
diff --git
a/desugaring.py
b/desugaring.py
index
c951fd5
..
28d1a78
100644
(file)
--- a/
desugaring.py
+++ b/
desugaring.py
@@
-2,6
+2,14
@@
import collections
import parsing
import parsing
+DesugaredBuiltinExpression = collections.namedtuple(
+ 'DesugaredBuiltinExpression',
+ (
+ 'metadata',
+ 'symbol',
+ ),
+)
+
DesugaredFunctionCallExpression = collections.namedtuple(
'DesugaredFunctionCallExpression',
(
DesugaredFunctionCallExpression = collections.namedtuple(
'DesugaredFunctionCallExpression',
(
@@
-27,14
+35,22
@@
DesugaredIntegerLiteralExpression = collections.namedtuple(
),
)
),
)
-DesugaredLambdaExpression = collections.namedtuple(
+
_
DesugaredLambdaExpression = collections.namedtuple(
'DesugaredLambdaExpression',
(
'DesugaredLambdaExpression',
(
+ 'name',
'argument_name_list',
'statement_list',
),
)
'argument_name_list',
'statement_list',
),
)
+class DesugaredLambdaExpression(_DesugaredLambdaExpression):
+ def __new__(cls, *args, **kwargs):
+ if 'name' not in kwargs:
+ kwargs['name'] = None
+
+ return super(DesugaredLambdaExpression, cls).__new__(cls, *args, **kwargs)
+
DesugaredListLiteralExpression = collections.namedtuple(
'DesugaredListLiteralExpression',
(
DesugaredListLiteralExpression = collections.namedtuple(
'DesugaredListLiteralExpression',
(
@@
-87,15
+103,6
@@
DesugaredExpressionStatement = collections.namedtuple(
),
)
),
)
-DesugaredFunctionDefinitionStatement = collections.namedtuple(
- 'DesugaredFunctionDefinitionStatement',
- (
- 'name',
- 'argument_name_list',
- 'statement_list',
- ),
-)
-
DesugaredProgram = collections.namedtuple(
'DesugaredProgram',
(
DesugaredProgram = collections.namedtuple(
'DesugaredProgram',
(
@@
-180,7
+187,7
@@
def desugar_infix_expression(expression):
return DesugaredFunctionCallExpression(
metadata=expression.metadata,
return DesugaredFunctionCallExpression(
metadata=expression.metadata,
- function=Desugared
Symbol
Expression(
+ function=Desugared
Builtin
Expression(
metadata=expression.metadata,
symbol=function,
),
metadata=expression.metadata,
symbol=function,
),
@@
-204,7
+211,7
@@
def desugar_lambda_expression(expression):
def desugar_list_item_expression(expression):
return DesugaredFunctionCallExpression(
metadata=expression.metadata,
def desugar_list_item_expression(expression):
return DesugaredFunctionCallExpression(
metadata=expression.metadata,
- function=Desugared
Symbol
Expression(
+ function=Desugared
Builtin
Expression(
metadata=expression.metadata,
symbol='__get__',
),
metadata=expression.metadata,
symbol='__get__',
),
@@
-222,7
+229,7
@@
def desugar_list_literal_expression(expression):
def desugar_negation_expression(expression):
return DesugaredFunctionCallExpression(
metadata=expression.metadata,
def desugar_negation_expression(expression):
return DesugaredFunctionCallExpression(
metadata=expression.metadata,
- function=Desugared
Symbol
Expression(
+ function=Desugared
Builtin
Expression(
metadata=expression.metadata,
symbol='__negate__',
),
metadata=expression.metadata,
symbol='__negate__',
),
@@
-279,10
+286,13
@@
def desugar_expression_statement(statement):
)
def desugar_function_definition_statement(statement):
)
def desugar_function_definition_statement(statement):
- return DesugaredFunctionDefinitionStatement(
- name=statement.name,
- argument_name_list=statement.argument_name_list,
- statement_list=tuple(desugar_statement(s) for s in statement.statement_list),
+ return DesugaredAssignmentStatement(
+ target=statement.name,
+ expression=DesugaredLambdaExpression(
+ name=statement.name,
+ argument_name_list=statement.argument_name_list,
+ statement_list=tuple(desugar_statement(s) for s in statement.statement_list),
+ ),
)
def desugar_statement(statement):
)
def desugar_statement(statement):