Revert "Merge pull request #3814 from est31/iterators_for_for"
This reverts commitadf5056889, reversing changes made toee2bc87c0e.
This commit is contained in:
@ -32,7 +32,6 @@
|
||||
#include "reference.h"
|
||||
#include "gd_script.h"
|
||||
#include "func_ref.h"
|
||||
#include "range_iterator.h"
|
||||
#include "os/os.h"
|
||||
#include "variant_parser.h"
|
||||
#include "io/marshalls.h"
|
||||
@ -99,7 +98,6 @@ const char *GDFunctions::get_func_name(Function p_func) {
|
||||
"var2bytes",
|
||||
"bytes2var",
|
||||
"range",
|
||||
"xrange",
|
||||
"load",
|
||||
"inst2dict",
|
||||
"dict2inst",
|
||||
@ -817,81 +815,6 @@ void GDFunctions::call(Function p_func,const Variant **p_args,int p_arg_count,Va
|
||||
} break;
|
||||
}
|
||||
|
||||
} break;
|
||||
case GEN_XRANGE: {
|
||||
|
||||
switch(p_arg_count) {
|
||||
case 0: {
|
||||
r_error.error=Variant::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS;
|
||||
r_error.argument=1;
|
||||
} break;
|
||||
case 1: {
|
||||
|
||||
VALIDATE_ARG_NUM(0);
|
||||
|
||||
int count=*p_args[0];
|
||||
|
||||
Ref<RangeIterator> itr = Ref<RangeIterator>( memnew(RangeIterator) );
|
||||
if (!*itr) {
|
||||
ERR_EXPLAIN("Couldn't allocate iterator!");
|
||||
r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD;
|
||||
ERR_FAIL();
|
||||
}
|
||||
(*itr)->set_range(count);
|
||||
r_ret=Variant(itr);
|
||||
return;
|
||||
} break;
|
||||
case 2: {
|
||||
|
||||
VALIDATE_ARG_NUM(0);
|
||||
VALIDATE_ARG_NUM(1);
|
||||
|
||||
int from=*p_args[0];
|
||||
int to=*p_args[1];
|
||||
|
||||
Ref<RangeIterator> itr = Ref<RangeIterator>( memnew(RangeIterator) );
|
||||
if (!*itr) {
|
||||
ERR_EXPLAIN("Couldn't allocate iterator!");
|
||||
r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD;
|
||||
ERR_FAIL();
|
||||
}
|
||||
(*itr)->set_range(from, to);
|
||||
r_ret=Variant(itr);
|
||||
return;
|
||||
} break;
|
||||
case 3: {
|
||||
|
||||
VALIDATE_ARG_NUM(0);
|
||||
VALIDATE_ARG_NUM(1);
|
||||
VALIDATE_ARG_NUM(2);
|
||||
|
||||
int from=*p_args[0];
|
||||
int to=*p_args[1];
|
||||
int incr=*p_args[2];
|
||||
|
||||
if (incr==0) {
|
||||
ERR_EXPLAIN("step argument is zero!");
|
||||
r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD;
|
||||
ERR_FAIL();
|
||||
}
|
||||
|
||||
Ref<RangeIterator> itr = Ref<RangeIterator>( memnew(RangeIterator) );
|
||||
if (!*itr) {
|
||||
ERR_EXPLAIN("Couldn't allocate iterator!");
|
||||
r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD;
|
||||
ERR_FAIL();
|
||||
}
|
||||
(*itr)->set_range(from, to, incr);
|
||||
r_ret=Variant(itr);
|
||||
return;
|
||||
} break;
|
||||
default: {
|
||||
|
||||
r_error.error=Variant::CallError::CALL_ERROR_TOO_MANY_ARGUMENTS;
|
||||
r_error.argument=3;
|
||||
} break;
|
||||
}
|
||||
|
||||
} break;
|
||||
case RESOURCE_LOAD: {
|
||||
VALIDATE_ARG_COUNT(1);
|
||||
@ -1510,12 +1433,6 @@ MethodInfo GDFunctions::get_info(Function p_func) {
|
||||
mi.return_val.type=Variant::ARRAY;
|
||||
return mi;
|
||||
} break;
|
||||
case GEN_XRANGE: {
|
||||
|
||||
MethodInfo mi("xrange",PropertyInfo(Variant::NIL,"..."));
|
||||
mi.return_val.type=Variant::OBJECT;
|
||||
return mi;
|
||||
} break;
|
||||
case RESOURCE_LOAD: {
|
||||
|
||||
MethodInfo mi("load",PropertyInfo(Variant::STRING,"path"));
|
||||
|
||||
@ -92,7 +92,6 @@ public:
|
||||
VAR_TO_BYTES,
|
||||
BYTES_TO_VAR,
|
||||
GEN_RANGE,
|
||||
GEN_XRANGE,
|
||||
RESOURCE_LOAD,
|
||||
INST2DICT,
|
||||
DICT2INST,
|
||||
|
||||
@ -1779,20 +1779,6 @@ void GDParser::_parse_block(BlockNode *p_block,bool p_static) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Little optimisation for common usage "for i in range(...):":
|
||||
// don't create and initialize a possibly huge array as range()
|
||||
// would do, but instead create an iterator using xrange()
|
||||
if (container->type == Node::TYPE_OPERATOR) {
|
||||
OperatorNode *op = static_cast<OperatorNode *>(container);
|
||||
if (op->arguments.size() > 0 &&
|
||||
op->arguments[0]->type == Node::TYPE_BUILT_IN_FUNCTION) {
|
||||
BuiltInFunctionNode *c = static_cast<BuiltInFunctionNode *>(op->arguments[0]);
|
||||
if (c->function == GDFunctions::GEN_RANGE) {
|
||||
c->function = GDFunctions::GEN_XRANGE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ControlFlowNode *cf_for = alloc_node<ControlFlowNode>();
|
||||
|
||||
cf_for->cf_type=ControlFlowNode::CF_FOR;
|
||||
|
||||
Reference in New Issue
Block a user