diff options
Diffstat (limited to 'emscripten.py')
-rwxr-xr-x | emscripten.py | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/emscripten.py b/emscripten.py index 85ae0cab..c103af87 100755 --- a/emscripten.py +++ b/emscripten.py @@ -175,9 +175,8 @@ def main(args): header = os.path.join(include_root, header) for line in open(header, 'r'): line = line.replace('\t', ' ') - m = re.match('^ *#define +(?P<name>[-\w_.]+) +(?P<value>[-\w_.]+).*', line) + m = re.match('^ *#define +(?P<name>[-\w_.]+) +\(?(?P<value>[-\w_.|]+)\)?.*', line) if m: - #print 'define!', m.groups() defines[m.group('name')] = m.group('value') m = re.match('^ *#include *["<](?P<name>[\w_.-/]+)[">].*', line) if m: @@ -193,25 +192,31 @@ def main(args): if found: break #assert found, 'Could not find header: ' + m.group('name') if len(defines) > 0: - #print 'zz defines pre: ', defines def lookup(value): try: while not unicode(value).isnumeric(): value = defines[value] return value except: - try: - value = eval(value) - return value - except: - return None + pass + try: # 0x300 etc. + value = eval(value) + return value + except: + pass + try: # CONST1|CONST2 + parts = map(lookup, value.split('|')) + value = reduce(lambda a, b: a|b, map(eval, parts)) + return value + except: + pass + return None for key, value in defines.items(): value = lookup(value) if value is not None: defines[key] = str(value) else: del defines[key] - #print 'zz defines post: ', defines settings['C_DEFINES'] = defines # Compile the assembly to Javascript. |