Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
godot
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
community
godot
Commits
a128dd97
Unverified
Commit
a128dd97
authored
May 10, 2020
by
Rémi Verschelde
Committed by
GitHub
May 10, 2020
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #37020 from aaronfranke/range
Allow using integer vectors for iteration and make range() use them
parents
4686963e
cf4482e8
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
105 additions
and
49 deletions
+105
-49
variant_op.cpp
core/variant_op.cpp
+96
-40
gdscript_parser.cpp
modules/gdscript/gdscript_parser.cpp
+8
-8
gdscript_parser.h
modules/gdscript/gdscript_parser.h
+1
-1
No files found.
core/variant_op.cpp
View file @
a128dd97
...
...
@@ -78,38 +78,38 @@
#define TYPE(PREFIX, OP, TYPE) &&PREFIX##_##OP##_##TYPE
/* clang-format off */
#define TYPES(PREFIX, OP) { \
TYPE(PREFIX, OP, NIL), \
TYPE(PREFIX, OP, BOOL), \
TYPE(PREFIX, OP, INT), \
TYPE(PREFIX, OP, FLOAT), \
TYPE(PREFIX, OP, STRING), \
TYPE(PREFIX, OP, VECTOR2), \
TYPE(PREFIX, OP, VECTOR2I), \
TYPE(PREFIX, OP, RECT2), \
TYPE(PREFIX, OP, RECT2I),
\
TYPE(PREFIX, OP, VECTOR3), \
TYPE(PREFIX, OP, VECTOR3I),
\
TYPE(PREFIX, OP, TRANSFORM2D), \
TYPE(PREFIX, OP, PLANE), \
TYPE(PREFIX, OP, QUAT), \
TYPE(PREFIX, OP, AABB), \
TYPE(PREFIX, OP, BASIS), \
TYPE(PREFIX, OP, TRANSFORM), \
TYPE(PREFIX, OP, COLOR), \
#define TYPES(PREFIX, OP) {
\
TYPE(PREFIX, OP, NIL),
\
TYPE(PREFIX, OP, BOOL),
\
TYPE(PREFIX, OP, INT),
\
TYPE(PREFIX, OP, FLOAT),
\
TYPE(PREFIX, OP, STRING),
\
TYPE(PREFIX, OP, VECTOR2),
\
TYPE(PREFIX, OP, VECTOR2I),
\
TYPE(PREFIX, OP, RECT2),
\
TYPE(PREFIX, OP, RECT2I),
\
TYPE(PREFIX, OP, VECTOR3),
\
TYPE(PREFIX, OP, VECTOR3I),
\
TYPE(PREFIX, OP, TRANSFORM2D),
\
TYPE(PREFIX, OP, PLANE),
\
TYPE(PREFIX, OP, QUAT),
\
TYPE(PREFIX, OP, AABB),
\
TYPE(PREFIX, OP, BASIS),
\
TYPE(PREFIX, OP, TRANSFORM),
\
TYPE(PREFIX, OP, COLOR),
\
TYPE(PREFIX, OP, STRING_NAME), \
TYPE(PREFIX, OP, NODE_PATH), \
TYPE(PREFIX, OP, _RID), \
TYPE(PREFIX, OP, OBJECT), \
TYPE(PREFIX, OP, NODE_PATH),
\
TYPE(PREFIX, OP, _RID),
\
TYPE(PREFIX, OP, OBJECT),
\
TYPE(PREFIX, OP, CALLABLE), \
TYPE(PREFIX, OP, SIGNAL), \
TYPE(PREFIX, OP, DICTIONARY), \
TYPE(PREFIX, OP, ARRAY), \
TYPE(PREFIX, OP, SIGNAL),
\
TYPE(PREFIX, OP, DICTIONARY),
\
TYPE(PREFIX, OP, ARRAY),
\
TYPE(PREFIX, OP, PACKED_BYTE_ARRAY), \
TYPE(PREFIX, OP, PACKED_INT32_ARRAY),
\
TYPE(PREFIX, OP, PACKED_INT64_ARRAY),
\
TYPE(PREFIX, OP, PACKED_FLOAT32_ARRAY),
\
TYPE(PREFIX, OP, PACKED_FLOAT64_ARRAY),
\
TYPE(PREFIX, OP, PACKED_INT32_ARRAY), \
TYPE(PREFIX, OP, PACKED_INT64_ARRAY), \
TYPE(PREFIX, OP, PACKED_FLOAT32_ARRAY), \
TYPE(PREFIX, OP, PACKED_FLOAT64_ARRAY), \
TYPE(PREFIX, OP, PACKED_STRING_ARRAY), \
TYPE(PREFIX, OP, PACKED_VECTOR2_ARRAY), \
TYPE(PREFIX, OP, PACKED_VECTOR3_ARRAY), \
...
...
@@ -3458,17 +3458,39 @@ bool Variant::iter_init(Variant &r_iter, bool &valid) const {
return
_data
.
_float
>
0.0
;
}
break
;
case
VECTOR2
:
{
int64_t
from
=
reinterpret_cast
<
const
Vector2
*>
(
_data
.
_mem
)
->
x
;
int64_t
to
=
reinterpret_cast
<
const
Vector2
*>
(
_data
.
_mem
)
->
y
;
double
from
=
reinterpret_cast
<
const
Vector2
*>
(
_data
.
_mem
)
->
x
;
double
to
=
reinterpret_cast
<
const
Vector2
*>
(
_data
.
_mem
)
->
y
;
r_iter
=
from
;
return
from
<
to
;
}
break
;
case
VECTOR2I
:
{
int64_t
from
=
reinterpret_cast
<
const
Vector2i
*>
(
_data
.
_mem
)
->
x
;
int64_t
to
=
reinterpret_cast
<
const
Vector2i
*>
(
_data
.
_mem
)
->
y
;
r_iter
=
from
;
return
from
<
to
;
}
break
;
case
VECTOR3
:
{
int64_t
from
=
reinterpret_cast
<
const
Vector3
*>
(
_data
.
_mem
)
->
x
;
int64_t
to
=
reinterpret_cast
<
const
Vector3
*>
(
_data
.
_mem
)
->
y
;
int64_t
step
=
reinterpret_cast
<
const
Vector3
*>
(
_data
.
_mem
)
->
z
;
double
from
=
reinterpret_cast
<
const
Vector3
*>
(
_data
.
_mem
)
->
x
;
double
to
=
reinterpret_cast
<
const
Vector3
*>
(
_data
.
_mem
)
->
y
;
double
step
=
reinterpret_cast
<
const
Vector3
*>
(
_data
.
_mem
)
->
z
;
r_iter
=
from
;
if
(
from
==
to
)
{
return
false
;
}
else
if
(
from
<
to
)
{
return
step
>
0
;
}
return
step
<
0
;
}
break
;
case
VECTOR3I
:
{
int64_t
from
=
reinterpret_cast
<
const
Vector3i
*>
(
_data
.
_mem
)
->
x
;
int64_t
to
=
reinterpret_cast
<
const
Vector3i
*>
(
_data
.
_mem
)
->
y
;
int64_t
step
=
reinterpret_cast
<
const
Vector3i
*>
(
_data
.
_mem
)
->
z
;
r_iter
=
from
;
...
...
@@ -3476,10 +3498,8 @@ bool Variant::iter_init(Variant &r_iter, bool &valid) const {
return
false
;
}
else
if
(
from
<
to
)
{
return
step
>
0
;
}
else
{
return
step
<
0
;
}
//return true
;
return
step
<
0
;
}
break
;
case
OBJECT
:
{
...
...
@@ -3640,7 +3660,19 @@ bool Variant::iter_next(Variant &r_iter, bool &valid) const {
return
true
;
}
break
;
case
VECTOR2
:
{
int64_t
to
=
reinterpret_cast
<
const
Vector2
*>
(
_data
.
_mem
)
->
y
;
double
to
=
reinterpret_cast
<
const
Vector2
*>
(
_data
.
_mem
)
->
y
;
double
idx
=
r_iter
;
idx
++
;
if
(
idx
>=
to
)
return
false
;
r_iter
=
idx
;
return
true
;
}
break
;
case
VECTOR2I
:
{
int64_t
to
=
reinterpret_cast
<
const
Vector2i
*>
(
_data
.
_mem
)
->
y
;
int64_t
idx
=
r_iter
;
idx
++
;
...
...
@@ -3652,8 +3684,24 @@ bool Variant::iter_next(Variant &r_iter, bool &valid) const {
return
true
;
}
break
;
case
VECTOR3
:
{
int64_t
to
=
reinterpret_cast
<
const
Vector3
*>
(
_data
.
_mem
)
->
y
;
int64_t
step
=
reinterpret_cast
<
const
Vector3
*>
(
_data
.
_mem
)
->
z
;
double
to
=
reinterpret_cast
<
const
Vector3
*>
(
_data
.
_mem
)
->
y
;
double
step
=
reinterpret_cast
<
const
Vector3
*>
(
_data
.
_mem
)
->
z
;
double
idx
=
r_iter
;
idx
+=
step
;
if
(
step
<
0
&&
idx
<=
to
)
return
false
;
if
(
step
>
0
&&
idx
>=
to
)
return
false
;
r_iter
=
idx
;
return
true
;
}
break
;
case
VECTOR3I
:
{
int64_t
to
=
reinterpret_cast
<
const
Vector3i
*>
(
_data
.
_mem
)
->
y
;
int64_t
step
=
reinterpret_cast
<
const
Vector3i
*>
(
_data
.
_mem
)
->
z
;
int64_t
idx
=
r_iter
;
idx
+=
step
;
...
...
@@ -3844,10 +3892,18 @@ Variant Variant::iter_get(const Variant &r_iter, bool &r_valid) const {
return
r_iter
;
}
break
;
case
VECTOR2I
:
{
return
r_iter
;
}
break
;
case
VECTOR3
:
{
return
r_iter
;
}
break
;
case
VECTOR3I
:
{
return
r_iter
;
}
break
;
case
OBJECT
:
{
if
(
!
_get_obj
().
obj
)
{
...
...
modules/gdscript/gdscript_parser.cpp
View file @
a128dd97
...
...
@@ -3182,9 +3182,9 @@ void GDScriptParser::_parse_block(BlockNode *p_block, bool p_static) {
ConstantNode
*
cn
=
alloc_node
<
ConstantNode
>
();
switch
(
args
.
size
())
{
case
1
:
cn
->
value
=
(
int
)
constants
[
0
];
break
;
case
2
:
cn
->
value
=
Vector2
(
constants
[
0
],
constants
[
1
]);
break
;
case
3
:
cn
->
value
=
Vector3
(
constants
[
0
],
constants
[
1
],
constants
[
2
]);
break
;
case
1
:
cn
->
value
=
(
int
64_t
)
constants
[
0
];
break
;
case
2
:
cn
->
value
=
Vector2
i
(
constants
[
0
],
constants
[
1
]);
break
;
case
3
:
cn
->
value
=
Vector3
i
(
constants
[
0
],
constants
[
1
],
constants
[
2
]);
break
;
}
cn
->
datatype
=
_type_from_variant
(
cn
->
value
);
container
=
cn
;
...
...
@@ -3197,8 +3197,8 @@ void GDScriptParser::_parse_block(BlockNode *p_block, bool p_static) {
switch
(
args
.
size
())
{
case
1
:
tn
->
vtype
=
Variant
::
INT
;
break
;
case
2
:
tn
->
vtype
=
Variant
::
VECTOR2
;
break
;
case
3
:
tn
->
vtype
=
Variant
::
VECTOR3
;
break
;
case
2
:
tn
->
vtype
=
Variant
::
VECTOR2
I
;
break
;
case
3
:
tn
->
vtype
=
Variant
::
VECTOR3
I
;
break
;
}
for
(
int
i
=
0
;
i
<
args
.
size
();
i
++
)
{
...
...
@@ -7820,7 +7820,7 @@ void GDScriptParser::_check_class_level_types(ClassNode *p_class) {
ConstantNode
*
tgt_type
=
alloc_node
<
ConstantNode
>
();
tgt_type
->
line
=
v
.
line
;
tgt_type
->
value
=
(
int
)
v
.
data_type
.
builtin_type
;
tgt_type
->
value
=
(
int
64_t
)
v
.
data_type
.
builtin_type
;
OperatorNode
*
convert_call
=
alloc_node
<
OperatorNode
>
();
convert_call
->
line
=
v
.
line
;
...
...
@@ -8197,7 +8197,7 @@ void GDScriptParser::_check_block_types(BlockNode *p_block) {
ConstantNode
*
tgt_type
=
alloc_node
<
ConstantNode
>
();
tgt_type
->
line
=
lv
->
line
;
tgt_type
->
value
=
(
int
)
lv
->
datatype
.
builtin_type
;
tgt_type
->
value
=
(
int
64_t
)
lv
->
datatype
.
builtin_type
;
tgt_type
->
datatype
=
_type_from_variant
(
tgt_type
->
value
);
OperatorNode
*
convert_call
=
alloc_node
<
OperatorNode
>
();
...
...
@@ -8802,7 +8802,7 @@ int GDScriptParser::get_completion_argument_index() {
return
completion_argument
;
}
int
GDScriptParser
::
get_completion_identifier_is_function
()
{
bool
GDScriptParser
::
get_completion_identifier_is_function
()
{
return
completion_ident_is_call
;
}
...
...
modules/gdscript/gdscript_parser.h
View file @
a128dd97
...
...
@@ -684,7 +684,7 @@ public:
BlockNode
*
get_completion_block
();
FunctionNode
*
get_completion_function
();
int
get_completion_argument_index
();
int
get_completion_identifier_is_function
();
bool
get_completion_identifier_is_function
();
const
List
<
String
>
&
get_dependencies
()
const
{
return
dependencies
;
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment