touched evaluator code
This commit is contained in:
parent
cbf8d0e54e
commit
9a426594a3
File diff suppressed because it is too large
Load Diff
@ -80,7 +80,7 @@ procedure Execute (Interp: in out Interpreter_Record) is
|
|||||||
if Is_Cons(O) then
|
if Is_Cons(O) then
|
||||||
Reload_Frame (Interp, Opcode_Grouped_Call, O);
|
Reload_Frame (Interp, Opcode_Grouped_Call, O);
|
||||||
else
|
else
|
||||||
Pop_Frame (Interp);
|
Pop_Frame (Interp); -- no <expression> to evaluate
|
||||||
end if;
|
end if;
|
||||||
else
|
else
|
||||||
O := Get_Cdr(O); -- next <clause> list
|
O := Get_Cdr(O); -- next <clause> list
|
||||||
@ -96,7 +96,7 @@ procedure Execute (Interp: in out Interpreter_Record) is
|
|||||||
if Is_Cons(O) then
|
if Is_Cons(O) then
|
||||||
Reload_Frame (Interp, Opcode_Grouped_Call, O);
|
Reload_Frame (Interp, Opcode_Grouped_Call, O);
|
||||||
else
|
else
|
||||||
Pop_Frame (Interp);
|
Pop_Frame (Interp); -- no <expression> to evaluate
|
||||||
end if;
|
end if;
|
||||||
else
|
else
|
||||||
Switch_Frame (Interp.Stack, Opcode_Evaluate_Object, Get_Car(R), Nil_Pointer);
|
Switch_Frame (Interp.Stack, Opcode_Evaluate_Object, Get_Car(R), Nil_Pointer);
|
||||||
|
@ -1863,6 +1863,7 @@ end if;
|
|||||||
Interp.Self := Aliased_Interp'Unchecked_Access;
|
Interp.Self := Aliased_Interp'Unchecked_Access;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
Interp.State := 0;
|
||||||
Interp.Storage_Pool := Storage_Pool;
|
Interp.Storage_Pool := Storage_Pool;
|
||||||
Interp.Symbol_Table := Nil_Pointer;
|
Interp.Symbol_Table := Nil_Pointer;
|
||||||
|
|
||||||
|
@ -163,6 +163,7 @@ package H2.Scheme is
|
|||||||
-- represents the value that can be stored in this field.
|
-- represents the value that can be stored in this field.
|
||||||
type Object_Flags is mod 2 ** 4;
|
type Object_Flags is mod 2 ** 4;
|
||||||
Syntax_Object: constant Object_Flags := Object_Flags'(2#0001#);
|
Syntax_Object: constant Object_Flags := Object_Flags'(2#0001#);
|
||||||
|
Syntax_Checked: constant Object_Flags := Object_Flags'(2#0010#);
|
||||||
|
|
||||||
type Syntax_Code is (
|
type Syntax_Code is (
|
||||||
And_Syntax,
|
And_Syntax,
|
||||||
@ -503,9 +504,13 @@ private
|
|||||||
Data: Top_Array(1 .. 100) := (others => null);
|
Data: Top_Array(1 .. 100) := (others => null);
|
||||||
end record;
|
end record;
|
||||||
|
|
||||||
|
type Interpreter_State is mod 2 ** 4;
|
||||||
|
Force_Syntax_Check: constant Interpreter_State := Interpreter_State'(2#0001#);
|
||||||
|
|
||||||
--type Interpreter_Record is tagged limited record
|
--type Interpreter_Record is tagged limited record
|
||||||
type Interpreter_Record is limited record
|
type Interpreter_Record is limited record
|
||||||
Self: Interpreter_Pointer := Interpreter_Record'Unchecked_Access; -- Current instance's pointer
|
Self: Interpreter_Pointer := Interpreter_Record'Unchecked_Access; -- Current instance's pointer
|
||||||
|
State: Interpreter_State := 0; -- Internal housekeeping state
|
||||||
|
|
||||||
Storage_Pool: Storage_Pool_Pointer := null;
|
Storage_Pool: Storage_Pool_Pointer := null;
|
||||||
Trait: Option_Record(Trait_Option);
|
Trait: Option_Record(Trait_Option);
|
||||||
|
Loading…
Reference in New Issue
Block a user