Mercurial > hg > graal-jvmci-8
diff jvmci/jdk.vm.ci.meta/src/jdk/vm/ci/meta/LocalVariableTable.java @ 23393:1d4ce2d19e52
clean up and minimize JVMCI (JDK-8156835)
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Thu, 12 May 2016 20:57:31 +0200 |
parents | 1bbd4a7c274b |
children | 9e1235406b59 |
line wrap: on
line diff
--- a/jvmci/jdk.vm.ci.meta/src/jdk/vm/ci/meta/LocalVariableTable.java Thu May 12 11:06:49 2016 +0200 +++ b/jvmci/jdk.vm.ci.meta/src/jdk/vm/ci/meta/LocalVariableTable.java Thu May 12 20:57:31 2016 +0200 @@ -22,11 +22,42 @@ */ package jdk.vm.ci.meta; -public interface LocalVariableTable { +import java.util.ArrayList; +import java.util.List; + +public class LocalVariableTable { - Local[] getLocals(); + private final Local[] locals; + + public LocalVariableTable(Local[] locals) { + this.locals = locals; + } - Local[] getLocalsAt(int bci); + public Local getLocal(int slot, int bci) { + Local result = null; + for (Local local : locals) { + if (local.getSlot() == slot && local.getStartBCI() <= bci && local.getEndBCI() >= bci) { + if (result == null) { + result = local; + } else { + throw new IllegalStateException("Locals overlap!"); + } + } + } + return result; + } - Local getLocal(int slot, int bci); + public Local[] getLocals() { + return locals; + } + + public Local[] getLocalsAt(int bci) { + List<Local> result = new ArrayList<>(); + for (Local l : locals) { + if (l.getStartBCI() <= bci && bci <= l.getEndBCI()) { + result.add(l); + } + } + return result.toArray(new Local[result.size()]); + } }