def get_value(node):
     rep = IT.get_rep(node)
     args = (self,) + rep
     return JT.JTermRange(*args)
 def f(index,key): return JT.JTNumerical(self,index,tags,[])
 return self.numerical_table.add(IT.get_key(tags,[]),f)
 def get_value(node):
     rep = IT.get_rep(node)
     args = (self,) + rep
     return JT.JTFloat(*args)
 def get_value(node):
     rep = IT.get_rep(node)
     args = (self,) + rep
     return JT.JTRelationalExprList(*args)
 def get_value(node):
     rep = IT.get_rep(node)
     args = (self,) + rep
     return JT.JTSymbolicJTermConstant(*args)
 def get_value(node):
     rep = IT.get_rep(node)
     args = (self,) + rep
     return JT.JTNumerical(*args)
 def f(index,key): return JT.JTArithmeticExpr(self,index,tags,args)
 return self.jterm_table.add(IT.get_key(tags,args),f)
 def get_value(node):
     rep = IT.get_rep(node)
     args = (self,) + rep
     return JT.JTStringConstant(*args)
 def f(index,key): return JT.JTFloat(self,index,tags,[])
 return self.float_table.add(IT.get_key(tags,[]),f)
 def f(index,key): return JT.JTConstant(self,index,tags,args)
 return self.jterm_table.add(IT.get_key(tags,args),f)
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
# ------------------------------------------------------------------------------

import chj.util.IndexedTable as IT

import chj.index.JTerm as JT


jterm_constructors = {
    'xv': lambda x:JT.JTAuxiliaryVar(*x),
    'lv': lambda x:JT.JTLocalVar(*x),
    'lc': lambda x:JT.JTLoopCounter(*x),
    'c' : lambda x:JT.JTConstant(*x),
    'sf': lambda x:JT.JTStaticFieldValue(*x),
    'of': lambda x:JT.JTObjectFieldValue(*x),
    'bc': lambda x:JT.JTBoolConstant(*x),
    'fc': lambda x:JT.JTFloatConstant(*x),
    'sc': lambda x:JT.JTJTermStringConstant(*x),
    'al': lambda x:JT.JTArrayLength(*x),
    'sl': lambda x:JT.JTStringLength(*x),
    'si': lambda x:JT.JTSize(*x),
    'ar': lambda x:JT.JTArithmeticExpr(*x),
    'symc': lambda x:JT.JTSymbolicConstant(*x)
    }
 def f(index, key):
     return JT.JTArithmeticExpr(self, index, tags, args)
 def f(index, key):
     return JT.JTConstant(self, index, tags, args)
 def f(index, key):
     return JT.JTFloat(self, index, tags, [])
 def f(index, key):
     return JT.JTNumerical(self, index, tags, [])