[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