< prev index next >
src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/Scope.java
Print this page
*** 1,7 ****
/*
! * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
--- 1,7 ----
/*
! * Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
*** 23,54 ****
* questions.
*/
package jdk.nashorn.internal.runtime;
! import static jdk.nashorn.internal.codegen.CompilerConstants.interfaceCallNoLookup;
import jdk.nashorn.internal.codegen.CompilerConstants;
/**
! * Interface implemented by {@link ScriptObject}s that act as scope.
*/
! public interface Scope {
! /** Method handle that points to {@link Scope#getSplitState}. */
! public static final CompilerConstants.Call GET_SPLIT_STATE = interfaceCallNoLookup(Scope.class, "getSplitState", int.class);
/** Method handle that points to {@link Scope#setSplitState(int)}. */
! public static final CompilerConstants.Call SET_SPLIT_STATE = interfaceCallNoLookup(Scope.class, "setSplitState", void.class, int.class);
/**
* Get the scope's split method state.
! * @return the current state
*/
! public int getSplitState();
/**
* Set the scope's split method state.
! * @param state the new state.
*/
! public void setSplitState(int state);
}
--- 23,129 ----
* questions.
*/
package jdk.nashorn.internal.runtime;
! import static jdk.nashorn.internal.codegen.CompilerConstants.virtualCallNoLookup;
import jdk.nashorn.internal.codegen.CompilerConstants;
/**
! * A {@link ScriptObject} subclass for objects that act as scope.
*/
! public class Scope extends ScriptObject {
! // Flag to indicate that a split method issued a return statement
! private int splitState = -1;
!
! /** This is updated only in debug mode - counts number of {@code ScriptObject} instances created that are scope */
! private static int count;
+ /** Method handle that points to {@link Scope#getSplitState}. */
+ public static final CompilerConstants.Call GET_SPLIT_STATE = virtualCallNoLookup(Scope.class, "getSplitState", int.class);
/** Method handle that points to {@link Scope#setSplitState(int)}. */
! public static final CompilerConstants.Call SET_SPLIT_STATE = virtualCallNoLookup(Scope.class, "setSplitState", void.class, int.class);
!
! /**
! * Constructor
! *
! * @param map initial property map
! */
! public Scope(final PropertyMap map) {
! super(map);
! if (Context.DEBUG) {
! count++;
! }
! }
!
! /**
! * Constructor
! *
! * @param proto parent scope
! * @param map initial property map
! */
! public Scope(final ScriptObject proto, final PropertyMap map) {
! super(proto, map);
! if (Context.DEBUG) {
! count++;
! }
! }
!
! /**
! * Constructor
! *
! * @param map property map
! * @param primitiveSpill primitive spill array
! * @param objectSpill reference spill array
! */
! public Scope(final PropertyMap map, final long[] primitiveSpill, final Object[] objectSpill) {
! super(map, primitiveSpill, objectSpill);
! if (Context.DEBUG) {
! count++;
! }
! }
!
! @Override
! public boolean isScope() {
! return true;
! }
!
! @Override
! boolean hasWithScope() {
! for (ScriptObject obj = this; obj != null; obj = obj.getProto()) {
! if (obj instanceof WithObject) {
! return true;
! }
! }
! return false;
! }
/**
* Get the scope's split method state.
! *
! * @return current split state
*/
! public int getSplitState() {
! return splitState;
! }
/**
* Set the scope's split method state.
! *
! * @param state current split state
! */
! public void setSplitState(final int state) {
! splitState = state;
! }
!
! /**
! * Get number of {@code Scope} instances created. If not running in debug
! * mode this is always 0.
! *
! * @return number of scope ScriptObjects created
*/
! public static int getScopeCount() {
! return count;
! }
}
< prev index next >