]> gitweb.hamatoma.de Git - reqt/commitdiff
dayly work
authorhama <hama@siduction.net>
Sun, 24 Aug 2014 10:59:32 +0000 (12:59 +0200)
committerhama <hama@siduction.net>
Sun, 24 Aug 2014 10:59:32 +0000 (12:59 +0200)
16 files changed:
bench/mk_bench.pl
rplcore/rplcharptrmap.cpp [new file with mode: 0644]
rplcore/rplcharptrmap.hpp [new file with mode: 0644]
rplcore/rplcore.hpp
rpldoc.zip
rplexpr/rplasclasses.cpp
rplexpr/rplastree.cpp
rplexpr/rpllexer.cpp
rplexpr/rpllexer.hpp
rplexpr/rplsource.cpp
rplexpr/rplsource.hpp
rplstatic/rplstatic.pro
unittests/main.cpp
unittests/rplcharptrmap_test.cpp [new file with mode: 0644]
unittests/rplvm_test.cpp
unittests/unittests.pro

index 666f0ddd551b6133f985b7de5117d7f1de11b437..7902cf2e550d3caaa1defd3d4fa78d91e39717b7 100644 (file)
@@ -10,7 +10,13 @@ my $loops = shift;
 $loops = 200 unless $loops;
 
 print "count: $count loops: $loops\n";
-if ($lang =~ /^py/i){
+if ($lang =~ /^all/i){
+       &pyAssign;
+       &cppAssign;
+       &javaAssign;
+       &plAssign;
+       &mfAssign;
+} elsif ($lang =~ /^py/i){
        &pyAssign;
 } elsif  ($lang =~ /^j/i){
        &javaAssign;
diff --git a/rplcore/rplcharptrmap.cpp b/rplcore/rplcharptrmap.cpp
new file mode 100644 (file)
index 0000000..bcaf414
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+ * Licence:
+ * You can use and modify this file without any restriction.
+ * There is no warranty.
+ * You also can use the licence from http://www.wtfpl.net/.
+ * The original sources can be found on https://github.com/republib.
+*/
+
+
+#include "rplcore/rplcore.hpp"
+
+/** @class RplKeyCharPtr rplcharptrmap.hpp "rplcore/rplcharptrmap.hpp"
+ *
+ * @brief Allows using <code>char*</code> pointers as key in <code>QMap</code>.
+ *
+ * The template <code>QMap</code> uses the operator < to search in the map.
+ * But the <code>char*</code> pointers have no such an operator.
+ * The solution is the class <code>RplMapCharPtr</code> which implements
+ * this operator.
+ *
+ * <code>strcmp()</code> is used to implement the '<' operator.
+ */
+
+/**
+ * @brief Constructor.
+ *
+ * @param ptr   the key used in the map.
+ */
+RplKeyCharPtr::RplKeyCharPtr(const char* ptr) :
+    m_ptr(ptr)
+{
+}
+
+
+/** @class RplCharPtrMap rplcharptrmap.hpp "rplcore/rplcharptrmap.hpp"
+ *
+ * @brief A template for a map using const char* as keys.
+ *
+ * The value type is dynamic (a parameter type of the template).
+ *
+ * <b>Usage:</b>
+ * <pre><code>
+ * RplCharPtrMap<int> ids;
+ * if (! id.contains("jonny"))
+ *    ids["jonny"] = 1;
+ * </code></pre>
+ *
+ * <b>Important</b>:<br>
+ * Keys used with this class must be unchangable and must live during the
+ * whole life of the map.
+ *
+ * <b>Wrong example:</b>
+ * <pre><code>
+ * RplCharPtrMap<int> ids;
+ * void init(int keyNo, int value){
+ *    char key[10];
+ *    qsnprintf(buffer, sizeof buffer, "key%d", keyNo);
+ *    ids[key] = value;
+ * }
+ * init(1, 100);
+ * </code></pre>
+ * The lifetime of the key is the body of the function <code>init()</code>.
+ * The key becomes invalid after the call.
+ */
diff --git a/rplcore/rplcharptrmap.hpp b/rplcore/rplcharptrmap.hpp
new file mode 100644 (file)
index 0000000..93df1c7
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ * Licence:
+ * You can use and modify this file without any restriction.
+ * There is no warranty.
+ * You also can use the licence from http://www.wtfpl.net/.
+ * The original sources can be found on https://github.com/republib.
+*/
+
+
+#ifndef RPLCHARPTRMAP_HPP
+#define RPLCHARPTRMAP_HPP
+
+class RplKeyCharPtr {
+    friend bool operator <(RplKeyCharPtr const& op1, RplKeyCharPtr const& op2);
+public:
+    RplKeyCharPtr(const char* ptr);
+private:
+    const char* m_ptr;
+};
+/**
+ * @brief Compares two instances of the class <code>RplKeyCharPtr</code>.
+ * @param op1   1st operand
+ * @param op2   2nd operand
+ * @return      true: op1 < op2<br>
+ *              false: op1 >= op2
+ */
+inline bool operator <(RplKeyCharPtr const& op1, RplKeyCharPtr const& op2){
+    bool rc = strcmp(op1.m_ptr, op2.m_ptr) < 0;
+    return rc;
+}
+
+template <class ValueType>
+class  RplCharPtrMap : public QMap<RplKeyCharPtr, ValueType>
+{
+};
+
+#endif // RPLCHARPTRMAP_HPP
index a09be09577407405a3b10a7ec398c7583db83c1f..8df4f75652c3fb5e3d52a5746abf01ba44b32f67 100644 (file)
@@ -35,6 +35,7 @@ typedef unsigned char uint8_t;
 
 #include "rplmodules.hpp"
 #include "rplcore/rplbytestorage.hpp"
+#include "rplcore/rplcharptrmap.hpp"
 #include "rplcore/rplwriter.hpp"
 #include "rplcore/rpllogger.hpp"
 #include "rplcore/rplexception.hpp"
index 340d79e69fe8774ccde6abc821f5d1bcf1e2027b..495819456539c53581619c6f84385a0fb07667f4 100644 (file)
Binary files a/rpldoc.zip and b/rpldoc.zip differ
index c234568c5eaf6b85399bcb1b807b27f22e9da395..aab59630e5ed6fc8279cfa6e1bd21f70de8a83fe 100644 (file)
@@ -124,7 +124,9 @@ void RplSymbolSpace::startScope(RplASScope& scope)
  *
  * Finishes the "live" of the variables created in the ending scope.
  *
- * @param scope     the status of the scope at start.
+ * @param endOfScope    line (inside the current source unit) which finishes the
+ *                      scope
+ * @param scope         the status of the scope at start.
  */
 void RplSymbolSpace::finishScope(int endOfScope, RplASScope& scope)
 {
index a34a0d3ed70a87b9094bc6f0233af377333084a1..df05d16af4f81bc5c69524011fc0181a708dc39a 100644 (file)
@@ -85,8 +85,10 @@ void RplASException::build(const RplSourcePosition* position,
                                  const char* format, va_list varList)
 {
     char buffer[64000];
-    if (position != NULL)
+    if (position != NULL){
         m_message = position->toString().toUtf8();
+        m_message += ": ";
+    }
     qvsnprintf(buffer, sizeof buffer, format, varList);
     m_message += buffer;
 }
@@ -874,6 +876,7 @@ RplASMapOfVariants* RplASMapConstant::map()
  *
  * @param dataType      the data type (class)
  * @param name          the name of the variable
+ * @param space         the current symbol space
  * @param attributes    the attributes of the variable
  */
 RplASNamedValue::RplASNamedValue(RplASClass* dataType,RplSymbolSpace* space,
index 7899fc8244afc89bdb3bdbba1f1d91e8909a5b08..f573ab51ac1c54a84f7bf81db031a36ae004f274 100644 (file)
@@ -1066,7 +1066,7 @@ RplToken* RplLexer::nextToken()
         char buffer[256];
         printf("token: %s pos: %s\n", m_currentToken->dump().constData(),
                m_currentPosition->utf8(buffer, sizeof buffer));
-        if (strcmp(buffer, "<test>:2:6") == 0)
+        if (strstr(buffer, "0:28") != NULL)
             buffer[0] = 0;
     }
 #endif
index 4fc0ce2d3840b476f003734b72946f1e2e1c65e5..232f6f9f0135e972285c1f98e588551a19268119 100644 (file)
@@ -10,6 +10,7 @@
 #ifndef RPLLEXER_HPP
 #define RPLLEXER_HPP
 
+//#define RPL_LEXER_TRACE
 
 enum RplTokenType {
     TOKEN_UNDEF,
@@ -186,9 +187,10 @@ public:
     bool isRightAssociative(int op) const;
     const RplSourcePosition* currentPosition() const;
     RplToken* currentToken() const;
+#if defined RPL_LEXER_TRACE
     bool trace() const;
     void setTrace(bool trace);
-
+#endif
 private:
     void prepareOperators(const char* operators, const char* rightAssociatives);
     void initializeComments(const char* comments);
@@ -236,7 +238,6 @@ protected:
     char m_prioOfOp[128];
     char m_assocOfOp[128];
     QList<QByteArray> m_opNames;
-//#define RPL_LEXER_TRACE
 #if defined (RPL_LEXER_TRACE)
     bool m_trace;
 #endif
index 3711899e5decea01c58cdd12cf968d79c09e88a7..576744f7504f3bc3169466c2086dd363edc058bb 100644 (file)
@@ -297,9 +297,11 @@ RplSourceUnit* RplReader::currentSourceUnit() const {
 /**
  * @brief Sets the current source unit.
  *
- * @param sourceUnit     the name of the new source unit
+ * @param sourceUnit    the name of the new source unit
+ * @return              true: source unit exists<br>
+ *                      false: source unit not found
  */
-bool RplReader::setCurrentSourceUnit(RplSourceUnitName sourceUnit) {
+bool RplReader::setCurrentSourceUnit(RplSourceUnitName& sourceUnit) {
     bool rc = m_units.contains(sourceUnit);
     if(rc) {
         m_currentSourceUnit = m_units.value(sourceUnit);
@@ -815,6 +817,8 @@ bool RplFileReader::nextLine(int maxSize, RplSourceUnitContent& buffer,
     if(! rc) {
         m_source.popSourceUnit(this);
     } else {
+        m_currentSourceUnit->setLineNo(m_currentSourceUnit->lineNo() + 1);
+        unit->m_currentPosition = 0;
         unit->m_line = unit->m_textStream.readLine();
         rc = fillBuffer(maxSize, buffer, hasMore);
     }
@@ -849,7 +853,7 @@ bool RplFileReader::fillBuffer(int maxSize, RplSourceUnitContent& buffer,
 /**
  * @brief Adds a source file to the reader
  *
- * @param dirEntry  the file
+ * @param filename  the file' name (relative or absolute)
  */
 void RplFileReader::addSource(RplSourceUnitName filename) {
     // Deleting in ~RplSourceUnit():
index f0f95a5fbee6ef23691ced5de924738d7ab8bd4d..61f4c47da0114788eedf5dbc6307a3185cf1d6e7 100644 (file)
@@ -108,7 +108,7 @@ public:
     virtual void clear();
     RplSource& source();
     RplSourceUnit* currentSourceUnit() const;
-    bool setCurrentSourceUnit(RplSourceUnitName currentSourceUnit);
+    bool setCurrentSourceUnit(RplSourceUnitName& currentSourceUnit);
 protected:
     void removeSourceUnit();
 
index 6936cccc8667fef5353ddc8a809188447f319445..2263c8d35789202876f3337583b07f5fa21ad3a3 100644 (file)
@@ -39,7 +39,8 @@ SOURCES += \
     ../rplexpr/rplvm.cpp \
     ../rplexpr/rplparser.cpp \
     ../rplcore/rplbytestorage.cpp \
-    ../rplcore/rplwriter.cpp
+    ../rplcore/rplwriter.cpp \
+    ../rplcore/rplcharptrmap.cpp
 
 HEADERS += ../rplmodules.hpp \
     ../rplcore/rplconfig.hpp \
@@ -70,7 +71,8 @@ HEADERS += ../rplmodules.hpp \
     ../rplexpr/rplvm.hpp \
     ../rplexpr/rplparser.hpp \
     ../rplcore/rplbytestorage.hpp \
-    ../rplcore/rplwriter.hpp
+    ../rplcore/rplwriter.hpp \
+    ../rplcore/rplcharptrmap.hpp
 
 unix:!symbian {
     maemo5 {
index f72f9d3efa91758ec7339b8f62f2e911e0620751..2cb655542a141ee8654e904731bc1e54ed0598ba 100644 (file)
@@ -11,6 +11,9 @@
 #include <QCoreApplication>
 
 void testCore(){
+    extern void testRplCharPtrMap();
+    testRplCharPtrMap();
+
     extern void testRplWriter();
     testRplWriter();
 
@@ -27,33 +30,37 @@ void testCore(){
 }
 
 void testExpr(){
+    extern void testRplSource();
+    testRplSource();
     extern void testRplBenchmark();
-    testRplBenchmark();
+    //testRplBenchmark();
 
     extern void testRplVM();
-    testRplVM();
+    //testRplVM();
 
     extern void testRplMFParser();
     testRplMFParser();
 
     extern void testRplASTree();
     testRplASTree();
-    extern void testRplSource();
-    testRplSource();
     extern void testRplLexer();
     testRplLexer();
 }
 
 void testStandard(){
-    testExpr();
+    //testExpr();
     testCore();
     extern void testRplMatrix();
     testRplMatrix();
 
 }
 
+void labor(){
+}
+
 int main(int argc, char *argv[])
 {
+    //labor();
     if (argc > 1)
         printf("not used: %s\n", argv[1]);
 
diff --git a/unittests/rplcharptrmap_test.cpp b/unittests/rplcharptrmap_test.cpp
new file mode 100644 (file)
index 0000000..3600efb
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * Licence:
+ * You can use and modify this file without any restriction.
+ * There is no warranty.
+ * You also can use the licence from http://www.wtfpl.net/.
+ * The original sources can be found on https://github.com/republib.
+*/
+
+#include "rplcore/rplcore.hpp"
+#include "rplcore/rpltest.hpp"
+
+class TestRplCharPtrMap : public RplTest{
+public:
+    TestRplCharPtrMap() :
+        RplTest("RplCharPtrMap")
+    {
+    }
+protected:
+    void testBasic(){
+        RplCharPtrMap<const char*> map;
+        map["x"] = "x1";
+        checkT(map.contains("x"));
+        checkF(map.contains("y"));
+        checkE("x1", map["x"]);
+    }
+
+    virtual void doIt(void) {
+        testBasic();
+    }
+};
+void testRplCharPtrMap() {
+    TestRplCharPtrMap test;
+    test.run();
+}
index 16767fac15f9fd5ef280cbb2f231f10e7663b756..8425c958a8fce9046508b07765382961bafd20c7 100644 (file)
@@ -57,7 +57,7 @@ private:
     }
 public:
     void baseTest(){
-        setSource("Int a=2+3*4");
+        setSource("Int a=2+3*4;");
         checkAST("baseTest.txt", __LINE__);
     }
     virtual void doIt(void) {
index 6728c2769a6666e0228ba3f594026a3c57a4d4b3..1dede45125a7afe466f3dfd9da596c46150b79cc 100644 (file)
@@ -43,5 +43,6 @@ SOURCES += main.cpp \
     rplvm_test.cpp \
     rplbytestorage_test.cpp \
     rplwriter_test.cpp \
-    rplbench.cpp
+    rplbench.cpp \
+    rplcharptrmap_test.cpp