This commit is contained in:
Vitor Santos Costa 2019-03-26 23:53:47 +00:00
parent c0f7dfe3c3
commit b7cd534d80
2 changed files with 23 additions and 27 deletions

View File

@ -171,7 +171,7 @@ static bool pygetLine(StreamDesc *rl_iostream, int sno) {
PyObject_GetAttrString(s->u.private_data, "readline"); PyObject_GetAttrString(s->u.private_data, "readline");
if (!readl) { if (!readl) {
readl = readl =
PyObject_GetAttrString(s->u.private_data, "read"); PyObject_GetAttrString(s->u.private_data, "input");
} }
if (readl) if (readl)
user_line = PyObject_CallFunctionObjArgs(readl, user_line = PyObject_CallFunctionObjArgs(readl,

View File

@ -13,7 +13,6 @@ from IPython.core.inputtransformer import *
from IPython.core.interactiveshell import * from IPython.core.interactiveshell import *
from ipython_genutils.py3compat import builtin_mod from ipython_genutils.py3compat import builtin_mod
import copy
import json import json
from yap_kernel.displayhook import ZMQShellDisplayHook from yap_kernel.displayhook import ZMQShellDisplayHook
@ -536,14 +535,13 @@ class YAPRun(InteractiveShell):
self.engine.mgoal(errors(self,text),"user",True) self.engine.mgoal(errors(self,text),"user",True)
return self.errors return self.errors
def prolog(self, ccell, result): def prolog(self, program, squery, howmany, result):
# #
# construct a self.query from a one-line string # construct a self.query from a one-line string
# self.q is opaque to Python # self.q is opaque to Python
try: try:
# sys.settrace(tracefunc) # sys.settrace(tracefunc)
(program, squery, _, howmany) = ccell
if self.q and self.os == (program,squery): if self.q and self.os == (program,squery):
howmany += self.iterations howmany += self.iterations
else: else:
@ -553,6 +551,7 @@ class YAPRun(InteractiveShell):
self.answers = [] self.answers = []
result.result = [] result.result = []
self.os = (program,squery) self.os = (program,squery)
self.iterations = 0
pg = jupyter_query(self,program,squery) pg = jupyter_query(self,program,squery)
self.q = Query(self.engine, pg) self.q = Query(self.engine, pg)
for v in self.q: for v in self.q:
@ -671,7 +670,6 @@ class YAPRun(InteractiveShell):
except: except:
magic = cell[2:].strip() magic = cell[2:].strip()
body = "" body = ""
linec = False
try: try:
[magic,line] = magic.split(maxsplit=1) [magic,line] = magic.split(maxsplit=1)
except: except:
@ -680,7 +678,6 @@ class YAPRun(InteractiveShell):
result.result = self.shell.run_cell_magic(magic, line, body) result.result = self.shell.run_cell_magic(magic, line, body)
return return
else: else:
linec = True
rcell = cell[1:].strip() rcell = cell[1:].strip()
try: try:
[magic,cell] = rcell.split(maxsplit = 1, sep = '\n') [magic,cell] = rcell.split(maxsplit = 1, sep = '\n')
@ -697,9 +694,9 @@ class YAPRun(InteractiveShell):
# Give the displayhook a reference to our ExecutionResult so it # Give the displayhook a reference to our ExecutionResult so it
# can fill in the output value. # can fill in the output value.
self.shell.displayhook.exec_result = result self.shell.displayhook.exec_result = result
ccell = self.prolog_cell(cell) (program,squery,_ ,howmany) = self.prolog_cell(cell)
(program,squery,_ ,howmany) = ccell print(program, squery, howmany)
if howmany == 0 and not program: if howmany <= 0 and not program:
return result return result
if self.syntaxErrors(program+squery+".\n") : if self.syntaxErrors(program+squery+".\n") :
result.result = [] result.result = []
@ -723,7 +720,7 @@ class YAPRun(InteractiveShell):
# run the new command using the given tracer # run the new command using the given tracer
# #
# tracer.runfunc(f,self,cell,state) # tracer.runfunc(f,self,cell,state)
answers = self.prolog( ccell, result ) answers = self.prolog( program, squery, howmany, result )
# state = tracer.runfunc(hist # state = tracer.runfunc(hist
# er_query( self, cell ) ) # er_query( self, cell ) )
except Exception as e: except Exception as e:
@ -731,6 +728,7 @@ class YAPRun(InteractiveShell):
try: try:
(etype, value, tb) = e (etype, value, tb) = e
traceback.print_exception(etype, value, tb) traceback.print_exception(etype, value, tb)
self.engine.mgoal(streams(False),"user", True)
except: except:
print(e) print(e)
@ -781,6 +779,7 @@ class YAPRun(InteractiveShell):
if line[-1] == '.': if line[-1] == '.':
return (s,'','.',0) return (s,'','.',0)
query = '' query = ''
loop = ''
while i<l: while i<l:
line = sl[-i-1] line = sl[-i-1]
if line.strip() == '': if line.strip() == '':
@ -790,26 +789,22 @@ class YAPRun(InteractiveShell):
reps = 1 reps = 1
if query: if query:
q = query.strip() q = query.strip()
c= q.rpartition('*') c= q.rpartition('?')
if not c[1]:
c= q.rpartition(';')
c2 = c[2].strip() c2 = c[2].strip()
if c[1] != '*' or (c2!='' and not c2.isdecimal()): if len(c[1]) == 1 and c[0].strip():
c = q.rpartition('?')
c2 = c[2].strip() c2 = c[2].strip()
if c[1] == '?' and(c2=='' or c2.isdecimal()): query = c[0]
c = q.rpartition(';') if c2.isdecimal():
c2 = c[2].strip() reps = int(c2)
elif c2:
return ('',c[1]+c[2],c[1],-1)
elif c[1] == '?':
reps = 1
else: else:
c=('','',query) reps = 10000000000
[q,loop,repeats] = c loop = c[1]
if q:
query=q
if repeats.strip().isdecimal():
reps = int(repeats)
sep = sepator
elif loop == '*':
reps = -1
elif loop == '?':
reps = 10
while i<l: while i<l:
line = sl[-i-1] line = sl[-i-1]
if line.strip() != '': if line.strip() != '':
@ -828,3 +823,4 @@ class YAPRun(InteractiveShell):
except: except:
print(e) print(e)