// Copyright 2013 Traceur Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

'use strict';

var fs = require('fs');
var traceur = require('./traceur.js');
var util = require('./file-util.js');
var inlineAndCompile = require('./inline-module.js').inlineAndCompile;

var ErrorReporter = traceur.util.ErrorReporter;
var TreeWriter = traceur.outputgeneration.TreeWriter;

function interpret(filename, argv, flags) {
  var reporter = new ErrorReporter();
  var mainModule = require.main;
  var execArgv = [mainModule.filename].concat(flags || []);

  process.argv = ['traceur', filename].concat(argv || []);
  process.execArgv = process.execArgv.concat(execArgv);

  inlineAndCompile([filename], {}, reporter, function(tree) {
    var compiledCode = TreeWriter.write(tree);

    // TODO: use a new module rather than the main one.
    mainModule.filename = fs.realpathSync(filename);
    mainModule._compile(compiledCode, mainModule.filename);
  }, function(err) {
    console.error(err);
    process.exit(1);
  });
}

module.exports = interpret;

@@ -623,24 +623,56 @@
 uire('fs');%0A
+var Module = require('module');%0A
 var traceur 
@@ -911,16 +911,216 @@
 riter;%0A%0A
+var ext = '.traceur-compiled';%0A%0AModule._extensions%5Bext%5D = function(module, filename) %7B%0A  module.filename = filename.slice(0, -ext.length);%0A  module._compile(module.compiledCode, module.filename);%0A%7D;%0A%0A
 function
@@ -1203,21 +1203,20 @@
 var 
-mainModule
+execArgv
  = 
+%5B
 requ
@@ -1227,38 +1227,8 @@
 main
-;%0A  var execArgv = %5BmainModule
 .fil
@@ -1256,16 +1256,56 @@
 %7C %5B%5D);%0A%0A
+  filename = fs.realpathSync(filename);%0A
   proces
@@ -1486,153 +1486,100 @@
 var 
-compiledCode = TreeWriter.write(tree);%0A%0A    // TODO: use a
+module =
  new 
-m
+M
 odule
- rather than the main one.
+(filename, require.main);%0A
 %0A    m
-ainM
 odule.
-filename = fs.realpathSync(filenam
+compiledCode = TreeWriter.write(tre
 e);%0A
@@ -1587,60 +1587,27 @@
    m
-ainM
 odule.
-_compile(compiledCode, mainModule.
+load(
 filename
 );%0A 
@@ -1598,24 +1598,30 @@
 oad(filename
+ + ext
 );%0A  %7D, func

Fix paths issue with modules in 'node_modules'.