Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
tsoc
openmm
Commits
c3ba6917
Commit
c3ba6917
authored
Nov 19, 2009
by
Peter Eastman
Browse files
Fixed a memory leak
parent
2f81944d
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
19 additions
and
5 deletions
+19
-5
libraries/lepton/src/Parser.cpp
libraries/lepton/src/Parser.cpp
+19
-5
No files found.
libraries/lepton/src/Parser.cpp
View file @
c3ba6917
...
@@ -235,7 +235,14 @@ ExpressionTreeNode Parser::parsePrecedence(const vector<ParseToken>& tokens, int
...
@@ -235,7 +235,14 @@ ExpressionTreeNode Parser::parsePrecedence(const vector<ParseToken>& tokens, int
if
(
pos
==
tokens
.
size
()
||
tokens
[
pos
].
getType
()
!=
ParseToken
::
RightParen
)
if
(
pos
==
tokens
.
size
()
||
tokens
[
pos
].
getType
()
!=
ParseToken
::
RightParen
)
throw
Exception
(
"Parse error: unbalanced parentheses"
);
throw
Exception
(
"Parse error: unbalanced parentheses"
);
pos
++
;
pos
++
;
result
=
ExpressionTreeNode
(
getFunctionOperation
(
token
.
getText
(),
customFunctions
),
args
);
Operation
*
op
=
getFunctionOperation
(
token
.
getText
(),
customFunctions
);
try
{
result
=
ExpressionTreeNode
(
op
,
args
);
}
catch
(...)
{
delete
op
;
throw
;
}
}
}
else
if
(
token
.
getType
()
==
ParseToken
::
Operator
&&
token
.
getText
()
==
"-"
)
{
else
if
(
token
.
getType
()
==
ParseToken
::
Operator
&&
token
.
getText
()
==
"-"
)
{
pos
++
;
pos
++
;
...
@@ -249,13 +256,20 @@ ExpressionTreeNode Parser::parsePrecedence(const vector<ParseToken>& tokens, int
...
@@ -249,13 +256,20 @@ ExpressionTreeNode Parser::parsePrecedence(const vector<ParseToken>& tokens, int
while
(
pos
<
(
int
)
tokens
.
size
()
&&
tokens
[
pos
].
getType
()
==
ParseToken
::
Operator
)
{
while
(
pos
<
(
int
)
tokens
.
size
()
&&
tokens
[
pos
].
getType
()
==
ParseToken
::
Operator
)
{
token
=
tokens
[
pos
];
token
=
tokens
[
pos
];
int
op
=
Operators
.
find
(
token
.
getText
());
int
op
Index
=
Operators
.
find
(
token
.
getText
());
int
opPrecedence
=
Precedence
[
op
];
int
opPrecedence
=
Precedence
[
op
Index
];
if
(
opPrecedence
<
precedence
)
if
(
opPrecedence
<
precedence
)
return
result
;
return
result
;
pos
++
;
pos
++
;
ExpressionTreeNode
arg
=
parsePrecedence
(
tokens
,
pos
,
customFunctions
,
subexpressionDefs
,
LeftAssociative
[
op
]
?
opPrecedence
+
1
:
opPrecedence
);
ExpressionTreeNode
arg
=
parsePrecedence
(
tokens
,
pos
,
customFunctions
,
subexpressionDefs
,
LeftAssociative
[
opIndex
]
?
opPrecedence
+
1
:
opPrecedence
);
result
=
ExpressionTreeNode
(
getOperatorOperation
(
token
.
getText
()),
result
,
arg
);
Operation
*
op
=
getOperatorOperation
(
token
.
getText
());
try
{
result
=
ExpressionTreeNode
(
op
,
result
,
arg
);
}
catch
(...)
{
delete
op
;
throw
;
}
}
}
return
result
;
return
result
;
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment