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);
    }