assert e.parent == parent
e.parent = null
end
+
+ # Used in parent contructor to fill elements
+ private fun unsafe_add_all(nodes: Collection[Object])
+ do
+ var parent = self.parent
+ for n in nodes do
+ assert n isa E
+ add n
+ n.parent = parent
+ end
+ end
+
+ private fun replace_child(old_child: ANode, new_child: nullable ANode): Bool
+ do
+ var parent = self.parent
+ for i in [0..length[ do
+ if self[i] == old_child then
+ if new_child != null then
+ assert new_child isa E
+ self[i] = new_child
+ new_child.parent = parent
+ else
+ self.remove_at(i)
+ end
+ return true
+ end
+ end
+ return false
+ end
+
+ private fun visit_all(v: Visitor)
+ do
+ for n in self do v.enter_visit(n)
+ end
end
# Ancestor of all tokens
return "keyword '{text}'"
end
end
+class TKwpackage
+ super TokenKeyword
+end
class TKwmodule
super TokenKeyword
end
class TKwextern
super TokenKeyword
end
+class TKwpublic
+ super TokenKeyword
+end
class TKwprotected
super TokenKeyword
end
class TNumber
super TokenLiteral
end
+class THexNumber
+ super TokenLiteral
+end
class TFloat
super TokenLiteral
end
abstract class APropdef
super Prod
readable writable var _n_doc: nullable ADoc = null
+ readable writable var _n_kwredef: nullable TKwredef = null
+ readable writable var _n_visibility: nullable AVisibility = null
end
# A definition of an attribute
# For historical reason, old-syle and new-style attributes use the same `ANode` sub-class
class AAttrPropdef
super APropdef
- readable writable var _n_kwredef: nullable TKwredef = null
- readable writable var _n_visibility: AVisibility
readable writable var _n_kwvar: TKwvar
# The identifier for an old-style attribute (null if new-style)
# A definition of all kind of method (including constructors)
abstract class AMethPropdef
super APropdef
- readable writable var _n_kwredef: nullable TKwredef = null
- readable writable var _n_visibility: nullable AVisibility
+ readable writable var _n_kwmeth: nullable TKwmeth
+ readable writable var _n_kwinit: nullable TKwinit
+ readable writable var _n_kwnew: nullable TKwnew
readable writable var _n_methid: nullable AMethid = null
readable writable var _n_signature: nullable ASignature
+ readable writable var _n_block: nullable AExpr = null
+ readable writable var _n_extern: nullable TString = null
+ readable writable var _n_extern_calls: nullable AExternCalls = null
+ readable writable var _n_extern_code_block: nullable AExternCodeBlock = null
redef fun hot_location
do
if n_methid != null then
return n_methid.location
+ else if n_kwinit != null then
+ return n_kwinit.location
+ else if n_kwnew != null then
+ return n_kwnew.location
else
return location
end
# *deferred* is a old synonynmous of *abstract* that comes from PRM, that comes from Eiffel.
class ADeferredMethPropdef
super AMethPropdef
- readable writable var _n_kwmeth: TKwmeth
end
# A method marked intern
class AInternMethPropdef
super AMethPropdef
- readable writable var _n_kwmeth: TKwmeth
end
# A method of a constructor marked extern
abstract class AExternPropdef
super AMethPropdef
- readable writable var _n_extern: nullable TString = null
- readable writable var _n_extern_calls: nullable AExternCalls = null
- readable writable var _n_extern_code_block: nullable AExternCodeBlock = null
end
# A method marked extern
class AExternMethPropdef
super AExternPropdef
- readable writable var _n_kwmeth: TKwmeth
end
# A method with a body
class AConcreteMethPropdef
super AMethPropdef
- readable writable var _n_kwmeth: nullable TKwmeth
- readable writable var _n_block: nullable AExpr = null
end
# A constructor
class AConcreteInitPropdef
super AConcreteMethPropdef
super AInitPropdef
- readable writable var _n_kwinit: TKwinit
- redef fun hot_location do return n_kwinit.location
end
# A constructor marked extern (defined with the `new` keyword)
class AExternInitPropdef
super AExternPropdef
super AInitPropdef
- readable writable var _n_kwnew: TKwnew
end
# The implicit main method
end
class AFullPropExternCall
super APropExternCall
- readable writable var _n_classid: TClassid
- readable writable var _n_quad: nullable TQuad = null
+ readable writable var _n_type: AType
+ readable writable var _n_dot: nullable TDot = null
readable writable var _n_methid: AMethid
end
class AInitPropExternCall
super APropExternCall
- readable writable var _n_classid: TClassid
+ readable writable var _n_type: AType
end
class ASuperExternCall
super AExternCall
class ACastAsExternCall
super ACastExternCall
readable writable var _n_from_type: AType
+ readable writable var _n_dot: nullable TDot = null
readable writable var _n_kwas: TKwas
readable writable var _n_to_type: AType
end
# A definition of a virtual type
class ATypePropdef
super APropdef
- readable writable var _n_kwredef: nullable TKwredef = null
- readable writable var _n_visibility: AVisibility
readable writable var _n_kwtype: TKwtype
readable writable var _n_id: TClassid
readable writable var _n_type: AType
readable var _n_params: ANodes[AParam] = new ANodes[AParam](self)
readable writable var _n_cpar: nullable TCpar = null
readable writable var _n_type: nullable AType = null
- readable var _n_closure_decls: ANodes[AClosureDecl] = new ANodes[AClosureDecl](self)
end
# A parameter definition in a signature. eg `x:X`
readable writable var _n_dotdotdot: nullable TDotdotdot = null
end
-class AClosureDecl
- super Prod
- readable writable var _n_kwbreak: nullable TKwbreak = null
- readable writable var _n_bang: TBang
- readable writable var _n_id: TId
- readable writable var _n_signature: ASignature
- readable writable var _n_expr: nullable AExpr = null
-end
-
# A static type. eg `nullable X[Y]`
class AType
super Prod
super AExpr
# The receiver of the method invocation
readable writable var _n_expr: AExpr
- readable var _n_closure_defs: ANodes[AClosureDef] = new ANodes[AClosureDef](self)
end
# A binary operation on a method
super ABinopExpr
end
-# A `is` expression
-class AEeExpr
- super ABoolExpr
- readable writable var _n_expr: AExpr
- readable writable var _n_expr2: AExpr
-end
-
# A `!=` expression
class ANeExpr
super ABinopExpr
super ASendReassignFormExpr
end
-class AClosureCallExpr
- super AExpr
- readable writable var _n_id: TId
- readable writable var _n_args: AExprs
- readable var _n_closure_defs: ANodes[AClosureDef] = new ANodes[AClosureDef](self)
-end
-
# A local variable read access.
# The parser cannot instantiate them, see `ACallExpr`.
class AVarExpr
# An integer literal
class AIntExpr
super AExpr
+end
+# An integer literal in decimal format
+class ADecIntExpr
+ super AIntExpr
readable writable var _n_number: TNumber
end
+# An integer literal in hexadecimal format
+class AHexIntExpr
+ super AIntExpr
+ readable writable var _n_hex_number: THexNumber
+end
# A float literal
class AFloatExpr
super AExpr
super AExpr
readable writable var _n_expr: AExpr
readable writable var _n_kwas: TKwas
- readable writable var _n_opar: TOpar
+ readable writable var _n_opar: nullable TOpar = null
readable writable var _n_type: AType
- readable writable var _n_cpar: TCpar
+ readable writable var _n_cpar: nullable TCpar = null
end
# A as-not-null cast. eg `x.as(not null)`
super AExpr
readable writable var _n_expr: AExpr
readable writable var _n_kwas: TKwas
- readable writable var _n_opar: TOpar
+ readable writable var _n_opar: nullable TOpar = null
readable writable var _n_kwnot: TKwnot
readable writable var _n_kwnull: TKwnull
- readable writable var _n_cpar: TCpar
+ readable writable var _n_cpar: nullable TCpar = null
end
# A is-set check of old-style attributes. eg `isset x._a`
readable writable var _n_minuseq: TMinuseq
end
-class AClosureDef
- super ALabelable
- readable writable var _n_bang: TBang
- readable writable var _n_id: AClosureId
- readable var _n_ids: ANodes[TId] = new ANodes[TId](self)
- readable writable var _n_kwdo: nullable TKwdo = null
- readable writable var _n_expr: nullable AExpr = null
- redef fun hot_location do return n_id.location
-end
-abstract class AClosureId
- super Prod
-end
-class ASimpleClosureId
- super AClosureId
- readable writable var _n_id: TId
-end
-class ABreakClosureId
- super AClosureId
- readable writable var _n_kwbreak: TKwbreak
-end
class AModuleName
super Prod
readable writable var _n_quad: nullable TQuad = null