2020-05-12 00:32:12 -04:00
|
|
|
|
|
|
|
|
(def! our_obj (with-meta [0] (fn* () (set-nth! our_obj 0 (+ 1 (nth our_obj 0))))))
|
|
|
|
|
|
|
|
|
|
(def! get-value-helper (fn* (dict key idx) (if (>= idx (count dict)) nil (if (= key (nth dict idx)) (nth dict (+ idx 1)) (get-value-helper dict key (+ idx 2))))))
|
|
|
|
|
(def! get-value (fn* (dict key) (get-value-helper dict key 0)))
|
|
|
|
|
(def! method-call (fn* (object method & arguments) (let* (method_fn (get-value (meta object) method))
|
|
|
|
|
(if (= method_fn nil)
|
|
|
|
|
(println "no method " method)
|
|
|
|
|
(apply method_fn object arguments)))))
|
|
|
|
|
; method call syntax
|
2020-05-12 21:30:37 -04:00
|
|
|
(add_grammar_rule 'form [ 'form "\\." 'atom 'optional_WS "\\(" 'optional_WS 'space_forms 'optional_WS "\\)" ] (fn* (o _ m _ _ _ p _ _) `(method-call ~o '~m ,p)))
|
2020-05-12 00:32:12 -04:00
|
|
|
(def! actual_obj (with-meta [0] [
|
|
|
|
|
'inc (fn* (o) (set-nth! o 0 (+ (nth o 0) 1)))
|
|
|
|
|
'dec (fn* (o) (set-nth! o 0 (- (nth o 0) 1)))
|
|
|
|
|
'set (fn* (o n) (set-nth! o 0 n))
|
|
|
|
|
'get (fn* (o) (nth o 0))
|
|
|
|
|
]))
|
|
|
|
|
(def! to_be_saved (with-meta [1] [2]))
|
|
|
|
|
(def! main (fn* () (let* ( a 7
|
|
|
|
|
b [1]
|
|
|
|
|
c (with-meta b "yolo") )
|
|
|
|
|
(do
|
|
|
|
|
(try*
|
|
|
|
|
((fn* () (do
|
|
|
|
|
(println b)
|
|
|
|
|
(set-nth! b 0 2)
|
|
|
|
|
(println b)
|
|
|
|
|
(println c)
|
|
|
|
|
(println (meta c))
|
|
|
|
|
(println "world")
|
|
|
|
|
(println to_be_saved)
|
|
|
|
|
(println (meta to_be_saved))
|
|
|
|
|
(println "Here in main testing our_obj")
|
|
|
|
|
(println our_obj)
|
|
|
|
|
((meta our_obj))
|
|
|
|
|
(println our_obj)
|
|
|
|
|
((meta our_obj))
|
|
|
|
|
(println our_obj)
|
|
|
|
|
(println "actual_obj" actual_obj)
|
|
|
|
|
(method-call actual_obj 'inc)
|
|
|
|
|
(println "actual_obj" actual_obj)
|
|
|
|
|
(println "with get: " (method-call actual_obj 'get))
|
|
|
|
|
(println "actual_obj" actual_obj)
|
|
|
|
|
(method-call actual_obj 'dec)
|
|
|
|
|
(method-call actual_obj 'dec)
|
|
|
|
|
(println "actual_obj" actual_obj)
|
|
|
|
|
(println "setting old style 654")
|
|
|
|
|
(method-call actual_obj 'set 654)
|
|
|
|
|
(println "actual_obj" actual_obj)
|
|
|
|
|
(println "Ok, doing with new method call syntax")
|
|
|
|
|
actual_obj.inc()
|
|
|
|
|
(println "actual_obj" actual_obj)
|
|
|
|
|
(println "setting new style 1337")
|
|
|
|
|
actual_obj.set(1337)
|
|
|
|
|
(println "actual_obj" actual_obj)
|
|
|
|
|
(println "with get " actual_obj.get())
|
|
|
|
|
a)))
|
|
|
|
|
)))))
|
|
|
|
|
(do
|
|
|
|
|
(println "interp-main")
|
|
|
|
|
(main)
|
|
|
|
|
(println "done interp-main")
|
|
|
|
|
nil)
|