@@ -90,7 +90,8 @@ func Eval(node ast.Node, env *object.Environment) object.Object {
9090
9191 case * ast.StringLiteral :
9292 return & object.String {Value : node .Value }
93-
93+ case * ast.At :
94+ return evalAt (node , env )
9495 case * ast.ArrayLiteral :
9596 elements := evalExpressions (node .Elements , env )
9697 if len (elements ) == 1 && isError (elements [0 ]) {
@@ -123,7 +124,16 @@ func Eval(node ast.Node, env *object.Environment) object.Object {
123124 // return evalForExpression(node, env)
124125 case * ast.ForIn :
125126 return evalForInExpression (node , env , node .Token .Line )
126-
127+ case * ast.Package :
128+ return evalPackage (node , env )
129+ case * ast.PropertyExpression :
130+ return evalPropertyExpression (node , env )
131+ case * ast.PropertyAssignment :
132+ val := Eval (node .Value , env )
133+ if isError (val ) {
134+ return val
135+ }
136+ return evalPropertyAssignment (node .Name , val , env )
127137 case * ast.Assign : // making let temporarily optional as I debug
128138 return evalAssign (node , env )
129139 case * ast.AssignEqual :
@@ -233,7 +243,6 @@ func isTruthy(obj object.Object) bool {
233243}
234244
235245func newError (format string , a ... interface {}) * object.Error {
236- format = fmt .Sprintf ("\x1b [%dm%s\x1b [0m" , 31 , format )
237246 return & object.Error {Message : fmt .Sprintf (format , a ... )}
238247}
239248
@@ -271,6 +280,20 @@ func applyFunction(fn object.Object, args []object.Object, line int) object.Obje
271280 return result
272281 }
273282 return NULL
283+ case * object.Package :
284+ obj := & object.Instance {
285+ Package : fn ,
286+ Env : object .NewEnclosedEnvironment (fn .Env ),
287+ }
288+ obj .Env .Set ("@" , obj )
289+ node , ok := fn .Scope .Get ("andaa" )
290+ if ! ok {
291+ return newError ("Hamna andaa function" )
292+ }
293+ node .(* object.Function ).Env .Set ("@" , obj )
294+ applyFunction (node , args , fn .Name .Token .Line )
295+ node .(* object.Function ).Env .Del ("@" )
296+ return obj
274297 default :
275298 if fn != nil {
276299 return newError ("Mstari %d: Hii sio function: %s" , line , fn .Type ())
0 commit comments