return -1;
}
+ public SCLValue resolveSCLValue(long location, Namespace namespace, String name) throws AmbiguousNameException {
+ SCLValue value = namespace.getValue(name);
+ if(value == null)
+ return null;
+ String deprecatedDescription = value.isDeprecated();
+ if(deprecatedDescription != null)
+ errorLog.logWarning(location, "Deprecated value " + value.getName().name + "." + (deprecatedDescription.isEmpty() ? "" : " " + deprecatedDescription));
+ if(moduleDebugInfo != null)
+ moduleDebugInfo.symbolReferences.add(new SymbolReference(value.getName(), Name.create(compilationContext.module.getName(), definitionName), location));
+ return value;
+ }
+
public Expression resolveValue(long location, Namespace namespace, String name) {
try {
- SCLValue value = namespace.getValue(name);
+ SCLValue value = resolveSCLValue(location, namespace, name);
if(value == null)
return null;
- String deprecatedDescription = value.isDeprecated();
- if(deprecatedDescription != null)
- errorLog.logWarning(location, "Deprecated value " + value.getName().name + "." + (deprecatedDescription.isEmpty() ? "" : " " + deprecatedDescription));
- if(moduleDebugInfo != null)
- moduleDebugInfo.symbolReferences.add(new SymbolReference(value.getName(), Name.create(compilationContext.module.getName(), definitionName), location));
return new EConstant(location, value);
} catch (AmbiguousNameException e) {
if(SCLCompilerConfiguration.ALLOW_OVERLOADING)
return new EError(location);
}
+ public SCLValue resolveRecordConstructor(long location, String name) throws AmbiguousNameException {
+ return resolveRecordConstructor(location, getEnvironment().getLocalNamespace(), name, 0);
+ }
+
+ public SCLValue resolveRecordConstructor(long location, Namespace namespace, String name, int begin) throws AmbiguousNameException {
+ int end = findSeparator(name, begin);
+ String part = end == -1 ? (begin == 0 ? name : name.substring(begin)) : name.substring(begin, end);
+
+ if(end != -1 && name.charAt(end) == '.') {
+ Namespace childNamespace = namespace.getNamespace(part);
+ if(childNamespace == null)
+ return null;
+ else
+ return resolveRecordConstructor(location, childNamespace, name, end+1);
+ }
+ else
+ return resolveSCLValue(location, namespace, part);
+ }
+
private void reportResolveFailure(long location, Namespace namespace, String name) {
StringBuilder message = new StringBuilder();
message.append("Couldn't resolve ").append(name).append(".");