Skip to content

Commit

Permalink
JS: synchronous JS method is implemented to JSWriteTo, and related te…
Browse files Browse the repository at this point in the history
…st cases
  • Loading branch information
ttttmr committed Oct 25, 2022
1 parent 9dc5c33 commit 22312f1
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 65 deletions.
75 changes: 13 additions & 62 deletions js/ast.go
Original file line number Diff line number Diff line change
Expand Up @@ -1812,34 +1812,19 @@ func (n PropertyName) JS() string {
// JS converts the node back to valid JavaScript (writes to io.Writer)
func (n PropertyName) JSWriteTo(w io.Writer) (i int64, err error) {
var wn int
var wn64 int64
if n.Computed != nil {
val := n.Computed.String()
if val[0] == '(' {
wn, err = w.Write([]byte("["))
i += int64(wn)
if err != nil {
return
}
wn, err = w.Write([]byte(val[1 : len(val)-1]))
i += int64(wn)
if err != nil {
return
}
wn, err = w.Write([]byte("["))
i += int64(wn)
return
}
wn, err = w.Write([]byte("["))
i += int64(wn)
if err != nil {
return
}
wn, err = w.Write([]byte(val))
i += int64(wn)
wn64, err = n.Computed.JSWriteTo(w)
i += wn64
if err != nil {
return
}
wn, err = w.Write([]byte("["))
wn, err = w.Write([]byte("]"))
i += int64(wn)
return
}
Expand Down Expand Up @@ -1900,7 +1885,7 @@ func (n BindingArray) JSWriteTo(w io.Writer) (i int64, err error) {
}
for j, item := range n.List {
if j != 0 {
wn, err = w.Write([]byte(","))
wn, err = w.Write([]byte(", "))
i += int64(wn)
if err != nil {
return
Expand All @@ -1914,13 +1899,13 @@ func (n BindingArray) JSWriteTo(w io.Writer) (i int64, err error) {
}
if n.Rest != nil {
if len(n.List) != 0 {
wn, err = w.Write([]byte(","))
wn, err = w.Write([]byte(", "))
i += int64(wn)
if err != nil {
return
}
}
wn, err = w.Write([]byte(" ..."))
wn, err = w.Write([]byte("..."))
i += int64(wn)
if err != nil {
return
Expand Down Expand Up @@ -1969,28 +1954,18 @@ func (n BindingObjectItem) JSWriteTo(w io.Writer) (i int64, err error) {
var wn64 int64
if n.Key != nil {
if v, ok := n.Value.Binding.(*Var); !ok || !n.Key.IsIdent(v.Data) {
wn, err = w.Write([]byte(" "))
i += int64(wn)
if err != nil {
return
}
wn64, err = n.Key.JSWriteTo(w)
i += wn64
if err != nil {
return
}
wn, err = w.Write([]byte(":"))
wn, err = w.Write([]byte(": "))
i += int64(wn)
if err != nil {
return
}
}
}
wn, err = w.Write([]byte(" "))
i += int64(wn)
if err != nil {
return
}
wn64, err = n.Value.JSWriteTo(w)
i += wn64
return
Expand Down Expand Up @@ -2048,51 +2023,27 @@ func (n BindingObject) JSWriteTo(w io.Writer) (i int64, err error) {
}
for j, item := range n.List {
if j != 0 {
wn, err = w.Write([]byte(","))
wn, err = w.Write([]byte(", "))
i += int64(wn)
if err != nil {
return
}
}
if item.Key != nil {
if v, ok := item.Value.Binding.(*Var); !ok || !item.Key.IsIdent(v.Data) {
wn, err = w.Write([]byte(" "))
i += int64(wn)
if err != nil {
return
}
wn64, err = item.Key.JSWriteTo(w)
i += wn64
if err != nil {
return
}
wn, err = w.Write([]byte(":"))
i += int64(wn)
if err != nil {
return
}
}
}
wn, err = w.Write([]byte(" "))
i += int64(wn)
if err != nil {
return
}
wn64, err = item.Value.JSWriteTo(w)
wn64, err = item.JSWriteTo(w)
i += wn64
if err != nil {
return
}
}
if n.Rest != nil {
if len(n.List) != 0 {
wn, err = w.Write([]byte(","))
wn, err = w.Write([]byte(", "))
i += int64(wn)
if err != nil {
return
}
}
wn, err = w.Write([]byte(" ..."))
wn, err = w.Write([]byte("..."))
i += int64(wn)
if err != nil {
return
Expand All @@ -2103,7 +2054,7 @@ func (n BindingObject) JSWriteTo(w io.Writer) (i int64, err error) {
return
}
}
wn, err = w.Write([]byte(" }"))
wn, err = w.Write([]byte("}"))
i += int64(wn)
return
}
Expand Down
6 changes: 3 additions & 3 deletions js/js_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -303,13 +303,13 @@ func TestJSWriteTo(t *testing.T) {
{"'use strict';", "'use strict'; "},

// BindingArray
{"let [name = 5] = z;", "let [name = 5] = z; "},
{"let [name1, name2 = 6] = z;", "let [name1, name2 = 6] = z; "},

// BindingObject
{"let {} = z;", "let { } = z; "},
{"let {name1, key2: name2} = z;", "let {name1, key2: name2} = z; "},

// BindingElement
{"let [name = 5] = z;", "let [name = 5] = z; "},
{"let [{name: key, ...rest}, ...[c,d=9]] = z;", "let [{name: key, ...rest}, ...[c, d = 9]] = z; "},

// VarDecl
{"x = 1;", "x = 1; "},
Expand Down

0 comments on commit 22312f1

Please sign in to comment.