Compare commits

..

8 Commits

Author SHA1 Message Date
ychenfo aebfd0a37d nac3core/artiq: raise ValueError for unwrap none 2022-03-26 01:54:42 +08:00
ychenfo 91d697c327 nac3standalone: add tests for option 2022-03-26 01:54:42 +08:00
ychenfo d18292dd28 nac3core/artiq: use none instead of None 2022-03-26 01:54:42 +08:00
ychenfo 29da2d1a9a nac3artiq/core: host option object support 2022-03-26 01:54:42 +08:00
ychenfo 34b460757b nac3core: option type codegen support 2022-03-26 01:54:42 +08:00
ychenfo 925f1c2cc4 nac3core: remove previous handling of None
not to confuse with option none, and the None token is parsed as a special ast::constant instead of an ast::name so the handling is invalid
2022-03-26 01:51:54 +08:00
ychenfo 65110a2cf2 nac3core: fix broken tests 2022-03-25 03:49:57 +08:00
ychenfo 3d39a80df6 nac3core: option type front end 2022-03-25 02:37:08 +08:00
4 changed files with 6 additions and 13 deletions

View File

@ -16,8 +16,7 @@ class EmbeddingMap:
"CacheError",
"SPIError",
"0:ZeroDivisionError",
"0:IndexError",
"0:UnwrapNoneError"])
"0:IndexError"])
def preallocate_runtime_exception_names(self, names):
for i, name in enumerate(names):

View File

@ -11,7 +11,7 @@ from embedding_map import EmbeddingMap
__all__ = [
"Kernel", "KernelInvariant", "virtual",
"Option", "Some", "none", "UnwrapNoneError",
"Option", "Some", "none",
"round64", "floor64", "ceil64",
"extern", "kernel", "portable", "nac3",
"rpc", "ms", "us", "ns",
@ -47,7 +47,7 @@ class Option(Generic[T]):
def unwrap(self):
if self.is_none():
raise UnwrapNoneError()
raise ValueError("unwrap on none")
return self._nac3_option
def __repr__(self) -> str:
@ -274,10 +274,5 @@ class KernelContextManager:
def __exit__(self):
pass
@nac3
class UnwrapNoneError(Exception):
"""raised when unwrapping a none value"""
artiq_builtin = True
parallel = KernelContextManager()
sequential = KernelContextManager()

View File

@ -1319,8 +1319,8 @@ pub fn gen_expr<'ctx, 'a, G: CodeGenerator>(
ctx.make_assert(
generator,
not_null,
"0:UnwrapNoneError",
"",
"0:ValueError",
"unwrap on none",
[None, None, None],
expr.location,
);

View File

@ -105,8 +105,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
("__param2__".into(), int64, true),
];
// for Option, is_some and is_none share the same type: () -> bool,
// and they are methods under the same class `Option`
// for Option, is_some and is_none share the same type
let (is_some_ty, unwrap_ty, (option_ty_var, option_ty_var_id)) =
if let TypeEnum::TObj { fields, params, .. } =
primitives.1.get_ty(primitives.0.option).as_ref()