pixwerx/tools/glad-0.1.14a0/glad/lang/volt/generator.py

86 lines
2.1 KiB
Python

import sys
from glad.lang.d.generator import DGenerator
if sys.version_info >= (3, 0):
basestring = str
class VoltGenerator(DGenerator):
NAME = 'volt'
NAME_LONG = 'Volt'
MODULE = 'amp'
LOADER = 'loader'
ENUMS = 'enums'
EXT = 'ext'
FUNCS = 'funcs'
TYPES = 'types'
FILE_EXTENSION = '.volt'
API = ''
LOAD_GL_NAME = 'load'
@property
def PACKAGE(self):
return 'package'
def write_module(self, fobj, name):
if name == 'package':
fobj.write('module {}.{};\n\n'.format(self.MODULE, self.spec.NAME))
else:
DGenerator.write_module(self, fobj, name)
def write_prototype_pre(self, fobj):
fobj.write('extern(System) @loadDynamic {\n')
def write_prototype_post(self, fobj):
fobj.write('}\n')
def write_function_pre(self, fobj):
pass
def write_function_post(self, fobj):
pass
def write_shared(self, fobj):
fobj.write('global {\n')
def write_shared_end(self, fobj):
fobj.write('}\n')
def write_function(self, fobj, func):
pass
def write_function_prototype(self, fobj, func):
fobj.write('{} {}('
.format(func.proto.ret.to_volt(), func.proto.name))
fobj.write(', '.join(param.type.to_volt() for param in func.params))
fobj.write(');\n')
def write_boolean(self, fobj, name, **kwargs):
fobj.write('global bool {};\n'.format(name))
def write_enum(self, fobj, name, value, type_='uint'):
if isinstance(value, basestring):
if value.startswith('0x') and type_.startswith('u'):
value += 'U'
if len(value) > 12 and type_.startswith('u'):
value += 'L'
try:
v = int(value)
if v < 0:
type_ = 'int'
except ValueError:
pass
if isinstance(value, basestring) and '"' in value:
type_ = 'const(char)*'
fobj.write('enum {} {} = {};\n'.format(type_, name, value))
def write_opaque_struct(self, fobj, name):
fobj.write('struct _{name} {{}}\nalias {name} = _{name}*;\n'.format(name=name))