@Override public Node leaveBlock(Block block) { if (inNode.isStrict() || getPath().size() == 1) { handleDeclarations(); if (getPath().size() > 1) { DeclarationScopeImpl parentScope = (DeclarationScopeImpl)currentBlockScope.getParentScope(); if (!((JsObject)currentBlockScope).getProperties().isEmpty()) { // don't keep this empty scope in model parentScope.addDeclaredScope(currentBlockScope); parentScope.addProperty(currentBlockScope.getName(), currentBlockScope); } currentBlockScope = parentScope; } } return super.leaveBlock(block); }
@Override public boolean enterBlock(Block block) { handleDeclarations(); if (inNode.isStrict()) { if (getPath().size() > 0) { // we are in strict mode -> possible block scope declaration currentBlockScope = new DeclarationScopeImpl(currentBlockScope, currentBlockScope, new Identifier(BLOCK_OBJECT_NAME_PREFIX + block.getStart(), OffsetRange.NONE), new OffsetRange(block.getStart(), block.getFinish()), currentBlockScope.getMimeType() , currentBlockScope.getSourceLabel()); currentBlockScope.setJsKind(JsElement.Kind.BLOCK); } } isParameterBlock = block.isParameterBlock(); return super.enterBlock(block); }