1 package org.simantics.scl.compiler.internal.parsing.translation;
\r
3 import java.util.ArrayList;
\r
4 import java.util.Collection;
\r
6 import org.simantics.scl.compiler.elaboration.errors.NotPatternException;
\r
7 import org.simantics.scl.compiler.elaboration.expressions.EVar;
\r
8 import org.simantics.scl.compiler.errors.Locations;
\r
9 import org.simantics.scl.compiler.internal.parsing.declarations.DAnnotationAst;
\r
10 import org.simantics.scl.compiler.internal.parsing.declarations.DValueAst;
\r
12 import gnu.trove.impl.Constants;
\r
13 import gnu.trove.map.hash.THashMap;
\r
14 import gnu.trove.map.hash.TObjectLongHashMap;
\r
16 public class ValueRepository {
\r
17 THashMap<String, ArrayList<DValueAst>> values =
\r
18 new THashMap<String, ArrayList<DValueAst>>();
\r
19 THashMap<String, ArrayList<DAnnotationAst>> annotations =
\r
20 new THashMap<String, ArrayList<DAnnotationAst>>();
\r
21 TObjectLongHashMap<String> locations = new TObjectLongHashMap<String>(Constants.DEFAULT_CAPACITY, Constants.DEFAULT_LOAD_FACTOR,
\r
22 Locations.NO_LOCATION);
\r
24 public String add(DValueAst value) throws NotPatternException {
\r
25 EVar name = value.lhs.getPatternHead();
\r
26 ArrayList<DValueAst> vs = values.get(name.name);
\r
28 vs = new ArrayList<DValueAst>(2);
\r
29 values.put(name.name, vs);
\r
31 long oldLocation = locations.get(name.name);
\r
32 if(oldLocation == Locations.NO_LOCATION || name.location < oldLocation)
\r
33 locations.put(name.name, name.location);
\r
38 public void addDefinitions(String name, ArrayList<DValueAst> valueList) {
\r
39 ArrayList<DValueAst> vs = values.get(name);
\r
41 vs = new ArrayList<DValueAst>(valueList.size());
\r
42 values.put(name, vs);
\r
44 vs.addAll(valueList);
\r
47 public void addAnnotation(String name, DAnnotationAst annotation) {
\r
48 ArrayList<DAnnotationAst> as = annotations.get(name);
\r
50 as = new ArrayList<DAnnotationAst>(2);
\r
51 annotations.put(name, as);
\r
56 public void addAnnotations(String name, ArrayList<DAnnotationAst> annotationList) {
\r
57 ArrayList<DAnnotationAst> as = annotations.get(name);
\r
59 as = new ArrayList<DAnnotationAst>(annotationList.size());
\r
60 annotations.put(name, as);
\r
62 as.addAll(annotationList);
\r
65 public Collection<String> getValueNames() {
\r
66 return values.keySet();
\r
69 public ArrayList<DValueAst> getDefinition(String name) {
\r
70 return values.get(name);
\r
73 public ArrayList<DAnnotationAst> getAnnotations(String name) {
\r
74 return annotations.get(name);
\r
77 public void addFrom(ValueRepository repo, String oldName, String newName) {
\r
78 addDefinitions(newName, repo.getDefinition(oldName));
\r
80 ArrayList<DAnnotationAst> as = repo.getAnnotations(oldName);
\r
82 addAnnotations(newName, as);
\r
85 public long getLocation(String name) {
\r
86 return locations.get(name);
\r