def array(node: ASTNode, _): if Types.isAtomic(node.left): node.left.value = [node.left.value] node.value = node.left.value node.value.append(node.right.value) isLooselyNumeric = lambda type: type == Types.NUMERICARRAY or type == Types.INTARRAY isNumericBool = lambda type: type == Types.INTARRAY or type == Types.NUMERICARRAY or type == Types.BOOLEANARRAY or type == Types.NUMERIC_BOOL_ARR if Types.isAtomic(node.left): ltype = Types.getArrayTypeBasedOnAtomic(node.left) else: ltype = node.left.dataType rtype = Types.getArrayTypeBasedOnAtomic(node.right) if ltype == rtype: node.dataType = ltype elif isLooselyNumeric(ltype) and isLooselyNumeric(rtype): node.dataType = Types.NUMERICARRAY elif isNumericBool(ltype) and isNumericBool(rtype): node.dataType = Types.NUMERIC_BOOL_ARR
def array_sep(node: ASTNode): left, right = node.left, node.right status, err = None, None isLooselyNumeric = lambda type: type == TypeChecker.NUMERICARRAY or type == TypeChecker.INTARRAY isNumericBool = lambda type: type == TypeChecker.INTARRAY or type == TypeChecker.NUMERICARRAY or type == TypeChecker.BOOLEANARRAY or type == TypeChecker.NUMERIC_BOOL_ARR if TypeChecker.isAtomic(left): ltype = TypeChecker.getArrayTypeBasedOnAtomic(left) else: ltype = left.dataType rtype = TypeChecker.getArrayTypeBasedOnAtomic(right) if ltype == rtype: node.dataType = ltype status = True elif isLooselyNumeric(ltype) and isLooselyNumeric(rtype): node.dataType = TypeChecker.NUMERICARRAY status = True elif isNumericBool(ltype) and isNumericBool(rtype): node.dataType = TypeChecker.NUMERIC_BOOL_ARR status = True else: status = False err = f"Array cannot hold different types: {TypeChecker.getAtomicTypeBasedOnArray(ltype)} and {TypeChecker.getAtomicTypeBasedOnArray(rtype)}" return Result(status, err)