public inbox for frysk-cvs@sourceware.org
help / color / mirror / Atom feed
* [SCM]  master: Allow for "this" return and parameter values.
@ 2008-04-30 14:31 scox
  0 siblings, 0 replies; only message in thread
From: scox @ 2008-04-30 14:31 UTC (permalink / raw)
  To: frysk-cvs

The branch, master has been updated
       via  a59ea0b8b7085297913ab65143244b6226ed5530 (commit)
      from  3bb4b28cd96c352cb0a082348952649e00a94c01 (commit)

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

- Log -----------------------------------------------------------------
commit a59ea0b8b7085297913ab65143244b6226ed5530
Author: Stan Cox <scox@redhat.com>
Date:   Wed Apr 30 10:25:50 2008 -0400

    Allow for "this" return and parameter values.
    
    * TypeFactory.java (getGccStructOrClassType): Set dieHash.
    (getClassType): Likewise.
    (getUnionType): Likewise.
    (getType): Set "this" reference from dieHash.
    * Type.java (toPrintBrief): New.
    * PointerType.java (toPrintBrief): New.
    * CompositeType.java (toPrintBrief): New.
    * TypeDecorator.java (toPrintBrief): New.
    * FunctionType.java (toPrint): Use toPrintBrief.
    * DebugInfo.java (what): Check type value.
    * funit-type-class.cxx (class_nested_class): New.
    (class_ref_method): New.

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

Summary of changes:
 frysk-core/frysk/debuginfo/ChangeLog            |    8 +++++
 frysk-core/frysk/debuginfo/DebugInfo.java       |    3 +-
 frysk-core/frysk/debuginfo/TypeFactory.java     |   14 +++++----
 frysk-core/frysk/pkglibdir/ChangeLog            |    5 +++
 frysk-core/frysk/pkglibdir/funit-type-class.cxx |   36 +++++++++++++++++++++-
 frysk-core/frysk/value/ChangeLog                |    8 +++++
 frysk-core/frysk/value/CompositeType.java       |    4 ++
 frysk-core/frysk/value/FunctionType.java        |    4 +-
 frysk-core/frysk/value/PointerType.java         |    6 ++++
 frysk-core/frysk/value/Type.java                |    8 +++++
 frysk-core/frysk/value/TypeDecorator.java       |   14 +++++++++
 11 files changed, 99 insertions(+), 11 deletions(-)

First 500 lines of diff:
diff --git a/frysk-core/frysk/debuginfo/ChangeLog b/frysk-core/frysk/debuginfo/ChangeLog
index 8223710..9b5432c 100644
--- a/frysk-core/frysk/debuginfo/ChangeLog
+++ b/frysk-core/frysk/debuginfo/ChangeLog
@@ -1,3 +1,11 @@
+2008-04-30  Stan Cox  <scox@redhat.com>
+	
+	* TypeFactory.java (getGccStructOrClassType): Set dieHash.
+	(getClassType): Likewise.
+	(getUnionType): Likewise.
+	(getType): Set "this" reference from dieHash.
+	* DebugInfo.java (what): Check type value.
+
 2008-04-25  Sami Wagiaalla  <swagiaal@redhat.com>
 
 	* TestObjectDeclarationSearchEngineTopDown.java: New file.
diff --git a/frysk-core/frysk/debuginfo/DebugInfo.java b/frysk-core/frysk/debuginfo/DebugInfo.java
index a64ebfa..b9fa982 100644
--- a/frysk-core/frysk/debuginfo/DebugInfo.java
+++ b/frysk-core/frysk/debuginfo/DebugInfo.java
@@ -108,7 +108,8 @@ public class DebugInfo {
             case DwTag.TYPEDEF_:
             case DwTag.STRUCTURE_TYPE_: {
 		Type type = typeFactory.getType(varDie.getType());
-		result.append(type.toPrint());
+		if (type != null)
+		    result.append(type.toPrint());
 		break;
             }
             default:
diff --git a/frysk-core/frysk/debuginfo/TypeFactory.java b/frysk-core/frysk/debuginfo/TypeFactory.java
index f59d4e6..c0a4f69 100644
--- a/frysk-core/frysk/debuginfo/TypeFactory.java
+++ b/frysk-core/frysk/debuginfo/TypeFactory.java
@@ -170,7 +170,7 @@ public class TypeFactory {
 
 	    if (member.getTag() == DwTag.SUBPROGRAM) {
 		Value v = getSubprogramValue(member);
-		if (hasArtifitialParameter(member)) {
+		if (hasArtificialParameter(member)) {
 		    classType.addMember(member.getName(), sourceLocation, v
 			    .getType(), offset, access);
 		} else {
@@ -255,6 +255,7 @@ public class TypeFactory {
 	else
 	    type = new GccStructOrClassType(name, getByteSize(classDie));
 
+	dieHash.put(new Long(classDie.getOffset()), type);
 	addMembers(classDie, type);
 
 	return type;
@@ -272,6 +273,7 @@ public class TypeFactory {
 	dumpDie("classDie=", classDie);
 
 	ClassType classType = new ClassType(name, getByteSize(classDie));
+	dieHash.put(new Long(classDie.getOffset()), classType);
 	addMembers(classDie, classType);
 	return classType;
     }
@@ -295,7 +297,7 @@ public class TypeFactory {
      * @param die
      * @return
      */
-    private boolean hasArtifitialParameter(DwarfDie die) {
+    private boolean hasArtificialParameter(DwarfDie die) {
 	if (die == null
 		|| !(die.getTag().equals(DwTag.SUBPROGRAM) || die.getTag()
 			.equals(DwTag.INLINED_SUBROUTINE))) {
@@ -319,6 +321,8 @@ public class TypeFactory {
 	dumpDie("unionDie=", classDie);
 
 	UnionType classType = new UnionType(name, getByteSize(classDie));
+	dieHash.put(new Long(classDie.getOffset()), classType);
+
 	for (DwarfDie member = classDie.getChild(); 
 	     member != null; 
 	     member = member.getSibling()) {
@@ -435,10 +439,8 @@ public class TypeFactory {
 	if (mappedType != null)
 	    return mappedType;
 	else if (dieHash.containsKey(new Long(type.getOffset()))) {
-	    // ??? will this always be a pointer to ourselves?
-	    // Instead of VoidType, we need a way to reference ourselves
-	    return new PointerType("", byteorder, getByteSize(type),
-		    new VoidType());
+	    // This is a self reference
+	    return (Type)dieHash.get(new Long(type.getOffset()));
 	}
 	dieHash.put(new Long(type.getOffset()), null);
 	Type returnType = null;
diff --git a/frysk-core/frysk/pkglibdir/ChangeLog b/frysk-core/frysk/pkglibdir/ChangeLog
index 7cda937..85a7a4d 100644
--- a/frysk-core/frysk/pkglibdir/ChangeLog
+++ b/frysk-core/frysk/pkglibdir/ChangeLog
@@ -1,3 +1,8 @@
+2008-04-30  Stan Cox  <scox@redhat.com>
+	
+	* funit-type-class.cxx (class_nested_class): New.
+	(class_ref_method): New.
+
 2008-04-25  Sami Wagiaalla  <swagiaal@toner.yyz.redhat.com>
 
 	* funit-scopes-multi-file-a.c: New file.
diff --git a/frysk-core/frysk/pkglibdir/funit-type-class.cxx b/frysk-core/frysk/pkglibdir/funit-type-class.cxx
index 25b1154..9898aa4 100644
--- a/frysk-core/frysk/pkglibdir/funit-type-class.cxx
+++ b/frysk-core/frysk/pkglibdir/funit-type-class.cxx
@@ -180,7 +180,7 @@ Type class_inherited_new = Type ("new base", "main", "new_base");
 // Type: class Derived {
 // Type:   struct Base3 {
 // Type:     int (**_vptr.Base3) ();
-// Type:     void Base3 (void * const &);
+// Type:     void Base3 (const Base3 &);
 // Type:     void Base3 ();
 // Type:     char do_this (char);
 // Type:     short int do_this (short int);
@@ -188,7 +188,7 @@ Type class_inherited_new = Type ("new base", "main", "new_base");
 // Type:     float do_this (float);
 // Type:     void ~Base3 ();
 // Type:   } ;
-// Type:   void Derived (void * const &);
+// Type:   void Derived (const Derived &);
 // Type:   void Derived ();
 // Type:   char do_this (char);
 // Type:   short int do_this (short int);
@@ -216,6 +216,38 @@ func ()
   crash();
 }
 
+class class_nested_class	
+{
+public:
+  class nested
+  {
+   public:
+    nested (int i) : z(i) {}
+    int z;
+  };
+} class_nested_class_v;
+
+// Name: class_nested_class_v
+// Type: struct class_nested_class {
+// Type: }
+
+class class_ref_method
+{
+  int z;
+    int get_z () {return z;}
+  class class_ref_method & get_this () {return *this;} 
+  class class_ref_method * also_get_this () {return this;} 
+} class_ref_method_v;
+
+// Name: class_ref_method_v
+// Type: class class_ref_method {
+// Type:  private:
+// Type:   int z;
+// Type:   int get_z ();
+// Type:   class_ref_method & get_this ();
+// Type:   class_ref_method * also_get_this ();
+// Type: }
+
 int
 main (int argc, char **argv)
 {
diff --git a/frysk-core/frysk/value/ChangeLog b/frysk-core/frysk/value/ChangeLog
index f174024..fdf4a5e 100644
--- a/frysk-core/frysk/value/ChangeLog
+++ b/frysk-core/frysk/value/ChangeLog
@@ -1,3 +1,11 @@
+2008-04-30  Stan Cox  <scox@redhat.com>
+
+	* Type.java (toPrintBrief): New.
+	* PointerType.java (toPrintBrief): New.
+	* CompositeType.java (toPrintBrief): New.
+	* TypeDecorator.java (toPrintBrief): New.
+	* FunctionType.java (toPrint): Use toPrintBrief. 
+
 2008-04-24  Stan Cox  <scox@redhat.com>
 
 	*  package.html: New file.
diff --git a/frysk-core/frysk/value/CompositeType.java b/frysk-core/frysk/value/CompositeType.java
index 269da18..846bd16 100644
--- a/frysk-core/frysk/value/CompositeType.java
+++ b/frysk-core/frysk/value/CompositeType.java
@@ -395,6 +395,10 @@ public abstract class CompositeType
 	stringBuilderParm.insert(0, stringBuilder);
     }
     
+    public void toPrintBrief(StringBuilder stringBuilder, int indent) {
+	    stringBuilder.insert(0, getName());
+    }
+    
     public Value member(Value var1, String member) {
 	DynamicMember mem = (DynamicMember)nameToMember.get(member);
 	if (mem == null)
diff --git a/frysk-core/frysk/value/FunctionType.java b/frysk-core/frysk/value/FunctionType.java
index f504033..380c173 100644
--- a/frysk-core/frysk/value/FunctionType.java
+++ b/frysk-core/frysk/value/FunctionType.java
@@ -72,13 +72,13 @@ public class FunctionType
 	if (returnType == null) 
 	    parmStringBuilder.insert(0, "void");
 	else
-	    returnType.toPrint(parmStringBuilder, 0);
+	    returnType.toPrintBrief(parmStringBuilder, 0);
 	parmStringBuilder.append(" ");
 	stringBuilder.insert(0, parmStringBuilder);
 	stringBuilder.append(" (");
 	for (int i = 0; i < this.parmTypes.size(); i++) {
 	    parmStringBuilder.delete(0, parmStringBuilder.length());
-	    ((Type)this.parmTypes.get(i)).toPrint(parmStringBuilder, 0);
+	    ((Type)this.parmTypes.get(i)).toPrintBrief(parmStringBuilder, 0);
 	    parmStringBuilder.append((String)this.parmNames.get(i));
 	    stringBuilder.append(parmStringBuilder);
 	    if (i < this.parmTypes.size() - 1)
diff --git a/frysk-core/frysk/value/PointerType.java b/frysk-core/frysk/value/PointerType.java
index 88dce56..bbf507a 100644
--- a/frysk-core/frysk/value/PointerType.java
+++ b/frysk-core/frysk/value/PointerType.java
@@ -137,6 +137,12 @@ public class PointerType
 	}
     }
 
+    public void toPrintBrief(StringBuilder stringBuilder, int indent) {
+	    stringBuilder.insert(0, getName());
+	    stringBuilder.insert(0, " ");
+	    type.toPrintBrief(stringBuilder, indent);
+}
+
     protected Type clone(IntegerType accessor) {
 	return new PointerType(getName(), order(), getSize(), type, accessor);
     }
diff --git a/frysk-core/frysk/value/Type.java b/frysk-core/frysk/value/Type.java
index 84f01a9..5ff9812 100644
--- a/frysk-core/frysk/value/Type.java
+++ b/frysk-core/frysk/value/Type.java
@@ -117,6 +117,14 @@ public abstract class Type {
     public abstract void toPrint(StringBuilder stringBuilder, int indent);
 
     /**
+     * Print this Type, possibly briefly, after indenting INDENT spaces.
+     * @param stringBuilder TODO
+     */
+    public void toPrintBrief(StringBuilder stringBuilder, int indent) {
+	toPrint(stringBuilder, indent);
+    }
+
+    /**
      * Print this Type to a StringBuffer and return the String.
      */
     public final String toPrint() {
diff --git a/frysk-core/frysk/value/TypeDecorator.java b/frysk-core/frysk/value/TypeDecorator.java
index f151b09..176ee2a 100644
--- a/frysk-core/frysk/value/TypeDecorator.java
+++ b/frysk-core/frysk/value/TypeDecorator.java
@@ -90,6 +90,20 @@ abstract class TypeDecorator extends Type {
 	}
     }
 
+    public void toPrintBrief(StringBuilder stringBuilder, int indent) {
+	if (getUltimateType() instanceof PointerType
+	    || this instanceof ReferenceType) {
+	    decorated.toPrintBrief(stringBuilder, 0);
+	    stringBuilder.append(" ");
+	    stringBuilder.append(getName());
+	}
+	else {
+	    decorated.toPrintBrief(stringBuilder, 0);
+	    stringBuilder.insert(0, " ");
+	    stringBuilder.insert(0, getName());
+	}
+    }
+    
     void assign(Location location, Value value) {
 	decorated.assign(location, value);
     }


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


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2008-04-30 14:31 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-04-30 14:31 [SCM] master: Allow for "this" return and parameter values scox

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).