code: public ExecutionContext createEvalExecutionContext(JSProgram eval, boolean direct) {
          // 10.4.2 (with caller)
          //System.err.println( "CREATE EVAL EXEC CONTEXT" );
          ExecutionContext context = null;
  
          Object evalThisBinding = null;
          LexicalEnvironment evalLexEnv = null;
          LexicalEnvironment evalVarEnv = null;
  
          if (!direct) {
              evalThisBinding = getGlobalContext().getObject();
              evalLexEnv = LexicalEnvironment.newGlobalEnvironment(getGlobalContext().getObject());
              evalVarEnv = LexicalEnvironment.newGlobalEnvironment(getGlobalContext().getObject());
          } else {
              evalThisBinding = this.thisBinding;
              evalLexEnv = this.getLexicalEnvironment();
              evalVarEnv = this.getVariableEnvironment();
          }
  
          if (eval.isStrict()) {
              LexicalEnvironment strictVarEnv = LexicalEnvironment.newDeclarativeEnvironment(this.getLexicalEnvironment());
              evalLexEnv = strictVarEnv;
              evalVarEnv = strictVarEnv;
          }
  
          context = new ExecutionContext(this.runtime, this, evalLexEnv, evalVarEnv, evalThisBinding, eval.isStrict());
          context.source = eval.getSource();
          context.fileName = eval.getFileName();
          //System.err.println( context.fileName + " >> " + context.source );
          context.performFunctionDeclarationBindings(eval, true);
          context.performVariableDeclarationBindings(eval, true);
          return context;
      }
docs: ----------------------------------------------------------------------