From: Jean Privat Date: Wed, 15 Apr 2015 05:00:13 +0000 (+0700) Subject: src: implement unary plus X-Git-Tag: v0.7.4~22^2~5 X-Git-Url: http://nitlanguage.org src: implement unary plus Signed-off-by: Jean Privat --- diff --git a/src/compiler/abstract_compiler.nit b/src/compiler/abstract_compiler.nit index 90cb6a7..2359c7d 100644 --- a/src/compiler/abstract_compiler.nit +++ b/src/compiler/abstract_compiler.nit @@ -2053,6 +2053,9 @@ redef class AMethPropdef else if pname == "unary -" then v.ret(v.new_expr("-{arguments[0]}", ret.as(not null))) return true + else if pname == "unary +" then + v.ret(arguments[0]) + return true else if pname == "*" then v.ret(v.new_expr("{arguments[0]} * {arguments[1]}", ret.as(not null))) return true @@ -2164,6 +2167,9 @@ redef class AMethPropdef else if pname == "unary -" then v.ret(v.new_expr("-{arguments[0]}", ret.as(not null))) return true + else if pname == "unary +" then + v.ret(arguments[0]) + return true else if pname == "succ" then v.ret(v.new_expr("{arguments[0]}+1", ret.as(not null))) return true diff --git a/src/interpreter/naive_interpreter.nit b/src/interpreter/naive_interpreter.nit index 3168c76..7d7cab9 100644 --- a/src/interpreter/naive_interpreter.nit +++ b/src/interpreter/naive_interpreter.nit @@ -833,6 +833,8 @@ redef class AMethPropdef var recvval = args[0].to_i if pname == "unary -" then return v.int_instance(-args[0].to_i) + else if pname == "unary +" then + return args[0] else if pname == "+" then return v.int_instance(args[0].to_i + args[1].to_i) else if pname == "-" then @@ -907,6 +909,8 @@ redef class AMethPropdef var recv = args[0].to_f if pname == "unary -" then return v.float_instance(-recv) + else if pname == "unary +" then + return args[0] else if pname == "+" then return v.float_instance(recv + args[1].to_f) else if pname == "-" then diff --git a/src/modelize/modelize_property.nit b/src/modelize/modelize_property.nit index 26b2f05..9cc9580 100644 --- a/src/modelize/modelize_property.nit +++ b/src/modelize/modelize_property.nit @@ -790,6 +790,9 @@ redef class AMethPropdef name = amethodid.collect_text name_node = amethodid + if name == "+" and self.n_signature.n_params.length == 0 then + name = "unary +" + end if name == "-" and self.n_signature.n_params.length == 0 then name = "unary -" end diff --git a/src/nitni/nitni_base.nit b/src/nitni/nitni_base.nit index 6685029..5e3b7a6 100644 --- a/src/nitni/nitni_base.nit +++ b/src/nitni/nitni_base.nit @@ -31,6 +31,7 @@ redef class MMethod if nit_name == "+" then return "_plus" if nit_name == "-" then return "_minus" if nit_name == "unary -" then return "_unary_minus" + if nit_name == "unary +" then return "_unary_plus" if nit_name == "*" then return "_star" if nit_name == "/" then return "_slash" if nit_name == "%" then return "_percent" diff --git a/src/semantize/typing.nit b/src/semantize/typing.nit index e7a5a09..b940c28 100644 --- a/src/semantize/typing.nit +++ b/src/semantize/typing.nit @@ -1638,6 +1638,11 @@ redef class APercentExpr redef fun property_name do return "%" end +redef class AUplusExpr + redef fun property_name do return "unary +" + redef fun compute_raw_arguments do return new Array[AExpr] +end + redef class AUminusExpr redef fun property_name do return "unary -" redef fun compute_raw_arguments do return new Array[AExpr]