예제 #1
0
 def test_get_promoted_type(self):
     self.assertEqual((type_utils.INT, type_utils.CAST_LEFT_UP),
                      type_utils.get_promoted_type(type_utils.CHAR, type_utils.INT))
     self.assertEqual((type_utils.INT, type_utils.CAST_RIGHT_UP),
                      type_utils.get_promoted_type(type_utils.INT, type_utils.CHAR))
     self.assertEqual((type_utils.FLOAT, type_utils.CAST_LEFT_UP),
                      type_utils.get_promoted_type(type_utils.INT, type_utils.FLOAT))
     self.assertEqual((type_utils.UNSIGNED_CHAR, type_utils.CAST_LEFT_UP),
                      type_utils.get_promoted_type(type_utils.CHAR, type_utils.UNSIGNED_CHAR))
     self.assertEqual((type_utils.LONG, type_utils.CAST_UNAFFECTED),
                      type_utils.get_promoted_type(type_utils.LONG, type_utils.LONG))
예제 #2
0
 def test_get_promoted_type(self):
     self.assertEqual((type_utils.INT, type_utils.CAST_LEFT_UP),
                      type_utils.get_promoted_type(type_utils.CHAR,
                                                   type_utils.INT))
     self.assertEqual((type_utils.INT, type_utils.CAST_RIGHT_UP),
                      type_utils.get_promoted_type(type_utils.INT,
                                                   type_utils.CHAR))
     self.assertEqual((type_utils.FLOAT, type_utils.CAST_LEFT_UP),
                      type_utils.get_promoted_type(type_utils.INT,
                                                   type_utils.FLOAT))
     self.assertEqual(
         (type_utils.UNSIGNED_CHAR, type_utils.CAST_LEFT_UP),
         type_utils.get_promoted_type(type_utils.CHAR,
                                      type_utils.UNSIGNED_CHAR))
     self.assertEqual((type_utils.LONG, type_utils.CAST_UNAFFECTED),
                      type_utils.get_promoted_type(type_utils.LONG,
                                                   type_utils.LONG))
예제 #3
0
파일: ast_nodes.py 프로젝트: s-gogna/JST
    def get_resulting_type(self):
        lvalue_type = self.lvalue.get_resulting_type()
        rvalue_type = self.rvalue.get_resulting_type()

        # TODO (Shubham) We may just need to make a table according to operations
        # For example:
        #   Comparison operators always result in an integral type even though operands can be non-integrals
        #   Shift operators require an int on the left (right can be downcast to an int), so they result in an 'int'
        #   +/-/*/div operations result in a highest precision type
        #   Mod operation always has to return an integral type
        #   Bitwise AND, OR, and XOR require integers and have to return an integral type
        resulting_type, cast_result = type_utils.get_promoted_type(lvalue_type, rvalue_type)

        return resulting_type
예제 #4
0
    def get_resulting_type(self):
        lvalue_type = self.lvalue.get_resulting_type()
        rvalue_type = self.rvalue.get_resulting_type()

        # TODO (Shubham) We may just need to make a table according to operations
        # For example:
        #   Comparison operators always result in an integral type even though operands can be non-integrals
        #   Shift operators require an int on the left (right can be downcast to an int), so they result in an 'int'
        #   +/-/*/div operations result in a highest precision type
        #   Mod operation always has to return an integral type
        #   Bitwise AND, OR, and XOR require integers and have to return an integral type
        resulting_type, cast_result = type_utils.get_promoted_type(
            lvalue_type, rvalue_type)

        return resulting_type