Skip to content
This repository has been archived by the owner on Mar 31, 2019. It is now read-only.

Commit

Permalink
nullable handling through if statements
Browse files Browse the repository at this point in the history
  • Loading branch information
jpivarski committed Oct 12, 2017
1 parent ba56c6e commit b33989e
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 6 deletions.
24 changes: 19 additions & 5 deletions arrowed/compiler.py
Original file line number Diff line number Diff line change
Expand Up @@ -376,10 +376,13 @@ def __init__(self, possibilities, parameter):
self.nullable = False

def setnullable(self, value=True):
out = ArrowedType(self.possibilities, self.parameter)
out.isparameter = self.isparameter
out.nullable = value
return out
if self is nullable or self is untracked:
return self
else:
out = ArrowedType(self.possibilities, self.parameter)
out.isparameter = self.isparameter
out.nullable = value
return out

def generate(self, handler):
out = None
Expand Down Expand Up @@ -654,7 +657,14 @@ def do_Attribute(node, symtable, externalfcns, env, sym, sourcefile, recurse):
def handler(schema):
if isinstance(schema, Record):
if node.attr in schema.contents:
return retyped(node.value, ArrowedType(schema.contents[node.attr], node.value.atype.parameter))
if node.value.atype.nullable: # FIXME: or schema.nullable
value = toexpr("REFUSENONE(VALUE)",
REFUSENONE = toname(newrefusenone(env, sym, "record" if schema.name is None else schema.name, node.value.lineno, sourcefile)),
VALUE = node.value)
else:
value = node.value
return retyped(value, ArrowedType(schema.contents[node.attr], node.value.atype.parameter))

elif schema.name is None:
raise AttributeError("attribute {0} not found in record with structure:\n\n{1}\n\nat line {lineno} of {sourcefile}".format(
repr(node.attr), schema.format(" "), lineno=node.lineno, sourcefile=sourcefile))
Expand Down Expand Up @@ -814,6 +824,10 @@ def handler(schema):
# IfExp ("test", "body", "orelse")

# If ("test", "body", "orelse")
def do_If(node, symtable, externalfcns, env, sym, sourcefile, recurse):
body = recurse(node.body)
orelse = recurse(node.orelse)
return rebuilt(node, recurse(node.test), body, orelse)

# ImportFrom ("module", "names", "level")

Expand Down
2 changes: 1 addition & 1 deletion arrowed/version.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

import re

__version__ = "0.0.11"
__version__ = "0.0.12"
version = __version__
version_info = tuple(re.split(r"[-\.]", __version__))

Expand Down

0 comments on commit b33989e

Please sign in to comment.