use of com.github.anba.es6draft.runtime.modules.ModuleLoader in project es6draft by anba.
the class ShellFunctions method disassemble.
/**
* shell-function: {@code disassemble([function])}
*
* @param cx
* the execution context
* @param caller
* the caller context
* @param args
* the arguments
* @throws IOException
* if there was any I/O error
* @throws MalformedNameException
* if the module name cannot be normalized
*/
@Function(name = "disassemble", arity = 1)
@AliasFunction(name = "dis")
public void disassemble(ExecutionContext cx, ExecutionContext caller, Object... args) throws IOException, MalformedNameException {
DebugInfo debugInfo = null;
if (args.length == 0) {
FunctionObject currentFunction = caller.getCurrentFunction();
Executable currentExec = caller.getCurrentExecutable();
if (currentFunction != null && currentFunction.getExecutable() == currentExec) {
debugInfo = currentFunction.getCode().debugInfo();
} else {
debugInfo = currentExec.getRuntimeObject().debugInfo();
}
} else if (args[0] instanceof FunctionObject) {
debugInfo = ((FunctionObject) args[0]).getCode().debugInfo();
} else {
String sourceCode = ToFlatString(cx, args[0]);
boolean isModule = false;
if (args.length > 1 && Type.isObject(args[1])) {
isModule = ToBoolean(Get(cx, Type.objectValue(args[1]), "module"));
}
ScriptLoader scriptLoader = cx.getRealm().getScriptLoader();
if (isModule) {
ModuleLoader moduleLoader = cx.getRealm().getModuleLoader();
SourceIdentifier identifier = moduleLoader.normalizeName("disassemble", null);
ModuleSource moduleSource = new StringModuleSource(identifier, "disassemble", sourceCode);
SourceTextModuleRecord module = ParseModule(scriptLoader, identifier, moduleSource);
debugInfo = module.getScriptCode().getRuntimeObject().debugInfo();
} else {
Source source = new Source("<disassemble>", 1);
Script script = scriptLoader.compile(scriptLoader.parseScript(source, sourceCode), "#disassemble");
debugInfo = script.getRuntimeObject().debugInfo();
}
}
if (debugInfo != null) {
PrintWriter writer = cx.getRuntimeContext().getConsole().writer();
for (DebugInfo.Method method : debugInfo.getMethods()) {
writer.println(method.disassemble());
}
}
}
use of com.github.anba.es6draft.runtime.modules.ModuleLoader in project es6draft by anba.
the class Test262TestRealm method execute.
/**
* Executes the supplied test object.
*
* @param test
* the test-info object
* @throws IOException
* if there was any I/O error
* @throws MalformedNameException
* if any imported module request cannot be normalized
* @throws ParserException
* if the module source contains any syntax errors
* @throws CompilationException
* if the parsed module source cannot be compiled
*/
void execute(Test262Info test) throws ParserException, CompilationException, IOException, MalformedNameException {
// Return early if no source code is available.
if (sourceCode == null) {
return;
}
assert !test.isAsync() || async != null;
Realm realm = get();
// Parse and evaluate the test-script
if (test.isModule()) {
ModuleLoader moduleLoader = realm.getModuleLoader();
String moduleName = test.toModuleName();
SourceIdentifier moduleId = moduleLoader.normalizeName(moduleName, null);
ModuleSource source = new StringModuleSource(moduleId, moduleName, sourceCode);
ModuleRecord module = moduleLoader.define(moduleId, source, realm);
try {
module.instantiate();
} catch (ResolutionException e) {
throw e.toScriptException(realm.defaultContext());
}
// Return after module instantiation if we test for module resolution errors.
if (test.getErrorPhase() == ErrorPhase.Resolution) {
return;
}
try {
module.evaluate();
} catch (ResolutionException e) {
throw e.toScriptException(realm.defaultContext());
}
} else {
Source source = new Source(test.toFile(), test.getScript().toString(), 1);
Script script = realm.getScriptLoader().script(source, sourceCode);
script.evaluate(realm);
}
// Wait for pending jobs to finish
waitForPendingJobs(realm, test);
}
Aggregations