From 4f62df13341bd1180fa487bfb6d56369aff1df2c Mon Sep 17 00:00:00 2001 From: KOL Date: Sun, 28 May 2017 20:03:26 +0300 Subject: [PATCH] - Add support parsing string literals as hash key. #38 --- Contents/Services/Shared Code/jsinterp.pys | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Contents/Services/Shared Code/jsinterp.pys b/Contents/Services/Shared Code/jsinterp.pys index c539d58..42aa639 100644 --- a/Contents/Services/Shared Code/jsinterp.pys +++ b/Contents/Services/Shared Code/jsinterp.pys @@ -146,11 +146,14 @@ class JSInterpreter(object): pass m = re.match( - r'(?P%s)\.(?P[^(]+)(?:\(+(?P[^()]*)\))?$' % NAME_RE, + # r'(?P%s)\.(?P[^(]+)(?:\(+(?P[^()]*)\))?$' % NAME_RE, + r'(?P%s)(?:\.(?P[^(]+)|\[[\'\"](?P[^(]+)[\'\"]\])(?:\(+(?P[^()]*)\))?$' % NAME_RE, expr) if m: variable = m.group('var') member = m.group('member') + if not member: + member = m.group('member_str') arg_str = m.group('args') if variable in local_vars: @@ -239,13 +242,13 @@ class JSInterpreter(object): obj = {} obj_m = re.search( (r'(?:var\s+)?%s\s*=\s*\{' % re.escape(objname)) + - r'\s*(?P([a-zA-Z$0-9]+\s*:\s*function\(.*?\)\s*\{.*?\}\s*,*\s*)*)' + + r'\s*(?P[\'\"]?([a-zA-Z$0-9]+[\'\"]?\s*:\s*function\(.*?\)\s*\{.*?\}\s*,*\s*)*)' + r'\}\s*;', self.code) fields = obj_m.group('fields') # Currently, it only supports function definitions fields_m = re.finditer( - r'(?P[a-zA-Z$0-9]+)\s*:\s*function' + r'[\'\"]?(?P[a-zA-Z$0-9]+)[\'\"]?\s*:\s*function' r'\((?P[a-z,]+)\){(?P[^}]+)}', fields) for f in fields_m: