+ fun stype: MMType is abstract
+end
+
+class AAbsAbsSendExpr
+ super AExpr
+ # The signature of the called property (require is_typed)
+ fun prop_signature: MMSignature is abstract
+
+ # The raw arguments used (without vararg transformation) (require is_typed)
+ fun raw_arguments: Array[AExpr] is abstract
+end
+
+class AAbsSendExpr
+ super AAbsAbsSendExpr
+ # The invoked method (require is_typed)
+ fun prop: MMMethod is abstract
+
+ # The return type (if any) (once computed)
+ fun return_type: nullable MMType is abstract
+end
+
+class ASuperInitCall
+ super AAbsSendExpr
+end
+
+redef class ASuperExpr
+ super ASuperInitCall
+ fun init_in_superclass: nullable MMMethod is abstract
+end
+
+redef class ANewExpr
+ super AAbsSendExpr
+end
+
+redef class ASendExpr
+ super ASuperInitCall
+ # Closure definitions
+ fun closure_defs: nullable Array[AClosureDef] is abstract
+end
+
+redef class AReassignFormExpr
+ # Method used through the reassigment operator (require is_typed)
+ fun assign_method: MMMethod is abstract
+end
+
+class ASendReassignExpr
+ super ASendExpr
+ super AReassignFormExpr
+ # The invoked method used to read (require is_typed)
+ # prop is the method used to write
+ fun read_prop: MMMethod is abstract
+end
+
+redef class ACallReassignExpr
+ super ASendReassignExpr
+end
+
+redef class ABraReassignExpr
+ super ASendReassignExpr
+end
+
+redef class AAttrFormExpr
+ # Attribute accessed (require is_typed)
+ fun prop: MMAttribute is abstract
+
+ # Attribute type of the acceded attribute (require is_typed)
+ fun attr_type: MMType is abstract
+end
+
+redef class ASuperstringExpr
+ fun atype: MMType is abstract