Try to compile self as an expression

Do not call this method directly, use v.expr instead

Property definitions

nitc :: java_compiler $ AExpr :: expr
	# Try to compile self as an expression
	# Do not call this method directly, use `v.expr` instead
	private fun expr(v: JavaCompilerVisitor): nullable RuntimeVariable do
		v.info("NOT YET IMPLEMENTED {class_name}::expr")
		return null
	end
src/compiler/java_compiler.nit:1904,2--1909,4

nitc :: java_compiler $ ABlockExpr :: expr
	redef fun expr(v)
	do
		var last = self.n_expr.last
		for e in self.n_expr do
			if e == last then break
			v.stmt(e)
		end
		return v.expr(last, null)
	end
src/compiler/java_compiler.nit:1921,2--1929,4

nitc :: java_compiler $ ASelfExpr :: expr
	redef fun expr(v) do return v.frame.as(not null).arguments.first
src/compiler/java_compiler.nit:2007,2--65

nitc :: java_compiler $ AIfExpr :: expr
	redef fun expr(v) do
		var res = v.new_var(self.mtype.as(not null))
		var cond = v.expr_bool(self.n_expr)
		v.add("if ({cond})\{")
		v.assign(res, v.expr(self.n_then.as(not null), null))
		v.add("\} else \{")
		v.assign(res, v.expr(self.n_else.as(not null), null))
		v.add("\}")
		return res
	end
src/compiler/java_compiler.nit:2075,2--2084,4

nitc :: java_compiler $ AIntegerExpr :: expr
	redef fun expr(v) do
		if value isa Int then
			return v.int_instance(self.value.as(Int))
		else if value isa Byte then
			return v.byte_instance(self.value.as(Byte))
		else
			# Should not happen
			abort
		end
	end
src/compiler/java_compiler.nit:2233,2--2242,4

nitc :: java_compiler $ AFloatExpr :: expr
	redef fun expr(v) do return v.float_instance("{self.n_float.text}")
src/compiler/java_compiler.nit:2246,2--68

nitc :: java_compiler $ ANullExpr :: expr
	redef fun expr(v) do return v.null_instance
src/compiler/java_compiler.nit:2262,2--44

nitc :: java_compiler $ AParExpr :: expr
	redef fun expr(v) do return v.expr(self.n_expr, null)
src/compiler/java_compiler.nit:2297,2--54

nitc :: java_compiler $ ASendExpr :: expr
	redef fun expr(v) do
		var recv = v.expr(n_expr, null)
		var callsite = callsite.as(not null)
		var args = v.varargize(callsite.mpropdef, callsite.signaturemap, recv, raw_arguments)
		return v.compile_callsite(callsite, args)
	end
src/compiler/java_compiler.nit:1933,2--1938,4

nitc :: java_compiler $ ASuperExpr :: expr
	redef fun expr(v)
	do
		var frame = v.frame
		assert frame != null
		var recv = frame.arguments.first

		var callsite = self.callsite
		if callsite != null then
			var args

			if self.n_args.n_exprs.is_empty then
				# Add automatic arguments for the super init call
				args = [recv]
				for i in [0..callsite.msignature.arity[ do
					args.add(frame.arguments[i+1])
				end
			else
				args = v.varargize(callsite.mpropdef, callsite.signaturemap, recv, self.n_args.n_exprs)
			end

			# Super init call
			var res = v.compile_callsite(callsite, args)
			return res
		end

		var mpropdef = self.mpropdef.as(not null)

		var args
		if self.n_args.n_exprs.is_empty then
			args = frame.arguments
		else
			args = v.varargize(mpropdef, signaturemap, recv, self.n_args.n_exprs)
		end

		# Standard call-next-method
		return v.supercall(mpropdef, recv.mtype.as(MClassType), args)
	end
src/compiler/java_compiler.nit:1967,2--2003,4

nitc :: java_compiler $ ANewExpr :: expr
	redef fun expr(v)
	do
		var mtype = self.recvtype
		assert mtype != null

		if mtype.mclass.name == "NativeArray" then
			# TODO handle native arrays
			v.info("NOT YET IMPLEMENTED new NativeArray")
		end

		var recv = v.init_instance(mtype)

		var callsite = self.callsite
		if callsite == null then return recv

		var args = v.varargize(callsite.mpropdef, callsite.signaturemap, recv, self.n_args.n_exprs)
		var res2 = v.compile_callsite(callsite, args)
		if res2 != null then
			return res2
		end
		return recv
	end
src/compiler/java_compiler.nit:1942,2--1963,4

nitc :: java_compiler $ AVarExpr :: expr
	redef fun expr(v) do
		return v.variable(self.variable.as(not null))
	end
src/compiler/java_compiler.nit:2138,2--2140,4

nitc :: java_compiler $ AImplicitSelfExpr :: expr
	redef fun expr(v) do return v.frame.as(not null).arguments.first
src/compiler/java_compiler.nit:2011,2--65

nitc :: java_compiler $ ANotExpr :: expr
	redef fun expr(v) do
		var cond = v.expr_bool(self.n_expr)
		return v.new_expr("!{cond}", self.mtype.as(not null))
	end
src/compiler/java_compiler.nit:2226,2--2229,4

nitc :: java_compiler $ ACharExpr :: expr
	redef fun expr(v) do return v.char_instance(self.value.as(not null))
src/compiler/java_compiler.nit:2250,2--69

nitc :: java_compiler $ ATrueExpr :: expr
	redef fun expr(v) do return v.bool_instance(true)
src/compiler/java_compiler.nit:2254,2--50

nitc :: java_compiler $ AFalseExpr :: expr
	redef fun expr(v) do return v.bool_instance(false)
src/compiler/java_compiler.nit:2258,2--51

nitc :: java_compiler $ AIsaExpr :: expr
	redef fun expr(v)
	do
		var i = v.expr(self.n_expr, null)
		var cast_type = self.cast_type
		if cast_type == null then return null # no-no on broken node
		return v.type_test(i, cast_type)
	end
src/compiler/java_compiler.nit:2287,2--2293,4

nitc :: java_compiler $ AAsCastExpr :: expr
	redef fun expr(v)
	do
		var i = v.expr(n_expr, null)
		v.add_cast(i, mtype.as(not null))
		return i
	end
src/compiler/java_compiler.nit:2266,2--2271,4

nitc :: java_compiler $ AAsNotnullExpr :: expr
	redef fun expr(v) do
		var i = v.expr(n_expr, null)
		if i.mtype.is_java_primitive then return i

		v.add("if ({i} == null || {i}.is_null()) \{")
		v.add_abort("Cast failed")
		v.add("\}")
		return i
	end
src/compiler/java_compiler.nit:2275,2--2283,4

nitc :: java_compiler $ AAttrExpr :: expr
	redef fun expr(v) do
		var recv = v.expr(self.n_expr, null)
		var mproperty = self.mproperty.as(not null)
		return v.read_attribute(mproperty, recv)
	end
src/compiler/java_compiler.nit:2015,2--2019,4

nitc :: java_compiler $ AIssetAttrExpr :: expr
	redef fun expr(v) do
		var recv = v.expr(self.n_expr, null)
		var mproperty = self.mproperty.as(not null)
		return v.isset_attribute(mproperty, recv)
	end
src/compiler/java_compiler.nit:2045,2--2049,4

nitc :: java_compiler $ AVarAssignExpr :: expr
	redef fun expr(v) do
		var variable = self.variable.as(not null)
		var i = v.expr(self.n_value, variable.declared_type)
		v.assign(v.variable(variable), i)
		return i
	end
src/compiler/java_compiler.nit:2144,2--2149,4

nitc :: java_compiler $ AOrElseExpr :: expr
	redef fun expr(v)
	do
		var res = v.new_var(self.mtype.as(not null))
		var i1 = v.expr(self.n_expr, null)
		v.add("if ({i1} != null && !{i1}.is_null()) \{")
		v.assign(res, i1)
		v.add("\} else \{")
		var i2 = v.expr(self.n_expr2, null)
		v.assign(res, i2)
		v.add("\}")
		return res
	end
src/compiler/java_compiler.nit:2183,2--2194,4

nitc :: java_compiler $ AAttrAssignExpr :: expr
	redef fun expr(v) do
		var recv = v.expr(self.n_expr, null)
		var i = v.expr(self.n_value, null)
		var mproperty = self.mproperty.as(not null)
		v.write_attribute(mproperty, recv, i)
		return i
	end
src/compiler/java_compiler.nit:2023,2--2029,4

nitc :: java_compiler $ AOrExpr :: expr
	redef fun expr(v) do
		var res = v.new_var(self.mtype.as(not null))
		var i1 = v.expr_bool(self.n_expr)
		v.add("if ({i1}) \{")
		v.add("{res} = true;")
		v.add("\} else \{")
		var i2 = v.expr_bool(self.n_expr2)
		v.add("{res} = {i2};")
		v.add("\}")
		return res
	end
src/compiler/java_compiler.nit:2198,2--2208,4

nitc :: java_compiler $ AImpliesExpr :: expr
	redef fun expr(v) do
		var res = v.new_var(mtype.as(not null))
		var i1 = v.expr_bool(n_expr)
		v.add("if (!{i1}) \{")
		v.add("{res} = true;")
		v.add("\} else \{")
		var i2 = v.expr_bool(n_expr2)
		v.add("{res} = {i2};")
		v.add("\}")
		return res
	end
src/compiler/java_compiler.nit:2169,2--2179,4

nitc :: java_compiler $ AAndExpr :: expr
	redef fun expr(v) do
		var res = v.new_var(self.mtype.as(not null))
		var i1 = v.expr_bool(self.n_expr)
		v.add("if (!{i1}) \{")
		v.add("{res} = false;")
		v.add("\} else \{")
		var i2 = v.expr_bool(self.n_expr2)
		v.add("{res} = {i2};")
		v.add("\}")
		return res
	end
src/compiler/java_compiler.nit:2212,2--2222,4