Skip to content

Commit

Permalink
Merge pull request #319 from ichiban/fix-spacing-variable-write-term
Browse files Browse the repository at this point in the history
fix variable's WriteTerm() when following/followed by a letter-digit operator
  • Loading branch information
ichiban authored Jun 13, 2024
2 parents d6ea349 + 87f8a85 commit 76ad1bf
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 3 deletions.
16 changes: 13 additions & 3 deletions engine/variable.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,21 @@ func (v Variable) WriteTerm(w io.Writer, opts *WriteOptions, env *Env) error {
return x.WriteTerm(w, opts, env)
}

ew := errWriter{w: w}

if letterDigit(opts.left.name) {
_, _ = ew.Write([]byte(" "))
}
if a, ok := opts.variableNames[v]; ok {
return a.WriteTerm(w, opts.withQuoted(false).withLeft(operator{}).withRight(operator{}), env)
_ = a.WriteTerm(&ew, opts.withQuoted(false).withLeft(operator{}).withRight(operator{}), env)
} else {
_, _ = ew.Write([]byte(fmt.Sprintf("_%d", v)))
}
_, err := w.Write([]byte(fmt.Sprintf("_%d", v)))
return err
if letterDigit(opts.right.name) {
_, _ = ew.Write([]byte(" "))
}

return ew.err
}

func (v Variable) Compare(t Term, env *Env) int {
Expand Down
2 changes: 2 additions & 0 deletions engine/variable_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ func TestVariable_WriteTerm(t *testing.T) {
}{
{title: "unnamed", v: x, output: fmt.Sprintf("_%d", x)},
{title: "variable_names", v: x, opts: WriteOptions{variableNames: map[Variable]Atom{x: NewAtom("Foo")}}, output: `Foo`},
{title: "following a letter-digit operator", v: x, opts: WriteOptions{left: operator{name: NewAtom("is")}}, output: fmt.Sprintf(" _%d", x)},
{title: "followed by a letter-digit operator", v: x, opts: WriteOptions{right: operator{name: NewAtom("is")}}, output: fmt.Sprintf("_%d ", x)},
}

var buf bytes.Buffer
Expand Down
3 changes: 3 additions & 0 deletions interpreter_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -308,8 +308,11 @@ func TestNew_variableNames(t *testing.T) {
{name: "55", query: `S=1+T,N=' /*r*/V',write_term(S,[quoted(true), variable_names([N=T])]).`, output: `1+ /*r*/V`},
{name: "58", query: `S=1+T,N=(+),write_term(S,[quoted(true), variable_names([N=T])]).`, output: `1++`},
{name: "59", query: `S=T+1,N=(+),write_term(S,[quoted(true), variable_names([N=T])]).`, output: `++1`},
{name: "73", query: `S=(1 is T),N='X',write_term(S,[quoted(true), variable_names([N=T])]).`, output: `1 is X`},
{name: "69", query: `read_term(T, [singletons(1)]).`, waits: true},
{name: "70", input: `a.`, query: `\+read_term(T, [singletons(1)]).`},
{name: "71", query: `write_term(T,[variable_names(['Bad'=T]),variable_names(['Good'=T])]).`, output: `Good`},
{name: "72", query: `read_term(T,[singletons([])]).`, waits: true},
}

for _, tt := range tests {
Expand Down

0 comments on commit 76ad1bf

Please sign in to comment.