   (:use [isla.library])
   (:require [clojure.string :as str]))
 
-(declare run-sequence first-content lookup nreturn instantiate-type
+(declare run-sequence lookup nreturn instantiate-type
          friendly-class friendly-symbol assign extract thr)
 
 (defmulti interpret (fn [& args] (:tag (first args))))

      (throw (Exception. (str "I do not know what a " type-identifier " is."))))))

(defmethod interpret :invocation [node env]
  (def content (vec (:content node)))
  (def function (lookup (interpret (first content) env) env))
  (def param (interpret (nth content 1) env))
  (let [return-val (function env param)] ;; call fn
    (nreturn (:ctx env) return-val)))

(defmethod interpret :value [node env]
  (if (= :identifier (:tag (first-content node)))
    (lookup (first-content (first-content node)) env) ;; sub is identifier - lookup+return
    (interpret (first-content node) env)))

(defmethod interpret :identifier [node _]
  (first-content node))

(defmethod interpret :assignee [node _]
  (first-content node))

(defmethod interpret :integer [node _]
  (first-content node))

(defmethod interpret :string [node _]
  (str/replace (first-content node) "'" ""))

(defmulti assign (fn [_ assignee-node _] (extract assignee-node [:content 0 :tag])))


  (run-sequence (:content node) env))

(defmethod interpret :expression [node env]
  (interpret (extract node [:content 0]) env))

(defmethod interpret :value-assignment [node env]
  (let [assignee (extract node [:content 0])
