added glad generator and a glad runtime
This commit is contained in:
parent
2017f6195e
commit
ac18a84a9c
62 changed files with 32373 additions and 10 deletions
86
tools/glad-0.1.14a0/glad/lang/volt/generator.py
Normal file
86
tools/glad-0.1.14a0/glad/lang/volt/generator.py
Normal file
|
@ -0,0 +1,86 @@
|
|||
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))
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue