Suspense. Radio's outstanding theatre of thrills brings you an hour, a full 60 minutes of suspense. Tonight, Crossfire. Our stars, Robert Young, Robert Mitchum, Robert Ryan and Sam Levine, with George Cooper and William Phipps, all playing their original roles from the current RKO radio picture in an adaptation for suspense, produced and directed by Anton M. Lieder. Crossfire. Robert Young stars as Captain Finley, Robert Mitchum is Keely, Robert Ryan is Monte, Sam Levine is Samuels and Barlow Dwyer is Ginny. With these performances and with Crossfire, we again hope to keep you in suspense. My name is Finley, Captain of Detectives Homicide, Washington DC. I was the cop on the case. The call came in at 945, a girl. I told her to stay there and we went up. It was an apartment on East Street, the third floor, number 307. The girl was still there and let us in. The place didn't look too bad considering there was a chair knocked over and a lamp and a little liquor slopped around. But aside from that, not bad. Except there was a man lying in the middle of the floor. A man named Joseph Samuels and he was dead, beaten to death. Take it easy, Miss Lewis. I'm all right. Was Samuels drunk when you left him in this bar, Miss Lewis? No. Had he been drinking? Yes, but he was all right. What was he arguing with the soldier about? They weren't arguing, they were just talking. I sent Sammy over to talk to the soldier myself. The kid seemed so upset about something. Here's the man's wallet, Captain. I found it behind the cushions on the sofa. Now, let's have it. Corporal Arthur Mitchell. What rank was the soldier, Miss Lewis? I didn't notice. I left them. Where did you go? I went up to my room. It was the bar in my hotel. I had a change, so I told Sammy I'd meet him here in his apartment. We had a date for dinner. I rested a while and then I fell asleep. When I woke up, I phoned the apartment to say I'd be a little late, but there wasn't any answer. I came over as soon as I could find a cab. Then I called you. Do I have to stay here any longer? No, I'll get somebody to drive you home. Oh, Hara. Take Miss Lewis home and check in the bar at her hotel. I will do. Come on, Miss Lewis. Oh, wait a minute. Take this wallet to the Provo Marshall's office and see if they can locate this man. Sure. What do you want? Oh, I'm sorry. I must have the wrong place. What place are you looking for? Well, I thought it was this apartment. I was looking for a buddy of mine. Your cops? Yeah, we're cops. Has something happened? Tell us about your buddy. Yes, sir. Well, we was here. He left before we did. He wasn't feeling good. He said he'd be right back. Who was we? Me and another buddy of mine. Who did you come here with? What's these two buddies of mine and this fellow? What fellow? This fellow we met in a bar. And Miss Lewis? Yes. Soldier, do you recognize this young lady? Come on, did you see this young lady in the bar? Yes, sir. Miss Lewis, is this the man who was with Samuels when you left? No, it was another. What's it all about? Come in, soldier, and give a look. Geez, that's tough. Yeah, isn't it? Somebody killed him. Could you identify him? Same fellow you met in the bar? Yeah, that's him. What's your name? Montgomery, sir.  Well, I had a couple, but I can handle that. I see. How long have you been out of the service? Two weeks, about. Live here? No, sir. What are you doing in Washington? I just came back to see some of my buddies. Where are you staying? At the Stuart Hotel. That's where I used to be stationed. I'm sponging a free bunk from one of my buddies. What's your buddy's name? This one who was sick, the one who was coming back? Mitchell. Mitch, we call him. Oh, hand me that wallet. Here you are, sir. Corporal Arthur Mitchell. Yeah, that's him. Ever see this wallet, soldier? Where did you find it? In the sofa. It must have dropped out of his pocket, but believe me, Mitch couldn't. What's his outfit? Same as mine was. What were you in? Signal card attachment. Stuart Hotel. Oh, Harold, let's clean it up, get the coroner up here and give me a full report. OK, boss. Let's go, Montgomery. Sure, but where are we going? The headquarters. See what I mean? Routine, just routine. I put a man on to finding this Mitchell, the one who belonged to the wallet, and I talked some more to Montgomery. Nothing. The cooperative type, but nothing. Pretty soon, my man came back. He couldn't find Mitchell, but he had his roommate, a guy named Keely, the uncooperative type. There he is, Captain. Oh, thanks. You, Keely, Sergeant Keely? Yeah, I'm Keely. I'm sorry to break up your Saturday night game, Sergeant. You want to see me about something, Captain? Yes, I want to see you about Mitchell. What about Mitchell? About Mitchell killing a guy. Killing a guy? You know Mitchell, don't you? Yeah, but who's he supposed to have killed? Sit down, Sergeant, we'll talk about it. When did you see Mitchell last? It's afternoon, two o'clock. Where was he going? Crawling. Where? Nowhere. Soldiers don't have anywhere to go, unless you tell them where to go. When they're off duty, they go crawling, or they go crazy. What did you do before you got in the army? What's that got to do with it? It might help me understand your answers. I worked on newspapers. Oh, but sort of a job are you doing now? Pink job, purple ink. Instead of the purple heart, we get purple ink. Mitchell too?  Keep this washroom clean.  You're crazy. Why? He's not the type. Everybody's the type. He couldn't kill anybody. Could you? I have. Where? Where you get medals for it. I see. This Mitchell boy couldn't do that either? No. Tell me about this afternoon when Mitchell left. There wasn't anything to tell, he left. What did you talk to Mrs. Mitchell about? Why, I just... Here it is. Here, what is? According to the hotel charge slip, you called Chicago at 2.30 and talked to Mrs. Mitchell. His mother? His wife. It was personal, it wouldn't interest you. What did you call Mrs. Mitchell about? She called me first. Last week she was worried about him, he hadn't written. Why? I don't know. Then guess. He's home sick, his wife's sick, I don't know. Anyway, he's got snakes.  How was he this afternoon? Well, he was trying to act like a soldier. I think he went out to look for a girl. What's your name, anyway? Finley.  I haven't seen my wife for two years. When I do, maybe we'll pick right up again. Maybe we won't. But I don't worry about it now. Mitchell's not like that, he's not tough, he needs his wife.  Here's her wire, she's on her way. She'll be here tonight. That's good.  You're Mitchell's closest friend, aren't you? I don't advertise it. Well, Mitchell's other friend told us about you. His other friend, who's that? Hello. Well, let's have Montgomery back, right away. Where does Montgomery come in? He was with Mitchell in a boy named Floyd Bowers this afternoon in a bar. They met up Mr. Samuel's there and went up to his apartment. Mitchell left first, but he told Montgomery he'd be back. We were looking at Samuel's body when Montgomery came back looking for Mitchell. You were taking money's word for all this? Not entirely. You ever see this? That's Mitchell's Wallace. How'd you get it? We found it in Samuel's apartment, down behind the sofa cushions. Where's Bowers, did you ask, Monty? Ask him yourself. Hi, Achieveee. Did you hear all this, they're trying to pin on Mitch? Part of it? Well, it's a serious, they're crucifying the kid. You know, Mitch, he won't have a chance. What do you mean by that? Well, Captain, I just mean that Mitchell's not the kind of guy who knows the scoop on things like this. He's an artist, he's sensitive, and you know all about things like this. Well, sure, like I told you, I've been a cop myself in St. Louis. Four years in the jungle on the east side, I know the score. Well, and you can understand my problem, why I need your help. I'm not helping anybody stick my pal in trouble. I'm not asking you to, I'm just asking for facts. How did all this get started in the bar with Samuel's? Like always, a bunch of people in a bar.  What happened? Leroy knocked a drink all over this, what did you say her name was? Miss Lewis. You didn't tell me about Leroy.  He'd come in with Floyd, but he didn't stay long. Go on, tell me about it. Well, like I said, we was talking, me and Floyd and Mitch. Only Mitch was getting high and clamming up. I was worried about Mitch. What's eating you, Mitch? Nothing's eating me. Come on, man, let's go. Sit still, Floyd, you don't get to meet people going in and out of one bar after another. Hey, look out, Leroy, that tray. I'm sorry, lady, I didn't mean to see you.  That's all right, it was an accident. A lady with you? Yeah, I'm sure sorry about my buddy. Oh, that's all right. Here, honey, here, here's an act. Waiter, give me that towel. Here, Miss, you'll have to forgive Leroy here. Leroy's from Tennessee, he just started wearing shoes. Apologize to the lady, Leroy. I said I'm sorry. It was just an accident, soldier.  We won the war with him by not letting him go across. The crowds had caught him and... Hey, Leroy, where you going? I'll see you, Floyd. Well, now, look there, I heard Leroy's feelings. I'd better change. I'll meet you up at your place, Sammy. Sure, sure, take your time. Hey, soldier, buy a drink? Sure, why not? Well, Captain, as Samuels and Mitch went off to the other end of the bar, me and Floyd was just sitting there talking. I don't know how long. Miss Floyd can really talk when he gets started. Man, what I couldn't do with a thousand bucks. What would you do with a thousand bucks? A man with a thousand bucks, I'd go to Mexico. I'd fish and live on the beach and eat and just live on that beach. I'd been to Mexico.  Yeah, not my thousand bucks, they wouldn't. I'd steal me an air-cooled machine gun and I'd just... Hey, hey, Floyd, Floyd, look, they're leaving. Who? Mitch and his pal. Come on, let's go. Why do we have to go? If the Jew boy is setting up the drinks someplace. Who? The Jew boy. The Jew boy. Well, Captain, we followed them to Sammy's place and just walked in. We all had a cup of drinks. Next thing I knew, Mitch was getting a little green and pretty soon he left. Floyd was getting kind of stinko too. So after a while I got him out of there and started walking him back to the Stuart Hotel. But then I got worried about Mitch. So I put Floyd in a cab and went back to look some more for Mitch. And that's when I met you, Captain. And you came up to Sammy's apartment even though you saw the police cars outside? Well, how did I know they had anything to do with Sammy's?  You'll never pin anything on Mitch, not in a hundred years. I'm sorry, I'm just worried sick about Mitch. Did you have any sort of an argument with Sammy's? What was her to argue about? What was her to argue about? liquor was good. Everything was okay. Had you ever seen him before? No, I told you. I just met him in the bar. I never seen him before. You're sure? Sure, I'm sure. Of course, I've seen a lot of guys like him. Meaning what? You know, guys that played it safe during the war, scrounged around keeping their selves in civvies. They got swell apartments, swell dames. You know the kind. No, I'm not sure that I do. Just what kind? You know, some of them are named Samuels. Some of them get funnier names. You'll be at the Stuart? Sure, I got nowhere else to go. I'm just sponging a bunk from one of the boys. There are one or two more questions I want to ask, Sergeant Keely. Well, so long, Captain. If there's anything else, just call on me. You should look at a casualty list sometime. There are a lot of funny names there, too. I said Monty's a literate. I said you ought to read more. I was just philosophizing. I'm not interested in philosophy. I'm trying to solve a murder. Pardon me.  You'd admit that. He left Samuel's apartment, intending to come back. We arrive and find Samuel's beaten to death. We find Mitchell's wallet and the sofa. I say Mitchell did come back. Some sort of an argument developed. I say nuts. Why?   You still don't know where he is? No, I don't. I didn't know when I came in here and I haven't suddenly gotten any brighter. You don't believe he did it yourself? He could have. He was there. So were Monty and Floyd. But they left. Mitchell said he was coming back. According to Monty. According to Monty.  What makes you believe his story? It just happens to be the only story I've got. Then why did you let him go? Did I? You don't really think he'll lead you to Floyd Bowers, do you? I don't know. Is that all for me? Yeah, I guess so for now. Okay. You know where to find me. I'm Keely. You've heard from me already. I was Mitch's friend. And brother, when I walked out of that smart cop's office, I knew if I didn't find him before the fuzz and after me was a dead pigeon. When I got back to the hotel, the lobby was so full of cops and MPs they were dancing with each other. So I rounded up a couple of my scouts, told them Mitch was up to his ears in trouble, and I staced them around the lobby to keep an eye out for him. I also told him to keep on the lookout for Floyd Bowers. He might know something. Then I waited at the counter of the coffee shop where I could see the street from the window. Sure enough, about half an hour I saw Mitch cutting across the street for the hotel entrance. I managed to get outside and put the snatch on him before the cops knew what I was up to. And ten minutes later, we were sitting in the balcony of an all-night movie house with nobody around with a few drunks and bums. And I gave him the pitch. Keely, I couldn't have killed him. But that's not the point. You've got to have a story for the cops. They've got monies and it sounds pretty, but not for you. I want you to tell me everything you did tonight. How drunk were you? I don't know. Pretty drunk, I guess. How long were you with this girl? Well, I think... Oh, you want to know? Was it one hour? Two hours? Three hours? I can't remember. My head hurts. I can't remember anything very well. So it hurts. You've got to remember. You ran into Monty and Leroy and Floyd, didn't you? Yes. And you went in the bar with them? That's right. Okay, now take it from the bar.  Well, we were there quite a while, I guess. I got restless and I wanted to shout.  I wanted to be somewhere else. So I drifted off to the other end of the bar and this fellow Sam goes came over and he sat next to me and began to talk. First, I didn't pay much attention. I was feeling so low myself. My girl is worried about you. She says you're not drinking, but you're getting drunk anyway. Anybody who can do that has got a problem. So what? It's a funny thing, isn't it, how it gets worse at night? I think maybe it's suddenly not having a lot of enemies to hate anymore. The war is over. And now we don't know what we're supposed to do. We don't know what's supposed to happen. We're too used to fighting, but we don't know just what to fight. Know what I mean? I guess so. You can feel the tension in the air right here in this bar. A lot of fight and hate that doesn't know where to go. A guy like you may start hating himself. One of these days maybe we'll all stop hating and start liking things again, huh? What sort of an artist are you? I did a mural once for the WPA. Oh, a lot of fine artists came for me. I saw one of them. He seemed like a nice fellow this Samuel's, a real nice fellow. I think he must have been on a newspaper or something. We talked a while, then we decided to go up to his place. He was going to meet his girl there. Monty and Floyd must have followed us because after we got to the apartment, they walked in. I guess I must have been getting pretty tight because I don't remember exactly what we talked about up there or how long it was before Monty and Floyd came. All I remember is that the radio was on, playing some nice music. Debussy, I think. Monty was jamming away doing most of the talking. Don't all right, Floyd. You're doing all right, Mitch Kidd. Sammy, let me tell you something. Not many civilians will take a soldier into his house like this required talk. Is that right, Floyd? That's right, Monty. Well, let me tell you something. A guy's afraid to take a soldier into his house. He stinks. He ought to have the screws put to him. Am I right or am I right? Sergeant, don't you think that... I asked you a question, Sammy. What was that? You know what was that. Am I right or am I right? You're right, Sergeant. You can say that again. You're all right, Sammy. Boy, you're okay. Mitch, are you all right? I'm all right. I just need a little air. Can I get you anything? No, I'm all right. I'll be right back. I'm all right. He's all right. You heard him say he's all right. Let's have another round. I'm afraid there isn't time, Sergeant. What kind of a brush is this? What's the matter, Jew, boy? Afraid to have a drink up while you're here? You know how I am, Keely. I hate to hear anybody yelling at anybody. So I decided not to go back when I got out. The air felt good. I must have started to walk. I don't remember how far and in what direction. But the next thing I knew, I was in a joint called the Red Dragon. I was talking to this girl named Ginny and buying her drinks. Do I have to tell you my name again? Well, it's Ginny because I'm from Virginia. Oh, yeah? Oh, yeah. Oh, this joint stinks. I sure get tired of it here. What do you work here for, then? For laughs, dear, for laughs. Every night? Every night.  Here's to nothing. You work here until when? Until we close. Then what? Then I sleep. Me and myself in my great big bed we sleep. You know, I could have killed my roommate the other morning. You got that in quick, didn't you? Drink up and be nice. You know what I'd like to do? Yeah, yeah. No, no. I'd like to take you dancing. Well, that's what that music's for. I work here. I mean really take you dancing. The two of us going somewhere, eating something, talking about ourselves.  I'm serious. Sure, sure, I know. I remind you of your sister. You remind me of my wife. Look, look, be nice. Order some more drinks. Then we'll dance. I've had enough to drink. Well, too low. Wait, Jenny, don't go. I've got some things to do. I was looking all over for you, Jenny. What did you leave for? Well, you didn't want a drink. All you wanted to do was yep. I don't make money on that. You're not getting so rich out here in the terrace all by yourself. Well, it's nicer out here on the terrace all by myself. What's wrong with me, anyway? You're corny. What did I say? We were just talking. Is that what that was? You know what I'd like to do? I'd like to take you dancing. You remind me of my wife. What's the idea of saying a thing like that? Oh, I'm sorry. I didn't mean to insult you. You know something? I haven't really been dancing for almost two years. Why not? Because I haven't. Why? Because I've been working for a living. What are you doing? You're not working for a living. I live. How much would you charge to dance with me here? A lot.  You're not so bad yourself. It's nice out here. Yeah, yeah, you know, this used to be a spaghetti restaurant with tables out here. They don't use the terrace anymore. Say, say, how would you like me to make you some spaghetti? You mean here? No, silly. Look, I live at the Regal Apartments on Southern Street. You could wait for me. Well, I won't be there for a couple of hours, but you could sleep or something. Here's a key.  You're nice. Look, I'll try to get away early, but if you don't want to wait for me, you can just lock the door and put the key in the mailbox. I'll wait. I guess it was a crazy thing to do, Keely, but it made sense at the time. Besides, I thought I could use a little shut-eye. So I walked around some more, and then I went up to Jenny's apartment. I must have fallen asleep because the next thing I remember, somebody was knocking on the door. How about some light? Sure. Has she come home yet? I don't know. I don't think so. You mean Jenny, don't you? What do you mean? I guess I mean Jenny. Do you belong here or something? Or something? How long have you been waiting? I don't know. That's great. Have a second, Rhett. Thanks. I just woke up. I don't even know what time it is. I've got a key here somewhere she gives. I know. I saw you with her at the gym. Oh? Who are you? I'm a man who's waiting for her. Is that all right? Sure. Want some coffee? Sure. I'm a husband. I'm Jenny's husband. Oh, yeah? I was a soldier too, but I conked up. I guess you're wondering about this setup, aren't you? I guess I am. Well, ask her about it, then. She was a tramp when I married her. I didn't know it at first, but I knew it before we were married. It's one of the reasons I enlisted. To get away from her. But I couldn't wait to get out and come back to her. When I did, she didn't want me. Funny, ain't it? But I still want her. I still love her. Oh. How's that coffee doing? We'll be ready in a minute. You know what I just told you? Well, it's a lie. I see. I'm not her husband.  I can't keep away from her. I want to marry her if she won't have me. I see. You believe that? Well, that's a lie, too. I don't love her. I don't want to marry her. She makes good money there. Got any money on you? While this screwball goes on with this double talk, I suddenly remember you, Keely, about having to meet you at the hotel at midnight. So I decided to get out of there.  Listen, I don't like all night movie houses any more than you do. But you're in a jam. Now, how long was it from the time you left Sam until the time you met this Ginny? I don't know. That's a help. How long were we going to repartment altogether? Well, I think... You ought to be kept in a cage. Keely, what's happened? Is everything suddenly crazy? I don't mean this. I mean everything. Or is it just me? No, it's not just you. The snakes are loose. Anybody can get them. I got them. But they're friends, am I? I think Sam goes understood it. Maybe he did it that way.  I guess I am. She's still in love with you? That's a screwy thing to ask. Maybe it is, but she's here now, or she should be. I've got to figure out how much of this to tell her. Mary? Here? Well, what's she... She doesn't know anything yet. She was coming anyway. Why? To see you. I talked to her this afternoon. Maybe she's here now. She was supposed to be on a plane.  I'll go see if I can find her. Keely, I couldn't have killed this guy, could he? Hey, there's Leroy. I wonder what he wants. Keely, listen, I found Floyd. Floyd? Where? In a room in a place down on Maryland Street, where he's hiding out. He just phoned me and tried to raise some dough for something. He sounded awful scared. You get the address? I don't want to have nothing to do with this. I shouldn't have told you. I don't want to get in trouble, Keely. You won't get in trouble? All you have to do is tell us where Floyd is, then you can go back to the hotel and stay there and forget it. And you, Mitch, you just keep right on watching the picture and don't move. Don't even move to another seat. Do you want Leroy to bring you a sandwich or something? No. But, Keely, where are you going? It was in Floyd Bowers. I didn't have any trouble finding Floyd. He was just where Leroy said he was. Crummy little room on the second floor. And he was scared, scared to death. And wanting to get rid of me the worst way. Why? I didn't know then. I talked to him for quite a while, but I couldn't get a thing out of him. Well, I didn't have all night to waste either, so after 15 or 20 minutes, I got up to leave. Well, thanks for dropping around, Keely. It's okay. You sure you haven't got anything on your mind? No, no. Not a thing, Keely. Oh, well, I'll be seeing you. Sure. Sure. So long, Keely. Night, Floyd. I went on out and down the stairs. I couldn't figure it out. Of course I couldn't. Because what I didn't know was that all the time I'd been in that room, Marty had been there too. After I left, he was still there. It's okay, Marty. He's gone now. I know he's gone. Marty, I didn't call Keely up here. No? Oh, Marty, don't! Told you not to go out anywhere, Floyd. You went out, Floyd. You didn't do like I said. You went out and got in touch with Keely. You shouldn't have done that. No, I didn't, Marty. I didn't get in touch with Keely. I called Leroy. Leroy must have told him. Try him any money. All I did was try to get some dough. Now look, you got plenty of dough, Marty. Give me some dough. I had everything figured out. Just what we was going to do. I told you to stay here. You went out and phoned. You spoiled everything. I didn't, Marty. I didn't spoil nothing. I told Keely I hadn't seen you. You heard me say that. Nobody can pin anything on you. That's right, Floyd. Nobody can pin anything on me. Oh, no, look, Marty. I'll go to Mexico. I'll never come back. I didn't have nothing to do with it. I don't want to get mixed up in it, Marty. Crime in it, Marty.  Samuels didn't do nothing to you. You went crazy. I didn't do nothing to Samuels either. Except I flicked it like that. Not that hard, maybe. More like that. Or that. Or that. Not hard enough to hurt anybody. Stop it, Marty. Stop it, you wimp. I've got nothing against any Jews. I just don't like Jews. And I don't like nobody who likes Jews. Tonight's full hour of suspense. Our stars are Robert Young as Captain Findlay, Robert Mitchum, Robert Ryan and Sam Levine in Crossfire. Tonight's study in Suspense. In just a moment, we will return with Act Two of Suspense. This is CBS, the Columbia Broadcasting System. And now, back to our Hollywood soundstage and Act Two of Crossfire. Starring Robert Young, Robert Mitchum, Robert Ryan and Sam Levine with George Cooper, William Phipps and Marlowe Dwyer in a narrative well-calculated to keep you in suspense. Before I'm just a cop, by this time I was a tired cop, dog tire. I've been doing a lot of work for the last six hours, most of it leading nowhere, because still, no Mitchell. But by this time, I had Mrs. Mitchell right in my office. Figuring maybe she might be anxious to see her husband, too, I asked O'Hara to locate that helpful character, Keely. Okay. And bring him in. All right. Keely, Captain, come on in, Sergeant. Captain Finley was just sending me out to find you. I've been waiting to see him. Hello, Keely. Mary, what are you doing here? We picked up Mrs. Mitchell at the airport. Oh, well, what do you want me for? Floyd Bowers is dead, Sergeant. Dead? He was alive a couple of hours ago, I just saw him. Well, when I saw him about 20 minutes ago, he was good and dead, strung up by the necktie. I just came here, Captain, to tell you I'd talked to Floyd. If you'd come here right away, Sergeant, as soon as you found out where Floyd was, I could have talked to him myself and he'd still be alive. You win, Captain. Now, don't you think you'd better tell me where Mitchell is, Sergeant? Why? I don't want anybody else killed if I can help it. Might as well work with me now if you really want to help Mitchell, because you're in custody in case you didn't know it. I'll listen to anything constructive you have to say, but I won't stand for any more interference. You've got a mind like a dog catcher. Okay, I'm in custody. Everybody's in custody. What does that prove? Except that you've got a big jail. If you want Mitchell so bad, you can go out and find him. All right, I was just hoping there was an easier way. I talked to Mitchell a little while ago. Where is he? I said I talked to Mitchell, Captain. He couldn't have killed Samuels. He didn't go back to Samuels' apartment after he went out for some air. He went straight to a... He went straight to a joint where he met a girl. Okay. Take it easy, Mary. Mitch was in this girl's apartment for the next couple of hours. What does that prove? It proves he went to a joint and he met a girl. Would a man who's just killed somebody do a thing like that? I'm sorry, Mary. And it proves where he was for two hours. Which two hours? He doesn't remember. But all you have to do is ask the girl. Who is she? She's a girl. She calls herself Ginny. Mitch knows where she lives. When did he tell you all of this? Just before I went to see Floyd. Did he know where you were going? Yeah. Then he could have killed Floyd himself. He didn't know the address. He could have followed you. Captain Finley, if Keely tells you where Mitch is, will you let him go and will you promise to let me see Mitch first by myself? No, I won't let Keely go. But I'll let you talk to your husband alone. I'll be waiting outside wherever he is. Please tell him, Keely. Please. He's in the balcony of an all-night movie, The Regent. About four blocks from the hotel. I took Mrs. Mitchell to the Regent Theater and waited downstairs by the popcorn machine while she had her private talk with her husband. I don't know what they said to each other, but it wasn't hard to imagine. A guy and his wife separated for four years and then socked off this deal. But you could tell from the way they looked at each other when they came out that whatever came between them from now on, it wasn't going to be that other girl. I put Mitchell in the squad car with O'Hara, and then Mrs. Mitchell and I went on to pay our call. Mitchell had given his wife the address, Regal Apartment Southern Street, the name Ginny. Captain Finley. Yes, Mrs. Mitchell. Can I go in and talk to Ginny first? I mean, go in alone. Why? Well, she might tell me more than she'd tell you. All right. I see the transom's open. I guess I won't miss anything. Ginny. Well, who's there? I'm Mrs. Mitchell. Great. How's Mr. Mitchell? My husband is so... What do you want anyway? It's late. I'm sorry. I wanted to talk to a girl named Ginny. My husband's a soldier who was here tonight. Well, there aren't any soldiers here now. Just me. I don't have anything to do with soldiers. Sorry. Good night. Please wait. Please. I've got to talk to you. It's terribly important. I know it's late, but you've got to help me. Can't I come in for just a minute? Please. Oh, all right. My husband's in trouble. Look, I don't know anything about your husband. Honest. Honest.  Maybe he's waiting for you. He's in jail. They say he killed a man, but he didn't. Okay. Then there isn't any problem. What do you want from me anyway? A character reference? All I want you to do is to say that he was with you tonight. It's nice. A long time ago. I wouldn't be able to remember. You'd remember, Mitch? Why? Does he have two heads or something? You danced with him. You danced with him out and back of where you work in a sort of a terrorist garden.  I told you that he was up here with an eaten knife? Yes, he... Well, he lied to you. If he was here, I didn't know about it. And I don't know where you got my name and address. I can't tell you anything else. You better go now. Hello, Jenny. Who are you? What do you want? I want to talk to you. What's your name? Are you a cop or something? What's your name? I don't like cops. Nobody likes cops. What's your name? Virginia Tremaine. Why? Where are you from? From here? Before you were from here. Pennsylvania. Wilkesbury. So what? What do you do? I work. Where? The Red Dragon. Well, what's wrong about working there? Does that make me a criminal or something? Does that give you the right to bust into my house and start asking a lot of questions? Is that where you met Mitchell at the Red Dragon? That's where I meet a lot of people. I never heard of this, Mitchell. You live here alone? Sure. Is there something wrong in that? Jenny, the police won't hurt you. He promised me. All we want you to do is to tell the truth. Sit down, Virginia. Now, about Mrs. Mitchell's husband. He's in pretty deep, Virginia. Looks like he killed a man, maybe two. Mrs. Mitchell doesn't think he did, of course, but that's only natural. Jenny, don't you see? I know he was here. He told me. But that doesn't matter anymore. Never mind me. You've got to think of him. Oh, brother. Listen to that. Never mind me. You've got to think of him. Oh, now isn't that sweet? Isn't that just... He wasn't here with me, see? He could have been, but he wasn't. He could have come up. I could have cooked him something and we could have talked. And what would have been wrong with that? What's the matter with me being with her precious husband? Does he break or something? Where was she? Okay. Where were you when he needed you? Maybe you were someplace having beautiful thoughts. Well, I wasn't. I was in a stinking gin mill where all he had to do to see me was walk in, sit down at a table and buy me a drink. And that's all I know about it. I didn't ask it if he killed anybody. Virginia, listen. You're not involved in this murder, so nothing's going to happen to you. That's the first point. Got it? You bet I got it. Okay, now, when was... I mean, what time? What time was Mitchell with you at the Red Dragon? I don't know. We found the body of this man, this Samuel, is about 10. He'd only been dead about a half hour. So if Mitchell was with you from, say, 9 to 10, he's all right. Tell me the truth. No. Oh, no. I gave him my key. I don't know, maybe 8.30. I liked him. I felt sorry for him.  I was going to ditch early, only I couldn't. I didn't get home until 1, maybe 2. He wasn't here. He had been here, and he'd gone. He left the key. But I don't know what time. Ginny, is that the truth? I said it's the truth. What do you want me to do? Light up like a Christmas tree? We're wasting our time, Mrs. Mitchell. This isn't going to help your husband. Let's go. By the time I got to my office, it was dawn, gray and dirty, which is how I felt, plus disgusted. Mitchell and I were going around in circles. I didn't murder anybody. Why would I murder him? What motive would I have? Maybe you didn't like him. Maybe you hated him. Hate's a good motive.  I hardly knew him. I only talked to him for a couple of hours. He seemed like a nice guy. You know he was a Jew? No. You mean to say you didn't know he was Jewish? No. I didn't think about it. What would that have to do with it? You got Montgomery for you. All right. I'll see him in a minute. I'm through here with Mitchell, but I want to talk to Keely again. Okay, boy. That door, Mitchell, over there. Okay. Here are the papers you wanted from the water problem on Samuels. Oh, yeah. Hit on Okanawa. Got a medical discharge last summer. Well, let's give a look. Samuels, Joseph, ASN 39232880, Army of the United States. Joseph Samuels was discharged 28 August 1945 upon recommendation of a medical board because of disability from wounds received at Okanawa. So that's our stinking civilian. All right, O'Hara, let's have mine. Okay. Come on in, Monty. Okay. You want to see me, Captain? I figured it must be important. I want to help all I can. Yeah, sit down. Yes, sir. Sergeant, how did you know Samuels hadn't been in the Army? When I talked to you earlier this evening, you were sure that Samuels had never been in uniform. How did you know that? Well, like I said, you could tell. You could see. Those kind of guys got ways of keeping themselves from getting dirty. Why do you ask that, Captain? I was just curious. You know who killed him yet? Yes, I think I do. Was that all, Captain? Didn't you want to ask me something else? No, that's all. I can go now? Yes. Okay, then, Captain. Oh, Montgomery. Yes, sir? You haven't seen anything of this friend of yours that Floyd Bowers, have you? No, sir, I haven't. I can't figure it out. Well, let me know when you do, will you? Yes, sir. So long, sir. O'Hara, send Kylian. You look all in, Kylian. Thanks for the concern. Sunday morning, Mrs. Finley is just about leaving for early mass. Now that I know that, can I go back to bed? Well, what's the matter? It's not you're going to have this all solved by now. I'm in a cage. I'm not doing anything except breathing. You've got Mitchell. You've got your little fairy tale over it. Come, come with home. Can't tell a clear story. Open and shut. Let's hold in your back. Is that all? That's all. All right, then. Do you really want to help me wind this up? But you didn't like me. You talk too much sometimes. You're appealing to my better side. Yes. Making me some sort of a proposition? Yes. I'd like to sleep on it. You can sleep all day when we're finished. Okay, then.  Yeah, I guess. You have to know him well enough to be in love with his wife or well enough to know he has some money. Samus didn't have any money. He didn't even have a wife. So what? So this. None of these men knew that or anything else about Samus. They hadn't known him well enough or long enough to have an ordinary motive for killing him. Mitchell talked to him for maybe an hour or the other's less. So it had to be something else, a motive inside the killer himself. Go on.  Not for any real reason, but mistakenly and ignorantly. You interest me, can't you? Well, once I figured that out, the rest wasn't too hard. I looked around at my suspects. I thought back over the answers I'd had tonight. Some of them fit. I knew who killed Samus. You booked him? No, not yet. I'm taking the chance that you're smart enough to know what I'm talking about. You don't have to draw me pictures. I know what you're getting at. I think you're right. What do you want me to do? Yes, I have nothing on Montgomery, nothing at all. I might never get anything. I want to take a long chance on nailing him quick. How well do you know him? Well, I've tried to like him, but he's not my type. Does he have many close friends? He had one, Bowers. I think he killed him. So do I. What about that southern boy, Leroy? No, I don't think so. He was in Monty's platoon. Just how do you think he feels about Monty? He's getting ahead of me. Well, I was hoping he didn't like Monty. I think he's scared to death of him.  He's pretty young. He doesn't always know which ends up.  What if Leroy told Monty a fantastic story? Would Monty believe him? He might. I'll risk it. How? Yes, sir. Keeley's on his way out. I don't want to see anything in the papers about Floyd Bowers' killing. Not a word. As far as we know, he's still alive. We've never heard of him. We'll do, Chief. Keeley, I want you to get Leroy out of the Stuart Hotel without being seen and bring him here. Can you do it? If I have to sandbag him. In an hour on the nose, Keeley was back at headquarters with Leroy, but it wasn't going to be easy. Leroy was suspicious and he was scared. It isn't an out of... don't want to help, Captain. It's... well, I don't... Well, I've never been around with Monty and Floyd much. Monty never wanted me around.  I guess I am.  We don't. That's what we want you to help us prove. Keeley, I told you I didn't want to get in any trouble. You're not going to get in any trouble and stop worrying about Monty. Captain Fedley won't let anything happen to you. Maybe you're right, sir, but I can't think you'd do a thing like that. Without no reason. He thought he had a reason. You know the way Monty feels. You've heard the things he says. Well, yes, I...  I guess it is. I don't know, but... I don't know, but look, maybe Monty roughed this guy up a little, and that was all. That was all he started out to do, yes. He didn't have a plan or anything like that. This business of hating Jews comes in a lot of different sizes. There's the, you can't join our country club kind.  Yes, and the, you can't work here kind. Because we stand for all of these, we get Monty's kind. He's just one guy. We don't get him very often, but he grows out of all the rest. Look, Leroy, you know we have a law against carrying a gun? Sure. We have that law because a gun is dangerous. Well, hate. Monty's kind of hate is like a gun.  It killed Samuel's last night. Monty was in my outfit. It killed Floyd.  But look, I'm getting out soon. I might get in trouble. And I don't see this as any of my business anyway. Has Monty ever made fun of your accent? Well, sure. Lots of times. Why? I don't know. He called you a hillbilly, doesn't he? He says you're dumb. He laughs at you because you're from Tennessee. He's never even been in Tennessee. Ignorant men are afraid of things they don't understand. They end up hating them. You get me all mixed up. How do I know what you're trying to do? How do I know you want a Jewish person yourself or something? You don't. But would it make any difference? I guess not. Well, all right, Leroy. But just one more thing then you can go if you want to. About a hundred years ago in Ireland, the potato crop failed. A lot of Irish immigrants came over here. Their talk was different, like yours, Leroy. They were Catholics, most of them. One of my new bots stayed in Boston. He thought of himself as just another American until suddenly one day he looked around and saw that something had happened. It frightened him. Fear and hatred of all Irish Catholics had developed and spread like a terrible disease. He saw he wasn't an American anymore. He was a dirty Irish mick. He didn't understand. He didn't know what to do. But one day when a bunch of men attacked his parish priest on the street, he waited in to help him. That night on the way home from work, he stopped off for a beer. When he left the bar, two men followed him carrying empty whiskey bottles. They didn't mean to kill him. They were just going to rough him up a little. They just started out hating the way Monty started out. But 20 minutes later, my grandfather was dead. Grandfather? That's history, Leroy. They don't teach it in school, but it's real American history, just the same. Thomas Finley was killed in 1848 just because he was an Irishman and a Catholic. And last night, Joseph Samuel was killed just because he was a Jew. Do you see any difference, Leroy? Hating is always the same, always senseless. One day it kills Irish Catholics, the next day Jews. It's hard to stop. It can end up killing men who wear striped neckties or people from Tennessee. Will you tell me exactly what to say? Yep, I'll tell you exactly what to say. If it would work at all, I knew it would be just the same as if I'd been listening in on them. I already knew what Leroy was going to say, and I thought I'd sized up Montgomery well enough for this time to figure him out too. Leroy cornered him in the hotel washroom while he was shaving. Hiya, Monty. Hiya. You heard about everything that happened, Monty? Uh-huh. I heard they got Keely and Mitchell and they're holding them. I guess it's a good thing I left the bar when I did, or I'd be mixed up in it too. Floyd didn't have anything to do with it, did he, Monty? Knock it off. What's the matter, Monty? Monty, no kidding. Floyd couldn't have done it, could he? Floyd wouldn't bump anybody off, would he? I don't know. He sure acted funny when I saw him last night. When did you see him? I saw him after. After what? After all that happened. He wants to see you, Monty. He asked me to tell you he wanted to see you. He did? Honest, Monty, I didn't know whether I ought to tell you or not. You don't want to get mixed up in anything anymore in your heart, but he was acting crazy, Monty. He gave me a crazy thing to tell you. He said, tell Monty the necktie wasn't any good. What do you mean by that, Monty? What was this you saw, Floyd, Leroy? How did you happen to see him? He called me and asked me to come over to where he was. Where was he? Some old place down on Maryland Street on the second floor. Let's see, I wrote down the address. What'd I do with it? It was on a little piece of paper. Must be in my other pocket. Gosh, Monty, Floyd was really acting crazy. He said you shouldn't come today. He said to come tonight before 10. Here it is, 404 Maryland Avenue. Let's see it. Huh? Will you go see Floyd, Monty? Will you give him some money? I wouldn't say anything about this if I was you, Leroy. Understand? I wouldn't say a word to anyone. It was a long shot, but what else could I do? Well, Harrow and I went down to the Maryland Avenue and waited. We'd been waiting about 20 minutes when we heard steps on the stairs. They stopped on the landing, then started shuffling along the hall. They stopped again outside the door. Somebody was fumbling at the door now. Then the door opened. It was Montgomery. I... Hello, Montgomery. Well, I was looking for Floyd Bowers' room. Somebody said he was here. Well, that's too bad, Sergeant. Floyd was here, but he isn't anymore. What's wrong? Has something happened, Captain? Bowers is dead. Dead? He was killed today. You know who killed him? Not yet. How did you know he was here? When I talked to you last night, you didn't know where he was. I didn't, then. I didn't know then where he was. A fellow back at the hotel, he told me Floyd was here. Floyd was scared and he wanted to see me about something. I just come. I didn't even know which room it was. I was looking for the right room. He was knocked off in this room. Mm-hmm. The same guy who knocked off Samuels, maybe. Well, it could be. I liked Floyd, Captain. I liked Floyd a lot. I naturally came to help him. This fellow said he needed some dough for something. No, you should have come right away. Well, this fellow said... Floyd said not to... Not till tonight. I figured if Floyd said that, he must have got a reason. Well, it looks like somebody was stringing you along. Yeah. What was this fellow's name, the one who told you Floyd wanted to see you? Look, Captain, I don't want to be a pigeon, this guy. What was his name? Leroy, something. He was a friend of Floyd's. Maybe you remember me mentioning him. Yeah, yeah. You never been to this house before? No, no, no. I never been here before. I never even been in this part of town. I didn't know which room it was, except it was on the second floor. Like Leroy said, I was looking for the right door. Seems like you have a lot of trouble with doors, Sergeant. First time we met, you were looking for the right door. That's right, sir. But you knew the address. You knew which house to come to. Sure. Leroy, give me the address. Was it written down on a piece of paper? Yeah. Do you still have this piece of paper? Yeah, I guess so. Uh, here it is. Let me see it. Okay. Mm-hmm. I'll have to arrest you, Montgomery. Why would you arrest me, Captain? What would you arrest me for? For the murder of Samuels and Bowers. You're kidding, Captain. I never even been here before. You didn't look at this paper carefully. This is the address of the house next door. I wrote it down myself. You made a mistake, Sergeant. You came to the right house anyway. Gee, Captain, you got this all wrong. Just let me explain. See you! Let go of me! The next thing I knew, I was on the floor, and O'Hara on top of me.  Then O'Hara was up, going down the stairs after him, and I was over at the window in time to see him come out onto the street. I tried to get the window up, but it wouldn't budge.  Montgomery, stop! Montgomery! That was all. By the time I got down to the street, Montgomery was dead. The crowd was gathering, and Keely was standing there looking down at what lay in the street, sort of shaking his head. Break it up now, break it up, step back, everybody. I'm afraid he was a bad boy. Bad? Maybe. Ignorant. Fed with it, fed to the teeth with it, and the day was born. Yeah. All right, O'Hara, clean it up. OK, Captain. How's Mitch? Uh, with his wife, want to see him? I guess not. Gonna drop you anywhere? Oh, thanks. Oh, good night, Captain. Good night, Sergeant. And, uh, good luck. Our sincere thanks to a wonderful cast. To Robert Young, who was Captain Finley, Robert Mitchum in the role of Keely, Robert Ryan, who played Monty, and to Sam Levine as Samuels, to George Cooper as Mitchell, and William Phipps as Leroy, to Marlowe Dwyer as Ginny, Julie Bennett as Mary, Bill Johnstone as O'Hara, Bill Lally as Floyd, and Louis Van Rooton as the man. Our thanks for your superb performances in this suspense adaptation of Crossfire. Robert Young may currently be seen in Relentless. Robert Mitchum will soon be seen in the RKO Radio Picture, Rachel and the Stranger. Robert Ryan will soon appear in Berlin Express and George Cooper in Blood on the Moon, both RKO Radio Productions. Sam Levine's next picture is the Babe Ruth story. Crossfire, based on the original novel The Brick Foxhole by Richard Brooks, was adapted for suspense by Robert L. Richards and Henriette Martin, and was produced and directed by Anton M. Lieder. Ludglasken is our musical director and conductor, and Lucien Marowak composes the original scores for Radio's outstanding Theatre of Thrills, one hour of... Suspense! This is CBS, the Columbia Broadcasting System.


Welcome to part 2 of the lecture on object oriented languages. Today, we will continue our discussion on variable name visibility, mapping method names to methods and so on and so forth. To do a bit of recap this is the diagram with class hierarchy that I showed you last time. So, here there are 3 classes 1, 2 and 3 the class number 3 is at the highest level in the hierarchy 2 derives from 3 and 1 derives from 2. So, this is the way the hierarchy is maintained. Now, there are methods that 3 defines for example, it defines the method phi and it also defines the method form. Phi is not shared between 3, 2 and 1, 2 has its own procedure method called phi and similarly 1 also has its own method called phi. So, that part of it is not shared whereas, the method form which is available in class 3 is shared between 2 and 1 both. So, the class 2 does not define its own form of form similarly, class 1 also does not define its own form of form and similarly, class 4 is not a member of class 3 sorry method 4 is not a member of class 3, but it is a member of class 2 and it is shared between 2 and 1 it is provided by class 2 and it is used by class 1. So, this is the difference as far as the methods are concerned. So, similarly we also have class 1 which defines a phi actually phi which is its own function and it is not actually available to any other class as well. Now, there are objects a, b and c. So, the object c is of type 2 and it has 2 fields x and y, object a and object b are both of type 1, they have 3 objects 3 fields x y and z. So, the most important thing here is to find out which name maps to which method when a method call is made and similarly, whenever we use a field name can a particular method actually access that field at all. So, the point here is if we actually take the you know object of type 1 that is object a and we try operating with the method 4 which is actually defined in class 2 then the field z of this object will not be available to this method 4 because any object of type class 2 will not have any object you know field z inside it it will have only x and y. So, x and y will be visible to the method 4, but z will not be visible to the method 4, but the z will be visible to actually the method phi you know this here we have method phi and here we have method phi. So, both of them will be able to access this particular field z of you know object a. So, there are visibility rules of this kind and then the naming conventions as well. So, mapping names to methods implies finding out which particular method that the name corresponds to. So, if we say we are calling a dot phi then does it correspond to you know 1 dot phi or 2 dot phi or 3 dot phi. Obviously, when it is object of type you know 3 this thing 1 that a belongs to then it would be 1 dot phi if the call was made from an object which corresponds to class 2 then it would be 2 dot phi. And similarly, if it is made from an object of type class 3 then it would be you know 3 dot phi. And then what about a name such as a dot 4 a is the object and we are trying to make a call 4. So, 4 is defined if you remember 4 is defined only in class 2 and it is shared between 1 and 2. So, 4 invokes 2 dot 4 always. So, if and a dot form similarly invokes 3 dot form because 3 is the only class which defines this method form. So, this is the difference. So, conceptually when we want to determine the method which corresponds to a particular name the method look up actually is nothing but a search for the name of that particular procedure call. So, these are actually called virtual calls and search for that method in the objects class that is the receivers class from which it was made you know the first of all we check whether it is a local method available in the local class itself. And if that fails we go to the parent of this particular class find out it if the method belongs to that super class and so on and so forth. So, this this method may become very efficient provided the complete method table is stored in each one of the classes. So, I will you know show you what I mean very soon. So, if the complete method is a table is not stored in each class then the the search may take a little extra time. So, that is the difference between you know the search strategies. Now, the next one is variable name visibility. So, suppose we call the method b dot phi. So, phi is defined in each one of the classes. So, there is a local phi which is available in the classes 1 2 and 3 all of them. So, it allows phi to access all the variables instance variables of v. So, there is no problem because it is a local you know method that is defined inside the receivers class. So, there are three variables x y and z that I already showed you this diagram. So, there are three variables x y and z corresponding to every variable every instance variable of class 1 right. So, the class variables you know of 1 2 and 3 they actually have different types of variables. So, class 1 of course has only x and y 2 and 3 both have x y and z. So, depending on which method is actually invoked the whether the particular variable is visible or not will be known. So, in the same breadth if we call b dot 4 instead of b dot phi then b dot 4 is actually you know. So, let us look at this. So, b is here. So, b is defined as that of class 2. So, this is our a and b right sorry class 1. So, b belongs to class 1. So, that actually has three variables in its three objects three methods sorry three of the fields x y and z and if whereas, the method 4 belongs to class 2. So, anything from class 2 will be able to see only x and y it cannot see z because every object of class 2 has only two fields x and y. So, z is invisible to method 4 whereas, it is definitely available to the two methods phi and phi. So, this is the two when phi is called from an object of type class 1 not from an object of type class 2. If the method phi is called from an object of class 2 then you know it can again see only x and y. So, the moral of the story is whenever there is a method call you have to see which class that method really rather the object that the we are using right that point belongs to and then determine the instance variables which are relevant to that particular class and then say these are the ones which are visible at that point. So, 4 can also access class variables of classes 2 and 3, but not the class variables of class 1. So, this is the difference. So, 4 which is declared by class 1 you know rather class 2 cannot access anything, but the variables which are defined in the in its own class. So, this is something that one has to remember very carefully. Now, that is about visibility. So, what is visible to each method right and now how do we generate machine code for the methods. So, methods can access any data member of any object that becomes its receiver what is a receiver every object that can find the method. So, of course, everything is subject to class hierarchy restrictions which I already mentioned. Now, there is a basic requirement from the compiler. The compiler must be able to establish an offset for each data member that applies uniformly to every receiver. This sentence will be very clear very soon. The basic difficulty is there are several methods that can use the you know fields within an object. The methods could have been in the parents class or in the current class. So, the offsets that apply to the parents class or the current class must all be the same that is what this really says. The compiler can construct these offsets as it processes declarations for a class. Objects contain only data they do not contain any code. So, let us consider the cases one by one the first one is no inheritance. So, in other words there is a single class there is no inheritance and here is a very simple example class giant. So, it has phi, phi, phi and form. So, all the methods are actually not necessarily defined within this class, but here we are assuming that there is no inheritance. So, all these methods are actually defined within this class. So, they are not inherited from any other class. Then there is a static variable called n and then two integer instance variables x and y. So, the record for the class. So, this is called as the class record name of the class is giant. So, the giant class record it will have a field for the static variable and then it also has pointers to the code for each one of the methods that it has. So, form for phi and phi and phi of course, this nu is a is something that is available everywhere. So, because we need to create new objects of that particular class that is provided by the system. So, the object layout will have two fields x and y. So, here also you can see two fields x and y and there is a field which points to the class record. So, that is one of the other fields as well. So, it is very simple whenever there is a single class and there is an object let us say joe. So, if we say joe dot foe automatically the compiler can you know rather at run time we can the compiler would have generated code for the you know offset of this giant dot foe to be accessed and then the call to giant dot foe to be made appropriately. The offset is actually static it has been determined by the compiler because this is the method table that has constructed by the compiler. So, there is no resolution left you know for the run time at all. So, nothing is dynamically done it is all statically done the compiler simply has to take the address of the class record the beginning of the class record from the object. Then it knows the offset of the method foe and it adds that to the beginning of the class record then you know that pointer gives you the beginning of the code for the method foe and a call is made to that particular method. So, it is a fairly straight forward process as far as you know single class and no inheritance is concerned. What happens if we have inheritance the situation is slightly more complicated. So, again we have a similar diagram there is a super class called SC there is another derived class called MC and there is a third class called giant which is derived from MC. So, here is you know a super super class record to which all classes actually have a pointer. So, this contains some extra data and you know about methods and other variables etcetera which are required for maintaining the entire system. So, let us not worry too much about this part of it these are language specific details we need to worry about the method tables here. So, here we have a the method new is available in all the classes. So, there is a pointer to the code for method then the method foe is defined by SC. So, there is a pointer to foe the method from is also defined by SC. So, there is a pointer to the code for form there is a static variable and that is present in the class record itself. The super class pointer is set to null here for SC because there is no other super class above it whereas, for MC it points to SC. So, here also we have the complete you know method tables. So, MC defines of course, new is already provided by the system then we have fee and then we have foe all right. So, these are the only three which are provided by this particular class whereas, the form is provided by SC. Similarly, giant provides new which already available by the provided by the system it provides fee and it also provides phi rest are provided by foe as such. So, then there are variables x y and z for each of the objects which are of type giant and if there is an object of type MC then it would have only two fields x and y. So, let us see how to generate code for this type of inheritance hierarchy. The basic idea is very simple there is a class pointer class record pointer in each one of the objects then there is some space for the objects of the you know highest super class that is SC because the if you consider an object of the class which is at the lowest level of the hierarchy that is giant in our case then giant the any data object of type giant must accommodate data members of giant which are very specific to that particular class it derives from MC. So, it must provide for space for the data members of MC and MC in turn derives from SC. So, giant actually transitively derives from SC. So, the data members of SC must also be provided for by the object layout. So, there are several components in the object layout whenever there is inheritance they are for each one of the super classes in the hierarchy the data area some data area has to be set apart in the object layout of the object. So, every instance variable has the same offset in every class where it exists up in its super class. So, this becomes clear in the picture that I am going to show you now. So, let us not consider the method table for the present let us look at only the yellow part which is the data record. So, there is a class pointer then we have SC data these are the giant you know object data layouts. So, then there is SC data MC data and giant data. So, observe that SC data and MC data is also present in objects of type MC and then only SC data is present in objects of type SC. But the most important thing is the space that is provided for the SC data in the you know any object record of type class SC must match exactly with the SC data space that is provided in both objects of type MC and objects of type giant. So, that is a very important thing. So, if there are five variables let us say here there is only one if there are five variables in SC and they are listed in a particular order in the SC class record then rather SC object record then they must be listed exactly in the same order in the derived class objects as well that is MC objects and giant objects. The same is true for MC data when we look at object layouts of you know objects corresponding to class MC and class giant. This of course, will not have any information about MC because this is the super class and MC is the sub class. So, the space provided for MC data here and the MC data here must match the amount must match and the offsets must also match. So, the offset of the MC data area is this much this is the offset it must be the same offset here also and that is why the giant data members actually come at the end. If the giant data members were to be here then you know it would be really chaos whenever we call a method corresponding to class SC from an object of class or giant it would actually treat the first area as SC data. So, if we had giant class data here it would be incorrect data as far as that method is concerned. So, when a class you know the method tables also follow a similar sequence as above. So, and then there is another very important point before we move on to that picture when a class redefines a method defined in one of its super classes the method pointer for that method implementation must be stored at the same offset as the previous implementation of that method in the super class I am talking about complete method tables. So, let us understand what this really means. So, here is the method pointer table for the you know inheritance hierarchy here. So, consider the class record for class SC that is the one which stores the method tables. So, there is a class pointer of course, then the super class pointer there is a new pointer this would be common for all of these and then the pointer to fee and pointer to form. Now, what we really say fee is of course, redefined by the class MC and it is also redefined by the class giant, but the pointer to fee is now let us say the first second third fourth right in this class record it must be fourth in the class record for MC and it must be the fourth one in the class record for giant as well. So, it is so if it is not then you know it is not possible to statically say this is the correct place at which the pointer to the method fee exist. So, there must be some uniformity in these class records to store the appropriate method pointers. Then we have a fum pointer here fum pointer actually is implemented by the class SC and it is shared by classes MC and giant as well. So, the fum pointer is in the next one and it is actually in the same position as far as class record SC MC and giant are concerned. So, that is those are the only ones which are provided in class record SC. Now, between MC and giant again we have the pointer 4. So, pointer 4 must be in the same position as far as relative position as far as these two class records are concerned and then the five pointer of course, is at the end. So, in a nutshell all the information which is shared with the classes above should be prior to all the information that is provided specially in a particular class. So, phi for example, is a special method provided in the class giant it is not present in the super classes. So, that should come actually at the end. Suppose we do not store the entire method table right. So, in that case it really does not matter. So, we store only the corresponding methods which are changed or which are new, but whenever we provide for a common method across. So, we redefine phi in both MC and giant. So, it must be present in the at the same offset as far as all the three class records are concerned. But then fum is provided only in this, four only in this and phi only in this the rest are all shared. So, in this type of you know non shared rather incomplete method tables the class hierarchy search must be done from here to here. So, whenever there is a method name say for example, fum it is searched in this table it is not found then it goes to the super class searches in that table it is not found and then it goes to this it searches in this table it is found and then it is accessed and executed. So, if we store only the changed and extra methods then the class method tables become very compact, but unfortunately the space the time required to access the method increases. Whereas, if we actually store if we store the complete method tables then the space required to store the method tables increases, but the access to methods becomes much faster. So, this is the difference between the you know storing the complete method tables and storing only the changed or extra and extra method tables. The next important thing that we need to do is to understand how exactly type inclusion tests are out. So, first of all let us understand why type inclusion test is required at all. So, the need so here is a very simple example class y is a sub class of class x. So, let us assume that now there is a declaration x a equal to nu y. So, a is of type base class of y. So, the y is the sub class and x is the super class. So, x is above y and now we are actually declaring x a which is a an object of type super class and we point it to the sub class object nu y. So, that is the that is what this declaration says. Then there is a statement y b equal to a. So, b is an object of type y that is the sub class and now it points to a which is again of the same sub class y. So, that is not an issue both are correct. Now, because a even though it is a base class pointer it points to a derived class object which is permitted by the language and here b is a sub class object derived class object and now it is being assigned a derived class object again which is correct. So, this is correct, but the code below here this is wrong. So, instead of x a equal to nu y we said x a equal to nu x. So, now a points to a super class object now we say y b equal to a. So, whereas b is a sub class object. So, we really cannot make it point to a super class object it is always possible to make a sub super class pointer point to a sub class object, but making a sub class pointer point to a super class object is not permitted. But how does the compiler or the runtime system determine that these objects are of correct types the pointers are of correct types. This requires runtime type checking it is not possible to determine you know the types of b and a in general at compile time in all cases it is necessary to determine these types only at runtime. So, and secondly java has an explicit instance of test that requires runtime type checking. So, I can say instance of and given object and then it should return the class to which it belongs to. So, that is also something that is very important in the java language and its programs. So, if in all for all these reasons we will require methods to do type inclusion test at runtime. How does one do this simplest would be to store the class hierarchy itself. So, if you store the class hierarchy graph in memory. So, for example, this is a class hierarchy graph. So, this is the highest super class and all these are sub classes. So, this means single inheritance whereas, this is really multiple inheritance. So, if there is a single inheritance then you know I have a single parent. So, d has a parent b b has a parent a whereas, if there is multiple inheritance for example, consider e or c right e has two parents b and c. Similarly, c has two parents a and h and so on and so forth. So, multiple inheritance is always very difficult to manage. So, and we are not going to study this topic in our course this is meant for advanced study. So, if you have single inheritance how does type inclusion work. Suppose, I am given an object right then this is a class point and this node in the class hierarchy graph can be obtained through the class pointer that is not an issue at all. So, once I get the class pointer I can check its parent and its parent and so on and so forth. So, now class the type inclusion test can be performed if the question is e is d a sub class of a. We start from d go all the way to the root and in the path we get a then the answer is yes otherwise the answer is no. For example, for d and a we get the answer yes, but for d and e we do not get the answer as yes. So, because we reach a which is the highest super class, but we did not meet e on the way. So, that is why search and check if one node is an ancestor of the other and the traversal is quite straight forward to implement only for single inheritance. It is very cumbersome and slow for multiple inheritance because we need to check all paths execution time increases with depth of class hierarchy. So, for example, if we want to determine the type inclusion for b and c is b an instance of a is c an instance of a etcetera or is b an instance of c whatever the question is. If you want to do the inclusion test for nodes at this level then you know one hop is enough to determine whether the answer is yes or no. Whereas, for nodes at this level it requires two hops and for the node at this level it requires three hops to determine the answer. So, if you have deep hierarchy then the amount of time needed to determine type inclusion would be more. So, for the nodes which are at the lower level. Another way of storing information about the class hierarchy is to use a binary matrix. So, the matrix has columns which are named as the after the classes again it has rows which are again named after the classes. So, class types on this side and class types on this side as well and if we have say class c 3 and we want to check whether it is a descendant of class c 4 we just have to look up the entry b m of c 3 comma c 4. So, if the entry says 1 then yes indeed the answer is yes and if the entry is 0 then the answer is no. So, b m of c i comma c j equal to 1 if and only if c i is a sub class of c j. So, even the transitivity is taken care of here. So, it is not just one level, but all the levels of the hierarchy are coded as 1 or 0 inside this binary matrix. Tests are very efficient, but the matrix will be very large in practice right. So, we have this matrix which is quite large and the space required for the matrix once it is very large. Thus access method you know actually has to be cut down will be quite low, but to store very large matrices we actually use some compaction. So, if the matrix is compacted then you know b m accessing b m of c i comma c j is not going to be an over time access, but it will be much more than that. So, if the matrix is available in the form that is shown here then accessing it is very easy, but if it is coded then you know access time also increases of course, this major advantage of this matrix approach is that it can handle multiple inheritance as well. Whereas, searching the class hierarchy using the tree or the graph was much more difficult. There is also another very elegant method which works only for single inheritance and extensions to handle multiple inheritance are very difficult very complicated. This is called relative or Schubert's numbering. So, basically we are given the class hierarchy that is at compile time. So, we do not have to store the class hierarchy at run time if we have to then the method has no advantage. So, let us assume that there is single inheritance and the class hierarchy tree is given to us. So, here is the class hierarchy tree. Now, we do a post order numbering of the nodes of the class hierarchy tree. So, the second component in each one of these pairs is the post order numbering. So, obviously, post order walk over this tree goes to starts with d. So, this gets 1 then it goes to the parent it gets 2 then it goes to the parent which has a right child. So, we go down the right subtree all the way to g that gets a number 3 then the this e gets number 4 and then we go to c and go down the right subtree that gets number 5 then c gets number 6 and a gets number 7. So, this is the first step as far as you know this relative numbering goes. Now, we need to determine the first component. So, second component is already determined this is the r d m l number of the node a in a post order traversal of the tree. So, what is the first component l a. So, to define that we must define this relation called sub type of. So, let this angle you know this bracket with an underscore denote the sub type of relation. So, all descendants of a node are sub types of that node. So, obviously, that is true for a inheritance tree anyway. So, this sub type of relation obviously, is reflexive and transitive that is very easy to see you know. So, we have d is a sub type of b and b is a sub type of a. So, d is obviously, a sub type of a and every node is a sub type of itself. So, reflexive and transitive properties are true.  So, if I consider a node such as a then we look at the post order numberings of each of the nodes find out the minimum. So, in this case obviously, one is the minimum. So, one happens to be l a of this particular node. The same is true for b it is among its descendants one is the minimum. So, one is a is the you know the first component of this as well. Obviously, the one is first component first the component of d as well. When we come to see the minimum happens to be 3 again. So, 3 is the first component of this node this node and this node and for this node this is on its own. So, 5 is the only thing that appears. So, 5 is the first component of this node. Now, the test says a is a sub type of b if and only if r a is between l b and r b. So, if I take the post order numbering of the node a it must be located between l b and r b of node b that is what it says. So, let us check it out let us check it out for d and b. So, the post order numbering of d is 1 this is between 1 and 2 perfectly correct.  Now, let us consider b and e. So, e is a sub type of b the sub the you know post order numbering of e is 4 it is obviously, not between 1 and 2. So, e is definitely not a sub type of b and e is b a sub type of e that is also not true because the post order numbering of b is 2 and it is definitely not between 3 and 4. So, that is also false. So, this is a very simple check once we have at compile time once we have the inheritance tree we do the post order walk compute the second component then you know we compute the minimum and compute the first component. So, now the entire tree is decorated we can store the numbers these Schubert numbers or relative numbers of each one of the nodes along with their class pointers. So, that is very easy. So, given the class pointer you know we we access the relative number and then determine whether this relation l you know rather this inequality holds l b less than equal to r a less than equal to r b. So, this is a an order 1 computation very fast, but is and of course, remember that this is if and only if. So, if this holds then a sub type holds and if this is sub type then this inequality holds this holds only for works only for single inheritance, but that is what we are really studying today. So, that is you know that is about type inclusion. Let us look at one optimization which is performed on object oriented languages which is a fairly straight forward, but very important optimization. This is called d virtualization and it can be performed using what is known as class hierarchy analysis. Basically it reduces the overhead of virtual method invocation and statically determines which virtual method calls can result to a single method. So, search calls are either in lined or replaced by static calls. So, basically we want to avoid searching the method tables at run time, but this can be done only in certain number of cases not all cases. Whenever we can do it we we know the target we replace the method search, method table search you know which can be avoided and we replace that by a static call an ordinary procedure call. Of course, this requires a class hierarchy and a call graph let me show you an example of how to do that. Here is a small program here is class x that extends the object in java. So, here is object then x is derived from it it has two methods f 1 and f 2. Then y is derived from x and it has a it redefines the method f 1. Then again z you know inherits from x and it redefines the method f 1 as well. Now, within the class z there is a main program. So, that is this z dot main z dot main has three calls a dot f 1 b dot f 1 and b dot f 2. So, here for example, x a equal to nu x y b equal to nu y and z c equal to nu z. So, if something then a equal to c right. So, a is actually an object of type class x and c is actually a an object of type class z now we say a equal to c. So, now a can point to either a type z node or z z object or it can point to you know a type x object either one of them. So, that is the difference. So, if we do not know to which one of these it points to we may not be able to determine statically the method that is actually executed from a and that is precisely what happens here. So, we call a dot f 1. So, when we do this if it was pointing to an object of type x then it would be x dot f 1, but if that was pointing to an object of type z then it would have been z dot f 1. So, the call graph points to you know a dot f 1 points to both x dot f 1 and z dot f 1 and there is no way you can actually resolve this call at compile time, but if you take b dot f 1 it always points to only y dot f 1 rather it call the call is always y dot f 1 not points to. So, there is no change in what b points to similarly b dot f 2 is always x dot f 2, because b does you know this class y and class z do not define their own f 2 it is always in x. So, b dot f 1 can be you know the there is no need to search any method tables here it can be directly coded as y dot f 1 and b dot f 2 can also be coded directly as x dot f 2. So, these become static calls whereas, a dot f 1 cannot be resolved at compile time one has to generate code to check the type of a. If the type of a is x then the call materializes as x dot f 1 and if the type of a is z then the call would be translated to z dot f 1. So, this runtime resolution will be definitely necessary in certain cases not in all cases and whenever we can resolve the call to a static call we can do that. So, that is about our I mean object oriented language implementation now let us move on to a new topic global register allocation. So, in global register allocation we must understand why we require global register allocation what are the various issues define the problem properly. And then we study three methods of doing global register allocation and it is in the increasing order of complexity first one is based on what are known as usage counts. The second one is known as a linear scan register allocator and third one is based on graph coloring. Let us understand the issues in register allocation the question to be asked is which values in a program reside in registers. So, now we are looking at register location as such there may be 10 variables 10 values available I know which are used in the program when the program runs which of these values must reside in registers otherwise obviously, it would reside in memory. So, to make an intelligent decision about this the of course, the best answer would be take those variables which are accessed you know very frequently and maximum number of times and then make sure that the you know the run time of the program the execution time of the program is minimized when we place these values in registers that is the correct way of doing it. But can we actually do all this assessment at compile time and make the allocation so that the execution time is minimized not necessarily the reason is allocation of registers is a very complicated task we can only do it in an approximate way the problem in general is NP complete. Then the second question to be answered is in which register so this is called as the register assignment problem. So, usually the two are loosely referred to as register location because in modern architectures the except for one or two registers all other registers can be used interchangeably. If there are very special purpose registers then this problem becomes more difficult what is the unit at which you know register location is done. For example, if it is a local register locator then it does register location at the level of basic blocks whereas, if it is a global register locator then it does it at the level of a function or it does it at the level of a group of functions called regions. Or of course, it could also be a group of basic blocks in a program and that would be a loop or a nested loop or something like that register location within basic blocks is called local register location and other two are called as global register locations. Now, global register location obviously requires much more time than local register location and all register locations are actually carried out at compile time of course, there are you know exceptions to this we will see that very soon. Now, phase ordering between register location and instruction scheduling is a well known problem instruction scheduling is nothing but reordering of instructions. So, that a pipeline hazards are eliminated. So, if we do register location first then the movement of code during instruction scheduling is restricted. So, this is not you know recommended whereas, if we you know schedule instructions first then during register location we may have to introduce extra code called spill code and that would not be scheduled at all. So, what we do as a practical in practical situations is do scheduling first then do register location and then require do scheduling again. So, to handle this spill code. So, two passes of scheduling would be done. Now, there is a trade off between speed and quality of allocation as well even at whether it is compile time or whether it is run time. So, let us see what happens. So, in some cases for example, in the case of just in time compilation of java compile time is actually you know limited to producing the java byte code, but during the execution of the java byte code there is a phase of machine code generation which is called just in time compilation which is performed to increase the speed of that code. So, in such a case if we perform a very complicated register location task within the just in time compiler it would really require too much time you know. So, performing a very complicated register location in just in time compilation you cannot be justified in such cases that is the first issue. Second issue is should we perform both local and global location yes that is possible we could actually do global allocation first and then perform local allocation. Now, let us define the problem of register location and see what it really means. So, global register allocation assumes that allocation is done beyond basic blocks and usually at the function level and the problem is you are given an intermediate language program. It is represented as a control flow graph you are given you know k registers as well. So, that is the number of registers available is there an assignment of registers to program variables such that no conflicting variables are assigned the same register. In other words two variables which actually are live at the same time should not be given the same register. Of course, there must be no extra loads or stores introduced because of this assignment and at most k registers are used you could use less than k registers, but you cannot definitely use more than k registers. So, this problem so that is again let me summarize you are given k registers there are many variables in the program. So, what the can be is there an assignment of program variables such that no conflicting variables are assigned the same register and we do not use more than k registers at that time any point in time. So, this problem has been shown to be NP hard by Ravi Seti and we use a very popular heuristic called graph coloring to solve this problem, but there are other many other simpler algorithms as well. So, the difficulty here is if there are a very large number of registers then you know the it is possible to assign variables to registers very easily. The problem starts when there are very few registers and we have to intelligently assign variables to the registers. So, some of the registers some of the variables cannot be assigned registers. So, they will have to remain in memory. So, that is the basic problem here graph coloring is used as a popular heuristic to perform this allocation. So, in graph coloring to very briefly the colors are the registers we construct what is known as a conflict graph and then apply reduction on the conflict graph to achieve coloring. So, we will stop at this point and continue with the discussion on graph coloring in the next lecture. Thank you.