added No_Optimization
This commit is contained in:
parent
29b7183205
commit
228a5d09db
@ -1925,13 +1925,16 @@ end Make_Test_Object;
|
|||||||
Set_Frame_Opcode (Interp.Stack, Opcode_Evaluate_Group);
|
Set_Frame_Opcode (Interp.Stack, Opcode_Evaluate_Group);
|
||||||
Set_Frame_Operand (Interp.Stack, Operand);
|
Set_Frame_Operand (Interp.Stack, Operand);
|
||||||
|
|
||||||
-- I call Evaluate_Group for optimizatio here.
|
|
||||||
|
if (Interp.Trait.Trait_Bits and No_Optimization) = 0 then
|
||||||
|
-- I call Evaluate_Group for optimization here.
|
||||||
Evaluate_Group; -- for optimization only. not really needed.
|
Evaluate_Group; -- for optimization only. not really needed.
|
||||||
-- I can jump to Start_Over because Evaluate_Group called
|
-- I can jump to Start_Over because Evaluate_Group called
|
||||||
-- above pushes an Opcode_Evaluate_Object frame.
|
-- above pushes an Opcode_Evaluate_Object frame.
|
||||||
pragma Assert (Get_Frame_Opcode(Interp.Stack) = Opcode_Evaluate_Object);
|
pragma Assert (Get_Frame_Opcode(Interp.Stack) = Opcode_Evaluate_Object);
|
||||||
goto Start_Over; -- for optimization only. not really needed.
|
goto Start_Over; -- for optimization only. not really needed.
|
||||||
end if;
|
end if;
|
||||||
|
end if;
|
||||||
when Define_Syntax =>
|
when Define_Syntax =>
|
||||||
Text_IO.Put_Line ("define syntax");
|
Text_IO.Put_Line ("define syntax");
|
||||||
Set_Frame_Opcode (Interp.Stack, Opcode_Evaluate_Syntax); -- switch to syntax evaluation
|
Set_Frame_Opcode (Interp.Stack, Opcode_Evaluate_Syntax); -- switch to syntax evaluation
|
||||||
@ -1940,6 +1943,7 @@ end Make_Test_Object;
|
|||||||
Set_Frame_Opcode (Interp.Stack, Opcode_Evaluate_Syntax); -- switch to syntax evaluation
|
Set_Frame_Opcode (Interp.Stack, Opcode_Evaluate_Syntax); -- switch to syntax evaluation
|
||||||
end case;
|
end case;
|
||||||
else
|
else
|
||||||
|
if (Interp.Trait.Trait_Bits and No_Optimization) = 0 then
|
||||||
while not Is_Normal_Pointer(Car) loop
|
while not Is_Normal_Pointer(Car) loop
|
||||||
-- This while block is for optimization only. It's not really needed.
|
-- This while block is for optimization only. It's not really needed.
|
||||||
-- If I know that the next object to evaluate is a literal object,
|
-- If I know that the next object to evaluate is a literal object,
|
||||||
@ -1961,6 +1965,7 @@ end Make_Test_Object;
|
|||||||
return;
|
return;
|
||||||
end if;
|
end if;
|
||||||
end loop;
|
end loop;
|
||||||
|
end if;
|
||||||
|
|
||||||
if Is_Cons(Cdr) then
|
if Is_Cons(Cdr) then
|
||||||
-- Not the last cons cell yet
|
-- Not the last cons cell yet
|
||||||
@ -1980,9 +1985,11 @@ end Make_Test_Object;
|
|||||||
end if;
|
end if;
|
||||||
|
|
||||||
-- Arrange to evaluate the car object
|
-- Arrange to evaluate the car object
|
||||||
|
if (Interp.Trait.Trait_Bits and No_Optimization) = 0 then
|
||||||
Push_Frame (Opcode_Evaluate_Object, Car);
|
Push_Frame (Opcode_Evaluate_Object, Car);
|
||||||
goto Start_Over; -- for optimization only. not really needed.
|
goto Start_Over; -- for optimization only. not really needed.
|
||||||
end if;
|
end if;
|
||||||
|
end if;
|
||||||
|
|
||||||
when Mark_Object =>
|
when Mark_Object =>
|
||||||
-- TODO: you can use the mark context to differentiate context
|
-- TODO: you can use the mark context to differentiate context
|
||||||
|
@ -257,7 +257,8 @@ package H2.Scheme is
|
|||||||
type Memory_Size is range 0 .. (2 ** (System.Word_Size - 1)) - 1;
|
type Memory_Size is range 0 .. (2 ** (System.Word_Size - 1)) - 1;
|
||||||
|
|
||||||
type Trait_Mask is mod 2 ** System.Word_Size;
|
type Trait_Mask is mod 2 ** System.Word_Size;
|
||||||
No_Garbage_Collection: constant Trait_Mask := 2 ** 0;
|
No_Garbage_Collection: constant Trait_Mask := 2#0000_0000_0000_0001#;
|
||||||
|
No_Optimization: constant Trait_Mask := 2#0000_0000_0000_0010#;
|
||||||
|
|
||||||
type Option_Kind is (Trait_Option);
|
type Option_Kind is (Trait_Option);
|
||||||
type Option_Record (Kind: Option_Kind) is record
|
type Option_Record (Kind: Option_Kind) is record
|
||||||
|
Loading…
x
Reference in New Issue
Block a user