src/interpreter: Clean uses of recvval in interpreter
[nit.git] / src / interpreter / naive_interpreter.nit
index c146d11..c8fc863 100644 (file)
@@ -275,10 +275,10 @@ class NaiveInterpreter
        # Return a new native string initialized with `txt`
        fun native_string_instance(txt: String): Instance
        do
-               var instance = native_string_instance_len(txt.length+1)
+               var instance = native_string_instance_len(txt.bytelen+1)
                var val = instance.val
-               val[txt.length] = '\0'
-               txt.to_cstring.copy_to(val, txt.length, 0, 0)
+               val[txt.bytelen] = 0u8
+               txt.to_cstring.copy_to(val, txt.bytelen, 0, 0)
 
                return instance
        end
@@ -298,7 +298,7 @@ class NaiveInterpreter
        fun string_instance(txt: String): Instance
        do
                var nat = native_string_instance(txt)
-               var res = self.send(self.force_get_primitive_method("to_s_with_length", nat.mtype), [nat, self.int_instance(txt.length)])
+               var res = self.send(self.force_get_primitive_method("to_s_with_length", nat.mtype), [nat, self.int_instance(txt.bytelen)])
                assert res != null
                return res
        end
@@ -874,85 +874,85 @@ redef class AMethPropdef
                else if cname == "Int" then
                        var recvval = args[0].to_i
                        if pname == "unary -" then
-                               return v.int_instance(-args[0].to_i)
+                               return v.int_instance(-recvval)
                        else if pname == "unary +" then
                                return args[0]
                        else if pname == "+" then
-                               return v.int_instance(args[0].to_i + args[1].to_i)
+                               return v.int_instance(recvval + args[1].to_i)
                        else if pname == "-" then
-                               return v.int_instance(args[0].to_i - args[1].to_i)
+                               return v.int_instance(recvval - args[1].to_i)
                        else if pname == "*" then
-                               return v.int_instance(args[0].to_i * args[1].to_i)
+                               return v.int_instance(recvval * args[1].to_i)
                        else if pname == "%" then
-                               return v.int_instance(args[0].to_i % args[1].to_i)
+                               return v.int_instance(recvval % args[1].to_i)
                        else if pname == "/" then
-                               return v.int_instance(args[0].to_i / args[1].to_i)
+                               return v.int_instance(recvval / args[1].to_i)
                        else if pname == "<" then
-                               return v.bool_instance(args[0].to_i < args[1].to_i)
+                               return v.bool_instance(recvval < args[1].to_i)
                        else if pname == ">" then
-                               return v.bool_instance(args[0].to_i > args[1].to_i)
+                               return v.bool_instance(recvval > args[1].to_i)
                        else if pname == "<=" then
-                               return v.bool_instance(args[0].to_i <= args[1].to_i)
+                               return v.bool_instance(recvval <= args[1].to_i)
                        else if pname == ">=" then
-                               return v.bool_instance(args[0].to_i >= args[1].to_i)
+                               return v.bool_instance(recvval >= args[1].to_i)
                        else if pname == "<=>" then
-                               return v.int_instance(args[0].to_i <=> args[1].to_i)
+                               return v.int_instance(recvval <=> args[1].to_i)
                        else if pname == "ascii" then
-                               return v.char_instance(args[0].to_i.ascii)
+                               return v.char_instance(recvval.ascii)
                        else if pname == "to_f" then
-                               return v.float_instance(args[0].to_i.to_f)
+                               return v.float_instance(recvval.to_f)
                        else if pname == "to_b" then
-                               return v.byte_instance(args[0].to_i.to_b)
+                               return v.byte_instance(recvval.to_b)
                        else if pname == "lshift" then
-                               return v.int_instance(args[0].to_i.lshift(args[1].to_i))
+                               return v.int_instance(recvval.lshift(args[1].to_i))
                        else if pname == "rshift" then
-                               return v.int_instance(args[0].to_i.rshift(args[1].to_i))
+                               return v.int_instance(recvval.rshift(args[1].to_i))
                        else if pname == "rand" then
                                var res = recvval.rand
                                return v.int_instance(res)
                        else if pname == "bin_and" then
-                               return v.int_instance(args[0].to_i.bin_and(args[1].to_i))
+                               return v.int_instance(recvval.bin_and(args[1].to_i))
                        else if pname == "bin_or" then
-                               return v.int_instance(args[0].to_i.bin_or(args[1].to_i))
+                               return v.int_instance(recvval.bin_or(args[1].to_i))
                        else if pname == "bin_xor" then
-                               return v.int_instance(args[0].to_i.bin_xor(args[1].to_i))
+                               return v.int_instance(recvval.bin_xor(args[1].to_i))
                        else if pname == "bin_not" then
-                               return v.int_instance(args[0].to_i.bin_not)
+                               return v.int_instance(recvval.bin_not)
                        end
                else if cname == "Byte" then
                        var recvval = args[0].to_b
                        if pname == "unary -" then
-                               return v.byte_instance(-args[0].to_b)
+                               return v.byte_instance(-recvval)
                        else if pname == "unary +" then
                                return args[0]
                        else if pname == "+" then
-                               return v.byte_instance(args[0].to_b + args[1].to_b)
+                               return v.byte_instance(recvval + args[1].to_b)
                        else if pname == "-" then
-                               return v.byte_instance(args[0].to_b - args[1].to_b)
+                               return v.byte_instance(recvval - args[1].to_b)
                        else if pname == "*" then
-                               return v.byte_instance(args[0].to_b * args[1].to_b)
+                               return v.byte_instance(recvval * args[1].to_b)
                        else if pname == "%" then
-                               return v.byte_instance(args[0].to_b % args[1].to_b)
+                               return v.byte_instance(recvval % args[1].to_b)
                        else if pname == "/" then
-                               return v.byte_instance(args[0].to_b / args[1].to_b)
+                               return v.byte_instance(recvval / args[1].to_b)
                        else if pname == "<" then
-                               return v.bool_instance(args[0].to_b < args[1].to_b)
+                               return v.bool_instance(recvval < args[1].to_b)
                        else if pname == ">" then
-                               return v.bool_instance(args[0].to_b > args[1].to_b)
+                               return v.bool_instance(recvval > args[1].to_b)
                        else if pname == "<=" then
-                               return v.bool_instance(args[0].to_b <= args[1].to_b)
+                               return v.bool_instance(recvval <= args[1].to_b)
                        else if pname == ">=" then
-                               return v.bool_instance(args[0].to_b >= args[1].to_b)
+                               return v.bool_instance(recvval >= args[1].to_b)
                        else if pname == "<=>" then
-                               return v.int_instance(args[0].to_b <=> args[1].to_b)
+                               return v.int_instance(recvval <=> args[1].to_b)
                        else if pname == "to_f" then
-                               return v.float_instance(args[0].to_b.to_f)
+                               return v.float_instance(recvval.to_f)
                        else if pname == "to_i" then
-                               return v.int_instance(args[0].to_b.to_i)
+                               return v.int_instance(recvval.to_i)
                        else if pname == "lshift" then
-                               return v.byte_instance(args[0].to_b.lshift(args[1].to_i))
+                               return v.byte_instance(recvval.lshift(args[1].to_i))
                        else if pname == "rshift" then
-                               return v.byte_instance(args[0].to_b.rshift(args[1].to_i))
+                               return v.byte_instance(recvval.rshift(args[1].to_i))
                        else if pname == "byte_to_s_len" then
                                return v.int_instance(recvval.to_s.length)
                        end
@@ -1041,10 +1041,10 @@ redef class AMethPropdef
                        var recvval = args.first.val.as(NativeString)
                        if pname == "[]" then
                                var arg1 = args[1].to_i
-                               return v.char_instance(recvval[arg1])
+                               return v.byte_instance(recvval[arg1])
                        else if pname == "[]=" then
                                var arg1 = args[1].to_i
-                               recvval[arg1] = args[2].val.as(Char)
+                               recvval[arg1] = args[2].val.as(Byte)
                                return null
                        else if pname == "copy_to" then
                                # sig= copy_to(dest: NativeString, length: Int, from: Int, to: Int)
@@ -1515,17 +1515,12 @@ redef class AOrElseExpr
        end
 end
 
-redef class AIntExpr
+redef class AIntegerExpr
        redef fun expr(v)
        do
-               return v.int_instance(self.value.as(not null))
-       end
-end
-
-redef class AByteExpr
-       redef fun expr(v)
-       do
-               return v.byte_instance(self.value.as(not null))
+               if value isa Int then return v.int_instance(value.as(Int))
+               if value isa Byte then return v.byte_instance(value.as(Byte))
+               return null
        end
 end