Search in sources :

Example 61 with ArrayMemory

use of php.runtime.memory.ArrayMemory in project jphp by jphp-compiler.

the class Launcher method run.

public void run(boolean mustBootstrap, boolean disableExtensions) throws Throwable {
    readConfig();
    if (!disableExtensions) {
        initExtensions();
    }
    if (isDebug()) {
        if (compileScope.getTickHandler() == null) {
            throw new LaunchException("Cannot find a debugger, please add the jphp-debugger dependency");
        }
    }
    if (Startup.isShowInitDelay()) {
        long t = System.currentTimeMillis() - startTime;
        Startup.trace("Startup time = " + t + "ms");
    }
    String file = config.getProperty("bootstrap.file", "JPHP-INF/.bootstrap.php");
    String classLoader = config.getProperty("env.classLoader", ReflectionUtils.getClassName(WrapClassLoader.WrapLauncherClassLoader.class));
    if (classLoader != null && !(classLoader.isEmpty())) {
        ClassEntity classLoaderEntity = environment.fetchClass(classLoader);
        if (classLoaderEntity == null) {
            throw new LaunchException("Class loader class is not found: " + classLoader);
        }
        WrapClassLoader loader = classLoaderEntity.newObject(environment, TraceInfo.UNKNOWN, true);
        environment.invokeMethod(loader, "register", Memory.TRUE);
    }
    if (file != null && !file.isEmpty()) {
        try {
            ModuleEntity bootstrap = loadFrom(file);
            if (bootstrap == null) {
                throw new IOException();
            }
            beforeIncludeBootstrap();
            if (new StringMemory(config.getProperty("bootstrap.showBytecode", "")).toBoolean()) {
                ModuleOpcodePrinter moduleOpcodePrinter = new ModuleOpcodePrinter(bootstrap);
                System.out.println(moduleOpcodePrinter.toString());
            }
            initModule(bootstrap);
            ArrayMemory argv = ArrayMemory.ofStrings(this.args);
            argv.unshift(Memory.NULL);
            environment.getGlobals().put("argv", argv);
            environment.getGlobals().put("argc", LongMemory.valueOf(argv.size()));
            environment.pushCall(new CallStackItem(new TraceInfo(bootstrap.getName(), -1, -1)));
            try {
                bootstrap.includeNoThrow(environment);
            } finally {
                afterIncludeBootstrap();
                environment.popCall();
                compileScope.triggerProgramShutdown(environment);
                if (StringMemory.valueOf(config.getProperty("env.doFinal", "1")).toBoolean()) {
                    environment.doFinal();
                }
            }
        } catch (IOException e) {
            throw new LaunchException("Cannot find '" + file + "' resource for `bootstrap.file` option");
        }
    } else if (mustBootstrap)
        throw new LaunchException("Please set value of the `bootstrap.file` option in the launcher.conf file");
}
Also used : ClassEntity(php.runtime.reflection.ClassEntity) WrapClassLoader(php.runtime.ext.core.classes.WrapClassLoader) ModuleEntity(php.runtime.reflection.ModuleEntity) ModuleOpcodePrinter(org.develnext.jphp.core.opcode.ModuleOpcodePrinter) ArrayMemory(php.runtime.memory.ArrayMemory) StringMemory(php.runtime.memory.StringMemory)

Example 62 with ArrayMemory

use of php.runtime.memory.ArrayMemory in project jphp by jphp-compiler.

the class JvmCompilerCase method check.

public void check(String name, boolean withErrors, int errorFlags) {
    File file;
    ByteArrayOutputStream outputR = new ByteArrayOutputStream();
    Environment environment;
    if (isConcurrent()) {
        environment = new ConcurrentEnvironment(newScope(), outputR);
    } else {
        environment = new Environment(newScope(), outputR);
    }
    //environment.setErrorFlags(ErrorType.E_ALL.value);
    Test test = new Test(file = new File(Thread.currentThread().getContextClassLoader().getResource("resources/" + name).getFile()));
    Context context = new Context(test.getFile(), file);
    try {
        JvmCompiler compiler = new JvmCompiler(environment, context, getSyntax(context));
        environment.setErrorFlags(0);
        if (errorFlags != -1)
            environment.setErrorFlags(errorFlags);
        if (!isCompiled()) {
            environment.setErrorFlags(ErrorType.E_ALL.value);
        }
        ModuleEntity module = compiler.compile(false);
        if (isCompiled()) {
            ByteArrayOutputStream output = new ByteArrayOutputStream();
            ModuleDumper dumper = new ModuleDumper(context, environment, true);
            dumper.save(module, output);
            environment.setErrorFlags(ErrorType.E_ALL.value);
            module = dumper.load(new ByteArrayInputStream(output.toByteArray()));
        }
        environment.getScope().loadModule(module);
        environment.getScope().addUserModule(module);
        environment.registerModule(module);
        Memory memory = module.includeNoThrow(environment, environment.getGlobals());
    } catch (ErrorException e) {
        if (withErrors) {
            environment.getErrorReportHandler().onFatal(e);
        } else {
            throw new CustomErrorException(e.getType(), e.getMessage() + " line: " + (e.getTraceInfo().getStartLine() + test.getSectionLine("FILE") + 2) + ", pos: " + (e.getTraceInfo().getStartPosition() + 1), e.getTraceInfo());
        }
    } catch (UncaughtException | BaseBaseException e) {
        environment.catchUncaught(e);
    } catch (Throwable throwable) {
        throw new RuntimeException(throwable);
    }
    try {
        environment.doFinal();
    } catch (ErrorException e) {
        if (withErrors) {
            environment.getErrorReportHandler().onFatal(e);
            try {
                environment.getDefaultBuffer().flush();
            } catch (Throwable throwable) {
                throw new RuntimeException(throwable);
            }
        } else
            throw e;
    } catch (RuntimeException e) {
        throw e;
    } catch (Throwable throwable) {
        throw new RuntimeException(throwable);
    }
    lastOutput = outputR.toString();
    if (test.getExpect() != null)
        Assert.assertEquals(test.getTest() + " (" + name + ")", test.getExpect(), rtrim(lastOutput));
    if (test.getExpectF() != null) {
        Memory result = StringFunctions.sscanf(environment, TraceInfo.valueOf(file.getName(), 0, 0), rtrim(lastOutput), test.getExpectF());
        if (result.isNull())
            result = new ArrayMemory();
        PrintF printF = new PrintF(environment.getLocale(), test.getExpectF(), ((ArrayMemory) result).values());
        String out = printF.toString();
        Assert.assertEquals(out, rtrim(lastOutput));
    }
}
Also used : PrintF(php.runtime.util.PrintF) ArrayMemory(php.runtime.memory.ArrayMemory) Memory(php.runtime.Memory) ModuleEntity(php.runtime.reflection.ModuleEntity) ByteArrayOutputStream(java.io.ByteArrayOutputStream) ArrayMemory(php.runtime.memory.ArrayMemory) Test(org.develnext.jphp.core.tester.Test) ByteArrayInputStream(java.io.ByteArrayInputStream) CustomErrorException(php.runtime.exceptions.CustomErrorException) ErrorException(php.runtime.exceptions.support.ErrorException) CustomErrorException(php.runtime.exceptions.CustomErrorException) File(java.io.File) ModuleDumper(php.runtime.loader.dump.ModuleDumper) BaseBaseException(php.runtime.lang.exception.BaseBaseException) UncaughtException(php.runtime.lang.UncaughtException)

Example 63 with ArrayMemory

use of php.runtime.memory.ArrayMemory in project jphp by jphp-compiler.

the class JvmCompilerCase method includeResource.

@SuppressWarnings("unchecked")
protected Memory includeResource(String name, ArrayMemory globals) {
    ByteArrayOutputStream output = new ByteArrayOutputStream();
    Environment environment;
    if (isConcurrent()) {
        environment = new ConcurrentEnvironment(newScope(), output);
    } else {
        environment = new Environment(newScope(), output);
    }
    File file = new File(Thread.currentThread().getContextClassLoader().getResource("resources/" + name).getFile());
    Context context = new Context(file);
    JvmCompiler compiler = new JvmCompiler(environment, context, getSyntax(context));
    ModuleEntity module = compiler.compile();
    environment.getScope().loadModule(module);
    try {
        environment.registerModule(module);
    } catch (Throwable throwable) {
        throw new RuntimeException(throwable);
    }
    if (globals != null)
        environment.getGlobals().putAll(globals);
    Memory memory = module.includeNoThrow(environment, environment.getGlobals());
    try {
        environment.doFinal();
    } catch (Throwable throwable) {
        throw new RuntimeException(throwable);
    }
    lastOutput = output.toString();
    return memory;
}
Also used : ArrayMemory(php.runtime.memory.ArrayMemory) Memory(php.runtime.Memory) ModuleEntity(php.runtime.reflection.ModuleEntity) ByteArrayOutputStream(java.io.ByteArrayOutputStream) File(java.io.File)

Example 64 with ArrayMemory

use of php.runtime.memory.ArrayMemory in project jphp by jphp-compiler.

the class ArraysTest method testClassicDefine.

@Test
public void testClassicDefine() {
    Memory memory = includeResource("arrays/classic_define.php");
    Assert.assertTrue(memory.isArray());
    ArrayMemory array = memory.toValue(ArrayMemory.class);
    Assert.assertEquals(3, array.size());
    Assert.assertEquals(1, array.valueOfIndex(0).toLong());
    Assert.assertEquals(2, array.valueOfIndex(1).toLong());
    Assert.assertEquals(3, array.valueOfIndex(2).toLong());
}
Also used : ArrayMemory(php.runtime.memory.ArrayMemory) Memory(php.runtime.Memory) ArrayMemory(php.runtime.memory.ArrayMemory) Test(org.junit.Test)

Example 65 with ArrayMemory

use of php.runtime.memory.ArrayMemory in project jphp by jphp-compiler.

the class ArraysTest method testShortDefine.

@Test
public void testShortDefine() {
    Memory memory = includeResource("arrays/short_define.php");
    Assert.assertTrue(memory.isArray());
    ArrayMemory array = memory.toValue(ArrayMemory.class);
    Assert.assertEquals(3, array.size());
    Assert.assertEquals(1, array.valueOfIndex(0).toLong());
    Assert.assertEquals(2, array.valueOfIndex(1).toLong());
    Assert.assertEquals(3, array.valueOfIndex(2).toLong());
}
Also used : ArrayMemory(php.runtime.memory.ArrayMemory) Memory(php.runtime.Memory) ArrayMemory(php.runtime.memory.ArrayMemory) Test(org.junit.Test)

Aggregations

ArrayMemory (php.runtime.memory.ArrayMemory)148 Memory (php.runtime.Memory)60 ForeachIterator (php.runtime.lang.ForeachIterator)41 ObjectMemory (php.runtime.memory.ObjectMemory)35 LongMemory (php.runtime.memory.LongMemory)31 StringMemory (php.runtime.memory.StringMemory)29 ReferenceMemory (php.runtime.memory.ReferenceMemory)25 KeyValueMemory (php.runtime.memory.KeyValueMemory)17 Invoker (php.runtime.invoke.Invoker)9 ClassEntity (php.runtime.reflection.ClassEntity)9 Signature (php.runtime.annotation.Reflection.Signature)6 IObject (php.runtime.lang.IObject)6 Map (java.util.Map)4 Test (org.junit.Test)4 DoubleMemory (php.runtime.memory.DoubleMemory)4 ConcurrentEnvironment (php.runtime.env.ConcurrentEnvironment)3 TraceInfo (php.runtime.env.TraceInfo)3 ModuleEntity (php.runtime.reflection.ModuleEntity)3 ParameterEntity (php.runtime.reflection.ParameterEntity)3 ByteArrayOutputStream (java.io.ByteArrayOutputStream)2