Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/master'
Browse files Browse the repository at this point in the history
  • Loading branch information
dours committed Jun 20, 2022
2 parents 1e672f2 + 98dc8f1 commit ad60f8f
Showing 1 changed file with 82 additions and 0 deletions.
82 changes: 82 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,8 @@ Integer, boolean, string and float literals are wrapped in respective EO wrapper
* `10` is translated to `(pyint 10)`
* `"Hello, world"` is translated to `(pystring "Hello, world")`

Try to translate `print(10)` or `print("Hello, world")`, for example.

### 6.2.3 Parenthesized forms
Almost every generated EO expression is parenthesized, but these parantheses are not related to the parantheses in the original python expressions.

Expand Down Expand Up @@ -142,6 +144,14 @@ Not yet supported.
### 6.13 Conditional expressions
`a if c else b` -> `(c).if (a) (b)`

Please, add enough context if you want to try this with our transpiler, for example:
```
a = 7
b = 6
x = a if a < b else b
print(x)
```

### 6.14 lambda
An anonymous function is extracted to a named function (this is not hard because complex expressions are splitted into simpler as described [here](https://github.com/polystat/py2eo#616-evaluation-order)).
For example code `f = lambda x: x * 10` is translated to something like
Expand All @@ -151,6 +161,13 @@ def anonFun0(xx):
return e0
```
Then this python is translated to EO.

Please, add enough context if you want to try this with our transpiler, for example:
```
f = lambda x: x * 10
x = f(11)
print(x)
```

### 6.15 Expression lists
Not yet supported. Should be supported by explicitly constructing a tuple out of an expression list. A star sholud be implemented as a function, which unfolds an iterable object.
Expand Down Expand Up @@ -181,8 +198,21 @@ For example, this `x = (1 + 2) * f(3 + 4, 5)` is translated to
(xx).write (tmp2.copy)
```

Please, add enough context if you want to try this with our transpiler, for example:
```
def f(a, b): return a + b
x = (1 + 2) * f(3 + 4, 5)
print(x)
```

### 6.17 Operator precedence
This feature is supported by the parser. For example, for an expression `1 + 2 * 3` the parser generates a syntax tree like `Add(1, Mult(2, 3))`, not `Mult(Add(1, 2), 3)`.

Try to translate, for example
```
x = 1 + 2 * 3
print(x)
```

### 7.1 Expressions statements
Should be easy but not yet done.
Expand Down Expand Up @@ -225,6 +255,12 @@ where `mkCopy` looks like this
x' > copy
copy.< > @
```
You may try to run this example:
```
x = 1
x = x + 2 * 3
print(x)
```

### 7.3 Assert
Will be done as a python-to-python pass, which basically substitutes `assert` to `raise AssertionException`
Expand Down Expand Up @@ -261,6 +297,8 @@ Later. Needs closure for full support.

### 8.1 If-elif-else

(Try adding `print(x)` at the end of examples below to run them).

##### Python
```
x = 1
Expand Down Expand Up @@ -375,6 +413,15 @@ Here, we wrap the `while` in a `goto` and store the result
0
```

#### Try to run this example
```
x = 1
while x < 100:
x = 2 * x
print(x)
```

### 8.3 For
A `for` loop over an iterator is transformed into a `while` inside a `try`:
##### Python
Expand All @@ -394,6 +441,15 @@ except StopIteration:
pass
```
The resulting code is then transformed to EO.

#### Try to run this example
```
x = 0
for i in range(4):
x = x + i
print(x)
```

### 8.4 Try
#### try_2
Expand Down Expand Up @@ -437,6 +493,14 @@ The resulting code is then transformed to EO.
##### Tests
https://github.com/polystat/py2eo/wiki/Tests-Structure#the-try-statement

#### Try this example
```
try:
1 // 0
except ZeroDivisionError:
print("Hello, world")
```

### 8.5 With
Not yet implemented. The plan is to do it as a python-to-python pass according do the example [here](https://docs.python.org/3.8/reference/compound_stmts.html#the-with-statement)

Expand Down Expand Up @@ -490,6 +554,12 @@ mkCopy (e0) > tmp1
```

#### Try this example
```
def f(a, b): return a + b
x = (1 + 2) * f(3 + 4, 5)
print(x)
```

### 8.7 Class
A class is basically its constructor, i.e., a function, which returns an object.
Expand Down Expand Up @@ -529,5 +599,17 @@ Field assignment is then straightforward:
((xo).xfield).write (2)
```

#### Try this example
```
class c:
field = 1
o = c()
o.field = 2
x = o.field
print(x)
```
### 8.8 Coroutines
No plans to support this.

1 comment on commit ad60f8f

@0pdd
Copy link
Member

@0pdd 0pdd commented on ad60f8f Jun 20, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wasn't able to retrieve PDD puzzles from the code base and submit them to GitHub. If you think that it's a bug on our side, please submit it to yegor256/0pdd:

set -x && set -e && set -o pipefail && cd /tmp/0pdd20220612-12-q4n2xj/polystat/py2eo && pdd -v -f /tmp/20220620-10520-1pkk0iw [1]: + set -e + set -o pipefail + cd /tmp/0pdd20220612-12-q4n2xj/polystat/py2eo + pdd -v -f /tmp/20220620-10520-1pkk0iw My version is 0.20.6 Ruby version is 2.6.0 at...

Please, copy and paste this stack trace to GitHub:

UserError
set -x && set -e && set -o pipefail && cd /tmp/0pdd20220612-12-q4n2xj/polystat/py2eo && pdd -v -f /tmp/20220620-10520-1pkk0iw [1]:
+ set -e
+ set -o pipefail
+ cd /tmp/0pdd20220612-12-q4n2xj/polystat/py2eo
+ pdd -v -f /tmp/20220620-10520-1pkk0iw

My version is 0.20.6
Ruby version is 2.6.0 at x86_64-linux
Reading /tmp/0pdd20220612-12-q4n2xj/polystat/py2eo
597 file(s) found, 918 excluded
Reading runEO/pom.xml...
Reading .gitignore...
Reading README.md...
Reading transpiler/pom.xml...
Reading transpiler/src/main/eo/preface/continue.eo...
Reading transpiler/src/main/eo/preface/fakeclasses.eo...
Reading transpiler/src/main/eo/preface/pyfloat.eo...
Reading transpiler/src/main/eo/preface/pyint.eo...
Reading transpiler/src/main/eo/preface/xZeroDivisionError.eo...
Reading transpiler/src/main/eo/preface/break.eo...
Reading transpiler/src/main/eo/preface/xrange.eo...
Reading transpiler/src/main/eo/preface/pycomplex.eo...
Reading transpiler/src/main/eo/preface/pybool.eo...
Reading transpiler/src/main/eo/preface/raiseNothing.eo...
Reading transpiler/src/main/eo/preface/newUID.eo...
Reading transpiler/src/main/eo/preface/xmyArray.eo...
Reading transpiler/src/main/eo/preface/raiseEmpty.eo...
Reading transpiler/src/main/eo/preface/mkCopy.eo...
Reading transpiler/src/main/eo/preface/xlen.eo...
Reading transpiler/src/main/eo/preface/xStopIteration.eo...
Reading transpiler/src/main/eo/preface/pystring.eo...
Reading transpiler/src/main/eo/preface/return.eo...
Reading transpiler/src/main/eo/my-array.eo...
Reading transpiler/src/main/scala/org/polystat/py2eo/transpiler/PrintLinearizedMutableEOWithCage.scala...
Reading transpiler/src/main/scala/org/polystat/py2eo/transpiler/Main.scala...
Reading transpiler/src/main/scala/org/polystat/py2eo/transpiler/Transpile.scala...
Reading transpiler/src/main/scala/org/polystat/py2eo/transpiler/FindBadConstructs.scala...
Reading transpiler/src/main/scala/org/polystat/py2eo/transpiler/SimplePass.scala...
Reading transpiler/src/main/scala/org/polystat/py2eo/transpiler/SimpleAnalysis.scala...
Reading transpiler/src/main/scala/org/polystat/py2eo/transpiler/ClosureWithCage.scala...
Reading transpiler/src/main/scala/org/polystat/py2eo/transpiler/PrintEO.scala...
Reading transpiler/src/main/scala/org/polystat/py2eo/transpiler/Common.scala...
Reading transpiler/src/main/java/org/polystat/py2eo/transpiler/dummy.java...
Reading transpiler/src/main/python/inheritance.py...
Reading transpiler/src/main/python/C3.py...
Reading transpiler/src/main/python/closureRuntime.py...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/eo/map-tests.eo...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_abstract_numbers.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_userstring.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_symtable.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_class.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_imghdr.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_uuid.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_cmd.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_index.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_smtpd.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_dict_version.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_rlcompleter.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_random.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_fileio.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_urllib2net.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_funcattrs.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_quopri.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_types.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_bool.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_codecencodings_cn.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_flufl.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_univnewlines.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_pyexpat.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_colorsys.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_compile.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_coroutines.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_linecache.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_gc.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_site.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_platform.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_property.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_functools.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_int_literal.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_audioop.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_asyncgen.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_pulldom.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_modulefinder.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_typechecks.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_unpack.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_pkgutil.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_fstring.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_with.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_userlist.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_threading_local.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_context.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_webbrowser.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_asyncore.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/README.md...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_metaclass.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_csv.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_thread.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_codecmaps_jp.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_struct.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_http_cookies.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_fractions.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_pwd.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_syslog.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_codecencodings_iso2022.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_pickletools.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_genericpath.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_asynchat.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_xdrlib.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_locale.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_codeop.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_mailbox.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_timeout.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_bufio.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_httpservers.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_dict.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_decorators.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_grp.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_imaplib.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_bigmem.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_posix.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_sndhdr.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_aifc.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_wave.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_re.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_httplib.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_codecencodings_hk.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_keywordonlyarg.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_poll.yaml...
Reading transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_smtplib.yaml...
ERROR: transpiler/src/test/resources/org/polystat/py2eo/transpiler/testParserPrinter/test_smtplib.yaml; puzzle at line #1122; TODO must have a leading space to become a puzzle, as this page explains: https://github.com/yegor256/pdd#how-to-format
If you can't understand the cause of this issue or you don't know how to fix it, please submit a GitHub issue, we will try to help you: https://github.com/yegor256/pdd/issues. This tool is still in its beta version and we will appreciate your feedback. Here is where you can find more documentation: https://github.com/yegor256/pdd/blob/master/README.md.
Exit code is 1

/app/objects/git_repo.rb:66:in `rescue in block in xml'
/app/objects/git_repo.rb:63:in `block in xml'
/app/vendor/ruby-2.6.0/lib/ruby/2.6.0/tempfile.rb:295:in `open'
/app/objects/git_repo.rb:62:in `xml'
/app/objects/puzzles.rb:36:in `deploy'
/app/objects/job.rb:38:in `proceed'
/app/objects/job_starred.rb:33:in `proceed'
/app/objects/job_recorded.rb:32:in `proceed'
/app/objects/job_emailed.rb:35:in `proceed'
/app/objects/job_commiterrors.rb:36:in `proceed'
/app/objects/job_detached.rb:48:in `exclusive'
/app/objects/job_detached.rb:36:in `block in proceed'
/app/objects/job_detached.rb:36:in `fork'
/app/objects/job_detached.rb:36:in `proceed'
/app/0pdd.rb:366:in `block in <top (required)>'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1675:in `call'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1675:in `block in compile!'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1013:in `block (3 levels) in route!'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1032:in `route_eval'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1013:in `block (2 levels) in route!'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1061:in `block in process_route'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1059:in `catch'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1059:in `process_route'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1011:in `block in route!'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1008:in `each'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1008:in `route!'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1129:in `block in dispatch!'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1101:in `block in invoke'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1101:in `catch'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1101:in `invoke'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1124:in `dispatch!'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:939:in `block in call!'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1101:in `block in invoke'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1101:in `catch'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1101:in `invoke'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:939:in `call!'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:929:in `call'
/app/vendor/bundle/ruby/2.6.0/gems/rack-protection-2.1.0/lib/rack/protection/xss_header.rb:18:in `call'
/app/vendor/bundle/ruby/2.6.0/gems/rack-protection-2.1.0/lib/rack/protection/path_traversal.rb:16:in `call'
/app/vendor/bundle/ruby/2.6.0/gems/rack-protection-2.1.0/lib/rack/protection/json_csrf.rb:26:in `call'
/app/vendor/bundle/ruby/2.6.0/gems/rack-protection-2.1.0/lib/rack/protection/base.rb:50:in `call'
/app/vendor/bundle/ruby/2.6.0/gems/rack-protection-2.1.0/lib/rack/protection/base.rb:50:in `call'
/app/vendor/bundle/ruby/2.6.0/gems/rack-protection-2.1.0/lib/rack/protection/frame_options.rb:31:in `call'
/app/vendor/bundle/ruby/2.6.0/gems/rack-2.2.3/lib/rack/logger.rb:17:in `call'
/app/vendor/bundle/ruby/2.6.0/gems/rack-2.2.3/lib/rack/common_logger.rb:38:in `call'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:253:in `call'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:246:in `call'
/app/vendor/bundle/ruby/2.6.0/gems/rack-2.2.3/lib/rack/head.rb:12:in `call'
/app/vendor/bundle/ruby/2.6.0/gems/rack-2.2.3/lib/rack/method_override.rb:24:in `call'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:216:in `call'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1991:in `call'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1542:in `block in call'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1769:in `synchronize'
/app/vendor/bundle/ruby/2.6.0/gems/sinatra-2.1.0/lib/sinatra/base.rb:1542:in `call'
/app/vendor/bundle/ruby/2.6.0/gems/rack-2.2.3/lib/rack/handler/webrick.rb:95:in `service'
/app/vendor/ruby-2.6.0/lib/ruby/2.6.0/webrick/httpserver.rb:140:in `service'
/app/vendor/ruby-2.6.0/lib/ruby/2.6.0/webrick/httpserver.rb:96:in `run'
/app/vendor/ruby-2.6.0/lib/ruby/2.6.0/webrick/server.rb:307:in `block in start_thread'

Please sign in to comment.