started implementing let
This commit is contained in:
		| @ -45,7 +45,6 @@ procedure Evaluate is | |||||||
| 			Ada.Text_IO.Put_LINE ("NO SYMBOL NOR ARGUMENT LIST AFTER DEFINE"); | 			Ada.Text_IO.Put_LINE ("NO SYMBOL NOR ARGUMENT LIST AFTER DEFINE"); | ||||||
| 			raise Syntax_Error;	 | 			raise Syntax_Error;	 | ||||||
| 		end if; | 		end if; | ||||||
|  |  | ||||||
| 	end Evaluate_Define_Syntax; | 	end Evaluate_Define_Syntax; | ||||||
|  |  | ||||||
| 	procedure Evaluate_If_Syntax is | 	procedure Evaluate_If_Syntax is | ||||||
| @ -110,13 +109,14 @@ Ada.Text_IO.Put_Line ("NO ALTERNATE"); | |||||||
| 		if not Is_Cons(Operand) then | 		if not Is_Cons(Operand) then | ||||||
| 			-- e.g) (lambda) | 			-- e.g) (lambda) | ||||||
| 			--      (lambda . 10) | 			--      (lambda . 10) | ||||||
| 			Ada.Text_IO.Put_LINE ("FUCKNING CDR FOR BEGIN"); | 			Ada.Text_IO.Put_LINE ("FUCKNING CDR FOR LAMBDA"); | ||||||
| 			raise Syntax_Error; | 			raise Syntax_Error; | ||||||
| 		end if; | 		end if; | ||||||
|  |  | ||||||
| 		Car := Get_Car(Operand);  -- <formals> | 		Car := Get_Car(Operand);  -- <formals> | ||||||
| 		if Is_Symbol(Car) then | 		if Is_Symbol(Car) then | ||||||
| 			-- (lambda x ...) | 			-- (lambda x ...) | ||||||
|  | 			-- nothing to do. | ||||||
| 			null;	 | 			null;	 | ||||||
| 		elsif Is_Cons(Car) then  | 		elsif Is_Cons(Car) then  | ||||||
| 			declare | 			declare | ||||||
| @ -178,6 +178,86 @@ Ada.Text_IO.Put_Line ("NO ALTERNATE"); | |||||||
| 		end; | 		end; | ||||||
| 	end Evaluate_Lambda_Syntax; | 	end Evaluate_Lambda_Syntax; | ||||||
|  |  | ||||||
|  | 	procedure Evaluate_Let_Syntax is | ||||||
|  | 		pragma Inline (Evaluate_Let_Syntax); | ||||||
|  | 	begin | ||||||
|  | 		-- let <bindings> <body> | ||||||
|  | 		Operand := Cdr; -- Skip "let". | ||||||
|  | 		if not Is_Cons(Operand) then | ||||||
|  | 			-- e.g) (let) | ||||||
|  | 			--      (let . 10) | ||||||
|  | 			Ada.Text_IO.Put_LINE ("FUCKNING CDR FOR LET"); | ||||||
|  | 			raise Syntax_Error; | ||||||
|  | 		end if; | ||||||
|  |  | ||||||
|  | 		Car := Get_Car(Operand);  -- <bindings> | ||||||
|  | 		if not Is_Cons(Car) then | ||||||
|  | 			Ada.Text_IO.Put_Line ("INVALID BINDINGS FOR LET"); | ||||||
|  | 			raise Syntax_Error; | ||||||
|  | 		end if; | ||||||
|  |  | ||||||
|  | 		Cdr := Get_Cdr(Operand); -- cons cell to <body> | ||||||
|  | 		if not Is_Cons(Cdr) then | ||||||
|  | 			-- (let ((x 2)) ) | ||||||
|  | 			-- (let ((x 2)) . 99) | ||||||
|  | 			Ada.Text_IO.Put_Line ("INVALID BODY FOR LET"); | ||||||
|  | 			raise Syntax_Error; | ||||||
|  | 		end if; | ||||||
|  |  | ||||||
|  | 		Set_Frame_Opcode (Interp.Stack, Opcode_Finish_Let); | ||||||
|  | 		Set_Frame_Operand (Interp.Stack, Operand);  | ||||||
|  |  | ||||||
|  | 		declare | ||||||
|  | 			Bindings: aliased Object_Pointer := Car; | ||||||
|  | 			Binding_Name: Object_Pointer; | ||||||
|  | 			Binding_Value: Object_Pointer; | ||||||
|  | 			V: Object_Pointer; | ||||||
|  | 		begin | ||||||
|  | 			Push_Top (Interp, Bindings'Unchecked_Access); | ||||||
|  |  | ||||||
|  | 			Cdr := Bindings; | ||||||
|  | 			loop | ||||||
|  | 				Car := Get_Car(Cdr); -- <binding> | ||||||
|  | 				if not Is_Cons(Car) or else not Is_Cons(Get_Cdr(Car)) or else Get_Cdr(Get_Cdr(Car)) /= Nil_Pointer then | ||||||
|  | 					Ada.Text_IO.Put_Line ("WRONG BINDING FOR LET"); | ||||||
|  | 					raise Syntax_Error; | ||||||
|  | 				end if; | ||||||
|  |  | ||||||
|  | 				Binding_Name := Get_Car(Car); | ||||||
|  | 				if not Is_Symbol(Binding_Name) then | ||||||
|  | 					Ada.Text_IO.Put_Line ("WRONG BINDING NAME FOR LET"); | ||||||
|  | 					raise Syntax_Error; | ||||||
|  | 				end if; | ||||||
|  |  | ||||||
|  | 				Binding_Value := Get_Car(Get_Cdr(Car)); | ||||||
|  | 				Push_Frame (Interp, Opcode_Evaluate_Object, Binding_Value); | ||||||
|  | -- TODO: check duplicate | ||||||
|  | 				--V := Formals; | ||||||
|  | 				--loop | ||||||
|  | 				--	exit when V = Cdr; | ||||||
|  |  | ||||||
|  | 				--	if Get_Car(V) = Car then | ||||||
|  | 				--		Ada.Text_IO.Put_Line ("DUPLICATE BINDING FOR LET"); | ||||||
|  | 				--		raise Syntax_Error; | ||||||
|  | 				--	end if; | ||||||
|  | -- | ||||||
|  | --					V := Get_Cdr(V); | ||||||
|  | --				end loop; | ||||||
|  |  | ||||||
|  | 				Cdr := Get_Cdr(Cdr); | ||||||
|  | 				exit when not Is_Cons(Cdr); | ||||||
|  | 			end loop; | ||||||
|  |  | ||||||
|  | 			Pop_Tops (Interp, 1); | ||||||
|  | 		end; | ||||||
|  |  | ||||||
|  | --		if Cdr /= Nil_Pointer and then not Is_Symbol(Cdr) then | ||||||
|  | --			Ada.Text_IO.Put_Line ("FUCKING CDR IN FORMALS FOR LAMBDA"); | ||||||
|  | --			raise Syntax_Error; | ||||||
|  | --		end if; | ||||||
|  |  | ||||||
|  | 	end Evaluate_Let_Syntax; | ||||||
|  |  | ||||||
| 	procedure Evaluate_Quote_Syntax is | 	procedure Evaluate_Quote_Syntax is | ||||||
| 		pragma Inline (Evaluate_Quote_Syntax); | 		pragma Inline (Evaluate_Quote_Syntax); | ||||||
| 	begin | 	begin | ||||||
| @ -302,6 +382,9 @@ begin | |||||||
| 					when Lambda_Syntax => | 					when Lambda_Syntax => | ||||||
| 						Evaluate_Lambda_Syntax; | 						Evaluate_Lambda_Syntax; | ||||||
|  |  | ||||||
|  | 					when Let_Syntax => | ||||||
|  | 						Evaluate_Let_Syntax; | ||||||
|  |  | ||||||
| 					when Quote_Syntax => | 					when Quote_Syntax => | ||||||
| 						Evaluate_Quote_Syntax; | 						Evaluate_Quote_Syntax; | ||||||
|  |  | ||||||
|  | |||||||
| @ -135,6 +135,13 @@ procedure Execute (Interp: in out Interpreter_Record) is | |||||||
| 		Pop_Tops (Interp, 2); | 		Pop_Tops (Interp, 2); | ||||||
| 	end Finish_If; | 	end Finish_If; | ||||||
|  |  | ||||||
|  | 	procedure Finish_Let is | ||||||
|  | 		pragma Inline (Finish_Let); | ||||||
|  | 	begin | ||||||
|  | ada.text_io.put_line ("Finish_Let"); | ||||||
|  | 		null; | ||||||
|  | 	end Finish_Let; | ||||||
|  |  | ||||||
| 	procedure Finish_Set is | 	procedure Finish_Set is | ||||||
| 		pragma Inline (Finish_Set); | 		pragma Inline (Finish_Set); | ||||||
| 		X: aliased Object_Pointer; | 		X: aliased Object_Pointer; | ||||||
| @ -288,6 +295,8 @@ procedure Execute (Interp: in out Interpreter_Record) is | |||||||
| 				-- #t | 				-- #t | ||||||
| 				-- #f | 				-- #f | ||||||
| 				-- #\C -- character | 				-- #\C -- character | ||||||
|  | 				-- #\xHHHH -- unicode | ||||||
|  | 				-- #\xHHHHHHHH -- unicode | ||||||
| 				-- #( ) -- vector | 				-- #( ) -- vector | ||||||
| 				-- #[ ] -- list | 				-- #[ ] -- list | ||||||
| 				-- #{ } -- hash table | 				-- #{ } -- hash table | ||||||
| @ -322,6 +331,7 @@ procedure Execute (Interp: in out Interpreter_Record) is | |||||||
|  |  | ||||||
| 						if Interp.Token.Value.Last > 1 then | 						if Interp.Token.Value.Last > 1 then | ||||||
| 							-- TODO: case insensitive match. binary search for more diverse words | 							-- TODO: case insensitive match. binary search for more diverse words | ||||||
|  | 							-- TODO: #\xHHHH.... | ||||||
| 							if Interp.Token.Value.Ptr.all(1..Interp.Token.Value.Last) = Label_Newline then | 							if Interp.Token.Value.Ptr.all(1..Interp.Token.Value.Last) = Label_Newline then | ||||||
| 								Token.Set (Interp, Character_Token, Ch.LF);  -- reset the token to LF | 								Token.Set (Interp, Character_Token, Ch.LF);  -- reset the token to LF | ||||||
| 							elsif Interp.Token.Value.Ptr.all(1..Interp.Token.Value.Last) = Label_Space then | 							elsif Interp.Token.Value.Ptr.all(1..Interp.Token.Value.Last) = Label_Space then | ||||||
| @ -788,6 +798,9 @@ begin | |||||||
| 			when Opcode_Finish_If => | 			when Opcode_Finish_If => | ||||||
| 				Finish_If; | 				Finish_If; | ||||||
|  |  | ||||||
|  | 			when Opcode_Finish_Let => | ||||||
|  | 				Finish_Let; | ||||||
|  |  | ||||||
| 			when Opcode_Finish_Set => | 			when Opcode_Finish_Set => | ||||||
| 				Finish_Set; | 				Finish_Set; | ||||||
| 				 | 				 | ||||||
|  | |||||||
| @ -31,12 +31,15 @@ package body H2.Scheme is | |||||||
| 	Label_Case:       constant Object_Character_Array := (Ch.LC_C, Ch.LC_A, Ch.LC_S, Ch.LC_E); -- "case" | 	Label_Case:       constant Object_Character_Array := (Ch.LC_C, Ch.LC_A, Ch.LC_S, Ch.LC_E); -- "case" | ||||||
| 	Label_Cond:       constant Object_Character_Array := (Ch.LC_C, Ch.LC_O, Ch.LC_N, Ch.LC_D); -- "cond" | 	Label_Cond:       constant Object_Character_Array := (Ch.LC_C, Ch.LC_O, Ch.LC_N, Ch.LC_D); -- "cond" | ||||||
| 	Label_Define:     constant Object_Character_Array := (Ch.LC_D, Ch.LC_E, Ch.LC_F, Ch.LC_I, Ch.LC_N, Ch.LC_E); -- "define" | 	Label_Define:     constant Object_Character_Array := (Ch.LC_D, Ch.LC_E, Ch.LC_F, Ch.LC_I, Ch.LC_N, Ch.LC_E); -- "define" | ||||||
|  | 	Label_Do:         constant Object_Character_Array := (Ch.LC_D, Ch.LC_O); -- "do" | ||||||
| 	Label_If:         constant Object_Character_Array := (Ch.LC_I, Ch.LC_F); -- "if" | 	Label_If:         constant Object_Character_Array := (Ch.LC_I, Ch.LC_F); -- "if" | ||||||
| 	Label_Lambda:     constant Object_Character_Array := (Ch.LC_L, Ch.LC_A, Ch.LC_M, Ch.LC_B, Ch.LC_D, Ch.LC_A); -- "lambda" | 	Label_Lambda:     constant Object_Character_Array := (Ch.LC_L, Ch.LC_A, Ch.LC_M, Ch.LC_B, Ch.LC_D, Ch.LC_A); -- "lambda" | ||||||
| 	Label_Let:        constant Object_Character_Array := (Ch.LC_L, Ch.LC_E, Ch.LC_T); -- "let" | 	Label_Let:        constant Object_Character_Array := (Ch.LC_L, Ch.LC_E, Ch.LC_T); -- "let" | ||||||
| 	Label_Letast:     constant Object_Character_Array := (Ch.LC_L, Ch.LC_E, Ch.LC_T, Ch.Asterisk); -- "let*" | 	Label_Letast:     constant Object_Character_Array := (Ch.LC_L, Ch.LC_E, Ch.LC_T, Ch.Asterisk); -- "let*" | ||||||
| 	Label_Letrec:     constant Object_Character_Array := (Ch.LC_L, Ch.LC_E, Ch.LC_T, Ch.LC_R, Ch.LC_E, Ch.LC_C); -- "letrec" | 	Label_Letrec:     constant Object_Character_Array := (Ch.LC_L, Ch.LC_E, Ch.LC_T, Ch.LC_R, Ch.LC_E, Ch.LC_C); -- "letrec" | ||||||
| 	Label_Or:         constant Object_Character_Array := (Ch.LC_O, Ch.LC_R); -- "or" | 	Label_Or:         constant Object_Character_Array := (Ch.LC_O, Ch.LC_R); -- "or" | ||||||
|  | 	Label_Quasiquote: constant Object_Character_Array := (Ch.LC_Q, Ch.LC_U, Ch.LC_A, Ch.LC_S, Ch.LC_I,  | ||||||
|  | 	                                                      Ch.LC_Q, Ch.LC_U, Ch.LC_O, Ch.LC_T, Ch.LC_E); -- "quasiquote" | ||||||
| 	Label_Quote:      constant Object_Character_Array := (Ch.LC_Q, Ch.LC_U, Ch.LC_O, Ch.LC_T, Ch.LC_E); -- "quote" | 	Label_Quote:      constant Object_Character_Array := (Ch.LC_Q, Ch.LC_U, Ch.LC_O, Ch.LC_T, Ch.LC_E); -- "quote" | ||||||
| 	Label_Set:        constant Object_Character_Array := (Ch.LC_S, Ch.LC_E, Ch.LC_T, Ch.Exclamation); -- "set!" | 	Label_Set:        constant Object_Character_Array := (Ch.LC_S, Ch.LC_E, Ch.LC_T, Ch.Exclamation); -- "set!" | ||||||
|  |  | ||||||
| @ -80,21 +83,22 @@ package body H2.Scheme is | |||||||
|  |  | ||||||
| 	subtype Moved_Object_Record is Object_Record (Moved_Object, 0); | 	subtype Moved_Object_Record is Object_Record (Moved_Object, 0); | ||||||
|  |  | ||||||
| 	subtype Opcode_Type is Object_Integer range 0 .. 13; | 	subtype Opcode_Type is Object_Integer range 0 .. 14; | ||||||
| 	Opcode_Exit:                 constant Opcode_Type := Opcode_Type'(0); | 	Opcode_Exit:                 constant Opcode_Type := Opcode_Type'(0); | ||||||
| 	Opcode_Evaluate_Result:      constant Opcode_Type := Opcode_Type'(1); | 	Opcode_Evaluate_Result:      constant Opcode_Type := Opcode_Type'(1); | ||||||
| 	Opcode_Evaluate_Object:      constant Opcode_Type := Opcode_Type'(2); | 	Opcode_Evaluate_Object:      constant Opcode_Type := Opcode_Type'(2); | ||||||
| 	Opcode_Evaluate_Group:       constant Opcode_Type := Opcode_Type'(3); -- (begin ...) and closure apply | 	Opcode_Evaluate_Group:       constant Opcode_Type := Opcode_Type'(3); -- (begin ...) and closure apply | ||||||
| 	Opcode_Finish_Define_Symbol: constant Opcode_Type := Opcode_Type'(4);  | 	Opcode_Finish_Define_Symbol: constant Opcode_Type := Opcode_Type'(4);  | ||||||
| 	Opcode_Finish_If:            constant Opcode_Type := Opcode_Type'(5);  | 	Opcode_Finish_If:            constant Opcode_Type := Opcode_Type'(5);  | ||||||
| 	Opcode_Finish_Set:           constant Opcode_Type := Opcode_Type'(6);  | 	Opcode_Finish_Let:           constant Opcode_Type := Opcode_Type'(6);  | ||||||
| 	Opcode_Apply:                constant Opcode_Type := Opcode_Type'(7); | 	Opcode_Finish_Set:           constant Opcode_Type := Opcode_Type'(7);  | ||||||
| 	Opcode_Read_Object:          constant Opcode_Type := Opcode_Type'(8); | 	Opcode_Apply:                constant Opcode_Type := Opcode_Type'(8); | ||||||
| 	Opcode_Read_List:            constant Opcode_Type := Opcode_Type'(9); | 	Opcode_Read_Object:          constant Opcode_Type := Opcode_Type'(9); | ||||||
| 	Opcode_Read_List_Cdr:        constant Opcode_Type := Opcode_Type'(10); | 	Opcode_Read_List:            constant Opcode_Type := Opcode_Type'(10); | ||||||
| 	Opcode_Read_List_End:        constant Opcode_Type := Opcode_Type'(11); | 	Opcode_Read_List_Cdr:        constant Opcode_Type := Opcode_Type'(11); | ||||||
| 	Opcode_Close_List:           constant Opcode_Type := Opcode_Type'(12); | 	Opcode_Read_List_End:        constant Opcode_Type := Opcode_Type'(12); | ||||||
| 	Opcode_Close_Quote:          constant Opcode_Type := Opcode_Type'(13); | 	Opcode_Close_List:           constant Opcode_Type := Opcode_Type'(13); | ||||||
|  | 	Opcode_Close_Quote:          constant Opcode_Type := Opcode_Type'(14); | ||||||
|  |  | ||||||
| 	----------------------------------------------------------------------------- | 	----------------------------------------------------------------------------- | ||||||
| 	-- COMMON OBJECTS | 	-- COMMON OBJECTS | ||||||
| @ -739,6 +743,7 @@ ada.text_io.put_line ("HEAP SOURCE IS NIL"); | |||||||
| 		-- Migrate the symbol table itself | 		-- Migrate the symbol table itself | ||||||
| 		Interp.Symbol_Table := Move_One_Object(Interp.Symbol_Table); | 		Interp.Symbol_Table := Move_One_Object(Interp.Symbol_Table); | ||||||
| 		Interp.Symbol.Arrow := Move_One_Object(Interp.Symbol.Arrow); | 		Interp.Symbol.Arrow := Move_One_Object(Interp.Symbol.Arrow); | ||||||
|  | 		Interp.Symbol.Quasiquote := Move_One_Object(Interp.Symbol.Quasiquote); | ||||||
| 		Interp.Symbol.Quote := Move_One_Object(Interp.Symbol.Quote); | 		Interp.Symbol.Quote := Move_One_Object(Interp.Symbol.Quote); | ||||||
|  |  | ||||||
| 		-- Update temporary object pointers that were pointing to the symbol table | 		-- Update temporary object pointers that were pointing to the symbol table | ||||||
| @ -1606,6 +1611,7 @@ Ada.Text_IO.Put_Line ("Make_String..."); | |||||||
| 			Dummy := Make_Syntax (Interp.Self, Case_Syntax,   Label_Case); -- "case" | 			Dummy := Make_Syntax (Interp.Self, Case_Syntax,   Label_Case); -- "case" | ||||||
| 			Dummy := Make_Syntax (Interp.Self, Cond_Syntax,   Label_Cond); -- "cond" | 			Dummy := Make_Syntax (Interp.Self, Cond_Syntax,   Label_Cond); -- "cond" | ||||||
| 			Dummy := Make_Syntax (Interp.Self, Define_Syntax, Label_Define); -- "define" | 			Dummy := Make_Syntax (Interp.Self, Define_Syntax, Label_Define); -- "define" | ||||||
|  | 			Dummy := Make_Syntax (Interp.Self, Do_Syntax,     Label_Do); -- "do" | ||||||
| 			Dummy := Make_Syntax (Interp.Self, If_Syntax,     Label_If); -- "if" | 			Dummy := Make_Syntax (Interp.Self, If_Syntax,     Label_If); -- "if" | ||||||
| 			Dummy := Make_Syntax (Interp.Self, Lambda_Syntax, Label_Lambda); -- "lamba" | 			Dummy := Make_Syntax (Interp.Self, Lambda_Syntax, Label_Lambda); -- "lamba" | ||||||
| 			Dummy := Make_Syntax (Interp.Self, Let_Syntax,    Label_Let); -- "let" | 			Dummy := Make_Syntax (Interp.Self, Let_Syntax,    Label_Let); -- "let" | ||||||
| @ -1613,6 +1619,7 @@ Ada.Text_IO.Put_Line ("Make_String..."); | |||||||
| 			Dummy := Make_Syntax (Interp.Self, Letrec_Syntax, Label_Letrec); -- "letrc" | 			Dummy := Make_Syntax (Interp.Self, Letrec_Syntax, Label_Letrec); -- "letrc" | ||||||
| 			Dummy := Make_Syntax (Interp.Self, Or_Syntax,     Label_Or); -- "or" | 			Dummy := Make_Syntax (Interp.Self, Or_Syntax,     Label_Or); -- "or" | ||||||
| 			Interp.Symbol.Quote := Make_Syntax (Interp.Self, Quote_Syntax,  Label_Quote); -- "quote" | 			Interp.Symbol.Quote := Make_Syntax (Interp.Self, Quote_Syntax,  Label_Quote); -- "quote" | ||||||
|  | 			Interp.Symbol.Quasiquote := Make_Syntax (Interp.Self, Quasiquote_Syntax,  Label_Quasiquote); -- "quasiquote" | ||||||
| 			Dummy := Make_Syntax (Interp.Self, Set_Syntax,    Label_Set); -- "set!" | 			Dummy := Make_Syntax (Interp.Self, Set_Syntax,    Label_Set); -- "set!" | ||||||
| 		end Make_Syntax_Objects; | 		end Make_Syntax_Objects; | ||||||
|  |  | ||||||
|  | |||||||
| @ -170,14 +170,16 @@ package H2.Scheme is | |||||||
| 	Case_Syntax:       constant Syntax_Code := Syntax_Code'(2); | 	Case_Syntax:       constant Syntax_Code := Syntax_Code'(2); | ||||||
| 	Cond_Syntax:       constant Syntax_Code := Syntax_Code'(3); | 	Cond_Syntax:       constant Syntax_Code := Syntax_Code'(3); | ||||||
| 	Define_Syntax:     constant Syntax_Code := Syntax_Code'(4); | 	Define_Syntax:     constant Syntax_Code := Syntax_Code'(4); | ||||||
| 	If_Syntax:     constant Syntax_Code := Syntax_Code'(5); | 	Do_Syntax:         constant Syntax_Code := Syntax_Code'(5); | ||||||
| 	Lambda_Syntax: constant Syntax_Code := Syntax_Code'(6); | 	If_Syntax:         constant Syntax_Code := Syntax_Code'(6); | ||||||
| 	Let_Syntax:    constant Syntax_Code := Syntax_Code'(7); | 	Lambda_Syntax:     constant Syntax_Code := Syntax_Code'(7); | ||||||
| 	Letast_Syntax: constant Syntax_Code := Syntax_Code'(8); | 	Let_Syntax:        constant Syntax_Code := Syntax_Code'(8); | ||||||
| 	Letrec_Syntax: constant Syntax_Code := Syntax_Code'(9); | 	Letast_Syntax:     constant Syntax_Code := Syntax_Code'(9); | ||||||
| 	Or_Syntax:     constant Syntax_Code := Syntax_Code'(10); | 	Letrec_Syntax:     constant Syntax_Code := Syntax_Code'(10); | ||||||
| 	Quote_Syntax:  constant Syntax_Code := Syntax_Code'(11); | 	Or_Syntax:         constant Syntax_Code := Syntax_Code'(11); | ||||||
| 	Set_Syntax:    constant Syntax_Code := Syntax_Code'(12); | 	Quasiquote_Syntax: constant Syntax_Code := Syntax_Code'(12); | ||||||
|  | 	Quote_Syntax:      constant Syntax_Code := Syntax_Code'(13); | ||||||
|  | 	Set_Syntax:        constant Syntax_Code := Syntax_Code'(14); | ||||||
|  |  | ||||||
| 	subtype Procedure_Code is Object_Integer; | 	subtype Procedure_Code is Object_Integer; | ||||||
| 	Add_Procedure:       constant Procedure_Code := Procedure_Code'(0); | 	Add_Procedure:       constant Procedure_Code := Procedure_Code'(0); | ||||||
| @ -473,8 +475,9 @@ private | |||||||
| 	end record; | 	end record; | ||||||
|  |  | ||||||
| 	type Common_Symbol_Record is record | 	type Common_Symbol_Record is record | ||||||
| 		Quote: Object_Pointer := Nil_Pointer; |  | ||||||
| 		Arrow:      Object_Pointer := Nil_Pointer; | 		Arrow:      Object_Pointer := Nil_Pointer; | ||||||
|  | 		Quasiquote: Object_Pointer := Nil_Pointer; | ||||||
|  | 		Quote:      Object_Pointer := Nil_Pointer; | ||||||
| 	end record; | 	end record; | ||||||
|  |  | ||||||
| 	--type Interpreter_Record is tagged limited record | 	--type Interpreter_Record is tagged limited record | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user