* [Edbrowse-dev] [PATCH] Use the list class from the C++ STL, rather than C list macros.
@ 2014-01-30 15:14 Christopher Brannon
2014-01-30 15:59 ` Adam Thompson
0 siblings, 1 reply; 3+ messages in thread
From: Christopher Brannon @ 2014-01-30 15:14 UTC (permalink / raw)
To: edbrowse-dev
---
src/html.cpp | 90 ++++++++++++++++++++++++++++++++++--------------------------
src/makefile | 2 +-
2 files changed, 52 insertions(+), 40 deletions(-)
diff --git a/src/html.cpp b/src/html.cpp
index 31e8045..50613af 100644
--- a/src/html.cpp
+++ b/src/html.cpp
@@ -6,6 +6,10 @@
#include "eb.h"
#include "js.h"
+#include <iterator>
+#include <algorithm>
+#include <list>
+using namespace std;
/* Close an open anchor when you see this tag. */
#define TAG_CLOSEA 1
@@ -45,7 +49,9 @@ static const char *const inp_types[] = {
static const char dfvl[] = "defaultValue";
static const char dfck[] = "defaultChecked";
-static struct listHead htmlStack;
+static list < struct htmlTag *>htmlStack;
+typedef list < struct htmlTag *>::iterator tagListIterator;
+typedef list < struct htmlTag *>::reverse_iterator tagListBackIterator;
static struct htmlTag **tagArray, *topTag;
static int ntags; /* number of tags in this page */
static char *topAttrib;
@@ -63,8 +69,6 @@ static int preamble_l;
static void
buildTagArray(void)
{
- int j = 0;
- struct htmlTag *t;
if(!parsePage)
return;
if(tagArray)
@@ -73,9 +77,8 @@ buildTagArray(void)
(struct htmlTag **)allocMem(sizeof (struct htmlTag *) * ((ntags +
32) & ~31));
cw->tags = tagArray;
- foreach(t, htmlStack)
- tagArray[j++] = t;
- tagArray[j] = 0;
+ struct htmlTag **last = copy(htmlStack.begin(), htmlStack.end(), tagArray);
+ *last = 0;
} /* buildTagArray */
static eb_bool
@@ -232,7 +235,6 @@ static const struct tagInfo elements[] = {
};
struct htmlTag {
- struct htmlTag *next, *prev;
HeapRootedObject jv; /* corresponding java variable */
int seqno;
int ln; /* line number */
@@ -735,7 +737,7 @@ static void
makeButton(void)
{
struct htmlTag *t = (struct htmlTag *)allocZeroMem(sizeof (struct htmlTag));
- addToListBack(&htmlStack, t);
+ htmlStack.push_back(t);
t->seqno = ntags++;
t->info = elements + 2;
t->action = TAGACT_INPUT;
@@ -747,11 +749,12 @@ makeButton(void)
static char *
displayOptions(const struct htmlTag *sel)
{
- const struct htmlTag *t;
char *outstr;
int l;
outstr = initString(&l);
- foreach(t, htmlStack) {
+ for(tagListIterator iter = htmlStack.begin(); iter != htmlStack.end();
+ iter++) {
+ const struct htmlTag *t = *iter;
if(t->controller != sel)
continue;
if(!t->checked)
@@ -1009,7 +1012,9 @@ findOpenTag(const char *name)
eb_bool match;
const char *desc = topTag->info->desc;
- foreachback(t, htmlStack) {
+ for(tagListBackIterator r_iter = htmlStack.rbegin();
+ r_iter != htmlStack.rend(); r_iter++) {
+ t = *r_iter;
if(t == topTag)
continue; /* last one doesn't count */
if(t->balanced)
@@ -1058,7 +1063,7 @@ newTag(const char *name)
t->balanced = eb_true;
if(stringEqual(name, "a"))
t->clickable = eb_true;
- addToListBack(&htmlStack, t);
+ htmlStack.push_back(t);
return t;
} /* newTag */
@@ -1157,10 +1162,11 @@ encodeTags(char *html)
JS::RootedObject ev(cw->jss->jcx, NULL); /* generic event variable */
JS::RootedObject jwin(cw->jss->jcx, cw->jss->jwin);
JS::RootedObject jdoc(cw->jss->jcx, cw->jss->jdoc);
+ tagListBackIterator r_iter;
currentA = currentForm = currentSel = currentOpt = currentTitle =
currentTA = 0;
- initList(&htmlStack);
+ htmlStack.clear();
tagArray = 0;
newstr = initString(&l);
preamble = 0;
@@ -1282,7 +1288,7 @@ encodeTags(char *html)
continue; /* tag not recognized */
topTag = t = (struct htmlTag *)allocZeroMem(sizeof (struct htmlTag));
- addToListBack(&htmlStack, t);
+ htmlStack.push_back(t);
t->seqno = ntags;
sprintf(hnum, "%c%d", InternalCodeChar, ntags);
++ntags;
@@ -1526,7 +1532,9 @@ encodeTags(char *html)
case TAGACT_LI:
/* Look for the open UL or OL */
j = -1;
- foreachback(v, htmlStack) {
+ for(r_iter = htmlStack.rbegin(); r_iter != htmlStack.rend();
+ r_iter++) {
+ v = *r_iter;
if(v->balanced || !v->info->nest)
continue;
if(v->slash)
@@ -1554,16 +1562,18 @@ encodeTags(char *html)
continue;
case TAGACT_DT:
- foreachback(v, htmlStack) {
- if(v->balanced || !v->info->nest)
- continue;
- if(v->slash)
- continue; /* should never happen */
- s = v->info->name;
- if(stringEqual(s, "DL"))
- break;
- }
- if(v == (struct htmlTag *)&htmlStack)
+ for(r_iter = htmlStack.rbegin(); r_iter != htmlStack.rend();
+ r_iter++) {
+ v = *r_iter;
+ if(v->balanced || !v->info->nest)
+ continue;
+ if(v->slash)
+ continue; /* should never happen */
+ s = v->info->name;
+ if(stringEqual(s, "DL"))
+ break;
+ }
+ if(r_iter == htmlStack.rend())
browseError(MSG_NotInList, ti->desc);
goto nop;
@@ -1978,7 +1988,9 @@ encodeTags(char *html)
nzFree(html);
html = h = after;
/* After the realloc, the inner pointers are no longer valid. */
- foreach(z, htmlStack) z->inner = 0;
+ for(tagListIterator iter = htmlStack.begin();
+ iter != htmlStack.end(); iter++)
+ (*iter)->inner = 0;
} /* document.write */
}
}
@@ -2038,27 +2050,23 @@ encodeTags(char *html)
/* Run the various onload functions */
/* Turn the onunload functions into hyperlinks */
if(!cw->jsdead && !onload_done) {
- const struct htmlTag *lasttag;
onloadGo(jwin, 0, "window");
onloadGo(jdoc, 0, "document");
- lasttag = (const struct htmlTag *)htmlStack.prev;
- foreach(t, htmlStack) {
+ for(tagListIterator iter = htmlStack.begin(); iter != htmlStack.end();
+ iter++) {
+ t = *iter;
char *jsrc;
ev = t->jv;
/* in case the option has disappeared */
if(t->action == TAGACT_OPTION)
- goto next_onload;
+ continue;
if(!ev)
- goto next_onload;
+ continue;
if(t->slash)
- goto next_onload;
+ continue;
jsrc = htmlAttrVal(t->attrib, "onunload");
onloadGo(ev, jsrc, t->info->name);
nzFree(jsrc);
-
- next_onload:
- if(t == lasttag)
- break;
} /* loop over tags */
}
onload_done = eb_true;
@@ -2073,7 +2081,10 @@ encodeTags(char *html)
}
if(browseLocal == 1) { /* no errors yet */
- foreach(t, htmlStack) {
+ for(tagListIterator iter = htmlStack.begin(); iter != htmlStack.end();
+ iter++) {
+ tagListIterator iter2;
+ t = *iter;
browseLine = t->ln;
if(t->info->nest && !t->slash && !t->balanced) {
browseError(MSG_TagNotClosed, t->info->desc);
@@ -2091,7 +2102,8 @@ encodeTags(char *html)
if(h[1] == 0)
continue;
a = h + 1; /* this is what we're looking for */
- foreach(v, htmlStack) {
+ for(iter2 = htmlStack.begin(); iter2 != htmlStack.end(); iter2++) {
+ v = *iter2;
if(v->action != TAGACT_A)
continue; /* not achor */
if(!v->name)
@@ -2099,7 +2111,7 @@ encodeTags(char *html)
if(stringEqual(a, v->name))
break;
}
- if(v == (struct htmlTag *)&htmlStack) { /* end of list */
+ if(iter2 == htmlStack.end()) {
browseError(MSG_NoLable2, a);
break;
}
diff --git a/src/makefile b/src/makefile
index a8ac73e..4f7e6ee 100644
--- a/src/makefile
+++ b/src/makefile
@@ -14,7 +14,7 @@ bindir = $(prefix)/bin
JS_CXXFLAGS =-I/usr/include/mozjs
# we need to only use the js flags when building with c++, so use CXXFLAGS
-CXXFLAGS += -fpermissive $(JS_CXXFLAGS)
+CXXFLAGS += $(JS_CXXFLAGS)
# By default, we strip the executables.
# Override this behavior on the command line, by setting STRIP to the
--
1.8.3.2
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [Edbrowse-dev] [PATCH] Use the list class from the C++ STL, rather than C list macros.
2014-01-30 15:14 [Edbrowse-dev] [PATCH] Use the list class from the C++ STL, rather than C list macros Christopher Brannon
@ 2014-01-30 15:59 ` Adam Thompson
2014-01-30 16:13 ` Chris Brannon
0 siblings, 1 reply; 3+ messages in thread
From: Adam Thompson @ 2014-01-30 15:59 UTC (permalink / raw)
To: Christopher Brannon; +Cc: edbrowse-dev
Looks ok from an initial review, not built or tested though. Is this pushed?
Also, how do I tell my repo to track the master repo now rather than my fork?
I gather it's something to do with remotes but after that I run out of git
knowledge in this area.
Cheers,
Adam.
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [Edbrowse-dev] [PATCH] Use the list class from the C++ STL, rather than C list macros.
2014-01-30 15:59 ` Adam Thompson
@ 2014-01-30 16:13 ` Chris Brannon
0 siblings, 0 replies; 3+ messages in thread
From: Chris Brannon @ 2014-01-30 16:13 UTC (permalink / raw)
To: edbrowse-dev
Adam Thompson <arthompson1990@gmail.com> writes:
> Looks ok from an initial review, not built or tested though. Is this pushed?
No, it isn't pushed.
I wanted people to have a look before it is pushed.
> Also, how do I tell my repo to track the master repo now rather than my fork?
git remote set-url origin https://github.com/CMB/edbrowse.git
git remote set-url origin 'git@github.com:CMB/edbrowse.git
should do the trick.
If the master branch in your local repo is out of sync with the one on
CMB/edbrowse.git, you may also need to do something like:
git branch -D master
git branch master origin/master
git checkout master
But hopefully not.
git can be daunting. I still find it so at times, even though I've
been using it for about 6 years.
-- Chris
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2014-01-30 16:13 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-01-30 15:14 [Edbrowse-dev] [PATCH] Use the list class from the C++ STL, rather than C list macros Christopher Brannon
2014-01-30 15:59 ` Adam Thompson
2014-01-30 16:13 ` Chris Brannon
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 NNTP newsgroup(s).