Type node = cons.getConstructorType();
if (!receiverType.hasField(label, __eval.getCurrentEnvt()
.getStore())
&& !receiverType.hasKeywordParameter(label, __eval.getCurrentEnvt().getStore())) {
throw new UndeclaredField(label, receiverType, this);
}
if (!node.hasField(label) && ! node.hasKeywordParameter(label)) {
throw org.rascalmpl.interpreter.utils.RuntimeExceptionFactory
.noSuchField(label, this, __eval.getStackTrace());
}
if (node.hasKeywordParameter(label)) {
return ResultFactory
.makeResult(node.getKeywordParameterType(label), cons.asWithKeywordParameters().getParameter(label)
,__eval);
}
else {
int index = node.getFieldIndex(label);
return ResultFactory
.makeResult(node.getFieldType(index), cons.get(index),
__eval);
}
} else if (receiverType.isSourceLocation()) {
return receiver.fieldAccess(label, new TypeStore());
} else {
throw new UndeclaredField(label, receiverType, this);
}
}