From e5ed6e13a4adbbe61317194af36c33c82b33c90f Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sun, 25 Mar 2018 01:50:10 +0100 Subject: lost chapter --- object/object.go | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'object') diff --git a/object/object.go b/object/object.go index daafcac..7faf808 100644 --- a/object/object.go +++ b/object/object.go @@ -28,6 +28,8 @@ const ( ARRAY_OBJ = "ARRAY" HASH_OBJ = "HASH" + QUOTE_OBJ = "QUOTE" + MACRO_OBJ = "MACRO" ) type HashKey struct { @@ -181,3 +183,37 @@ func (h *Hash) Inspect() string { return out.String() } + +type Quote struct { + Node ast.Node +} + +func (q *Quote) Type() ObjectType { return QUOTE_OBJ } +func (q *Quote) Inspect() string { + return "QUOTE(" + q.Node.String() + ")" +} + +type Macro struct { + Parameters []*ast.Identifier + Body *ast.BlockStatement + Env *Environment +} + +func (m *Macro) Type() ObjectType { return MACRO_OBJ } +func (m *Macro) Inspect() string { + var out bytes.Buffer + + params := []string{} + for _, p := range m.Parameters { + params = append(params, p.String()) + } + + out.WriteString("macro") + out.WriteString("(") + out.WriteString(strings.Join(params, ", ")) + out.WriteString(") {\n") + out.WriteString(m.Body.String()) + out.WriteString("\n}") + + return out.String() +} -- cgit v1.2.3