1+ //go:build !js || !wasm
2+
13package evaluator
24
35import (
@@ -71,176 +73,11 @@ var builtins = map[string]*object.Builtin{
7173 }
7274 },
7375 },
74- "aina" : {
75- Fn : func (args ... object.Object ) object.Object {
76- if len (args ) != 1 {
77- return newError ("Samahani, tunahitaji hoja 1, wewe umeweka %d" , len (args ))
78- }
79-
80- return & object.String {Value : string (args [0 ].Type ())}
81- },
82- },
83- "fungua" : {
84- Fn : func (args ... object.Object ) object.Object {
85-
86- if len (args ) != 1 {
87- return newError ("Samahani, tunahitaji hoja 1, wewe umeweka %d" , len (args ))
88- }
89- filename := args [0 ].(* object.String ).Value
90-
91- file , err := os .ReadFile (filename )
92- if err != nil {
93- return & object.Error {Message : "Tumeshindwa kusoma faili au faili halipo" }
94- }
95- return & object.File {Filename : filename , Content : string (file )}
96- },
97- },
98- "mfululizo" : {
99- Fn : func (args ... object.Object ) object.Object {
100- if len (args ) < 1 || len (args ) > 3 {
101- return newError ("Samahani, mfululizo inahitaji hoja 1 hadi 3, wewe umeweka %d" , len (args ))
102- }
10376
104- var start , end , step int64
105- var err error
106-
107- switch len (args ) {
108- case 1 :
109- end , err = getIntValue (args [0 ])
110- if err != nil {
111- return newError ("Hoja lazima iwe nambari nzima" )
112- }
113- start , step = 0 , 1
114- case 2 :
115- start , err = getIntValue (args [0 ])
116- if err != nil {
117- return newError ("Hoja ya kwanza lazima iwe nambari nzima" )
118- }
119- end , err = getIntValue (args [1 ])
120- if err != nil {
121- return newError ("Hoja ya pili lazima iwe nambari nzima" )
122- }
123- step = 1
124- case 3 :
125- start , err = getIntValue (args [0 ])
126- if err != nil {
127- return newError ("Hoja ya kwanza lazima iwe nambari nzima" )
128- }
129- end , err = getIntValue (args [1 ])
130- if err != nil {
131- return newError ("Hoja ya pili lazima iwe nambari nzima" )
132- }
133- step , err = getIntValue (args [2 ])
134- if err != nil {
135- return newError ("Hoja ya tatu lazima iwe nambari nzima" )
136- }
137- if step == 0 {
138- return newError ("Hatua haiwezi kuwa sifuri" )
139- }
140- }
141-
142- elements := []object.Object {}
143- for i := start ; (step > 0 && i < end ) || (step < 0 && i > end ); i += step {
144- elements = append (elements , & object.Integer {Value : i })
145- }
146-
147- return & object.Array {Elements : elements }
148- },
149- },
150-
151- "badilisha" : {
152- Fn : func (args ... object.Object ) object.Object {
153- if len (args ) != 2 {
154- return newError ("Samahani, badili inahitaji hoja 2, wewe umeweka %d" , len (args ))
155- }
156-
157- value := args [0 ]
158- targetType := args [1 ]
159-
160- if targetType .Type () != object .STRING_OBJ {
161- return newError ("Aina ya lengo lazima iwe neno" )
162- }
163-
164- targetTypeStr := targetType .(* object.String ).Value
165-
166- switch targetTypeStr {
167- case "NAMBA" :
168- return convertToInteger (value )
169- case "DESIMALI" :
170- return convertToFloat (value )
171- case "NENO" :
172- return convertToString (value )
173- case "BOOLEAN" :
174- return convertToBoolean (value )
175- default :
176- return newError ("Aina isiyojulikana: %s" , targetTypeStr )
177- }
178- },
179- },
180- "namba" : {
181- Fn : func (args ... object.Object ) object.Object {
182- if len (args ) != 1 {
183- return newError ("Samahani, namba inahitaji hoja 1, wewe umeweka %d" , len (args ))
184- }
185- value := args [0 ]
186- return convertToInteger (value )
187- },
188- },
189- "tungo" : {
190- Fn : func (args ... object.Object ) object.Object {
191- if len (args ) != 1 {
192- return newError ("Samahani, tungo inahitaji hoja 1, wewe umeweka %d" , len (args ))
193- }
194- value := args [0 ]
195- return convertToString (value )
196- },
197- },
198-
199- // "jumla": {
200- // Fn: func(args ...object.Object) object.Object {
201- // if len(args) != 1 {
202- // return newError("Hoja hazilingani, tunahitaji=1, tumepewa=%d", len(args))
203- // }
204-
205- // switch arg := args[0].(type) {
206- // case *object.Array:
207-
208- // var sums float64
209- // for _, num := range arg.Elements {
210-
211- // if num.Type() != object.INTEGER_OBJ && num.Type() != object.FLOAT_OBJ {
212- // return newError("Samahani namba tu zinahitajika")
213- // } else {
214- // if num.Type() == object.INTEGER_OBJ {
215- // no, _ := strconv.Atoi(num.Inspect())
216- // floatnum := float64(no)
217- // sums += floatnum
218- // } else if num.Type() == object.FLOAT_OBJ {
219- // no, _ := strconv.ParseFloat(num.Inspect(), 64)
220- // sums += no
221- // }
222-
223- // }
224- // }
225-
226- // if math.Mod(sums, 1) == 0 {
227- // return &object.Integer{Value: int64(sums)}
228- // }
229-
230- // return &object.Float{Value: float64(sums)}
231-
232- // default:
233- // return newError("Samahani, hii function haitumiki na %s", args[0].Type())
234- // }
235- // },
236- // },
23777}
23878
239- func getIntValue (obj object.Object ) (int64 , error ) {
240- switch obj := obj .(type ) {
241- case * object.Integer :
242- return obj .Value , nil
243- default :
244- return 0 , fmt .Errorf ("expected integer, got %T" , obj )
79+ func init (){
80+ for name , builtin := range commonBuiltins {
81+ builtins [name ]= builtin
24582 }
246- }
83+ }
0 commit comments