memberSet method
bool
memberSet(
- String id,
- dynamic value, {
- String? from,
- bool defineIfAbsent = false,
- bool isRecursive = false,
- bool ignoreUndefined = false,
override
Fetch a declaration from this namespace,
if not found and isRecursive is true, will continue search in super namespaces,
then assign the value to that declaration.
If isRecursive is true, means this is not a 'memberset operator' search.
Implementation
@override
bool memberSet(
String id,
dynamic value, {
String? from,
bool defineIfAbsent = false,
bool isRecursive = false,
bool ignoreUndefined = false,
}) {
if (symbols.containsKey(id)) {
final decl = symbols[id];
if (decl is HTDeclaration) {
if (decl.isPrivate && from != null && !from.startsWith(fullName)) {
throw HTError.privateMember(id);
}
decl.resolve();
decl.value = value;
} else {
if (lexicon.isPrivate(id) &&
from != null &&
!from.startsWith(fullName)) {
throw HTError.privateMember(id);
}
symbols[id] = value;
}
return true;
} else if (importedSymbols.containsKey(id)) {
final decl = importedSymbols[id];
if (decl is HTDeclaration) {
if (decl.isPrivate && from != null && !from.startsWith(fullName)) {
throw HTError.privateMember(id);
}
decl.resolve();
decl.value = value;
} else {
if (lexicon.isPrivate(id) &&
from != null &&
!from.startsWith(fullName)) {
throw HTError.privateMember(id);
}
importedSymbols[id] = value;
}
return true;
} else if (isRecursive && (closure != null)) {
return closure!.memberSet(id, value,
from: from, isRecursive: true, ignoreUndefined: ignoreUndefined);
} else {
if (defineIfAbsent) {
symbols[id] = value;
} else if (!ignoreUndefined) {
throw HTError.undefined(id);
}
}
return false;
}