Skip to content

Commit 76ad1bf

Browse files
authored
Merge pull request #319 from ichiban/fix-spacing-variable-write-term
fix variable's WriteTerm() when following/followed by a letter-digit operator
2 parents d6ea349 + 87f8a85 commit 76ad1bf

File tree

3 files changed

+18
-3
lines changed

3 files changed

+18
-3
lines changed

engine/variable.go

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,21 @@ func (v Variable) WriteTerm(w io.Writer, opts *WriteOptions, env *Env) error {
2828
return x.WriteTerm(w, opts, env)
2929
}
3030

31+
ew := errWriter{w: w}
32+
33+
if letterDigit(opts.left.name) {
34+
_, _ = ew.Write([]byte(" "))
35+
}
3136
if a, ok := opts.variableNames[v]; ok {
32-
return a.WriteTerm(w, opts.withQuoted(false).withLeft(operator{}).withRight(operator{}), env)
37+
_ = a.WriteTerm(&ew, opts.withQuoted(false).withLeft(operator{}).withRight(operator{}), env)
38+
} else {
39+
_, _ = ew.Write([]byte(fmt.Sprintf("_%d", v)))
3340
}
34-
_, err := w.Write([]byte(fmt.Sprintf("_%d", v)))
35-
return err
41+
if letterDigit(opts.right.name) {
42+
_, _ = ew.Write([]byte(" "))
43+
}
44+
45+
return ew.err
3646
}
3747

3848
func (v Variable) Compare(t Term, env *Env) int {

engine/variable_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ func TestVariable_WriteTerm(t *testing.T) {
2121
}{
2222
{title: "unnamed", v: x, output: fmt.Sprintf("_%d", x)},
2323
{title: "variable_names", v: x, opts: WriteOptions{variableNames: map[Variable]Atom{x: NewAtom("Foo")}}, output: `Foo`},
24+
{title: "following a letter-digit operator", v: x, opts: WriteOptions{left: operator{name: NewAtom("is")}}, output: fmt.Sprintf(" _%d", x)},
25+
{title: "followed by a letter-digit operator", v: x, opts: WriteOptions{right: operator{name: NewAtom("is")}}, output: fmt.Sprintf("_%d ", x)},
2426
}
2527

2628
var buf bytes.Buffer

interpreter_test.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -308,8 +308,11 @@ func TestNew_variableNames(t *testing.T) {
308308
{name: "55", query: `S=1+T,N=' /*r*/V',write_term(S,[quoted(true), variable_names([N=T])]).`, output: `1+ /*r*/V`},
309309
{name: "58", query: `S=1+T,N=(+),write_term(S,[quoted(true), variable_names([N=T])]).`, output: `1++`},
310310
{name: "59", query: `S=T+1,N=(+),write_term(S,[quoted(true), variable_names([N=T])]).`, output: `++1`},
311+
{name: "73", query: `S=(1 is T),N='X',write_term(S,[quoted(true), variable_names([N=T])]).`, output: `1 is X`},
311312
{name: "69", query: `read_term(T, [singletons(1)]).`, waits: true},
312313
{name: "70", input: `a.`, query: `\+read_term(T, [singletons(1)]).`},
314+
{name: "71", query: `write_term(T,[variable_names(['Bad'=T]),variable_names(['Good'=T])]).`, output: `Good`},
315+
{name: "72", query: `read_term(T,[singletons([])]).`, waits: true},
313316
}
314317

315318
for _, tt := range tests {

0 commit comments

Comments
 (0)