memberSet method
void
memberSet(})
override
Set the value of a static member of this HTClass via memberGet operator '.' for symbol searching, use the same name method on HTClassNamespace instead.
Implementation
@override
void memberSet(String id, dynamic value,
{String? from, bool defineIfAbsent = false}) {
final setter = '${InternalIdentifier.setter}$id';
if (isExternal) {
externalClass!.memberSet('$id.$id', value);
return;
} else {
if (namespace.symbols.containsKey(id)) {
final decl = namespace.symbols[id];
if (decl is HTDeclaration) {
if (decl.isStatic) {
if (decl.isPrivate &&
from != null &&
!from.startsWith(namespace.fullName)) {
throw HTError.privateMember(id);
}
decl.resolve();
decl.value = value;
return;
}
} else {
if (interpreter.lexicon.isPrivate(id) &&
from != null &&
!from.startsWith(namespace.fullName)) {
throw HTError.privateMember(id);
}
namespace.symbols[id] = value;
return;
}
// TODO: non-static error prompt
} else if (namespace.symbols.containsKey(setter)) {
final decl = namespace.symbols[setter];
if (decl is! HTFunction) return;
if (decl.isStatic) {
if (decl.isPrivate &&
from != null &&
!from.startsWith(namespace.fullName)) {
throw HTError.privateMember(id);
}
decl.resolve();
decl.call(positionalArgs: [value]);
return;
}
// TODO: non-static error prompt
}
}
throw HTError.undefined(id,
filename: interpreter.currentFile,
line: interpreter.currentLine,
column: interpreter.currentColumn);
}