X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.scl.compiler%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fcompiler%2Felaboration%2Fcontexts%2FTranslationContext.java;h=ac9299d77f968a3a7623c5974005eacd5502f87c;hp=0331f9a50b86a7715405afc9bb37da2441d8b5b2;hb=d8e51c3b7d55403115dc83d0a9b2337378e91fb8;hpb=3e8cd4aef089a228d7f2e141f2b2159f820a4266 diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/contexts/TranslationContext.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/contexts/TranslationContext.java index 0331f9a50..ac9299d77 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/contexts/TranslationContext.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/contexts/TranslationContext.java @@ -157,13 +157,16 @@ public class TranslationContext extends TypeTranslationContext implements Enviro return existentialFrames.get(size-1); } - private Expression resolveFieldAccess(Expression base, int pos, String name) { + private Expression resolveFieldAccess(long location, Expression base, int pos, String name) { while(pos != -1) { int p = findSeparator(name, pos+1); + int endPos = p==-1 ? name.length() : p; FieldAccessor accessor = new IdAccessor( name.charAt(pos), - name.substring(pos+1, p==-1 ? name.length() : p-1)); + name.substring(pos+1, endPos)); + accessor.location = Locations.sublocation(location, pos+1, endPos); base = new EFieldAccess(base, accessor); + base.location = Locations.sublocation(location, 0, endPos); pos = p; } return base; @@ -235,7 +238,7 @@ public class TranslationContext extends TypeTranslationContext implements Enviro if(begin == 0) { Expression result = resolveLocalVariable(location, part); if(result != null) - return end == -1 ? result : resolveFieldAccess(result, end, name); + return end == -1 ? result : resolveFieldAccess(location, result, end, name); // FIXME.. support for records if(localEnvironment != null) { @@ -266,7 +269,7 @@ public class TranslationContext extends TypeTranslationContext implements Enviro if(result == null) result = resolveValue(location, namespace, part); if(result != null) - return end == -1 ? result : resolveFieldAccess(result, end, name); + return end == -1 ? result : resolveFieldAccess(location, result, end, name); } reportResolveFailure(location, namespace, part); return new EError(location);