aboutsummaryrefslogtreecommitdiff
path: root/object/object.go
diff options
context:
space:
mode:
Diffstat (limited to 'object/object.go')
-rw-r--r--object/object.go36
1 files changed, 36 insertions, 0 deletions
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()
+}