From 753945a23e4cbc0f5fd1d512ba629b5f03633534 Mon Sep 17 00:00:00 2001 From: brettlangdon Date: Fri, 9 Oct 2015 15:59:06 -0700 Subject: [PATCH] add tuple, none, and dict --- gython/dict.go | 31 +++++++++++++++++++++++++++++++ gython/none.go | 7 +++++++ gython/tuple.go | 15 +++++++++++---- 3 files changed, 49 insertions(+), 4 deletions(-) create mode 100644 gython/dict.go create mode 100644 gython/none.go diff --git a/gython/dict.go b/gython/dict.go new file mode 100644 index 0000000..cc672f4 --- /dev/null +++ b/gython/dict.go @@ -0,0 +1,31 @@ +package gython + +import "fmt" + +type Dict struct { + values map[Object]Object +} + +func NewDict() *Dict { + return &Dict{ + values: make(map[Object]Object, 0), + } +} + +func (dict *Dict) object() {} + +func (dict *Dict) Length() *Float { + return NewFloat(float64(len(dict.values))) +} + +func (dict *Dict) GetItem(key Object) (Object, error) { + value, exists := dict.values[key] + if exists == false { + return nil, fmt.Errorf("Key error: %#v", key) + } + return value, nil +} + +func (dict *Dict) SetItem(key Object, value Object) { + dict.values[key] = value +} diff --git a/gython/none.go b/gython/none.go new file mode 100644 index 0000000..fc270db --- /dev/null +++ b/gython/none.go @@ -0,0 +1,7 @@ +package gython + +type _None struct{} + +func (none *_None) object() {} + +var None *_None = &_None{} diff --git a/gython/tuple.go b/gython/tuple.go index b1f7ce0..a559397 100644 --- a/gython/tuple.go +++ b/gython/tuple.go @@ -1,10 +1,17 @@ package gython type Tuple struct { + length *Float + values []Object } -func (tuple *Tuple) object() {} - -func NewTuple() *Tuple { - return &Tuple{} +func NewTuple(values ...Object) *Tuple { + return &Tuple{ + length: NewFloat(float64(len(values))), + values: values, + } } + +func (tuple *Tuple) object() {} +func (tuple *Tuple) Length() *Float { return tuple.length } +func (tuple *Tuple) Values() []Object { return tuple.values }