parent
d4357fe35c
commit
d18e752d33
@ -1081,6 +1081,47 @@ class HyASTCompiler(object):
|
|||||||
|
|
||||||
return ret + val
|
return ret + val
|
||||||
|
|
||||||
|
@builds(".")
|
||||||
|
@checkargs(min=1)
|
||||||
|
def compile_attribute_access(self, expr):
|
||||||
|
expr.pop(0) # dot
|
||||||
|
|
||||||
|
ret = self.compile(expr.pop(0))
|
||||||
|
|
||||||
|
for attr in expr:
|
||||||
|
if isinstance(attr, HySymbol):
|
||||||
|
ret += ast.Attribute(lineno=attr.start_line,
|
||||||
|
col_offset=attr.start_column,
|
||||||
|
value=ret.force_expr,
|
||||||
|
attr=ast_str(attr),
|
||||||
|
ctx=ast.Load())
|
||||||
|
elif type(attr) == HyList:
|
||||||
|
if len(attr) != 1:
|
||||||
|
raise HyTypeError(
|
||||||
|
attr,
|
||||||
|
"The attribute access DSL only accepts HySymbols "
|
||||||
|
"and one-item lists, got {0}-item list instead".format(
|
||||||
|
len(attr),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
compiled_attr = self.compile(attr.pop(0))
|
||||||
|
ret = compiled_attr + ret + ast.Subscript(
|
||||||
|
lineno=attr.start_line,
|
||||||
|
col_offset=attr.start_column,
|
||||||
|
value=ret.force_expr,
|
||||||
|
slice=ast.Index(value=compiled_attr.force_expr),
|
||||||
|
ctx=ast.Load())
|
||||||
|
else:
|
||||||
|
raise HyTypeError(
|
||||||
|
attr,
|
||||||
|
"The attribute access DSL only accepts HySymbols "
|
||||||
|
"and one-item lists, got {0} instead".format(
|
||||||
|
type(attr).__name__,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
return ret
|
||||||
|
|
||||||
@builds("del")
|
@builds("del")
|
||||||
@checkargs(min=1)
|
@checkargs(min=1)
|
||||||
def compile_del_expression(self, expr):
|
def compile_del_expression(self, expr):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user