Search in sources :

Example 1 with AliasFunction

use of com.github.anba.es6draft.runtime.internal.Properties.AliasFunction 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());
        }
    }
}
Also used : SourceTextModuleRecord(com.github.anba.es6draft.runtime.modules.SourceTextModuleRecord) SharedFunctions.loadScript(com.github.anba.es6draft.repl.functions.SharedFunctions.loadScript) CompiledScript(com.github.anba.es6draft.compiler.CompiledScript) SharedFunctions.relativePathToScript(com.github.anba.es6draft.repl.functions.SharedFunctions.relativePathToScript) Script(com.github.anba.es6draft.Script) ModuleLoader(com.github.anba.es6draft.runtime.modules.ModuleLoader) SourceIdentifier(com.github.anba.es6draft.runtime.modules.SourceIdentifier) FunctionObject(com.github.anba.es6draft.runtime.types.builtins.FunctionObject) StringModuleSource(com.github.anba.es6draft.runtime.modules.loader.StringModuleSource) StringModuleSource(com.github.anba.es6draft.runtime.modules.loader.StringModuleSource) ModuleSource(com.github.anba.es6draft.runtime.modules.ModuleSource) ToSource(com.github.anba.es6draft.repl.SourceBuilder.ToSource) Source(com.github.anba.es6draft.runtime.internal.Source) Executable(com.github.anba.es6draft.Executable) DebugInfo(com.github.anba.es6draft.runtime.internal.DebugInfo) ScriptLoader(com.github.anba.es6draft.runtime.internal.ScriptLoader) StringModuleSource(com.github.anba.es6draft.runtime.modules.loader.StringModuleSource) ModuleSource(com.github.anba.es6draft.runtime.modules.ModuleSource) PrintWriter(java.io.PrintWriter) Function(com.github.anba.es6draft.runtime.internal.Properties.Function) AliasFunction(com.github.anba.es6draft.runtime.internal.Properties.AliasFunction) AliasFunction(com.github.anba.es6draft.runtime.internal.Properties.AliasFunction)

Aggregations

Executable (com.github.anba.es6draft.Executable)1 Script (com.github.anba.es6draft.Script)1 CompiledScript (com.github.anba.es6draft.compiler.CompiledScript)1 ToSource (com.github.anba.es6draft.repl.SourceBuilder.ToSource)1 SharedFunctions.loadScript (com.github.anba.es6draft.repl.functions.SharedFunctions.loadScript)1 SharedFunctions.relativePathToScript (com.github.anba.es6draft.repl.functions.SharedFunctions.relativePathToScript)1 DebugInfo (com.github.anba.es6draft.runtime.internal.DebugInfo)1 AliasFunction (com.github.anba.es6draft.runtime.internal.Properties.AliasFunction)1 Function (com.github.anba.es6draft.runtime.internal.Properties.Function)1 ScriptLoader (com.github.anba.es6draft.runtime.internal.ScriptLoader)1 Source (com.github.anba.es6draft.runtime.internal.Source)1 ModuleLoader (com.github.anba.es6draft.runtime.modules.ModuleLoader)1 ModuleSource (com.github.anba.es6draft.runtime.modules.ModuleSource)1 SourceIdentifier (com.github.anba.es6draft.runtime.modules.SourceIdentifier)1 SourceTextModuleRecord (com.github.anba.es6draft.runtime.modules.SourceTextModuleRecord)1 StringModuleSource (com.github.anba.es6draft.runtime.modules.loader.StringModuleSource)1 FunctionObject (com.github.anba.es6draft.runtime.types.builtins.FunctionObject)1 PrintWriter (java.io.PrintWriter)1