]> gitweb.hamatoma.de Git - reqt/commitdiff
dayly work
authorhama <hama@siduction.net>
Sun, 27 Jul 2014 21:10:43 +0000 (23:10 +0200)
committerhama <hama@siduction.net>
Sun, 27 Jul 2014 21:10:43 +0000 (23:10 +0200)
25 files changed:
rplexpr/rplasclasses.cpp
rplexpr/rplastree.cpp
rplexpr/rplastree.hpp
rplexpr/rplmfparser.cpp
test/rplmfparser/baseTest.txt
test/rplmfparser/defTest.txt
test/rplmfparser/field1.txt
test/rplmfparser/forC1.txt
test/rplmfparser/forC2.txt
test/rplmfparser/forIt1.txt
test/rplmfparser/ifTest1.txt
test/rplmfparser/ifTest2.txt
test/rplmfparser/list1.txt
test/rplmfparser/list2.txt
test/rplmfparser/map1.txt
test/rplmfparser/map2.txt
test/rplmfparser/meth1.txt
test/rplmfparser/meth2.txt
test/rplmfparser/meth3.txt [new file with mode: 0644]
test/rplmfparser/meth4.txt [new file with mode: 0644]
test/rplmfparser/methc1.txt
test/rplmfparser/opTest1.txt
test/rplmfparser/repeatTest.txt
test/rplmfparser/whileTest.txt
unittests/rplmfparser_test.cpp

index 0b4ce341220eddd053ff40a0ea2827a5d7377d89..8b4cd37afbf494dc2e9a20ca1a629e3a40db2d30 100644 (file)
@@ -120,50 +120,59 @@ void RplSymbolSpace::dump(FILE* fp, int indent, const char* header)
     fprintf(fp, "%s= %s (%s) parent: %s\n", tabs, m_name.toUtf8().constData(),
             spaceTypeName(m_type),
             m_parent == NULL ? "<none>" : m_parent->name().toUtf8().constData());
-    fprintf(fp, "%s== Classes:\n", tabs);
     QList<QString> sorted;
-    sorted.reserve(m_classes.size());
-    ClassMap::iterator it;
-    for (it = m_classes.begin(); it != m_classes.end(); it++){
-       sorted.append(it.key());
-    }
-    qSort(sorted.begin(), sorted.end(), qLess<QString>());
-    QList<QString>::iterator it2;
-    for (it2 = sorted.begin(); it2 != sorted.end(); it2++){
-        RplASClass* clazz = m_classes[*it2];
-        clazz->dump(fp, indent);
-    }
-
-    fprintf(fp, "%s== Methods:\n", tabs);
-    sorted.clear();
-    sorted.reserve(m_variables.size());
-    MethodMap::iterator it3;
-    for (it3 = m_methods.begin(); it3 != m_methods.end(); it3++){
-       sorted.append(it3.key());
+    if (m_classes.size() > 0){
+        fprintf(fp, "%s== Classes:\n", tabs);
+        sorted.reserve(m_classes.size());
+        ClassMap::iterator it;
+        for (it = m_classes.begin(); it != m_classes.end(); it++){
+           sorted.append(it.key());
+        }
+        qSort(sorted.begin(), sorted.end(), qLess<QString>());
+        QList<QString>::iterator it2;
+        for (it2 = sorted.begin(); it2 != sorted.end(); it2++){
+            RplASClass* clazz = m_classes[*it2];
+            clazz->dump(fp, indent);
+        }
     }
-    qSort(sorted.begin(), sorted.end(), qLess<QString>());
-    QList<QString>::iterator it4;
-    for (it4 = sorted.begin(); it4 != sorted.end(); it4++){
-        RplASMethod* var = m_methods[*it4];
-        var->dump(fp, indent);
+    if (m_methods.size() > 0){
+        fprintf(fp, "%s== Methods:\n", tabs);
+        sorted.clear();
+        sorted.reserve(m_variables.size());
+        MethodMap::iterator it3;
+        for (it3 = m_methods.begin(); it3 != m_methods.end(); it3++){
+           sorted.append(it3.key());
+        }
+        qSort(sorted.begin(), sorted.end(), qLess<QString>());
+        QList<QString>::iterator it4;
+        for (it4 = sorted.begin(); it4 != sorted.end(); it4++){
+            RplASMethod* method = m_methods[*it4];
+            do {
+                method->dump(fp, indent);
+                method = method->sibling();
+            } while (method != NULL);
+        }
     }
 
-    fprintf(fp, "%s== Variables:\n", tabs);
-    sorted.clear();
-    sorted.reserve(m_variables.size());
-    VariableMap::iterator it5;
-    for (it5 = m_variables.begin(); it5 != m_variables.end(); it5++){
-       sorted.append(it5.key());
+    if (m_variables.size() > 0){
+        fprintf(fp, "%s== Variables:\n", tabs);
+        sorted.clear();
+        sorted.reserve(m_variables.size());
+        VariableMap::iterator it5;
+        for (it5 = m_variables.begin(); it5 != m_variables.end(); it5++){
+           sorted.append(it5.key());
+        }
+        qSort(sorted.begin(), sorted.end(), qLess<QString>());
+        QList<QString>::iterator it6;
+        for (it6 = sorted.begin(); it6 != sorted.end(); it6++){
+            RplASVarDefinition* var = m_variables[*it6];
+            var->dump(fp, indent);
+        }
     }
-    qSort(sorted.begin(), sorted.end(), qLess<QString>());
-    QList<QString>::iterator it6;
-    for (it6 = sorted.begin(); it6 != sorted.end(); it6++){
-        RplASVarDefinition* var = m_variables[*it6];
-        var->dump(fp, indent);
+    if (m_body != NULL){
+        fprintf(fp, "%s== Body:\n", tabs);
+        RplASNode1::dumpStatements(fp, indent, m_body);
     }
-
-    fprintf(fp, "%s== Body:%s\n", tabs, m_body == NULL ? " <none>" : "");
-    RplASNode1::dumpStatements(fp, indent, m_body);
 }
 
 /**
@@ -266,15 +275,18 @@ RplASItem* RplSymbolSpace::addMethod(RplASMethod* method)
     else if (! m_methods.contains(name)){
         m_methods[name] = method;
     } else {
-        RplASMethod* oldMethod = m_methods[name];
+        RplASMethod* first = m_methods[name];
+        RplASMethod* oldMethod = first;
         do {
             if (oldMethod->equalSignature(*method))
                 rc = oldMethod;
             else
                 oldMethod = oldMethod->sibling();
         } while (rc == NULL && oldMethod != NULL);
-        if (rc == NULL)
+        if (rc == NULL){
+            method->setChild(first);
             m_methods[name] = method;
+        }
     }
     return rc;
 }
index 70a17913c5c8a0efc240df51d866efbdbbd68177..9a9c12df872290377ba34497f2379689b14aa6a5 100644 (file)
@@ -832,7 +832,7 @@ void RplASVarDefinition::dump(FILE* fp, int indent)
 const QString& RplASVarDefinition::name() const
 {
     RplASNamedValue* namedValue = dynamic_cast<RplASNamedValue*>(m_child2);
-    const QString& rc = namedValue == NULL ? "?" : namedValue->name();
+    const QString& rc = namedValue->name();
     return rc;
 }
 
@@ -910,6 +910,8 @@ void RplASExprStatement::dump(FILE* fp, int indent)
 {
     DEFINE_TABS(indent);
     char buffer[256];
+    if (m_id == 40)
+        m_id = 40;
     fprintf(fp, "%sExpr id: %d expr: %d succ: %d %s\n", tabs, m_id,
             m_child2 == NULL ? 0 : m_child2->id(),
             m_child == NULL ? 0 : m_child->id(),
@@ -2086,7 +2088,7 @@ RplASMethod::RplASMethod(const QString& name, RplASTree& tree) :
     RplASNode2(AST_METHOD),
     m_name(name),
     m_resultType(NULL),
-    m_symbols(tree.startClassOrMethod(name, RplSymbolSpace::SST_METHOD)),
+    m_symbols(NULL),
     m_sibling(NULL),
     m_tree(tree)
 {
@@ -2115,11 +2117,25 @@ void RplASMethod::dump(FILE* fp, int indent)
     if (m_child2 != NULL)
         m_child2->dump(fp, indent + 1);
     dumpStatements(fp, indent + 1, m_child);
+    m_symbols->dump(fp, indent + 1);
 }
+/**
+ * @brief Returns the symbol space of the instance.
+ *
+ * @return  the symbol space
+ */
 RplSymbolSpace* RplASMethod::symbols() const
 {
     return m_symbols;
 }
+
+/**
+ * @brief Sets the symbol space from the current of the tree.
+ */
+void RplASMethod::setSymbols()
+{
+    m_symbols = m_tree.currentSpace();
+}
 /**
  * @brief Returns the name of the method
  * @return  the name
index 26487d0a23a85950758011cb91f3ff8697aace47..e1f2f845593b4acf98f5a959a743404bc5aee8c4 100644 (file)
@@ -487,7 +487,7 @@ public:
     void execute();
     void dump(FILE* fp, int indent);
     RplSymbolSpace* symbols() const;
-
+    void setSymbols();
     const QString& name() const;
     bool equalSignature(RplASMethod& other) const;
     RplASMethod* sibling() const;
index 08a2624836dd9812ce77406d6ade556342af0a24..11f4090536cdd89ee42c7f99df1ee037c3033875 100644 (file)
@@ -892,15 +892,16 @@ RplASExprStatement* RplMFParser::parseParameterList(){
     RplASExprStatement* rc = NULL;
     RplASExprStatement* last = NULL;
     const RplSourcePosition* startPos = m_lexer.currentPosition();
-    RplASItem* definition;
+    RplASItem* definition = NULL;
     do {
+        if (definition != NULL)
+            m_lexer.nextNonSpaceToken();
         definition = parseVarDefinition(RplASNamedValue::A_PARAM);
         RplASExprStatement *current = new RplASExprStatement();
         current->setChild2(definition);
         if (rc == NULL){
             rc = current;
         } else {
-            current->setChild(last);
             last->setChild(current);
         }
         last = current;
@@ -947,7 +948,8 @@ void RplMFParser::parseMethod()
     method->setPosition(startPos);
     RplSymbolSpace* symbols = m_tree.currentSpace();
     symbols->addMethod(method);
-
+    m_tree.startClassOrMethod(name, RplSymbolSpace::SST_METHOD);
+    method->setSymbols();
     if (token->isOperator(O_LPARENTH)){
       token = m_lexer.nextNonSpaceToken();
       if (token->isOperator(O_RPARENTH)){
index 4f2fbfd70cb71fe2a7f27f24ea253281d6c0838f..0f195b5b98bc159687c8b90ab727b7d0173f5f6b 100644 (file)
@@ -1,7 +1,5 @@
 2+3*4
 = <test> (module) parent: global
-== Classes:
-== Variables:
 == Body:
 Expr id: 6 expr: 2 succ: 0 <test>:1:1
        BinOp id: 2 op: + (26) left: 1 right: 4 <test>:1:1
index 8d941fa75829f53b4d0e4032d3350649ad10416d..89dc16b6c7825cd5d216a4f5056d024e10d3f5da 100644 (file)
@@ -1,7 +1,14 @@
 Int i = 3; const lazy Str s = 'Hi'; const List l;
 = <test> (module) parent: global
-== Classes:
 == Variables:
+varDef i id: 2 namedValue: 1 value: 3 succ: 5 <test>:1:4
+       namedValue i id: 1 attr: 0x0 <test>:1:4
+       const id: 3 value: 3 <test>:1:8
+varDef l id: 8 namedValue: 7 value: 0 succ: 0 <test>:1:47
+       namedValue l id: 7 attr: 0x2 <test>:1:47
+varDef s id: 5 namedValue: 4 value: 6 succ: 8 <test>:1:26
+       namedValue s id: 4 attr: 0x12 <test>:1:26
+       const id: 6 value: 'Hi' <test>:1:30
 == Body:
 varDef i id: 2 namedValue: 1 value: 3 succ: 5 <test>:1:4
        namedValue i id: 1 attr: 0x0 <test>:1:4
index b14cd761196ba07c89ac59d2898e4eabfab6a47c..4cbe9265aafb5490d5589418570620c65b709e8b 100644 (file)
@@ -2,8 +2,6 @@ file.find('*.c')[0].name;
 [1,2,3].join(' ');
 3.14.trunc;
 = <test> (module) parent: global
-== Classes:
-== Variables:
 == Body:
 Expr id: 8 expr: 7 succ: 15 <test>:1:24
        field name id: 7 parent: 5 succ: <test>:1:24
index 7f59d50c2c98a0518b070ece44039387f35ae94a..64c14c34e664d7bebe005fc84f2965fc2beeb57f 100644 (file)
@@ -3,8 +3,9 @@ for b from 10 to 1 step -2 do
 a += 1;
 od
 = <test> (module) parent: global
-== Classes:
 == Variables:
+varDef a id: 2 namedValue: 1 value: 0 succ: 4 <test>:1:4
+       namedValue a id: 1 attr: 0x0 <test>:1:4
 == Body:
 varDef a id: 2 namedValue: 1 value: 0 succ: 4 <test>:1:4
        namedValue a id: 1 attr: 0x0 <test>:1:4
index a3a49403c6c19df0c0662d219a6dcdd080dd2fbc..117dc323cbbdb2448b09b889802a477507325f04 100644 (file)
@@ -1,7 +1,8 @@
 Int a; for to 10 do a += 1 od
 = <test> (module) parent: global
-== Classes:
 == Variables:
+varDef a id: 2 namedValue: 1 value: 0 succ: 3 <test>:1:4
+       namedValue a id: 1 attr: 0x0 <test>:1:4
 == Body:
 varDef a id: 2 namedValue: 1 value: 0 succ: 3 <test>:1:4
        namedValue a id: 1 attr: 0x0 <test>:1:4
index b32a0166338b1bad4ca6bde76f31af0847bfd47a..e76a69ddf8c982df6edcd5eab7a3c8d2aebb8fd0 100644 (file)
@@ -3,8 +3,9 @@ for x in a do
 a += 1;
 od
 = <test> (module) parent: global
-== Classes:
 == Variables:
+varDef a id: 2 namedValue: 1 value: 0 succ: 4 <test>:1:4
+       namedValue a id: 1 attr: 0x0 <test>:1:4
 == Body:
 varDef a id: 2 namedValue: 1 value: 0 succ: 4 <test>:1:4
        namedValue a id: 1 attr: 0x0 <test>:1:4
index 55b6cc208905d3148a0dd4384bda7ed253933df4..217a7bef0ed91c58e86109cfc2ab1c53c56fc6e9 100644 (file)
@@ -6,8 +6,11 @@ then a = 13 * 14
 else a = 15 / 16
 fi
 = <test> (module) parent: global
-== Classes:
 == Variables:
+varDef a id: 2 namedValue: 1 value: 0 succ: 4 <test>:1:4
+       namedValue a id: 1 attr: 0x0 <test>:1:4
+varDef b id: 4 namedValue: 3 value: 0 succ: 10 <test>:2:4
+       namedValue b id: 3 attr: 0x0 <test>:2:4
 == Body:
 varDef a id: 2 namedValue: 1 value: 0 succ: 4 <test>:1:4
        namedValue a id: 1 attr: 0x0 <test>:1:4
index 47f173cb6630d125ea3c7bfedc016c42b6694212..bfaa9ea906fbdbe37b4a87ac8b4c9fcf3ff8995a 100644 (file)
@@ -3,8 +3,9 @@ if 7 < 6
 then x = '123';
 fi
 = <test> (module) parent: global
-== Classes:
 == Variables:
+varDef x id: 2 namedValue: 1 value: 0 succ: 3 <test>:1:4
+       namedValue x id: 1 attr: 0x0 <test>:1:4
 == Body:
 varDef x id: 2 namedValue: 1 value: 0 succ: 3 <test>:1:4
        namedValue x id: 1 attr: 0x0 <test>:1:4
index b35935c69c08a9cfef5c7c663c9ea42422ddfb2a..2de17e1eb0f22e827feedb0d0bfff83cea1dda94 100644 (file)
@@ -1,7 +1,10 @@
 List b = [];
 = <test> (module) parent: global
-== Classes:
 == Variables:
+varDef b id: 2 namedValue: 1 value: 3 succ: 0 <test>:1:5
+       namedValue b id: 1 attr: 0x0 <test>:1:5
+       listConst id: 3 <test>:1:9
+               []
 == Body:
 varDef b id: 2 namedValue: 1 value: 3 succ: 0 <test>:1:5
        namedValue b id: 1 attr: 0x0 <test>:1:5
index ec5cbe5209ca0db0897db45ae122eb740b41f2b9..fd904e5f43e23a6e33ff68f4ec08bed4c973290b 100644 (file)
@@ -1,7 +1,14 @@
 List a = [2+3, 3.14, 7, 'hi', a]; List b = [];
 = <test> (module) parent: global
-== Classes:
 == Variables:
+varDef a id: 2 namedValue: 1 value: 3 succ: 11 <test>:1:5
+       namedValue a id: 1 attr: 0x0 <test>:1:5
+       listConst id: 3 <test>:1:9
+               [<formula 7>,3.140000,7,'hi',<formula 9>]
+varDef b id: 11 namedValue: 10 value: 12 succ: 0 <test>:1:39
+       namedValue b id: 10 attr: 0x0 <test>:1:39
+       listConst id: 12 <test>:1:43
+               []
 == Body:
 varDef a id: 2 namedValue: 1 value: 3 succ: 11 <test>:1:5
        namedValue a id: 1 attr: 0x0 <test>:1:5
index 25c1359930e83c8264ff54486b6672c6ae628eb9..0d69fce63eebd7647c19f7d26af86a6b59e89792 100644 (file)
@@ -1,7 +1,10 @@
 Map a = {};
 = <test> (module) parent: global
-== Classes:
 == Variables:
+varDef a id: 2 namedValue: 1 value: 3 succ: 0 <test>:1:4
+       namedValue a id: 1 attr: 0x0 <test>:1:4
+       mapConst id: 3 <test>:1:8
+       {}
 == Body:
 varDef a id: 2 namedValue: 1 value: 3 succ: 0 <test>:1:4
        namedValue a id: 1 attr: 0x0 <test>:1:4
index 6272b8b7bdc300d7fabbc06fe2483a6f07caf9b1..ca8537656660136f04ba0fca40155f948c666dd1 100644 (file)
@@ -1,8 +1,15 @@
 Map a = {'a': 2+3,'bcd':3.14,'ccc':7, 'hi':'world'};
 Map b = {};
 = <test> (module) parent: global
-== Classes:
 == Variables:
+varDef a id: 2 namedValue: 1 value: 3 succ: 11 <test>:1:4
+       namedValue a id: 1 attr: 0x0 <test>:1:4
+       mapConst id: 3 <test>:1:8
+       {'a':<formula 7>,'bcd':3.140000,'ccc':7,'hi':<formula 9>}
+varDef b id: 11 namedValue: 10 value: 12 succ: 0 <test>:2:4
+       namedValue b id: 10 attr: 0x0 <test>:2:4
+       mapConst id: 12 <test>:2:8
+       {}
 == Body:
 varDef a id: 2 namedValue: 1 value: 3 succ: 11 <test>:1:4
        namedValue a id: 1 attr: 0x0 <test>:1:4
index f0ef7ac0dd8c84b3f6a32d603bd02681ddf2743d..3f7dc3fa9b91a6cb496090dcf69956c365a421aa 100644 (file)
@@ -1,16 +1,11 @@
 func Float pi: 3.1415; endf func Str delim(): '/' endf;
 = <test> (module) parent: global
-== Classes:
-== Variables:
-== Body:
-Method <NoneType> pi() id: 1 parent: 0 args: 0 body: 4 <test>:0:0
-       Method <NoneType> delim() id: 4 parent: 0 args: 0 body: 6 <test>:1:28
-               Expr id: 6 expr: 5 succ: 0 <test>:1:46
-                       const id: 5 value: '/' <test>:1:46
+== Methods:
+Method <NoneType> delim() id: 4 parent: <test> args: 0 body: 6 <test>:1:28
        Expr id: 6 expr: 5 succ: 0 <test>:1:46
                const id: 5 value: '/' <test>:1:46
-Method <NoneType> delim() id: 4 parent: 0 args: 0 body: 6 <test>:1:28
-       Expr id: 6 expr: 5 succ: 0 <test>:1:46
-               const id: 5 value: '/' <test>:1:46
-Expr id: 6 expr: 5 succ: 0 <test>:1:46
-       const id: 5 value: '/' <test>:1:46
+       = <test>.delim (method) parent: <test>
+Method <NoneType> pi() id: 1 parent: <test> args: 0 body: 3 <test>:0:0
+       Expr id: 3 expr: 2 succ: 0 <test>:1:15
+               const id: 2 value: 3.141500 <test>:1:15
+       = <test>.pi (method) parent: <test>
index df66892b31584bf34854d2d248e68e6c87b029ef..4838410c36741d0e976f390aee9ced9872fb49a5 100644 (file)
@@ -2,13 +2,11 @@ func Int fac(const Int n):
 Int rc; if rc <= 1 then rc = 1 else rc = n*fac(n-1) fi
 rc endf
 = <test> (module) parent: global
-== Classes:
-== Variables:
-== Body:
-Method <NoneType> fac() id: 4 parent: 0 args: 3 body: 6 <test>:0:55
-       Expr id: 3 expr: 2 succ: 0 
-               varDef n id: 2 namedValue: 1 value: 0 succ: 0 <test>:1:23
-                       namedValue n id: 1 attr: 0x22 <test>:1:23
+== Methods:
+Method <NoneType> fac() id: 1 parent: <test> args: 4 body: 6 <test>:0:55
+       Expr id: 4 expr: 3 succ: 0 
+               varDef n id: 3 namedValue: 2 value: 0 succ: 0 <test>:1:23
+                       namedValue n id: 2 attr: 0x22 <test>:1:23
        varDef rc id: 6 namedValue: 5 value: 0 succ: 7 <test>:2:4
                namedValue rc id: 5 attr: 0x0 <test>:2:4
        If id: 7 condition: 9 then: 14 else: 24 succ: 26<test>:2:8
@@ -31,25 +29,9 @@ Method <NoneType> fac() id: 4 parent: 0 args: 3 body: 6 <test>:0:55
                                                                const id: 22 value: 1 <test>:2:49
        Expr id: 26 expr: 25 succ: 0 <test>:3:3
                namedValue rc id: 25 attr: 0x0 <test>:3:3
-varDef rc id: 6 namedValue: 5 value: 0 succ: 7 <test>:2:4
-       namedValue rc id: 5 attr: 0x0 <test>:2:4
-If id: 7 condition: 9 then: 14 else: 24 succ: 26<test>:2:8
-       BinOp id: 9 op: <= (23) left: 8 right: 10 <test>:2:14
-               namedValue rc id: 8 attr: 0x0 <test>:2:14
-               const id: 10 value: 1 <test>:2:17
-       Expr id: 14 expr: 12 succ: 0 <test>:2:27
-               BinOp id: 12 op: = (5) left: 11 right: 13 <test>:2:27
-                       namedValue rc id: 11 attr: 0x0 <test>:2:27
-                       const id: 13 value: 1 <test>:2:29
-       Expr id: 24 expr: 16 succ: 0 <test>:2:39
-               BinOp id: 16 op: = (5) left: 15 right: 18 <test>:2:39
-                       namedValue rc id: 15 attr: 0x0 <test>:2:39
-                       BinOp id: 18 op: * (30) left: 17 right: 19 <test>:2:42
-                               namedValue n id: 17 attr: 0x0 <test>:2:42
-                               call fac Id: 19 args: 23 parent: 0 succ: 0 <test>:2:46
-                                       arg 1 id: 23 expr: 21 succ: 0
-                                               BinOp id: 21 op: - (27) left: 20 right: 22 <test>:2:48
-                                                       namedValue n id: 20 attr: 0x0 <test>:2:48
-                                                       const id: 22 value: 1 <test>:2:49
-Expr id: 26 expr: 25 succ: 0 <test>:3:3
-       namedValue rc id: 25 attr: 0x0 <test>:3:3
+       = <test>.fac (method) parent: <test>
+       == Variables:
+       varDef n id: 3 namedValue: 2 value: 0 succ: 0 <test>:1:23
+               namedValue n id: 2 attr: 0x22 <test>:1:23
+       varDef rc id: 6 namedValue: 5 value: 0 succ: 7 <test>:2:4
+               namedValue rc id: 5 attr: 0x0 <test>:2:4
diff --git a/test/rplmfparser/meth3.txt b/test/rplmfparser/meth3.txt
new file mode 100644 (file)
index 0000000..74b57d8
--- /dev/null
@@ -0,0 +1,32 @@
+func Int max(Int a, Int b):
+ Int rc = a;
+if a < b then rc = b; fi
+rc
+endf
+func Int max(const Int a, Int b, Int c):
+max(a, max(b, c))
+endf
+= <test> (module) parent: global
+== Methods:
+Method <NoneType> max() id: 21 parent: <test> args: 24 body: 40 <test>:5:5
+       Expr id: 24 expr: 23 succ: 27 
+               varDef a id: 23 namedValue: 22 value: 0 succ: 0 <test>:6:23
+                       namedValue a id: 22 attr: 0x22 <test>:6:23
+       Expr id: 40 expr: 31 succ: 0 <test>:7:3
+               call max Id: 31 args: 33 parent: 0 succ: 0 <test>:7:3
+                       arg 1 id: 33 expr: 32 succ: 39
+                               namedValue a id: 32 attr: 0x0 <test>:7:5
+                       arg 2 id: 39 expr: 34 succ: 0
+                               call max Id: 34 args: 36 parent: 0 succ: 0 <test>:7:10
+                                       arg 1 id: 36 expr: 35 succ: 38
+                                               namedValue b id: 35 attr: 0x0 <test>:7:12
+                                       arg 2 id: 38 expr: 37 succ: 0
+                                               namedValue c id: 37 attr: 0x0 <test>:7:15
+       = <test>.max (method) parent: <test>
+       == Variables:
+       varDef a id: 23 namedValue: 22 value: 0 succ: 0 <test>:6:23
+               namedValue a id: 22 attr: 0x22 <test>:6:23
+       varDef b id: 26 namedValue: 25 value: 0 succ: 0 <test>:6:30
+               namedValue b id: 25 attr: 0x20 <test>:6:30
+       varDef c id: 29 namedValue: 28 value: 0 succ: 0 <test>:6:37
+               namedValue c id: 28 attr: 0x20 <test>:6:37
diff --git a/test/rplmfparser/meth4.txt b/test/rplmfparser/meth4.txt
new file mode 100644 (file)
index 0000000..1e0449a
--- /dev/null
@@ -0,0 +1,59 @@
+func Int max(const Int a, Int b, Int c):
+func Int max(Int a, Int b):
+ Int rc = a;
+if a < b then rc = b; fi
+rc
+endf
+max(a, max(b, c))
+endf
+= <test> (module) parent: global
+== Methods:
+Method <NoneType> max() id: 1 parent: <test> args: 4 body: 40 <test>:0:4
+       Expr id: 4 expr: 3 succ: 7 
+               varDef a id: 3 namedValue: 2 value: 0 succ: 0 <test>:1:23
+                       namedValue a id: 2 attr: 0x22 <test>:1:23
+       Expr id: 40 expr: 31 succ: 0 <test>:7:3
+               call max Id: 31 args: 33 parent: 0 succ: 0 <test>:7:3
+                       arg 1 id: 33 expr: 32 succ: 39
+                               namedValue a id: 32 attr: 0x0 <test>:7:5
+                       arg 2 id: 39 expr: 34 succ: 0
+                               call max Id: 34 args: 36 parent: 0 succ: 0 <test>:7:10
+                                       arg 1 id: 36 expr: 35 succ: 38
+                                               namedValue b id: 35 attr: 0x0 <test>:7:12
+                                       arg 2 id: 38 expr: 37 succ: 0
+                                               namedValue c id: 37 attr: 0x0 <test>:7:15
+       = <test>.max (method) parent: <test>
+       == Methods:
+       Method <NoneType> max() id: 11 parent: <test>.max args: 14 body: 19 <test>:1:41
+               Expr id: 14 expr: 13 succ: 17 
+                       varDef a id: 13 namedValue: 12 value: 0 succ: 0 <test>:2:17
+                               namedValue a id: 12 attr: 0x20 <test>:2:17
+               varDef rc id: 19 namedValue: 18 value: 20 succ: 21 <test>:3:5
+                       namedValue rc id: 18 attr: 0x0 <test>:3:5
+                       namedValue a id: 20 attr: 0x0 <test>:3:11
+               If id: 21 condition: 23 then: 28 else: 0 succ: 30<test>:3:13
+                       BinOp id: 23 op: < (21) left: 22 right: 24 <test>:4:5
+                               namedValue a id: 22 attr: 0x0 <test>:4:5
+                               namedValue b id: 24 attr: 0x0 <test>:4:9
+                       Expr id: 28 expr: 26 succ: 0 <test>:4:17
+                               BinOp id: 26 op: = (5) left: 25 right: 27 <test>:4:17
+                                       namedValue rc id: 25 attr: 0x0 <test>:4:17
+                                       namedValue b id: 27 attr: 0x0 <test>:4:20
+               Expr id: 30 expr: 29 succ: 0 <test>:5:3
+                       namedValue rc id: 29 attr: 0x0 <test>:5:3
+               = <test>.max.max (method) parent: <test>.max
+               == Variables:
+               varDef a id: 13 namedValue: 12 value: 0 succ: 0 <test>:2:17
+                       namedValue a id: 12 attr: 0x20 <test>:2:17
+               varDef b id: 16 namedValue: 15 value: 0 succ: 0 <test>:2:24
+                       namedValue b id: 15 attr: 0x20 <test>:2:24
+               varDef rc id: 19 namedValue: 18 value: 20 succ: 21 <test>:3:5
+                       namedValue rc id: 18 attr: 0x0 <test>:3:5
+                       namedValue a id: 20 attr: 0x0 <test>:3:11
+       == Variables:
+       varDef a id: 3 namedValue: 2 value: 0 succ: 0 <test>:1:23
+               namedValue a id: 2 attr: 0x22 <test>:1:23
+       varDef b id: 6 namedValue: 5 value: 0 succ: 0 <test>:1:30
+               namedValue b id: 5 attr: 0x20 <test>:1:30
+       varDef c id: 9 namedValue: 8 value: 0 succ: 0 <test>:1:37
+               namedValue c id: 8 attr: 0x20 <test>:1:37
index bd9866ae12f6aab0be0dd949e2e6b90595204f58..3ccf636a6470745d4f6ce0099a36fb8159e5125f 100644 (file)
@@ -2,8 +2,6 @@ rand();
 sin(a);
 max(1+2*3,4**(5-4));
 = <test> (module) parent: global
-== Classes:
-== Variables:
 == Body:
 Expr id: 2 expr: 1 succ: 6 <test>:1:4
        call rand Id: 1 args: 0 parent: 0 succ: 0 <test>:1:4
index 446622d51a817b97eb1b65fb1913fec3e4e7953a..ac8e160ee80d02311d3cce5c333fd1b71c84b861 100644 (file)
@@ -5,8 +5,13 @@ b++;
 a--*++b**(8-3);
 a=b=(a+(b-2)*3)
 = <test> (module) parent: global
-== Classes:
 == Variables:
+varDef a id: 2 namedValue: 1 value: 3 succ: 5 <test>:1:4
+       namedValue a id: 1 attr: 0x0 <test>:1:4
+       const id: 3 value: 1 <test>:1:8
+varDef b id: 5 namedValue: 4 value: 6 succ: 9 <test>:2:4
+       namedValue b id: 4 attr: 0x0 <test>:2:4
+       const id: 6 value: 100 <test>:2:8
 == Body:
 varDef a id: 2 namedValue: 1 value: 3 succ: 5 <test>:1:4
        namedValue a id: 1 attr: 0x0 <test>:1:4
index 93b5f5a438017fe379b15523713b7a1eeced2924..e2acdec93ed6c7a81fb052a3e85c26dc2804ff14 100644 (file)
@@ -3,8 +3,9 @@ repeat
 a++;
 until a != 2 * 3;
 = <test> (module) parent: global
-== Classes:
 == Variables:
+varDef a id: 2 namedValue: 1 value: 0 succ: 3 <test>:1:4
+       namedValue a id: 1 attr: 0x0 <test>:1:4
 == Body:
 varDef a id: 2 namedValue: 1 value: 0 succ: 3 <test>:1:4
        namedValue a id: 1 attr: 0x0 <test>:1:4
index 410991b1250f0a20f169ed586e7ba6b57b049932..ad6887d058a2b78fbe6601d876e95e762e16c528 100644 (file)
@@ -3,8 +3,10 @@ while 3 < 5 do
  a = 7
 od
 = <test> (module) parent: global
-== Classes:
 == Variables:
+varDef a id: 2 namedValue: 1 value: 3 succ: 4 <test>:1:4
+       namedValue a id: 1 attr: 0x0 <test>:1:4
+       const id: 3 value: 20 <test>:1:8
 == Body:
 varDef a id: 2 namedValue: 1 value: 3 succ: 4 <test>:1:4
        namedValue a id: 1 attr: 0x0 <test>:1:4
index 8b2424d839edf492171d49093997fb8d66f572bd..14f1174698c915f43b455ad14f0fcac26bb4449f 100644 (file)
@@ -155,6 +155,22 @@ public:
                   "rc endf");
         parser.parse();
         checkAST("meth2.txt", __LINE__);
+        setSource("func Int max(Int a, Int b):\n Int rc = a;\n"
+                  "if a < b then rc = b; fi\nrc\n"
+                  "endf\n"
+                  "func Int max(const Int a, Int b, Int c):\n"
+                  "max(a, max(b, c))\n"
+                  "endf");
+        parser.parse();
+        checkAST("meth3.txt", __LINE__);
+        setSource("func Int max(const Int a, Int b, Int c):\n"
+                  "func Int max(Int a, Int b):\n Int rc = a;\n"
+                  "if a < b then rc = b; fi\nrc\n"
+                  "endf\n"
+                  "max(a, max(b, c))\n"
+                  "endf");
+        parser.parse();
+        checkAST("meth4.txt", __LINE__);
     }
     virtual void doIt(void) {
         methodTest();