X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.graph.compiler%2Fsrc%2Forg%2Fsimantics%2Fgraph%2Fcompiler%2Finternal%2Ftranslation%2FDataValueTranslator.java;fp=bundles%2Forg.simantics.graph.compiler%2Fsrc%2Forg%2Fsimantics%2Fgraph%2Fcompiler%2Finternal%2Ftranslation%2FDataValueTranslator.java;h=7423ba913420875ad031f8438f1934e0c742af3f;hp=3eafe49accbf6e193a7d14c982fd3694bca9aa0c;hb=0ae2b770234dfc3cbb18bd38f324125cf0faca07;hpb=24e2b34260f219f0d1644ca7a138894980e25b14 diff --git a/bundles/org.simantics.graph.compiler/src/org/simantics/graph/compiler/internal/translation/DataValueTranslator.java b/bundles/org.simantics.graph.compiler/src/org/simantics/graph/compiler/internal/translation/DataValueTranslator.java index 3eafe49ac..7423ba913 100644 --- a/bundles/org.simantics.graph.compiler/src/org/simantics/graph/compiler/internal/translation/DataValueTranslator.java +++ b/bundles/org.simantics.graph.compiler/src/org/simantics/graph/compiler/internal/translation/DataValueTranslator.java @@ -1,261 +1,261 @@ -package org.simantics.graph.compiler.internal.translation; - -import java.util.Collection; - -import org.antlr.runtime.tree.Tree; -import org.simantics.databoard.Bindings; -import org.simantics.databoard.binding.ArrayBinding; -import org.simantics.databoard.binding.Binding; -import org.simantics.databoard.binding.BooleanBinding; -import org.simantics.databoard.binding.ByteBinding; -import org.simantics.databoard.binding.DoubleBinding; -import org.simantics.databoard.binding.FloatBinding; -import org.simantics.databoard.binding.IntegerBinding; -import org.simantics.databoard.binding.LongBinding; -import org.simantics.databoard.binding.MapBinding; -import org.simantics.databoard.binding.OptionalBinding; -import org.simantics.databoard.binding.RecordBinding; -import org.simantics.databoard.binding.StringBinding; -import org.simantics.databoard.binding.UnionBinding; -import org.simantics.databoard.binding.VariantBinding; -import org.simantics.databoard.binding.error.BindingException; -import org.simantics.databoard.type.Datatype; -import org.simantics.graph.compiler.internal.parsing.GraphParser; -import org.simantics.ltk.ISource; -import org.simantics.ltk.Problem; -import org.simantics.ltk.antlr.ANTLRUtils; - -public class DataValueTranslator { - - ISource source; - Collection problems; - - public DataValueTranslator(ISource source, Collection problems) { - this.source = source; - this.problems = problems; - } - - public Object translate(Tree _tree, Binding binding) { - while(_tree.getType() == GraphParser.TUPLE && - _tree.getChildCount()==1) - _tree = _tree.getChild(0); - final Tree tree = _tree; - return binding.accept(new Binding.Visitor() { - - @Override - public Object visit(ArrayBinding b) { - if(tree.getType() == GraphParser.ARRAY) { - int count = tree.getChildCount(); - Object[] components = new Object[count]; - Binding componentBinding = b.getComponentBinding(); - for(int i=0;i= 6) - return b.createUnchecked(str.substring(3, str.length()-3)); - else - return b.createUnchecked(str.substring(1, str.length()-1)); - } - typeError(tree, b); - return b.createDefaultUnchecked(); - } - - @Override - public Object visit(UnionBinding b) { - if(tree.getType() == GraphParser.TAGGED_VALUE) { - String tag = tree.getChild(0).getText(); - Integer comp = b.type().getComponentIndex(tag); - if(comp != null) { - if(tree.getChildCount() == 2) - return b.createUnchecked(comp, - translate( - tree.getChild(1), - b.getComponentBinding(comp) - )); - else { - Binding binding = b.getComponentBinding(comp); - if(binding instanceof RecordBinding && - ((RecordBinding)binding).getComponentCount() == 0) - return b.createUnchecked(comp, - ((RecordBinding)binding).createUnchecked()); - else - typeError(tree, binding); - } - } - } - typeError(tree, b); - return b.createDefaultUnchecked(); - } - - @Override - public Object visit(VariantBinding b) { - if(tree.getType() == GraphParser.VARIANT) { - Datatype type = - new DataTypeTranslator(source, problems).translate(tree.getChild(0)); - Binding binding = Bindings.getBinding(type); - - Object value = translate(tree.getChild(1), binding); - return b.createUnchecked(binding, value); - } - typeError(tree, b); - return b.createDefaultUnchecked(); - } - - @Override - public Object visit(MapBinding b) { - if(tree.getType() == GraphParser.MAP) { - int count = tree.getChildCount(); - Object[] keys = new Object[count]; - Object[] values = new Object[count]; - Binding keyBinding = b.getKeyBinding(); - Binding valueBinding = b.getValueBinding(); - for(int i=0;i problems; + + public DataValueTranslator(ISource source, Collection problems) { + this.source = source; + this.problems = problems; + } + + public Object translate(Tree _tree, Binding binding) { + while(_tree.getType() == GraphParser.TUPLE && + _tree.getChildCount()==1) + _tree = _tree.getChild(0); + final Tree tree = _tree; + return binding.accept(new Binding.Visitor() { + + @Override + public Object visit(ArrayBinding b) { + if(tree.getType() == GraphParser.ARRAY) { + int count = tree.getChildCount(); + Object[] components = new Object[count]; + Binding componentBinding = b.getComponentBinding(); + for(int i=0;i= 6) + return b.createUnchecked(str.substring(3, str.length()-3)); + else + return b.createUnchecked(str.substring(1, str.length()-1)); + } + typeError(tree, b); + return b.createDefaultUnchecked(); + } + + @Override + public Object visit(UnionBinding b) { + if(tree.getType() == GraphParser.TAGGED_VALUE) { + String tag = tree.getChild(0).getText(); + Integer comp = b.type().getComponentIndex(tag); + if(comp != null) { + if(tree.getChildCount() == 2) + return b.createUnchecked(comp, + translate( + tree.getChild(1), + b.getComponentBinding(comp) + )); + else { + Binding binding = b.getComponentBinding(comp); + if(binding instanceof RecordBinding && + ((RecordBinding)binding).getComponentCount() == 0) + return b.createUnchecked(comp, + ((RecordBinding)binding).createUnchecked()); + else + typeError(tree, binding); + } + } + } + typeError(tree, b); + return b.createDefaultUnchecked(); + } + + @Override + public Object visit(VariantBinding b) { + if(tree.getType() == GraphParser.VARIANT) { + Datatype type = + new DataTypeTranslator(source, problems).translate(tree.getChild(0)); + Binding binding = Bindings.getBinding(type); + + Object value = translate(tree.getChild(1), binding); + return b.createUnchecked(binding, value); + } + typeError(tree, b); + return b.createDefaultUnchecked(); + } + + @Override + public Object visit(MapBinding b) { + if(tree.getType() == GraphParser.MAP) { + int count = tree.getChildCount(); + Object[] keys = new Object[count]; + Object[] values = new Object[count]; + Binding keyBinding = b.getKeyBinding(); + Binding valueBinding = b.getValueBinding(); + for(int i=0;i