Exemplo n.º 1
0
 def emitICONST(self, i):
     # i: Int
     if i == -1:
         return JasminCode.INDENT + "iconst_ml" + JasminCode.END
     elif i >= 0 or i <= 5:
         return JasminCode.INDENT + "iconst_" + str(i) + JasminCode.END
     else:
         raise IllegalOperandException(str(i))
Exemplo n.º 2
0
    def emitWRITEVAR2(self, name, typ, frame):
        # name: String
        # typ: Type
        # frame: Frame
        # ..., value -> ...

        # frame.push()
        raise IllegalOperandException(name)
Exemplo n.º 3
0
 def emitFCONST(self, i):
     # i: String
     if i == "0.0":
         return JasminCode.INDENT + "fconst_0" + JasminCode.END
     elif i == "1.0":
         return JasminCode.INDENT + "fconst_1" + JasminCode.END
     elif i == "2.0":
         return JasminCode.INDENT + "fconst_2" + JasminCode.END
     else:
         raise IllegalOperandException(i)
Exemplo n.º 4
0
    def emitALOAD(self, in_, frame):
        # in_: Type
        # frame: Frame
        # ..., arrayref, index, value -> ...

        frame.pop()
        if isinstance(in_, IntType):
            return self.jvm.emitIALOAD()
        elif isinstance(in_, ArrayPointerType) or\
                isinstance(in_, ClassType) or\
                isinstance(in_, StringType):
            return self.jvm.emitAALOAD()
        else:
            raise IllegalOperandException(str(in_))
Exemplo n.º 5
0
    def emitPUSHCONST(self, in_, typ, frame):
        # in_: String
        # typ: Type
        # frame: Frame

        if isinstance(typ, IntType):
            return self.emitPUSHICONST(in_, frame)
        elif isinstance(typ, BoolType):
            return self.emitPUSHICONST(in_, frame)
        elif isinstance(typ, StringType):
            frame.push()
            return self.jvm.emitLDC(in_)
        else:
            raise IllegalOperandException(in_)
Exemplo n.º 6
0
    def emitREADVAR(self, name, inType, index, frame):
        # name: String
        # inType: Type
        # index: Int
        # frame: Frame
        # ... -> ..., value

        frame.push()
        if isinstance(inType, (IntType, BoolType)):
            return self.jvm.emitILOAD(index)
        elif isinstance(inType, FloatType):
            return self.jvm.emitFLOAD(index)
        elif isinstance(inType, ArrayPointerType) or\
                isinstance(inType, ClassType) or\
                isinstance(inType, StringType):
            return self.jvm.emitALOAD(index)
        else:
            raise IllegalOperandException(name)
Exemplo n.º 7
0
    def emitWRITEVAR(self, name, inType, index, frame):
        # name: String
        # inType: Type
        # index: Int
        # frame: Frame
        # ..., value -> ...

        frame.pop()

        if isinstance(inType, (IntType, BoolType)):
            return self.jvm.emitISTORE(index)
        elif isinstance(inType, FloatType):
            return self.jvm.emitFSTORE(index)
        elif isinstance(inType, ArrayPointerType) or\
                isinstance(inType, ClassType) or\
                isinstance(inType, StringType):
            return self.jvm.emitASTORE(index)
        else:
            raise IllegalOperandException(name)
Exemplo n.º 8
0
 def emitSIPUSH(self, i):
     # i: Int
     if (i >= -32768 and i < -128) or (i > 127 and i <= 32767):
         return JasminCode.INDENT + "sipush " + str(i) + JasminCode.END
     else:
         raise IllegalOperandException(str(i))
Exemplo n.º 9
0
 def emitBIPUSH(self, i):
     # i: Int
     if (i >= -128 and i < -1) or (i > 5 and i <= 127):
         return JasminCode.INDENT + "bipush " + str(i) + JasminCode.END
     else:
         raise IllegalOperandException(str(i))