aboutsummaryrefslogtreecommitdiff
path: root/func.go
diff options
context:
space:
mode:
authorShinichiro Hamaji <shinichiro.hamaji@gmail.com>2015-04-28 02:48:03 +0900
committerShinichiro Hamaji <shinichiro.hamaji@gmail.com>2015-04-28 16:19:41 +0900
commitc8bc731ace04bbe477583ba1154aa29d430a323e (patch)
treec180271122579346e28d050f3a9eaf83978a66c7 /func.go
parentd8cec17d195a8149bd3c7ca913e237e9d9e8bca8 (diff)
downloadkati-c8bc731ace04bbe477583ba1154aa29d430a323e.tar.gz
Make it possible to serialize vars
Diffstat (limited to 'func.go')
-rw-r--r--func.go25
1 files changed, 25 insertions, 0 deletions
diff --git a/func.go b/func.go
index 29f4ab4..7de77c6 100644
--- a/func.go
+++ b/func.go
@@ -137,6 +137,14 @@ func (c *fclosure) String() string {
return fmt.Sprintf("$%s %s%c", arg0, strings.Join(args, ","), cp)
}
+func (c *fclosure) Serialize() SerializableVar{
+ r := SerializableVar{Type: "func"}
+ for _, a := range c.args {
+ r.Children = append(r.Children, a.Serialize())
+ }
+ return r
+}
+
// http://www.gnu.org/software/make/manual/make.html#Text-Functions
type funcSubst struct{ fclosure }
@@ -703,6 +711,12 @@ type funcNop struct{ expr string }
func (f *funcNop) String() string { return f.expr }
func (f *funcNop) Eval(io.Writer, *Evaluator) {}
+func (f *funcNop) Serialize() SerializableVar {
+ return SerializableVar{
+ Type: "funcNop",
+ V: f.expr,
+ }
+}
func parseAssignLiteral(s string) (lhs, op string, rhs Value, ok bool) {
eq := strings.Index(s, "=")
@@ -768,6 +782,17 @@ func (f *funcEvalAssign) Eval(w io.Writer, ev *Evaluator) {
ev.outVars.Assign(f.lhs, rvalue)
}
+func (f *funcEvalAssign) Serialize() SerializableVar {
+ return SerializableVar{
+ Type: "funcEvalAssign",
+ Children: []SerializableVar{
+ SerializableVar{V: f.lhs},
+ SerializableVar{V: f.op},
+ f.rhs.Serialize(),
+ },
+ }
+}
+
// http://www.gnu.org/software/make/manual/make.html#Origin-Function
type funcOrigin struct{ fclosure }