public inbox for frysk-cvs@sourceware.org
help / color / mirror / Atom feed
From: swagiaal@sourceware.org
To: frysk-cvs@sourceware.org
Subject: [SCM]  master: swagiaal: Break points and List command now use ObjectDeclaration.
Date: Mon, 21 Apr 2008 20:50:00 -0000	[thread overview]
Message-ID: <20080421205047.6838.qmail@sourceware.org> (raw)

The branch, master has been updated
       via  25c50d7c90d78aeb0260139293eeab2b8d1eec5c (commit)
      from  c9b6156e7b4d4ab4ccb29024e22625901595c15b (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email.

- Log -----------------------------------------------------------------
commit 25c50d7c90d78aeb0260139293eeab2b8d1eec5c
Author: Sami Wagiaalla <swagiaal@redhat.com>
Date:   Mon Apr 21 16:50:29 2008 -0400

    swagiaal: Break points and List command now use ObjectDeclaration.
    
    frysk-core/frysk/debuginfo/ChangeLog
    +2008-04-21  Sami Wagiaalla  <swagiaal@redhat.com>
    +
    +	* ObjectDeclarationSearchEngine.java(getSymbolDie): now
    +	returns ObjectDeclaration.
    +
    
    frysk-core/frysk/hpd/ChangeLog
    +2008-04-21  Sami Wagiaalla  <swagiaal@redhat.com>
    +
    +	* BreakpointCommand.java: Now understands ObjectDeclaration.
    +	* ListCommand.java: Ditto.
    +
    
    frysk-core/frysk/rt/ChangeLog
    +2008-04-21  Sami Wagiaalla  <swagiaal@redhat.com>
    +
    +	* FunctionBreakpoint.java: Now uses ObjectDeclaration.
    +	* BreakpointManager.java: Ditto.
    +
    
    frysk-core/frysk/scopes/ChangeLog
    +2008-04-21  Sami Wagiaalla  <swagiaal@redhat.com>
    +
    +	* ConcreteInlinedFunction.java: New class.
    +	* TestScopeFactory.java: Test handling of concrete inlined
    +	instances.
    +	* ScopeFactory.java: Handle concrete inlined instances.
    +	* OutOfLineFunction.java: implemented BreakPointLocation interface.
    +	* InlinedSubroutine.java: implemented getInlinedInstances().
    +
    
    frysk-core/frysk/value/ChangeLog
    +2008-04-21  Sami Wagiaalla  <swagiaal@redhat.com>
    +
    +	* BreakPointLocation.java: New interface.
    +
    
    frysk-sys/lib/dwfl/ChangeLog
    +2008-04-21  Sami Wagiaalla  <swagiaal@redhat.com>
    +
    +	* DwarfDie.java: wrapped getEntryPC()
    +

-----------------------------------------------------------------------

Summary of changes:
 frysk-core/frysk/debuginfo/ChangeLog               |    5 ++
 .../debuginfo/ObjectDeclarationSearchEngine.java   |   30 +++++++--
 frysk-core/frysk/hpd/BreakpointCommand.java        |    4 +-
 frysk-core/frysk/hpd/ChangeLog                     |    5 ++
 frysk-core/frysk/hpd/ListCommand.java              |   71 +++++++++++---------
 frysk-core/frysk/rt/BreakpointManager.java         |    5 +-
 frysk-core/frysk/rt/ChangeLog                      |    5 ++
 frysk-core/frysk/rt/FunctionBreakpoint.java        |   36 ++++++++++
 frysk-core/frysk/scopes/ChangeLog                  |    9 +++
 ...ubroutine.java => ConcreteInlinedFunction.java} |   10 ++-
 frysk-core/frysk/scopes/Function.java              |   20 +++---
 frysk-core/frysk/scopes/InlinedSubroutine.java     |   15 ++++
 frysk-core/frysk/scopes/OutOfLineFunction.java     |   13 +++-
 frysk-core/frysk/scopes/ScopeFactory.java          |   16 +++--
 frysk-core/frysk/scopes/TestScopeFactory.java      |   14 +++-
 .../BreakPointLocation.java}                       |   12 +---
 frysk-core/frysk/value/ChangeLog                   |    4 +
 frysk-sys/lib/dwfl/ChangeLog                       |    4 +
 frysk-sys/lib/dwfl/DwarfDie.java                   |    7 ++
 19 files changed, 206 insertions(+), 79 deletions(-)
 copy frysk-core/frysk/scopes/{InlinedSubroutine.java => ConcreteInlinedFunction.java} (88%)
 copy frysk-core/frysk/{scopes/InlinedSubroutine.java => value/BreakPointLocation.java} (89%)

First 500 lines of diff:
diff --git a/frysk-core/frysk/debuginfo/ChangeLog b/frysk-core/frysk/debuginfo/ChangeLog
index 9858055..54398b0 100644
--- a/frysk-core/frysk/debuginfo/ChangeLog
+++ b/frysk-core/frysk/debuginfo/ChangeLog
@@ -1,3 +1,8 @@
+2008-04-21  Sami Wagiaalla  <swagiaal@redhat.com>
+
+	* ObjectDeclarationSearchEngine.java(getSymbolDie): now
+	returns ObjectDeclaration.  
+	
 2008-04-18  Mark Wielaard  <mwielaard@redhat.com>
 
 	* TestDebugInfoStackTrace.java (testBacktrace): Resolved bug #4468.
diff --git a/frysk-core/frysk/debuginfo/ObjectDeclarationSearchEngine.java b/frysk-core/frysk/debuginfo/ObjectDeclarationSearchEngine.java
index e1524cf..5eaa273 100644
--- a/frysk-core/frysk/debuginfo/ObjectDeclarationSearchEngine.java
+++ b/frysk-core/frysk/debuginfo/ObjectDeclarationSearchEngine.java
@@ -63,6 +63,8 @@ import frysk.isa.registers.Registers;
 import frysk.isa.registers.RegistersFactory;
 import frysk.proc.Task;
 import frysk.scopes.Scope;
+import frysk.scopes.ScopeFactory;
+import frysk.scopes.Variable;
 import frysk.symtab.SymbolObjectDeclaration;
 import frysk.value.ObjectDeclaration;
 import frysk.value.Value;
@@ -93,15 +95,31 @@ public class ObjectDeclarationSearchEngine implements ExprSymTab{
      * - return ObjectDeclaration
      * ...   
      */
-    public DwarfDie getSymbolDie(String input) {
+    public ObjectDeclaration getSymbolDie(String name) {
+	
+	ObjectDeclaration result;
+	
 	Elf elf = new Elf(new File(task.getProc().getExeFile().getSysRootedPath()), ElfCommand.ELF_C_READ);
 	Dwarf dwarf = new Dwarf(elf, DwarfCommand.READ, null);
 	
-	DwarfDie result = DwarfDie.getDecl(dwarf, input);
-	if (result == null)
-	    throw new RuntimeException("symbol " + input + " not found.");
-	else
-	    return result;
+	DwarfDie resultDie = DwarfDie.getDecl(dwarf, name);
+	TypeFactory typeFactory = new TypeFactory(task.getISA());
+	
+	if (resultDie == null)
+	    throw new RuntimeException("symbol " + name + " not found.");
+	
+	
+	try {
+	    result =  (ObjectDeclaration) ScopeFactory.theFactory.getScope(resultDie, typeFactory);
+	} catch (IllegalArgumentException e) {
+	    try {
+		result = new Variable(resultDie);
+	    } catch (Exception e2) { 
+		throw new ObjectDeclarationNotFoundException(name);
+	    }
+	}
+	
+	return (ObjectDeclaration)result;
     }
  
     /**
diff --git a/frysk-core/frysk/hpd/BreakpointCommand.java b/frysk-core/frysk/hpd/BreakpointCommand.java
index f364fbb..efe1ee0 100644
--- a/frysk-core/frysk/hpd/BreakpointCommand.java
+++ b/frysk-core/frysk/hpd/BreakpointCommand.java
@@ -45,7 +45,6 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
-import lib.dwfl.DwarfDie;
 import frysk.debuginfo.DebugInfoFrame;
 import frysk.debuginfo.DebugInfoStackFactory;
 import frysk.debuginfo.ObjectDeclarationSearchEngine;
@@ -57,6 +56,7 @@ import frysk.rt.FunctionBreakpoint;
 import frysk.rt.LineBreakpoint;
 import frysk.rt.SourceBreakpoint;
 import frysk.rt.SourceBreakpointObserver;
+import frysk.value.ObjectDeclaration;
 
 class BreakpointCommand extends ParameterizedCommand {
 
@@ -145,7 +145,7 @@ class BreakpointCommand extends ParameterizedCommand {
 		ObjectDeclarationSearchEngine declarationSearchEngine = new ObjectDeclarationSearchEngine(frame);
 		
 		if (declarationSearchEngine != null) {
-		    DwarfDie die;
+		    ObjectDeclaration die;
 		    try {
 			die = declarationSearchEngine.getSymbolDie(breakpt);
 		    } catch (RuntimeException e) {
diff --git a/frysk-core/frysk/hpd/ChangeLog b/frysk-core/frysk/hpd/ChangeLog
index 5a769e9..bf0caf2 100644
--- a/frysk-core/frysk/hpd/ChangeLog
+++ b/frysk-core/frysk/hpd/ChangeLog
@@ -1,3 +1,8 @@
+2008-04-21  Sami Wagiaalla  <swagiaal@redhat.com>
+
+	* BreakpointCommand.java: Now understands ObjectDeclaration.
+	* ListCommand.java: Ditto.
+
 2008-04-18  Mark Wielaard  <mwielaard@redhat.com>
 
 	* TestEvalCommands.java (testPrintLocationFails): Enable test
diff --git a/frysk-core/frysk/hpd/ListCommand.java b/frysk-core/frysk/hpd/ListCommand.java
index 79b5fd5..5e54527 100644
--- a/frysk-core/frysk/hpd/ListCommand.java
+++ b/frysk-core/frysk/hpd/ListCommand.java
@@ -40,23 +40,22 @@
 package frysk.hpd;
 
 import java.io.File;
-import java.util.List;
 import java.io.FileReader;
 import java.io.IOException;
 import java.io.LineNumberReader;
-
-import frysk.scopes.SourceLocation;
-
 import java.util.Iterator;
-import lib.dwfl.DwarfDie;
-import lib.dwfl.DwTag; 
+import java.util.List;
+
 import lib.dwfl.DwflLine;
 import frysk.debuginfo.DebugInfoFrame;
+import frysk.debuginfo.ObjectDeclarationNotFoundException;
 import frysk.debuginfo.ObjectDeclarationSearchEngine;
 import frysk.dwfl.DwflCache;
+import frysk.proc.Task;
+import frysk.scopes.Function;
+import frysk.scopes.SourceLocation;
 import frysk.sysroot.SysRoot;
 import frysk.sysroot.SysRootCache;
-import frysk.proc.Task;
 
 /**
  * Implement the "list" source command.
@@ -208,33 +207,39 @@ class ListCommand extends ParameterizedCommand {
 
 	if ((cmdParm).compareTo("$EXEC") == 0)
 	    return frame.getLine().getLine();
-	else {
-	    DwarfDie funcDie = null;
-	    
-	    ObjectDeclarationSearchEngine declarationSearchEngine = new ObjectDeclarationSearchEngine(frame);
-		
-	    if (declarationSearchEngine != null) {
-		funcDie = declarationSearchEngine
-		.getSymbolDie(cmdParm);
-	    }
-	    if (funcDie.getTag().hashCode() == DwTag.SUBPROGRAM_) {
-		DwflLine dwflLine = DwflCache.getDwfl(frame.getTask())
-		.getSourceLine(frame.getAdjustedAddress());
-		if (dwflLine != null) {
-		    SysRoot sysRoot = new SysRoot(SysRootCache.getSysRoot(frame.getTask()));
-		    file = sysRoot.getSourcePathViaSysRoot
-		    (new File(dwflLine.getCompilationDir()),
-			    funcDie.getDeclFile()).getSysRootedFile();
-		}
-		else
-		    file = funcDie.getDeclFile();
-		return (int)funcDie.getDeclLine();
-	    }
-	    else {
-		cli.addMessage("function " + cmdParm + " not found.",
-			Message.TYPE_ERROR);
-		return line;
+
+	Function function = null;
+
+	ObjectDeclarationSearchEngine declarationSearchEngine = new ObjectDeclarationSearchEngine(frame);
+
+	try {
+	    function = (Function) declarationSearchEngine.getSymbolDie(cmdParm);
+	} catch (ObjectDeclarationNotFoundException e) {
+	    function  = null;
+	}catch (ClassCastException e) {
+	    function  = null;
+	}
+	
+	if (function != null ) {
+	    DwflLine dwflLine = DwflCache.getDwfl(frame.getTask())
+		    .getSourceLine(frame.getAdjustedAddress());
+	    if (dwflLine != null) {
+		SysRoot sysRoot = new SysRoot(SysRootCache.getSysRoot(frame
+			.getTask()));
+		file = sysRoot.getSourcePathViaSysRoot(
+			new File(dwflLine.getCompilationDir()),
+			function.getSourceLocation().getFile())
+			.getSysRootedFile();
+	    } else {
+		file = function.getSourceLocation().getFile();
 	    }
+	    return (int) function.getSourceLocation().getLine();
+
+	} else {
+	    cli.addMessage("function " + cmdParm + " not found.",
+		    Message.TYPE_ERROR);
+	    return line;
+
 	}
     }
 }
diff --git a/frysk-core/frysk/rt/BreakpointManager.java b/frysk-core/frysk/rt/BreakpointManager.java
index bf4233d..8582d3c 100644
--- a/frysk-core/frysk/rt/BreakpointManager.java
+++ b/frysk-core/frysk/rt/BreakpointManager.java
@@ -58,8 +58,7 @@ import frysk.symtab.DwflSymbol;
 import frysk.symtab.PLTEntry;
 import frysk.symtab.SymbolFactory;
 import frysk.util.CountDownLatch;
-
-import lib.dwfl.DwarfDie;
+import frysk.value.ObjectDeclaration;
 
 /**
  * Class for managing user breakpoints. In particular it defers
@@ -197,7 +196,7 @@ public class BreakpointManager extends Observable {
      * performed.
      * @return FunctionBreakpoint object
      */
-    public FunctionBreakpoint addFunctionBreakpoint(String name, DwarfDie die) {
+    public FunctionBreakpoint addFunctionBreakpoint(String name, ObjectDeclaration die) {
 	FunctionBreakpoint sourceBreakpoint =
 	    new FunctionBreakpoint(CountManager.getNextId(), name, die);
 	addBreakpoint(sourceBreakpoint);
diff --git a/frysk-core/frysk/rt/ChangeLog b/frysk-core/frysk/rt/ChangeLog
index 5f2319f..fe65348 100644
--- a/frysk-core/frysk/rt/ChangeLog
+++ b/frysk-core/frysk/rt/ChangeLog
@@ -1,3 +1,8 @@
+2008-04-21  Sami Wagiaalla  <swagiaal@redhat.com>
+
+	* FunctionBreakpoint.java: Now uses ObjectDeclaration.
+	* BreakpointManager.java: Ditto.
+
 2008-04-16  Andrew Cagney  <cagney@redhat.com>
 
 	* LineBreakpoint.java (LineBreakpoint(int,File,int,int)): New.
diff --git a/frysk-core/frysk/rt/FunctionBreakpoint.java b/frysk-core/frysk/rt/FunctionBreakpoint.java
index ca3fd44..84198a2 100644
--- a/frysk-core/frysk/rt/FunctionBreakpoint.java
+++ b/frysk-core/frysk/rt/FunctionBreakpoint.java
@@ -42,13 +42,18 @@ package frysk.rt;
 
 import java.io.PrintWriter;
 import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.ListIterator;
 
 import lib.dwfl.DwarfDie;
 import lib.dwfl.die.InlinedSubroutine;
 import frysk.proc.Task;
+import frysk.scopes.ConcreteInlinedFunction;
+import frysk.scopes.Function;
+import frysk.scopes.OutOfLineFunction;
 import frysk.symtab.SymbolFactory;
+import frysk.value.ObjectDeclaration;
 
 public class FunctionBreakpoint
   extends SourceBreakpoint {
@@ -56,6 +61,7 @@ public class FunctionBreakpoint
     protected final DwarfDie die;
 
     private boolean containsInlineInstances = false;
+    private Function function;
 
     /**
      * Set a breakpoint based on a DwarfDie or just a name.
@@ -66,7 +72,37 @@ public class FunctionBreakpoint
         this.die = die;
     }
 
+    public FunctionBreakpoint(int id, String name, ObjectDeclaration function) {
+        super(id);
+        this.name = name;
+        this.function = (Function) function;
+        this.die = null;
+    }
+
     public LinkedList getBreakpointRawAddresses(Task task) {
+	
+	if (function != null) {
+	    if (function instanceof OutOfLineFunction) {
+		long address = ((OutOfLineFunction) function).getBreakPointAddress();
+		LinkedList addrs = new LinkedList();
+		addrs.add(new Long(address));
+		return addrs;
+	    }
+	    
+	    if (function instanceof frysk.scopes.InlinedSubroutine) {
+		LinkedList inlinedInstances = ((frysk.scopes.InlinedSubroutine)function).getInlinedInstances();
+		Iterator iterator = inlinedInstances.iterator();
+		LinkedList addrs = new LinkedList();
+		while (iterator.hasNext()) {
+		    ConcreteInlinedFunction concreteInlinedFunction = (ConcreteInlinedFunction) iterator.next();
+		    addrs.add(new Long(concreteInlinedFunction.getBreakPointAddress()));
+		}
+		return addrs;
+	    }
+	    
+	    
+	}
+	
 	if (die != null) {
 	    ArrayList entryAddrs = die.getEntryBreakpoints();
 	    ArrayList inlineDies = null;
diff --git a/frysk-core/frysk/scopes/ChangeLog b/frysk-core/frysk/scopes/ChangeLog
index 0d06053..98d86cb 100644
--- a/frysk-core/frysk/scopes/ChangeLog
+++ b/frysk-core/frysk/scopes/ChangeLog
@@ -1,3 +1,12 @@
+2008-04-21  Sami Wagiaalla  <swagiaal@redhat.com>
+
+	* ConcreteInlinedFunction.java: New class.
+	* TestScopeFactory.java: Test handling of concrete inlined
+	instances.
+	* ScopeFactory.java: Handle concrete inlined instances.
+	* OutOfLineFunction.java: implemented BreakPointLocation interface.
+	* InlinedSubroutine.java: implemented getInlinedInstances().
+
 2008-04-16  Andrew Cagney  <cagney@redhat.com>
 
 	* TestDie.java: Use frysk.config.Prefix.
diff --git a/frysk-core/frysk/scopes/InlinedSubroutine.java b/frysk-core/frysk/scopes/ConcreteInlinedFunction.java
similarity index 88%
copy from frysk-core/frysk/scopes/InlinedSubroutine.java
copy to frysk-core/frysk/scopes/ConcreteInlinedFunction.java
index 0b0086f..c3e350c 100644
--- a/frysk-core/frysk/scopes/InlinedSubroutine.java
+++ b/frysk-core/frysk/scopes/ConcreteInlinedFunction.java
@@ -41,11 +41,17 @@ package frysk.scopes;
 
 import lib.dwfl.DwarfDie;
 import frysk.debuginfo.TypeFactory;
+import frysk.value.BreakPointLocation;
 
-public class InlinedSubroutine extends Function{
+public class ConcreteInlinedFunction extends InlinedSubroutine implements BreakPointLocation{
 
-    public InlinedSubroutine(DwarfDie die, TypeFactory typeFactory) {
+    public ConcreteInlinedFunction(DwarfDie die, TypeFactory typeFactory) {
 	super(die, typeFactory);
     }
 
+    public long getBreakPointAddress() {
+	return getDie().getLowPC();
+    }
+
+    
 }
diff --git a/frysk-core/frysk/scopes/Function.java b/frysk-core/frysk/scopes/Function.java
index 39c9036..89c225f 100644
--- a/frysk-core/frysk/scopes/Function.java
+++ b/frysk-core/frysk/scopes/Function.java
@@ -170,17 +170,20 @@ public class Function extends NamedScope {
      * - a regular funciton which has been inlined by the compiler
      */
     public boolean isInlined(){
+	
 	DwTag dwTag = getDie().getTag();
-	long inlineAttribute = getDie().getAttrConstant(DwAt.INLINE);
 	
-	// Declared inlined and inlined by compiler
-	if(dwTag.equals(DwTag.INLINED_SUBROUTINE) && inlineAttribute == DwInl.DECLARED_INLINED_){
+	// Concrete inlined instance
+	if(dwTag.equals(DwTag.INLINED_SUBROUTINE)){
 	    return true;
 	}
 	
-	// Declared inlined and inlined by compiler... but has INLINED attribute instead
-	// of DECLARED_INLINED_
-	if(dwTag.equals(DwTag.INLINED_SUBROUTINE) && inlineAttribute == DwInl.INLINED_){
+	long inlineAttribute = getDie().getAttrConstant(DwAt.INLINE);
+	
+	// Declared inlined and inlined by compiler
+	// but has DW_TAG_SUBPROGRAM
+	// this is an abstract instance of an inlineable function  
+	if(dwTag.equals(DwTag.SUBPROGRAM) && inlineAttribute == DwInl.DECLARED_INLINED_){
 	    return true;
 	}
 	
@@ -189,11 +192,6 @@ public class Function extends NamedScope {
 	    return true;
 	}
 	
-	// Declared inlined and not inlined by compiler
-	if(dwTag.equals(DwTag.INLINED_SUBROUTINE) && inlineAttribute == DwInl.DECLARED_NOT_INLINED_){
-	    return false;
-	}
-	
 	// Declared regular and not inlined by compiler
 	if(dwTag.equals(DwTag.SUBPROGRAM) && inlineAttribute == DwInl.NOT_INLINED_){
 	    return false;
diff --git a/frysk-core/frysk/scopes/InlinedSubroutine.java b/frysk-core/frysk/scopes/InlinedSubroutine.java
index 0b0086f..149af91 100644
--- a/frysk-core/frysk/scopes/InlinedSubroutine.java
+++ b/frysk-core/frysk/scopes/InlinedSubroutine.java
@@ -39,6 +39,10 @@
 
 package frysk.scopes;
 
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.LinkedList;
+
 import lib.dwfl.DwarfDie;
 import frysk.debuginfo.TypeFactory;
 
@@ -48,4 +52,15 @@ public class InlinedSubroutine extends Function{
 	super(die, typeFactory);
     }
 
+    public LinkedList getInlinedInstances(){
+	LinkedList inlinedInstances = new LinkedList();
+	
+	ArrayList arrayList = getDie().getInlinedInstances();
+	Iterator iterator = arrayList.iterator();
+	while (iterator.hasNext()) {
+	    DwarfDie die = (DwarfDie) iterator.next();
+	    inlinedInstances.add(ScopeFactory.theFactory.getScope(die, typeFactory));
+	}
+	return inlinedInstances;
+    }
 }
diff --git a/frysk-core/frysk/scopes/OutOfLineFunction.java b/frysk-core/frysk/scopes/OutOfLineFunction.java
index 6c76dc6..4b71275 100644
--- a/frysk-core/frysk/scopes/OutOfLineFunction.java
+++ b/frysk-core/frysk/scopes/OutOfLineFunction.java
@@ -45,15 +45,24 @@ package frysk.scopes;
 
 import lib.dwfl.DwarfDie;
 import frysk.debuginfo.TypeFactory;
+import frysk.value.BreakPointLocation;
 
 /**
- * A Subprogram refers to a concrete (not inlined) instance of a function.
+ * This refers to a concrete (not inlined) instance of a function.
  */
-public class OutOfLineFunction extends Function
+public class OutOfLineFunction extends Function implements BreakPointLocation
 {
 
+    DwarfDie die;
+    
     public OutOfLineFunction(DwarfDie die, TypeFactory typeFactory) {
 	super(die, typeFactory);
+	this.die = die;
+    }
+
+    public long getBreakPointAddress() {
+//	return die.getEntryPc();
+	return ((Long)die.getEntryBreakpoints().get(0)).longValue();
     }
 
 }
diff --git a/frysk-core/frysk/scopes/ScopeFactory.java b/frysk-core/frysk/scopes/ScopeFactory.java
index 4cd54e0..b8750a2 100644
--- a/frysk-core/frysk/scopes/ScopeFactory.java
+++ b/frysk-core/frysk/scopes/ScopeFactory.java
@@ -63,26 +63,28 @@ public class ScopeFactory {
 	// the die that is constant.
 	// Or DwarfDieFactory should prevent creation of
 	// redundant Die objects
- 	Scope scope = (Scope) scopes.get(die);
-	
+
+	Object key = die;
+	Scope scope = (Scope) scopes.get(key);
 	if (scope == null) {
 	    scope = createScope(die, typeFactory);
-	    this.scopes.put(die, scope);
+	    this.scopes.put(key, scope);
 	}
 	return scope;
     }
 
     private Scope createScope(DwarfDie die, TypeFactory typeFactory) {
-
+	
 	switch (die.getTag().hashCode()) {
 	
 	case DwTag.INLINED_SUBROUTINE_:
+	    return new ConcreteInlinedFunction(die, typeFactory);
 	case DwTag.SUBPROGRAM_:
-	    OutOfLineFunction subprogram = new OutOfLineFunction(die, typeFactory);
-	    if(subprogram.isInlined()){
+	    Function function = new Function(die, typeFactory);
+	    if(function.isInlined()){
 		return new InlinedSubroutine(die,typeFactory);
 	    }
-	    return subprogram;
+	    return new OutOfLineFunction(die,typeFactory);
 	case DwTag.LEXICAL_BLOCK_:
 	    return new LexicalBlock(die, typeFactory);
 	case DwTag.COMPILE_UNIT_:


hooks/post-receive
--
frysk system monitor/debugger


                 reply	other threads:[~2008-04-21 20:50 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20080421205047.6838.qmail@sourceware.org \
    --to=swagiaal@sourceware.org \
    --cc=frysk-cvs@sourceware.org \
    --cc=frysk@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).