117 lines
3.7 KiB
Python
117 lines
3.7 KiB
Python
"""
|
|
The default class for build environments.
|
|
|
|
Contains the compiler builtins as well as some sane defaults.
|
|
|
|
# Added types
|
|
|
|
f32: A 32-bits IEEE 754 float, of 32 bits width.
|
|
"""
|
|
from ..type3.types import (
|
|
Type3,
|
|
TypeApplication_Nullary,
|
|
)
|
|
from ..type5 import typeexpr as type5typeexpr
|
|
from ..wasm import (
|
|
WasmTypeFloat32,
|
|
WasmTypeFloat64,
|
|
WasmTypeInt32,
|
|
WasmTypeInt64,
|
|
)
|
|
from ..wasmgenerator import Generator
|
|
from .base import BuildBase, TypeInfo
|
|
from .typeclasses import (
|
|
bits,
|
|
convertable,
|
|
eq,
|
|
extendable,
|
|
floating,
|
|
foldable,
|
|
fractional,
|
|
integral,
|
|
intnum,
|
|
natnum,
|
|
ord,
|
|
promotable,
|
|
reinterpretable,
|
|
sized,
|
|
subscriptable,
|
|
)
|
|
|
|
|
|
class BuildDefault(BuildBase[Generator]):
|
|
__slots__ = ()
|
|
|
|
def __init__(self) -> None:
|
|
super().__init__()
|
|
|
|
u8 = Type3('u8', TypeApplication_Nullary(None, None))
|
|
u16 = Type3('u16', TypeApplication_Nullary(None, None))
|
|
u32 = Type3('u32', TypeApplication_Nullary(None, None))
|
|
u64 = Type3('u64', TypeApplication_Nullary(None, None))
|
|
i8 = Type3('i8', TypeApplication_Nullary(None, None))
|
|
i16 = Type3('i16', TypeApplication_Nullary(None, None))
|
|
i32 = Type3('i32', TypeApplication_Nullary(None, None))
|
|
i64 = Type3('i64', TypeApplication_Nullary(None, None))
|
|
f32 = Type3('f32', TypeApplication_Nullary(None, None))
|
|
f64 = Type3('f64', TypeApplication_Nullary(None, None))
|
|
|
|
bytes_ = self.dynamic_array(u8)
|
|
|
|
self.type_info_map.update({
|
|
'u8': TypeInfo('u8', WasmTypeInt32, 'i32.load8_u', 'i32.store8', 1, False),
|
|
'u16': TypeInfo('u16', WasmTypeInt32, 'i32.load16_u', 'i32.store16', 2, False),
|
|
'u32': TypeInfo('u32', WasmTypeInt32, 'i32.load', 'i32.store', 4, False),
|
|
'u64': TypeInfo('u64', WasmTypeInt64, 'i64.load', 'i64.store', 8, False),
|
|
'i8': TypeInfo('i8', WasmTypeInt32, 'i32.load8_s', 'i32.store8', 1, True),
|
|
'i16': TypeInfo('i16', WasmTypeInt32, 'i32.load16_s', 'i32.store16', 2, True),
|
|
'i32': TypeInfo('i32', WasmTypeInt32, 'i32.load', 'i32.store', 4, True),
|
|
'i64': TypeInfo('i64', WasmTypeInt64, 'i64.load', 'i64.store', 8, True),
|
|
'f32': TypeInfo('f32', WasmTypeFloat32, 'f32.load', 'f32.store', 4, None),
|
|
'f64': TypeInfo('f64', WasmTypeFloat64, 'f64.load', 'f64.store', 8, None),
|
|
})
|
|
|
|
self.types.update({
|
|
'u8': u8,
|
|
'u16': u16,
|
|
'u32': u32,
|
|
'u64': u64,
|
|
'i8': i8,
|
|
'i16': i16,
|
|
'i32': i32,
|
|
'i64': i64,
|
|
'f32': f32,
|
|
'f64': f64,
|
|
'bytes': bytes_,
|
|
})
|
|
|
|
self.type5s.update({
|
|
'u16': type5typeexpr.AtomicType('u16'),
|
|
'u32': type5typeexpr.AtomicType('u32'),
|
|
'u64': type5typeexpr.AtomicType('u64'),
|
|
'i8': type5typeexpr.AtomicType('i8'),
|
|
'i16': type5typeexpr.AtomicType('i16'),
|
|
'i32': type5typeexpr.AtomicType('i32'),
|
|
'i64': type5typeexpr.AtomicType('i64'),
|
|
'f32': type5typeexpr.AtomicType('f32'),
|
|
'f64': type5typeexpr.AtomicType('f64'),
|
|
'bytes': type5typeexpr.TypeApplication(self.dynamic_array_type5_constructor, self.u8_type5),
|
|
})
|
|
|
|
tc_list = [
|
|
bits,
|
|
eq, ord,
|
|
extendable, promotable,
|
|
convertable, reinterpretable,
|
|
natnum, intnum, fractional, floating,
|
|
integral,
|
|
foldable, subscriptable,
|
|
sized,
|
|
]
|
|
|
|
for tc in tc_list:
|
|
tc.load(self)
|
|
|
|
for tc in tc_list:
|
|
tc.wasm(self)
|