[Avida-SVN] r2013 - development/source/script

brysonda at myxo.css.msu.edu brysonda at myxo.css.msu.edu
Mon Aug 27 08:19:17 PDT 2007


Author: brysonda
Date: 2007-08-27 11:19:17 -0400 (Mon, 27 Aug 2007)
New Revision: 2013

Modified:
   development/source/script/ASTree.h
   development/source/script/cParser.cc
   development/source/script/cParser.h
Log:
AS: Array/Matrix dimension specification.

Modified: development/source/script/ASTree.h
===================================================================
--- development/source/script/ASTree.h	2007-08-27 14:35:24 UTC (rev 2012)
+++ development/source/script/ASTree.h	2007-08-27 15:19:17 UTC (rev 2013)
@@ -68,6 +68,7 @@
 // ---------------------------------------------------------------------------------------------------------------------
 
 class cASTAssignment;
+class cASTArgumentList;
 
 class cASTReturnStatement;
 class cASTStatementList;
@@ -83,7 +84,6 @@
 class cASTExpressionBinary;
 class cASTExpressionUnary;
 
-class cASTArgumentList;
 class cASTFunctionCall;
 class cASTLiteral;
 class cASTLiteralArray;
@@ -112,7 +112,24 @@
 };
 
 
+class cASTArgumentList : public cASTNode
+{
+private:
+  tList<cASTNode> m_nodes;
+  
+public:
+  cASTArgumentList() { ; }
+  ~cASTArgumentList() { ; }
+  
+  inline void AddNode(cASTNode* n) { m_nodes.PushRear(n); }
+  inline tListIterator<cASTNode> Iterator() { return tListIterator<cASTNode>(m_nodes); }
+  
+  void Accept(cASTVisitor& visitor);
+};
 
+
+
+
 // --------  Block Nodes  --------
 
 class cASTReturnStatement : public cASTNode
@@ -270,15 +287,18 @@
   ASType_t m_type;
   cString m_var;
   cASTNode* m_assign;
+  cASTArgumentList* m_dims;
   
 public:
-  cASTVariableDefinition(ASType_t type, const cString& var) : m_type(type), m_var(var), m_assign(NULL) { ; }
-  ~cASTVariableDefinition() { delete m_assign; }
+  cASTVariableDefinition(ASType_t type, const cString& var) : m_type(type), m_var(var), m_assign(NULL), m_dims(NULL) { ; }
+  ~cASTVariableDefinition() { delete m_assign; delete m_dims; }
   
   inline ASType_t GetType() { return m_type; }
   inline const cString& GetVariable() { return m_var; }
   inline void SetAssignmentExpression(cASTNode* assign) { delete m_assign; m_assign = assign; }
   inline cASTNode* GetAssignmentExpression() { return m_assign; }
+  inline void SetDimensions(cASTArgumentList* dims) { delete m_dims; m_dims = dims; }
+  inline cASTArgumentList* GetDimensions() { return m_dims; }
   
   void Accept(cASTVisitor& visitor);
 };
@@ -349,35 +369,19 @@
 
 // --------  Expression Value Nodes  --------
 
-class cASTArgumentList : public cASTNode
-{
-private:
-  tList<cASTNode> m_nodes;
-  
-public:
-  cASTArgumentList() { ; }
-  ~cASTArgumentList() { ; }
-  
-  inline void AddNode(cASTNode* n) { m_nodes.PushRear(n); }
-  inline tListIterator<cASTNode> Iterator() { return tListIterator<cASTNode>(m_nodes); }
-  
-  void Accept(cASTVisitor& visitor);
-};
-
-
 class cASTFunctionCall : public cASTNode
 {
 private:
   cASTNode* m_target;
-  cASTNode* m_args;
+  cASTArgumentList* m_args;
   
 public:
   cASTFunctionCall(cASTNode* target) : m_target(target), m_args(NULL) { ; }
   ~cASTFunctionCall() { delete m_args; }
   
   cASTNode* GetTarget() { return m_target; }
-  void SetArguments(cASTNode* args) { m_args = args; }
-  cASTNode* GetArguments() { return m_args; }
+  void SetArguments(cASTArgumentList* args) { delete m_args; m_args = args; }
+  cASTArgumentList* GetArguments() { return m_args; }
   
   bool HasArguments() const { return (m_args); }
   

Modified: development/source/script/cParser.cc
===================================================================
--- development/source/script/cParser.cc	2007-08-27 14:35:24 UTC (rev 2012)
+++ development/source/script/cParser.cc	2007-08-27 15:19:17 UTC (rev 2013)
@@ -267,6 +267,8 @@
   PARSE_TRACE("parseArrayUnpack");
   cASTNode* au = NULL;
   
+  // @todo - array unpack
+  
   if (nextToken() != TOKEN(ID)) PARSE_UNEXPECT();
   
   while (nextToken()) {
@@ -290,7 +292,7 @@
   return au;
 }
 
-cASTNode* cParser::parseArgumentList()
+cASTArgumentList* cParser::parseArgumentList()
 {
   PARSE_TRACE("parseArgumentList");
   cASTArgumentList* al = new cASTArgumentList();
@@ -911,9 +913,9 @@
       (*vd).SetAssignmentExpression(expr);
       break;
     case TOKEN(PREC_OPEN):
-      // @todo - array/matrix size declaration
-      if (nextToken() != TOKEN(PREC_CLOSE)) parseArgumentList();
+      if (nextToken() != TOKEN(PREC_CLOSE)) (*vd).SetDimensions(parseArgumentList());
       if (currentToken() != TOKEN(PREC_CLOSE)) PARSE_UNEXPECT();
+      nextToken(); // consume ')'
       break;
       
     default:

Modified: development/source/script/cParser.h
===================================================================
--- development/source/script/cParser.h	2007-08-27 14:35:24 UTC (rev 2012)
+++ development/source/script/cParser.h	2007-08-27 15:19:17 UTC (rev 2013)
@@ -89,7 +89,7 @@
   
   const cString& currentText();
   
-  cASTNode* parseArgumentList();
+  cASTArgumentList* parseArgumentList();
   cASTNode* parseArrayUnpack();
   cASTNode* parseAssignment();
   cASTNode* parseCallExpression(cASTNode* target, bool required = false);




More information about the Avida-cvs mailing list