275
276 @Override
277 public boolean inDynamicContext() {
278 return (flags & IN_DYNAMIC_CONTEXT) != 0;
279 }
280
281 private static String functionName(final FunctionNode fn) {
282 if (fn.isAnonymous()) {
283 return "";
284 }
285 final FunctionNode.Kind kind = fn.getKind();
286 if (kind == FunctionNode.Kind.GETTER || kind == FunctionNode.Kind.SETTER) {
287 final String name = NameCodec.decode(fn.getIdent().getName());
288 return name.substring(GET_SET_PREFIX_LENGTH);
289 }
290 return fn.getIdent().getName();
291 }
292
293 private static long tokenFor(final FunctionNode fn) {
294 final int position = Token.descPosition(fn.getFirstToken());
295 final long lastToken = fn.getLastToken();
296 // EOL uses length field to store the line number
297 final int length = Token.descPosition(lastToken) - position + (Token.descType(lastToken) == TokenType.EOL ? 0 : Token.descLength(lastToken));
298
299 return Token.toDesc(TokenType.FUNCTION, position, length);
300 }
301
302 private static int getFlags(final FunctionNode functionNode) {
303 int flags = IS_CONSTRUCTOR;
304 if (functionNode.isStrict()) {
305 flags |= IS_STRICT;
306 }
307 if (functionNode.needsCallee()) {
308 flags |= NEEDS_CALLEE;
309 }
310 if (functionNode.usesThis() || functionNode.hasEval()) {
311 flags |= USES_THIS;
312 }
313 if (functionNode.isVarArg()) {
314 flags |= IS_VARIABLE_ARITY;
315 }
|
275
276 @Override
277 public boolean inDynamicContext() {
278 return (flags & IN_DYNAMIC_CONTEXT) != 0;
279 }
280
281 private static String functionName(final FunctionNode fn) {
282 if (fn.isAnonymous()) {
283 return "";
284 }
285 final FunctionNode.Kind kind = fn.getKind();
286 if (kind == FunctionNode.Kind.GETTER || kind == FunctionNode.Kind.SETTER) {
287 final String name = NameCodec.decode(fn.getIdent().getName());
288 return name.substring(GET_SET_PREFIX_LENGTH);
289 }
290 return fn.getIdent().getName();
291 }
292
293 private static long tokenFor(final FunctionNode fn) {
294 final int position = Token.descPosition(fn.getFirstToken());
295 final long lastToken = Token.withDelimiter(fn.getLastToken());
296 // EOL uses length field to store the line number
297 final int length = Token.descPosition(lastToken) - position + (Token.descType(lastToken) == TokenType.EOL ? 0 : Token.descLength(lastToken));
298
299 return Token.toDesc(TokenType.FUNCTION, position, length);
300 }
301
302 private static int getFlags(final FunctionNode functionNode) {
303 int flags = IS_CONSTRUCTOR;
304 if (functionNode.isStrict()) {
305 flags |= IS_STRICT;
306 }
307 if (functionNode.needsCallee()) {
308 flags |= NEEDS_CALLEE;
309 }
310 if (functionNode.usesThis() || functionNode.hasEval()) {
311 flags |= USES_THIS;
312 }
313 if (functionNode.isVarArg()) {
314 flags |= IS_VARIABLE_ARITY;
315 }
|