bool VariableDeclarationNode::parseVariable(Parser& parser, VariableDeclarationNode& node, bool global) { // Here's the form of a variable declaration: // (<type>) var (= <expression>)\n // TODO: this is fairly messy node._name = parser.parseTypeIdentifierPair(node._declaredType); if (node._name.size() == 0) { return false; } node._declaredType.setLabel(node._name); if (parser.helper()->nextIf(Token::Type::OperatorAssign)) { node._initializerExpression = parser.parseExpression(); } node._variable = new Variable(); if (global) { // apply the namespace here QualifiedName qualifiedName = parser.context()->scope()->fullNamespace(); qualifiedName.setName(node.name()); node._variable->name = qualifiedName; } else { node._variable->name.setName(node.name()); } node._variable->type = node.dataType(); node._variable->global = global; // make this variable scoped *only* if it is not global return parser.context()->defineVariable(node._variable, global == false); }