       else
         @bindings[bindingName] = bindingValue
 
-  compileExpression: (expression) -> GE.compileExpression(expression, @constants.evaluator)
-
   # Pins are optional
-  evaluateFunction: (f, pins) -> f(@memory, @io, @constants.assets, @constants.transformers, @bindings, pins)
-
-  # Pins are optional
-  evaluateExpression: (expression, pins) -> @evaluateFunction(@compileExpression(expression), pins)
+  evaluateExpressionFunction: (f, pins) -> f(@memory, @io, @constants.assets, @constants.transformers, @bindings, pins)
 
 GE.extensions =
   IMAGE: ["png", "gif", "jpeg", "jpg"]

    else if pinOptions.direction in ["in", "inout"]
      throw GE.makeExecutionError("Missing input pin expression for pin '#{pinName}'", path)

    try
      evaluatedPins[pinName] = evaluationContext.evaluateExpression(pinValue)
    catch error

  result = new GE.ChipVisitorResult(GE.signals.DONE)
  GE.transformersLogger = GE.makeLogFunction(path, result.logMessages)

  for dest, expressionFunction of chip.emitter  
    evaluationContext = new GE.EvaluationContext(constants, bindings)

    try
      outputValue = evaluationContext.evaluateExpressionFunction(expressionFunction)
    catch error
      throw GE.makeExecutionError("Error executing the output pin expression '#{expressionFunction}' --> '#{dest}' for emitter chip: #{error.stack}", path)

    [parent, key] = GE.getParentAndKey(evaluationContext, dest.split("."))
    parent[key] = outputValue
