public static boolean enter(SynchronizedBlock synBlock, StructuredBlock last) {

		if (!(last.outer instanceof SequentialBlock))
			return false;

		/* If the program is well formed, the following succeed */
		SequentialBlock sequBlock = (SequentialBlock) synBlock.outer;
		if (!(sequBlock.subBlocks[0] instanceof InstructionBlock))
			return false;

		Expression monenter = ((InstructionBlock) sequBlock.subBlocks[0])
				.getInstruction();

		if (!(monenter instanceof MonitorEnterOperator))
			return false;

//		Expression storeExpr = ((MonitorEnterOperator) monenter)
//				.getSubExpressions()[0];
		
//		if (!(storeExpr instanceof StoreInstruction)) {
//			return false;
//		}
//		StoreInstruction store = (StoreInstruction) storeExpr;
//		LocalStoreOperator local = (LocalStoreOperator) store.getSubExpressions()[0];
//		if (local.getLocalInfo() != synBlock.local.getLocalInfo()) {
//			return false;
//		}

		Expression loadOp = ((MonitorEnterOperator) monenter)
				.getSubExpressions()[0];
		if (!(loadOp instanceof LocalLoadOperator)
				|| (((LocalLoadOperator) loadOp).getLocalInfo() != synBlock.local
						.getLocalInfo())) {
			return false;
		}

		if (GlobalOptions.verboseLevel > 0)
			GlobalOptions.err.print('s');

		synBlock.isEntered = true;
		synBlock.moveDefinitions(last.outer, last);
		last.replace(last.outer);
		return true;
	}