blob: 8825205b9a2b83a62b3ede04657556ea74f62819 [file] [log] [blame]
def python_num(s):
try:
return int(s)
except Exception:
return float(s)
def parse(filename):
with open(filename, 'r') as file:
declarations = []
in_declaration = False
for line in file.readlines():
if '[NativeFunction]' in line:
in_declaration = True
arguments = []
declaration = {'mode': 'native'}
elif '[/NativeFunction]' in line:
in_declaration = False
declaration['arguments'] = arguments
declarations.append(declaration)
if declaration.get('type_method_definition_level') != 'base':
raise RuntimeError("Native functions currently only support (and must be specified with) "
"\'base\' type_method_definition_level")
elif in_declaration:
ls = line.strip().split(':', 1)
key = ls[0].strip()
value = ls[1].strip()
if key == 'arg':
t, name = value.split(" ", 1)
if '=' in name:
ns = name.split("=", 1)
name, default = ns[0], python_num(ns[1])
arguments.append({'type': t, 'name': name, 'default': default})
else:
arguments.append({'type': t, 'name': name})
else:
declaration[key] = value
return declarations