Skip to content

Commit

Permalink
Operator fixes. Subclass of Simple, now.
Browse files Browse the repository at this point in the history
  • Loading branch information
davidhalter committed Jul 22, 2014
1 parent 15f42d9 commit 852cdad
Show file tree
Hide file tree
Showing 5 changed files with 18 additions and 21 deletions.
2 changes: 1 addition & 1 deletion jedi/cache.py
Original file line number Diff line number Diff line change
Expand Up @@ -243,7 +243,7 @@ def save_parser(path, name, parser, pickling=True):

class ParserPickling(object):

version = 12
version = 13
"""
Version number (integer) for file system cache.
Expand Down
2 changes: 1 addition & 1 deletion jedi/evaluate/compiled/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ def params(self):
for p in tokens:
parts = [FakeName(part) for part in p.strip().split('=')]
if len(parts) >= 2:
parts.insert(1, Operator('=', (0, 0)))
parts.insert(1, Operator(module, '=', module, (0, 0)))
params.append(Param(module, parts, start_pos,
end_pos, builtin))
return params
Expand Down
6 changes: 3 additions & 3 deletions jedi/evaluate/precedence.py
Original file line number Diff line number Diff line change
Expand Up @@ -123,8 +123,8 @@ class MergedOperator(pr.Operator):
"""
def __init__(self, first, second):
string = first.string + ' ' + second.string
super(MergedOperator, self).__init__(string, first.start_pos)

super(MergedOperator, self).__init__(first._sub_module, string,
first.parent, first.start_pos)
self.first = first
self.second = second

Expand Down Expand Up @@ -278,7 +278,7 @@ def _element_calculate(evaluator, left, operator, right):
# Static analysis, one is a number, the other one is not.
elif l_is_num != r_is_num:
message = "TypeError: unsupported operand type(s) for +: %s and %s"
analysis.add(evaluator, 'type-error-operation', right,
analysis.add(evaluator, 'type-error-operation', operator,
message % (left, right))
elif operator == '-':
if _is_number(left) and _is_number(right):
Expand Down
4 changes: 3 additions & 1 deletion jedi/parser/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -325,7 +325,9 @@ def _parse_statement(self, pre_used_token=None, added_breaks=None,
# print 'parse_stmt', tok, tokenize.tok_name[token_type]
is_kw = tok.string in OPERATOR_KEYWORDS
if tok.type == tokenize.OP or is_kw:
tok_list.append(pr.Operator(tok.string, tok.start_pos))
tok_list.append(
pr.Operator(self.module, tok.string, self._scope, tok.start_pos)
)
else:
tok_list.append(tok)

Expand Down
25 changes: 10 additions & 15 deletions jedi/parser/representation.py
Original file line number Diff line number Diff line change
Expand Up @@ -918,7 +918,7 @@ def end_pos(self):
def get_code(self, new_line=True):
def assemble(command_list, assignment=None):
pieces = [c.get_code() if isinstance(c, Simple) else c.string if
isinstance(c, (tokenize.Token, Operator)) else unicode(c)
isinstance(c, tokenize.Token) else unicode(c)
for c in command_list]
if assignment is None:
return ''.join(pieces)
Expand Down Expand Up @@ -1565,26 +1565,21 @@ def get_code(self):
return "%s for %s in %s" % tuple(code)


class Operator(Base):
__slots__ = ('string', '_line', '_column')
class Operator(Simple):
__slots__ = ('string',)

def __init__(self, string, start_pos):
# TODO needs module param
def __init__(self, module, string, parent, start_pos):
end_pos = start_pos[0], start_pos[1] + len(string)
super(Operator, self).__init__(module, start_pos, end_pos)
self.string = string
self._line = start_pos[0]
self._column = start_pos[1]
self.parent = parent

def get_code(self):
return self.string

def __repr__(self):
return "<%s: `%s`>" % (type(self).__name__, self.string)

@property
def start_pos(self):
return self._line, self._column

@property
def end_pos(self):
return self._line, self._column + len(self.string)

def __eq__(self, other):
"""Make comparisons easy. Improves the readability of the parser."""
return self.string == other
Expand Down

0 comments on commit 852cdad

Please sign in to comment.