Skip to content

Commit

Permalink
Merge pull request algorand#73 from pzbitskiy/pavel/stf-teal
Browse files Browse the repository at this point in the history
TEAL: fix line to field parsing
  • Loading branch information
justicz authored May 11, 2020
2 parents 9358145 + f11f0ec commit 1280c71
Show file tree
Hide file tree
Showing 2 changed files with 99 additions and 1 deletion.
13 changes: 12 additions & 1 deletion data/transactions/logic/assembler.go
Original file line number Diff line number Diff line change
Expand Up @@ -895,17 +895,28 @@ func fieldsFromLine(line string) []string {
}
return fields
}
case '(': // is base64( seq?
prefix := line[start:i]
if prefix == "base64" || prefix == "b64" {
inBase64 = true
}
case ')': // is ) as base64( completion
if inBase64 {
inBase64 = false
}
default:
}
i++
continue
}
if !inString {
field := line[start:i]
fields = append(fields, field)
if field == "base64" || field == "b64" {
inBase64 = true
} else if inBase64 {
inBase64 = false
}
fields = append(fields, line[start:i])
}
i++

Expand Down
87 changes: 87 additions & 0 deletions data/transactions/logic/assembler_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -520,6 +520,93 @@ func TestFieldsFromLine(t *testing.T) {
require.Equal(t, "ABC/==", fields[2])
require.Equal(t, "/", fields[3])

line = "op base64 ABC/== //"
fields = fieldsFromLine(line)
require.Equal(t, 3, len(fields))
require.Equal(t, "op", fields[0])
require.Equal(t, "base64", fields[1])
require.Equal(t, "ABC/==", fields[2])

line = "op base64 ABC//== //"
fields = fieldsFromLine(line)
require.Equal(t, 3, len(fields))
require.Equal(t, "op", fields[0])
require.Equal(t, "base64", fields[1])
require.Equal(t, "ABC//==", fields[2])

line = "op b64 ABC//== //"
fields = fieldsFromLine(line)
require.Equal(t, 3, len(fields))
require.Equal(t, "op", fields[0])
require.Equal(t, "b64", fields[1])
require.Equal(t, "ABC//==", fields[2])

line = "op b64(ABC//==) // comment"
fields = fieldsFromLine(line)
require.Equal(t, 2, len(fields))
require.Equal(t, "op", fields[0])
require.Equal(t, "b64(ABC//==)", fields[1])

line = "op base64(ABC//==) // comment"
fields = fieldsFromLine(line)
require.Equal(t, 2, len(fields))
require.Equal(t, "op", fields[0])
require.Equal(t, "base64(ABC//==)", fields[1])

line = "op b64(ABC/==) // comment"
fields = fieldsFromLine(line)
require.Equal(t, 2, len(fields))
require.Equal(t, "op", fields[0])
require.Equal(t, "b64(ABC/==)", fields[1])

line = "op base64(ABC/==) // comment"
fields = fieldsFromLine(line)
require.Equal(t, 2, len(fields))
require.Equal(t, "op", fields[0])
require.Equal(t, "base64(ABC/==)", fields[1])

line = "base64(ABC//==)"
fields = fieldsFromLine(line)
require.Equal(t, 1, len(fields))
require.Equal(t, "base64(ABC//==)", fields[0])

line = "b(ABC//==)"
fields = fieldsFromLine(line)
require.Equal(t, 1, len(fields))
require.Equal(t, "b(ABC", fields[0])

line = "b(ABC//==) //"
fields = fieldsFromLine(line)
require.Equal(t, 1, len(fields))
require.Equal(t, "b(ABC", fields[0])

line = "b(ABC ==) //"
fields = fieldsFromLine(line)
require.Equal(t, 2, len(fields))
require.Equal(t, "b(ABC", fields[0])
require.Equal(t, "==)", fields[1])

line = "op base64 ABC)"
fields = fieldsFromLine(line)
require.Equal(t, 3, len(fields))
require.Equal(t, "op", fields[0])
require.Equal(t, "base64", fields[1])
require.Equal(t, "ABC)", fields[2])

line = "op base64 ABC) // comment"
fields = fieldsFromLine(line)
require.Equal(t, 3, len(fields))
require.Equal(t, "op", fields[0])
require.Equal(t, "base64", fields[1])
require.Equal(t, "ABC)", fields[2])

line = "op base64 ABC//) // comment"
fields = fieldsFromLine(line)
require.Equal(t, 3, len(fields))
require.Equal(t, "op", fields[0])
require.Equal(t, "base64", fields[1])
require.Equal(t, "ABC//)", fields[2])

line = `op "test"`
fields = fieldsFromLine(line)
require.Equal(t, 2, len(fields))
Expand Down

0 comments on commit 1280c71

Please sign in to comment.