diff --git a/evaluate.py b/evaluate.py index 308fb490..19f4e356 100644 --- a/evaluate.py +++ b/evaluate.py @@ -72,16 +72,18 @@ class Execution(Exec): if get_returns: ret = scope.returns for s in ret: - for stmt in follow_statement(s): - stmts += remove_executions(stmt) + #for stmt in follow_statement(s): + # stmts += remove_executions(stmt) + stmts += follow_statement(s) else: stmts.append(scope) return stmts # check cache try: - debug.dbg('hit function cache', self.base) - return Execution.cache[self.base] + ex = Execution.cache[self.base] + debug.dbg('hit function cache', self.base, ex) + return ex except KeyError: # cache is not only here as a cache, but also to prevent an # endless recursion. @@ -206,14 +208,16 @@ def follow_call(scope, call): path = call.generate_call_list() current = next(path) + print 'call', scope, call, current if isinstance(current, parsing.Array): result = [current] else: # TODO add better care for int/unicode, now str/float are just used # instead - if current.type == parsing.Call.STRING: + not_name_part = not isinstance(current, parsing.NamePart) + if not_name_part and current.type == parsing.Call.STRING: scopes = get_scopes_for_name(builtin.Builtin.scope, 'str') - elif current.type == parsing.Call.NUMBER: + elif not_name_part and current.type == parsing.Call.NUMBER: scopes = get_scopes_for_name(builtin.Builtin.scope, 'float') else: scopes = get_scopes_for_name(scope, current, search_global=True) diff --git a/functions.py b/functions.py index 31bbbf03..b7974b84 100644 --- a/functions.py +++ b/functions.py @@ -82,9 +82,10 @@ class FileWithCursor(modules.File): break elif tok in close_brackets: level += 1 - elif token_type in [tokenize.NAME, tokenize.STRING, - tokenize.NUMBER]: + elif token_type in [tokenize.NAME, tokenize.STRING]: force_point = True + elif token_type == tokenize.NUMBER: + pass else: #print 'break', token_type, tok break diff --git a/parsing.py b/parsing.py index 39de7179..07fed9f1 100644 --- a/parsing.py +++ b/parsing.py @@ -608,7 +608,7 @@ class Statement(Simple): "behaviour. Please submit a bug" % level) self.assignment_calls = top - print 'top', top.values + print 'top', top.values, top.values[0][0].name, repr(top.values[0][0].name) return top diff --git a/test.py b/test.py index bd021f4a..d9a54b7c 100644 --- a/test.py +++ b/test.py @@ -133,7 +133,7 @@ class c1(): import os as c4 #from parsing import Scope as c4 c5 = c4 c5 = 1 - return c5+1+'asdf' + return c5+'asdf' (c1().c2.\ @@ -147,4 +147,4 @@ b= asdf2 #import parsing as test c = b().c3() -"1.0".join() +1.0.fromhex()