diff options
| author | Karroffel | 2016-09-30 21:40:31 +0200 |
|---|---|---|
| committer | karroffel | 2017-01-11 04:39:55 +0100 |
| commit | f8a7c462736bf886adc8bc3bbf424d534391d3dc (patch) | |
| tree | 7eaa31f70eb4bd224c3c9c0e02bfe962f96a7c8c /modules/gdscript/gd_parser.h | |
| parent | 20c7b65b7e3630ada9f2e8b6b64926ec05d68c4c (diff) | |
| download | godot-f8a7c462736bf886adc8bc3bbf424d534391d3dc.tar.gz godot-f8a7c462736bf886adc8bc3bbf424d534391d3dc.tar.zst godot-f8a7c462736bf886adc8bc3bbf424d534391d3dc.zip | |
Diffstat (limited to 'modules/gdscript/gd_parser.h')
| -rw-r--r-- | modules/gdscript/gd_parser.h | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/modules/gdscript/gd_parser.h b/modules/gdscript/gd_parser.h index 75653e091..f36cb8a73 100644 --- a/modules/gdscript/gd_parser.h +++ b/modules/gdscript/gd_parser.h @@ -257,6 +257,31 @@ public: Vector<Node*> arguments; OperatorNode() { type=TYPE_OPERATOR; } }; + + + struct PatternNode : public Node { + + enum PatternType { + PT_CONSTANT, + PT_BIND, + PT_DICITIONARY, + PT_ARRAY, + PT_IGNORE_REST + }; + + PatternType pt_type; + + ConstantNode *constant; + StringName bind; + Map<ConstantNode*, PatternNode*> dictionary; + Vector<PatternNode*> array; + + }; + + struct PatternBranchNode : public Node { + PatternNode *pattern; + BlockNode *body; + }; struct ControlFlowNode : public Node { enum CFType { @@ -266,13 +291,15 @@ public: CF_SWITCH, CF_BREAK, CF_CONTINUE, - CF_RETURN + CF_RETURN, + CF_MATCH }; CFType cf_type; Vector<Node*> arguments; BlockNode *body; BlockNode *body_else; + Vector<PatternBranchNode*> branches; ControlFlowNode *_else; //used for if ControlFlowNode() { type=TYPE_CONTROL_FLOW; cf_type=CF_IF; body=NULL; body_else=NULL;} @@ -450,6 +477,13 @@ private: Node* _reduce_expression(Node *p_node,bool p_to_const=false); Node* _parse_and_reduce_expression(Node *p_parent,bool p_static,bool p_reduce_const=false,bool p_allow_assign=false); + + // TODO + void _parse_pattern_block(Vector<PatternBranchNode*> &p_block, bool p_static); + + PatternNode *_parse_pattern(bool p_static); + + void _parse_block(BlockNode *p_block,bool p_static); void _parse_extends(ClassNode *p_class); void _parse_class(ClassNode *p_class); |
