Fix for the lambda assignment issue.
Refs #27.
This commit is contained in:
37
ASTree.cpp
37
ASTree.cpp
@@ -1,3 +1,4 @@
|
|||||||
|
#include <cstring>
|
||||||
#include "ASTree.h"
|
#include "ASTree.h"
|
||||||
#include "FastStack.h"
|
#include "FastStack.h"
|
||||||
#include "pyc_numeric.h"
|
#include "pyc_numeric.h"
|
||||||
@@ -2511,13 +2512,24 @@ void print_src(PycRef<ASTNode> node, PycModule* mod)
|
|||||||
PycRef<ASTNode> src = node.cast<ASTStore>()->src();
|
PycRef<ASTNode> src = node.cast<ASTStore>()->src();
|
||||||
PycRef<ASTNode> dest = node.cast<ASTStore>()->dest();
|
PycRef<ASTNode> dest = node.cast<ASTStore>()->dest();
|
||||||
if (src->type() == ASTNode::NODE_FUNCTION) {
|
if (src->type() == ASTNode::NODE_FUNCTION) {
|
||||||
fprintf(pyc_output, "\n");
|
|
||||||
start_line(cur_indent);
|
|
||||||
fprintf(pyc_output, "def ");
|
|
||||||
print_src(dest, mod);
|
|
||||||
fprintf(pyc_output, "(");
|
|
||||||
PycRef<ASTNode> code = src.cast<ASTFunction>()->code();
|
PycRef<ASTNode> code = src.cast<ASTFunction>()->code();
|
||||||
PycRef<PycCode> code_src = code.cast<ASTObject>()->object().cast<PycCode>();
|
PycRef<PycCode> code_src = code.cast<ASTObject>()->object().cast<PycCode>();
|
||||||
|
bool isLambda = false;
|
||||||
|
|
||||||
|
if (strncmp(code_src->name()->value(), "<lambda>", 8) == 0) {
|
||||||
|
fprintf(pyc_output, "\n");
|
||||||
|
start_line(cur_indent);
|
||||||
|
print_src(dest, mod);
|
||||||
|
fprintf(pyc_output, " = lambda ");
|
||||||
|
isLambda = true;
|
||||||
|
} else {
|
||||||
|
fprintf(pyc_output, "\n");
|
||||||
|
start_line(cur_indent);
|
||||||
|
fprintf(pyc_output, "def ");
|
||||||
|
print_src(dest, mod);
|
||||||
|
fprintf(pyc_output, "(");
|
||||||
|
}
|
||||||
|
|
||||||
ASTFunction::defarg_t defargs = src.cast<ASTFunction>()->defargs();
|
ASTFunction::defarg_t defargs = src.cast<ASTFunction>()->defargs();
|
||||||
ASTFunction::defarg_t::iterator da = defargs.begin();
|
ASTFunction::defarg_t::iterator da = defargs.begin();
|
||||||
bool first = true;
|
bool first = true;
|
||||||
@@ -2548,9 +2560,20 @@ void print_src(PycRef<ASTNode> node, PycModule* mod)
|
|||||||
fprintf(pyc_output, "**%s", code_src->getVarName(idx)->value());
|
fprintf(pyc_output, "**%s", code_src->getVarName(idx)->value());
|
||||||
first = false;
|
first = false;
|
||||||
}
|
}
|
||||||
fprintf(pyc_output, "):\n");
|
|
||||||
printGlobals = true;
|
if (isLambda) {
|
||||||
|
fprintf(pyc_output, " : ");
|
||||||
|
} else {
|
||||||
|
fprintf(pyc_output, "):\n");
|
||||||
|
printGlobals = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool preLambda = inLambda;
|
||||||
|
inLambda |= isLambda;
|
||||||
|
|
||||||
print_src(code, mod);
|
print_src(code, mod);
|
||||||
|
|
||||||
|
inLambda = preLambda;
|
||||||
} else if (src->type() == ASTNode::NODE_CLASS) {
|
} else if (src->type() == ASTNode::NODE_CLASS) {
|
||||||
fprintf(pyc_output, "\n");
|
fprintf(pyc_output, "\n");
|
||||||
start_line(cur_indent);
|
start_line(cur_indent);
|
||||||
|
Reference in New Issue
Block a user