A literal array. eg. [x,y,z]

Introduced properties

private var _element_mtype: nullable MType

nitc :: AArrayExpr :: _element_mtype

The element of each type
private var _n_cbra: TCbra

nitc :: AArrayExpr :: _n_cbra

The closing bracket ]
private var _n_exprs: ANodes[AExpr]

nitc :: AArrayExpr :: _n_exprs

The elements of the array
private var _n_obra: TObra

nitc :: AArrayExpr :: _n_obra

The opening bracket [
private var _n_type: nullable AType

nitc :: AArrayExpr :: _n_type

The type of the element of the array (if any)
private var _nnew: ANewExpr

nitc :: AArrayExpr :: _nnew

private var _push_callsite: nullable CallSite

nitc :: AArrayExpr :: _push_callsite

The push method on arrays
private var _with_capacity_callsite: nullable CallSite

nitc :: AArrayExpr :: _with_capacity_callsite

The with_capacity method on Array
fun element_mtype: nullable MType

nitc :: AArrayExpr :: element_mtype

The element of each type
protected fun element_mtype=(element_mtype: nullable MType)

nitc :: AArrayExpr :: element_mtype=

The element of each type
init init_aarrayexpr(n_obra: nullable TObra, n_exprs: Collection[Object], n_type: nullable AType, n_cbra: nullable TCbra, n_annotations: nullable AAnnotations)

nitc :: AArrayExpr :: init_aarrayexpr

fun n_cbra: TCbra

nitc :: AArrayExpr :: n_cbra

The closing bracket ]
fun n_cbra=(n_cbra: TCbra)

nitc :: AArrayExpr :: n_cbra=

The closing bracket ]
fun n_exprs: ANodes[AExpr]

nitc :: AArrayExpr :: n_exprs

The elements of the array
protected fun n_exprs=(n_exprs: ANodes[AExpr])

nitc :: AArrayExpr :: n_exprs=

The elements of the array
fun n_obra: TObra

nitc :: AArrayExpr :: n_obra

The opening bracket [
fun n_obra=(n_obra: TObra)

nitc :: AArrayExpr :: n_obra=

The opening bracket [
fun n_type: nullable AType

nitc :: AArrayExpr :: n_type

The type of the element of the array (if any)
fun n_type=(n_type: nullable AType)

nitc :: AArrayExpr :: n_type=

The type of the element of the array (if any)
private fun nnew: ANewExpr

nitc :: AArrayExpr :: nnew

private fun nnew=(nnew: ANewExpr)

nitc :: AArrayExpr :: nnew=

fun push_callsite: nullable CallSite

nitc :: AArrayExpr :: push_callsite

The push method on arrays
protected fun push_callsite=(push_callsite: nullable CallSite)

nitc :: AArrayExpr :: push_callsite=

The push method on arrays
private fun set_comprehension(n: nullable AExpr)

nitc :: AArrayExpr :: set_comprehension

Set that self is a part of comprehension array na
fun with_capacity_callsite: nullable CallSite

nitc :: AArrayExpr :: with_capacity_callsite

The with_capacity method on Array
protected fun with_capacity_callsite=(with_capacity_callsite: nullable CallSite)

nitc :: AArrayExpr :: with_capacity_callsite=

The with_capacity method on Array

Redefined properties

redef type SELF: AArrayExpr

nitc $ AArrayExpr :: SELF

Type of this instance, automatically specialized in every class
redef fun accept_pretty_printer(v: PrettyPrinterVisitor)

nitc :: pretty $ AArrayExpr :: accept_pretty_printer

Start visit of self using a PrettyPrinterVisitor
redef fun expr(v: NaiveInterpreter): nullable Instance

nitc :: naive_interpreter $ AArrayExpr :: expr

Evaluate the node as a possible expression.
redef fun expr(v: AbstractCompilerVisitor): nullable RuntimeVariable

nitc :: abstract_compiler $ AArrayExpr :: expr

Try to compile self as an expression
redef fun generate_basic_blocks(ssa: SSA, old_block: BasicBlock): BasicBlock

nitc :: ssa $ AArrayExpr :: generate_basic_blocks

Generate recursively basic block for this expression
redef fun n_annotations=(node: nullable AAnnotations)

nitc :: parser_prod $ AArrayExpr :: n_annotations=

All the annotations attached directly to the node
redef fun n_cbra=(node: TCbra)

nitc :: parser_prod $ AArrayExpr :: n_cbra=

The closing bracket ]
redef fun n_obra=(node: TObra)

nitc :: parser_prod $ AArrayExpr :: n_obra=

The opening bracket [
redef fun n_type=(node: nullable AType)

nitc :: parser_prod $ AArrayExpr :: n_type=

The type of the element of the array (if any)
redef fun numbering(v: VirtualMachine, position: Int): Int

nitc :: variables_numbering $ AArrayExpr :: numbering

Give a position to each variable declared in the node.
redef fun replace_child(old_child: ANode, new_child: nullable ANode)

nitc :: parser_prod $ AArrayExpr :: replace_child

Replace a child with an other node in the AST
redef fun visit_all(v: Visitor)

nitc :: parser_prod $ AArrayExpr :: visit_all

Visit all nodes in order.

All properties

fun !=(other: nullable Object): Bool

core :: Object :: !=

Have self and other different values?
fun ==(other: nullable Object): Bool

core :: Object :: ==

Have self and other the same value?
type CLASS: Class[SELF]

core :: Object :: CLASS

The type of the class of self.
type SELF: Object

core :: Object :: SELF

Type of this instance, automatically specialized in every class
private var _after_flow_context: nullable FlowContext

nitc :: AExpr :: _after_flow_context

The flow after the full evaluation of the expression/statement
private var _comprehension: nullable AArrayExpr

nitc :: AExpr :: _comprehension

Is non-null if self is a leaf of a comprehension array construction.
private var _element_mtype: nullable MType

nitc :: AArrayExpr :: _element_mtype

The element of each type
private var _first_location: nullable Location

nitc :: Prod :: _first_location

Location on the first token after the start of a production
private var _first_token: nullable Token

nitc :: Prod :: _first_token

The first token of the production in the AST
private var _force_block: Bool

nitc :: ANode :: _force_block

Force self to be rendered as a block.
private var _force_inline: Bool

nitc :: ANode :: _force_inline

Force self to be rendered as a line.
private var _implicit_cast_to: nullable MType

nitc :: AExpr :: _implicit_cast_to

If required, the following implicit cast .as(XXX)
private var _is_broken: Bool

nitc :: ANode :: _is_broken

The indication that the node did not pass some semantic verifications.
private var _is_typed: Bool

nitc :: AExpr :: _is_typed

Is the statement correctly typed?
private var _last_token: nullable Token

nitc :: Prod :: _last_token

The last token of the production in the AST
private var _location: Location

nitc :: ANode :: _location

Location is set during AST building. Once built, location can not be null.
private var _mtype: nullable MType

nitc :: AExpr :: _mtype

The static type of the expression.
private var _n_annotations: nullable AAnnotations

nitc :: Prod :: _n_annotations

All the annotations attached directly to the node
private var _n_cbra: TCbra

nitc :: AArrayExpr :: _n_cbra

The closing bracket ]
private var _n_exprs: ANodes[AExpr]

nitc :: AArrayExpr :: _n_exprs

The elements of the array
private var _n_obra: TObra

nitc :: AArrayExpr :: _n_obra

The opening bracket [
private var _n_type: nullable AType

nitc :: AArrayExpr :: _n_type

The type of the element of the array (if any)
private var _nnew: ANewExpr

nitc :: AArrayExpr :: _nnew

private var _parent: nullable ANode

nitc :: ANode :: _parent

Parent of the node in the AST
private var _push_callsite: nullable CallSite

nitc :: AArrayExpr :: _push_callsite

The push method on arrays
private var _vararg_decl: Int

nitc :: AExpr :: _vararg_decl

It indicates the number of arguments collected as a vararg.
private var _variable_cache: nullable Variable

nitc :: AExpr :: _variable_cache

private var _with_capacity_callsite: nullable CallSite

nitc :: AArrayExpr :: _with_capacity_callsite

The with_capacity method on Array
private fun accept_explain_assert(v: ExplainAssertVisitor)

nitc :: AExpr :: accept_explain_assert

Fill v to explain this node if the parent assert fails
fun accept_forward_analysis(v: ForwardAnalysis)

nitc :: ANode :: accept_forward_analysis

Apply the forward analysis v to self.
private abstract fun accept_pretty_printer(v: PrettyPrinterVisitor)

nitc :: ANode :: accept_pretty_printer

Start visit of self using a PrettyPrinterVisitor
fun accept_reaching_defs(v: ReachingDefsAnalysis)

nitc :: ANode :: accept_reaching_defs

Apply a ReachingDefsAnalysis to self.
fun add(expr: AExpr)

nitc :: AExpr :: add

Add expr at the end of the block
fun after_flow_context: nullable FlowContext

nitc :: AExpr :: after_flow_context

The flow after the full evaluation of the expression/statement
protected fun after_flow_context=(after_flow_context: nullable FlowContext)

nitc :: AExpr :: after_flow_context=

The flow after the full evaluation of the expression/statement
fun allocate_mtype(v: RapidTypeVisitor)

nitc :: AExpr :: allocate_mtype

Make the mtype of the expression live
fun as_id: nullable String

nitc :: AExpr :: as_id

Get self as a single identifier.
fun as_int: nullable Int

nitc :: AExpr :: as_int

Get self as an Int.
fun as_string: nullable String

nitc :: AExpr :: as_string

Get self as a String.
private fun bad_expr_message(child: AExpr): nullable String

nitc :: ANode :: bad_expr_message

An additional information message to explain the role of a child expression.
protected fun class_factory(name: String): CLASS

core :: Object :: class_factory

Implementation used by get_class to create the specific class.
fun class_name: String

core :: Object :: class_name

The class name of the object.
abstract fun clone: SELF

core :: Cloneable :: clone

Duplicate self
fun collect_annotations_by_name(name: String): Array[AAnnotation]

nitc :: ANode :: collect_annotations_by_name

Do a deep search and return an array of node that are annotated
private fun collect_comments: Array[TComment]

nitc :: Prod :: collect_comments

Collect all TComment contained in the production
private abstract fun collect_length: Int

nitc :: ANode :: collect_length

Collect the length (in Char) of the node.
fun collect_text: String

nitc :: Prod :: collect_text

Join the text of all visited tokens
fun collect_tokens_by_text(text: String): Array[Token]

nitc :: ANode :: collect_tokens_by_text

Do a deep search and return an array of tokens that match a given text
fun common_parent(other: ANode): nullable ANode

nitc :: ANode :: common_parent

The most specific common parent between self and other
fun comprehension: nullable AArrayExpr

nitc :: AExpr :: comprehension

Is non-null if self is a leaf of a comprehension array construction.
protected fun comprehension=(comprehension: nullable AArrayExpr)

nitc :: AExpr :: comprehension=

Is non-null if self is a leaf of a comprehension array construction.
fun debug(message: String)

nitc :: ANode :: debug

Display a message for the colored location of the node
protected fun decorate_tag(v: HtmlightVisitor, res: HTMLTag, token: Token): nullable HInfoBox

nitc :: ANode :: decorate_tag

Add aditionnal information on a child-token and return an additionnal HInfoBox on it
fun depth: Int

nitc :: ANode :: depth

Number of nodes between self and the root of the AST
fun detach

nitc :: ANode :: detach

Detach a node from its parent
fun detach_with_placeholder: AExpr

nitc :: AExpr :: detach_with_placeholder

The detach method completely remove the node in the parent.
private fun do_cloneable(v: CloneVisitor)

nitc :: ANode :: do_cloneable

fun do_typing(modelbuilder: ModelBuilder, visited_mpropdef: MPropDef)

nitc :: AExpr :: do_typing

Type the expression as if located in visited_mpropdef
fun dump_info(v: ASTDump): String

nitc :: ANode :: dump_info

Information to display on a node
fun dump_tree(display_structural: nullable Bool, display_line: nullable Bool)

nitc :: ANode :: dump_tree

Write the subtree on stdout.
fun element_mtype: nullable MType

nitc :: AArrayExpr :: element_mtype

The element of each type
protected fun element_mtype=(element_mtype: nullable MType)

nitc :: AArrayExpr :: element_mtype=

The element of each type
protected fun expr(v: NaiveInterpreter): nullable Instance

nitc :: AExpr :: expr

Evaluate the node as a possible expression.
private fun expr(v: AbstractCompilerVisitor): nullable RuntimeVariable

nitc :: AExpr :: expr

Try to compile self as an expression
private fun expr(v: JavaCompilerVisitor): nullable RuntimeVariable

nitc :: AExpr :: expr

Try to compile self as an expression
fun fatal(v: NaiveInterpreter, message: String)

nitc :: ANode :: fatal

Aborts the program with a message
fun first_location: nullable Location

nitc :: Prod :: first_location

Location on the first token after the start of a production
protected fun first_location=(first_location: nullable Location)

nitc :: Prod :: first_location=

Location on the first token after the start of a production
fun first_token: nullable Token

nitc :: Prod :: first_token

The first token of the production in the AST
protected fun first_token=(first_token: nullable Token)

nitc :: Prod :: first_token=

The first token of the production in the AST
private fun force_block: Bool

nitc :: ANode :: force_block

Force self to be rendered as a block.
private fun force_block=(force_block: Bool)

nitc :: ANode :: force_block=

Force self to be rendered as a block.
private fun force_inline: Bool

nitc :: ANode :: force_inline

Force self to be rendered as a line.
private fun force_inline=(force_inline: Bool)

nitc :: ANode :: force_inline=

Force self to be rendered as a line.
fun generate_basic_blocks(ssa: SSA, old_block: BasicBlock): BasicBlock

nitc :: AExpr :: generate_basic_blocks

Generate recursively basic block for this expression
fun get_annotations(name: String): Array[AAnnotation]

nitc :: Prod :: get_annotations

Return all its annotations of a given name in the order of their declaration
fun get_class: CLASS

core :: Object :: get_class

The meta-object representing the dynamic type of self.
fun get_single_annotation(name: String, modelbuilder: ModelBuilder): nullable AAnnotation

nitc :: Prod :: get_single_annotation

Try to get its single annotation with a given name
fun hash: Int

core :: Object :: hash

The hash code of the object.
fun hot_location: Location

nitc :: ANode :: hot_location

The location of the important part of the node (identifier or whatever)
fun implicit_cast_to: nullable MType

nitc :: AExpr :: implicit_cast_to

If required, the following implicit cast .as(XXX)
protected fun implicit_cast_to=(implicit_cast_to: nullable MType)

nitc :: AExpr :: implicit_cast_to=

If required, the following implicit cast .as(XXX)
fun infobox(v: HtmlightVisitor): nullable HInfoBox

nitc :: ANode :: infobox

Return a optional infobox
init init

core :: Object :: init

init init_aarrayexpr(n_obra: nullable TObra, n_exprs: Collection[Object], n_type: nullable AType, n_cbra: nullable TCbra, n_annotations: nullable AAnnotations)

nitc :: AArrayExpr :: init_aarrayexpr

fun inspect: String

core :: Object :: inspect

Developer readable representation of self.
protected fun inspect_head: String

core :: Object :: inspect_head

Return "CLASSNAME:#OBJECTID".
fun is_block: Bool

nitc :: Prod :: is_block

Is the production contained in full block of line?
fun is_broken: Bool

nitc :: ANode :: is_broken

The indication that the node did not pass some semantic verifications.
fun is_broken=(is_broken: Bool)

nitc :: ANode :: is_broken=

The indication that the node did not pass some semantic verifications.
private fun is_inlinable: Bool

nitc :: ANode :: is_inlinable

Is self printable in one line?
private fun is_noserialize: Bool

nitc :: ANode :: is_noserialize

Is this node annotated to not be made serializable?
intern fun is_same_instance(other: nullable Object): Bool

core :: Object :: is_same_instance

Return true if self and other are the same instance (i.e. same identity).
fun is_same_serialized(other: nullable Object): Bool

core :: Object :: is_same_serialized

Is self the same as other in a serialization context?
intern fun is_same_type(other: Object): Bool

core :: Object :: is_same_type

Return true if self and other have the same dynamic type.
private fun is_serialize: Bool

nitc :: ANode :: is_serialize

Is this node annotated to be made serializable?
fun is_span: Bool

nitc :: Prod :: is_span

Is the production a part of a single line (without being a block)
fun is_structural: Bool

nitc :: ANode :: is_structural

Is self a token or a pure-structural production like AQId?
fun is_typed: Bool

nitc :: AExpr :: is_typed

Is the statement correctly typed?
protected fun is_typed=(is_typed: Bool)

nitc :: AExpr :: is_typed=

Is the statement correctly typed?
fun its_variable: nullable Variable

nitc :: AExpr :: its_variable

Return the variable read (if any)
fun last_token: nullable Token

nitc :: Prod :: last_token

The last token of the production in the AST
protected fun last_token=(last_token: nullable Token)

nitc :: Prod :: last_token=

The last token of the production in the AST
fun location: Location

nitc :: ANode :: location

Location is set during AST building. Once built, location can not be null.
fun location=(location: Location)

nitc :: ANode :: location=

Location is set during AST building. Once built, location can not be null.
protected fun make_tag(v: HtmlightVisitor): nullable HTMLTag

nitc :: ANode :: make_tag

Optionally creates a tag that encapsulate the AST element on HTML rendering
fun make_var_read: AVarExpr

nitc :: AExpr :: make_var_read

Return a new variable read that contains the value of the expression
fun mtype: nullable MType

nitc :: AExpr :: mtype

The static type of the expression.
protected fun mtype=(mtype: nullable MType)

nitc :: AExpr :: mtype=

The static type of the expression.
private fun must_be_block: Bool

nitc :: ANode :: must_be_block

Does self have to be rendered as a block?
private fun must_be_inline: Bool

nitc :: ANode :: must_be_inline

Does self have be rendered as a line?
fun n_annotations: nullable AAnnotations

nitc :: Prod :: n_annotations

All the annotations attached directly to the node
fun n_annotations=(n_annotations: nullable AAnnotations)

nitc :: Prod :: n_annotations=

All the annotations attached directly to the node
fun n_cbra: TCbra

nitc :: AArrayExpr :: n_cbra

The closing bracket ]
fun n_cbra=(n_cbra: TCbra)

nitc :: AArrayExpr :: n_cbra=

The closing bracket ]
fun n_exprs: ANodes[AExpr]

nitc :: AArrayExpr :: n_exprs

The elements of the array
protected fun n_exprs=(n_exprs: ANodes[AExpr])

nitc :: AArrayExpr :: n_exprs=

The elements of the array
fun n_obra: TObra

nitc :: AArrayExpr :: n_obra

The opening bracket [
fun n_obra=(n_obra: TObra)

nitc :: AArrayExpr :: n_obra=

The opening bracket [
fun n_type: nullable AType

nitc :: AArrayExpr :: n_type

The type of the element of the array (if any)
fun n_type=(n_type: nullable AType)

nitc :: AArrayExpr :: n_type=

The type of the element of the array (if any)
private intern fun native_class_name: CString

core :: Object :: native_class_name

The class name of the object in CString format.
private fun nnew: ANewExpr

nitc :: AArrayExpr :: nnew

private fun nnew=(nnew: ANewExpr)

nitc :: AArrayExpr :: nnew=

fun numbering(v: VirtualMachine, position: Int): Int

nitc :: AExpr :: numbering

Give a position to each variable declared in the node.
intern fun object_id: Int

core :: Object :: object_id

An internal hash code for the object based on its identity.
fun output

core :: Object :: output

Display self on stdout (debug only).
intern fun output_class_name

core :: Object :: output_class_name

Display class name on stdout (debug only).
fun parent: nullable ANode

nitc :: ANode :: parent

Parent of the node in the AST
protected fun parent=(parent: nullable ANode)

nitc :: ANode :: parent=

Parent of the node in the AST
fun parentize_tokens

nitc :: ANode :: parentize_tokens

Visit the AST and computes advanced AST attributes on Tokens and Prod
fun push_callsite: nullable CallSite

nitc :: AArrayExpr :: push_callsite

The push method on arrays
protected fun push_callsite=(push_callsite: nullable CallSite)

nitc :: AArrayExpr :: push_callsite=

The push method on arrays
private abstract fun replace_child(old_child: ANode, new_child: nullable ANode)

nitc :: ANode :: replace_child

Replace a child with an other node in the AST
fun replace_clone

nitc :: ANode :: replace_clone

Create a new clone of self
fun replace_with(node: ANode)

nitc :: ANode :: replace_with

Replace itself with an other node in the AST
fun root: ANode

nitc :: ANode :: root

The topmost ancestor of the element
fun serialization_hash: Int

core :: Object :: serialization_hash

Hash value use for serialization
private fun set_comprehension(n: nullable AExpr)

nitc :: AArrayExpr :: set_comprehension

Set that self is a part of comprehension array na
private fun start_token: nullable Token

nitc :: Prod :: start_token

The token where the production really start (skipping ADoc).
private fun stmt(v: JavaCompilerVisitor)

nitc :: AExpr :: stmt

Try to compile self as a statement
protected fun stmt(v: NaiveInterpreter)

nitc :: AExpr :: stmt

Evaluate the node as a statement.
private fun stmt(v: AbstractCompilerVisitor)

nitc :: AExpr :: stmt

Try to compile self as a statement
intern fun sys: Sys

core :: Object :: sys

Return the global sys object, the only instance of the Sys class.
abstract fun to_jvalue(env: JniEnv): JValue

core :: Object :: to_jvalue

fun to_s: String

core :: Object :: to_s

User readable representation of self.
fun to_xml: HTMLTag

nitc :: Prod :: to_xml

A XML representation of the AST
fun validate

nitc :: ANode :: validate

Recursively validate a AST node.
fun vararg_decl: Int

nitc :: AExpr :: vararg_decl

It indicates the number of arguments collected as a vararg.
protected fun vararg_decl=(vararg_decl: Int)

nitc :: AExpr :: vararg_decl=

It indicates the number of arguments collected as a vararg.
private fun variable_cache: nullable Variable

nitc :: AExpr :: variable_cache

private fun variable_cache=(variable_cache: nullable Variable)

nitc :: AExpr :: variable_cache=

abstract fun visit_all(v: Visitor)

nitc :: ANode :: visit_all

Visit all nodes in order.
private fun warn_parentheses(v: SimpleMiscVisitor)

nitc :: AExpr :: warn_parentheses

Warn in case of superfluous parentheses
private abstract fun was_inline: Bool

nitc :: ANode :: was_inline

Does self was written in one line before transformation?
fun with_capacity_callsite: nullable CallSite

nitc :: AArrayExpr :: with_capacity_callsite

The with_capacity method on Array
protected fun with_capacity_callsite=(with_capacity_callsite: nullable CallSite)

nitc :: AArrayExpr :: with_capacity_callsite=

The with_capacity method on Array
package_diagram nitc::AArrayExpr AArrayExpr nitc::AExpr AExpr nitc::AArrayExpr->nitc::AExpr nitc::Prod Prod nitc::AExpr->nitc::Prod ...nitc::Prod ... ...nitc::Prod->nitc::Prod

Ancestors

abstract class ANode

nitc :: ANode

Root of the AST class-hierarchy
interface Cloneable

core :: Cloneable

Something that can be cloned
interface Object

core :: Object

The root of the class hierarchy.
abstract class Prod

nitc :: Prod

Ancestor of all productions

Parents

abstract class AExpr

nitc :: AExpr

Expression and statements

Class definitions

nitc $ AArrayExpr
# A literal array. eg. `[x,y,z]`
class AArrayExpr
	super AExpr

	# The opening bracket `[`
	var n_obra: TObra is writable, noinit

	# The elements of the array
	var n_exprs = new ANodes[AExpr](self)

	# The type of the element of the array (if any)
	var n_type: nullable AType = null is writable

	# The closing bracket `]`
	var n_cbra: TCbra is writable, noinit
end
src/parser/parser_nodes.nit:2595,1--2610,3

nitc :: parser_prod $ AArrayExpr
redef class AArrayExpr
	init init_aarrayexpr (
		n_obra: nullable TObra,
		n_exprs: Collection[Object], # Should be Collection[AExpr]
		n_type: nullable AType,
		n_cbra: nullable TCbra,
		n_annotations: nullable AAnnotations
	)
	do
		_n_obra = n_obra.as(not null)
		n_obra.parent = self
		self.n_exprs.unsafe_add_all(n_exprs)
		_n_type = n_type
		if n_type != null then n_type.parent = self
		_n_cbra = n_cbra.as(not null)
		n_cbra.parent = self
		_n_annotations = n_annotations
		if n_annotations != null then n_annotations.parent = self
	end

	redef fun replace_child(old_child: ANode, new_child: nullable ANode)
	do
		if _n_obra == old_child then
			n_obra = new_child.as(TObra)
			return
		end
		if n_exprs.replace_child(old_child, new_child) then return
		if _n_type == old_child then
			n_type = new_child.as(nullable AType)
			return
		end
		if _n_cbra == old_child then
			n_cbra = new_child.as(TCbra)
			return
		end
		if _n_annotations == old_child then
			n_annotations = new_child.as(nullable AAnnotations)
			return
		end
	end

	redef fun n_obra=(node)
	do
		_n_obra = node
		node.parent = self
	end
	redef fun n_type=(node)
	do
		_n_type = node
		if node != null then node.parent = self
	end
	redef fun n_cbra=(node)
	do
		_n_cbra = node
		node.parent = self
	end
	redef fun n_annotations=(node)
	do
		_n_annotations = node
		if node != null then node.parent = self
	end


	redef fun visit_all(v: Visitor)
	do
		v.enter_visit(_n_obra)
		n_exprs.visit_all(v)
		v.enter_visit(_n_type)
		v.enter_visit(_n_cbra)
		v.enter_visit(_n_annotations)
	end
end
src/parser/parser_prod.nit:6336,1--6407,3

nitc :: pretty $ AArrayExpr
redef class AArrayExpr
	redef fun accept_pretty_printer(v) do
		v.consume "["
		v.visit_list n_exprs
		if n_type != null then
			v.consume ":"
			v.adds
			v.visit n_type
		end
		v.consume "]"
	end
end
src/pretty.nit:2078,1--2089,3

nitc :: typing $ AArrayExpr
redef class AArrayExpr
	# The `with_capacity` method on Array
	var with_capacity_callsite: nullable CallSite

	# The `push` method on arrays
	var push_callsite: nullable CallSite

	# The element of each type
	var element_mtype: nullable MType

	# Set that `self` is a part of comprehension array `na`
	# If `self` is a `for`, or a `if`, then `set_comprehension` is recursively applied.
	private fun set_comprehension(n: nullable AExpr)
	do
		if n == null then
			return
		else if n isa AForExpr then
			set_comprehension(n.n_block)
		else if n isa AIfExpr then
			set_comprehension(n.n_then)
			set_comprehension(n.n_else)
		else
			# is a leave
			n.comprehension = self
		end
	end
	redef fun accept_typing(v)
	do
		var mtype: nullable MType = null
		var ntype = self.n_type
		if ntype != null then
			mtype = v.resolve_mtype(ntype)
			if mtype == null then return # Skip error
		end
		var mtypes = new Array[nullable MType]
		var useless = false
		for e in self.n_exprs do
			var t = v.visit_expr(e)
			if t == null then
				return # Skip error
			end
			set_comprehension(e)
			if mtype != null then
				if v.check_subtype(e, t, mtype, false) == null then return # Forward error
				if t == mtype then useless = true
			else
				mtypes.add(t)
			end
		end
		if mtype == null then
			# Ensure monotony for type adaptation on loops
			if self.element_mtype != null then mtypes.add self.element_mtype
			mtype = v.merge_types(self, mtypes)
		end
		if mtype == null or mtype isa MNullType then
			v.error(self, "Type Error: ambiguous array type {mtypes.join(" ")}")
			return
		end
		if useless then
			assert ntype != null
			v.display_warning(ntype, "useless-type", "Warning: useless type declaration `{mtype}` in literal Array since it can be inferred from the elements type.")
		end

		self.element_mtype = mtype

		var mclass = v.get_mclass(self, "Array")
		if mclass == null then return # Forward error
		var array_mtype = mclass.get_mtype([mtype])

		with_capacity_callsite = v.build_callsite_by_name(self, array_mtype, "with_capacity", false)
		push_callsite = v.build_callsite_by_name(self, array_mtype, "push", false)

		self.mtype = array_mtype
	end
end
src/semantize/typing.nit:1700,1--1774,3

nitc :: rapid_type_analysis $ AArrayExpr
redef class AArrayExpr
	redef fun accept_rapid_type_visitor(v)
	do
		var mtype = self.mtype.as(MClassType)
		v.add_type(mtype)
		var native = v.analysis.mainmodule.native_array_type(mtype.arguments.first)
		v.add_type(native)
		mtype = v.cleanup_type(mtype).as(not null)
		var prop = v.get_method(mtype, "with_native")
		v.add_monomorphic_send(mtype, prop)
		v.add_callsite(with_capacity_callsite)
		v.add_callsite(push_callsite)
	end
end
src/rapid_type_analysis.nit:576,1--589,3

nitc :: naive_interpreter $ AArrayExpr
redef class AArrayExpr
	redef fun expr(v)
	do
		var val = new Array[Instance]
		var old_comprehension = v.frame.comprehension
		v.frame.comprehension = val
		for nexpr in self.n_exprs do
			if nexpr isa AForExpr then
				v.stmt(nexpr)
			else
				var i = v.expr(nexpr)
				if i == null then return null
				val.add(i)
			end
		end
		v.frame.comprehension = old_comprehension
		var mtype = v.unanchor_type(self.mtype.as(not null)).as(MClassType)
		var elttype = mtype.arguments.first
		return v.array_instance(val, elttype)
	end
end
src/interpreter/naive_interpreter.nit:2063,1--2083,3

nitc :: ssa $ AArrayExpr
redef class AArrayExpr
	redef fun generate_basic_blocks(ssa, old_block)
	do
		for nexpr in self.n_exprs do
			old_block = nexpr.generate_basic_blocks(ssa, old_block)
		end

		return old_block
	end
end
src/ssa.nit:764,1--773,3

nitc :: variables_numbering $ AArrayExpr
redef class AArrayExpr
	redef fun numbering(v, position)
	do
		for nexpr in self.n_exprs do
			position = v.numbering(nexpr, position)
		end
		return position
	end
end
src/vm/variables_numbering.nit:275,1--283,3

nitc :: abstract_compiler $ AArrayExpr
redef class AArrayExpr
	redef fun expr(v)
	do
		var mtype = self.element_mtype.as(not null)
		var array = new Array[RuntimeVariable]
		var res = v.array_instance(array, mtype)

		var old_comprehension = v.frame.comprehension
		v.frame.comprehension = res
		for nexpr in self.n_exprs do
			v.stmt(nexpr)
		end
		v.frame.comprehension = old_comprehension

		return res
	end
end
src/compiler/abstract_compiler.nit:4133,1--4149,3

nitc :: transform $ AArrayExpr
redef class AArrayExpr
	# `[x,y]` is replaced with
	#
	# ~~~nitish
	# var t = new Array[X].with_capacity(2)
	# t.add(x)
	# t.add(y)
	# t
	# ~~~
	redef fun full_transform_visitor(v)
	do
		if is_broken then return # Skip broken

		var nblock = v.builder.make_block

		var nnew = v.builder.make_new(with_capacity_callsite.as(not null), [v.builder.make_int(n_exprs.length)])
		self.nnew = nnew

		nblock.add nnew

		super

		for nexpr in self.n_exprs do
			nblock.add nexpr
		end
		var nres = nnew.make_var_read
		nblock.add nres

		replace_with(nblock)
	end

	private var nnew: ANewExpr is noinit
end
src/transform.nit:361,1--393,3