with Ada.Containers; use Ada.Containers;
with Ada.Containers.Doubly_Linked_Lists;
with Objects; use Objects;
with Tokens; use Tokens;
package Scripting.Expressions is
type Expression is abstract new Limited_Object with private;
type A_Expression is access all Expression'Class;
function Evaluate( this : access Expression;
context : not null A_Eval_Context ) return Value_Ptr is abstract;
procedure Delete( this : in out A_Expression );
pragma Postcondition( this = null );
package Expression_Lists is new Ada.Containers.Doubly_Linked_Lists( A_Expression, "=" );
procedure Delete_Contents( expressions : in out Expression_Lists.List );
pragma Postcondition( Expression_Lists.Length( expressions ) = 0 );
private
type Expression is abstract new Limited_Object with
record
loc : Token_Location;
end record;
procedure Construct( this : access Expression; loc : Token_Location );
end Scripting.Expressions;