- Revision
- 247341
- Author
- rmoris...@apple.com
- Date
- 2019-07-10 19:09:52 -0700 (Wed, 10 Jul 2019)
Log Message
[WHLSL] Optional<UniqueRef<T>> -> std::unique_ptr in Return/IfStatement/ForLoop
https://bugs.webkit.org/show_bug.cgi?id=199695
Reviewed by Dean Jackson.
Trivial patch that saves 8 bytes per Return/If, and 16 bytes per For loop.
No new tests as there is no intended functional change.
* Modules/webgpu/WHLSL/AST/WHLSLForLoop.h:
(WebCore::WHLSL::AST::ForLoop::ForLoop):
(WebCore::WHLSL::AST::ForLoop::condition):
(WebCore::WHLSL::AST::ForLoop::increment):
* Modules/webgpu/WHLSL/AST/WHLSLIfStatement.h:
(WebCore::WHLSL::AST::IfStatement::IfStatement):
(WebCore::WHLSL::AST::IfStatement::elseBody):
* Modules/webgpu/WHLSL/AST/WHLSLReturn.h:
(WebCore::WHLSL::AST::Return::Return):
(WebCore::WHLSL::AST::Return::value):
* Modules/webgpu/WHLSL/WHLSLParser.cpp:
(WebCore::WHLSL::Parser::parseIfStatement):
(WebCore::WHLSL::Parser::parseForLoop):
(WebCore::WHLSL::Parser::parseStatement):
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (247340 => 247341)
--- trunk/Source/WebCore/ChangeLog 2019-07-11 01:27:04 UTC (rev 247340)
+++ trunk/Source/WebCore/ChangeLog 2019-07-11 02:09:52 UTC (rev 247341)
@@ -1,5 +1,31 @@
2019-07-10 Robin Morisset <rmoris...@apple.com>
+ [WHLSL] Optional<UniqueRef<T>> -> std::unique_ptr in Return/IfStatement/ForLoop
+ https://bugs.webkit.org/show_bug.cgi?id=199695
+
+ Reviewed by Dean Jackson.
+
+ Trivial patch that saves 8 bytes per Return/If, and 16 bytes per For loop.
+
+ No new tests as there is no intended functional change.
+
+ * Modules/webgpu/WHLSL/AST/WHLSLForLoop.h:
+ (WebCore::WHLSL::AST::ForLoop::ForLoop):
+ (WebCore::WHLSL::AST::ForLoop::condition):
+ (WebCore::WHLSL::AST::ForLoop::increment):
+ * Modules/webgpu/WHLSL/AST/WHLSLIfStatement.h:
+ (WebCore::WHLSL::AST::IfStatement::IfStatement):
+ (WebCore::WHLSL::AST::IfStatement::elseBody):
+ * Modules/webgpu/WHLSL/AST/WHLSLReturn.h:
+ (WebCore::WHLSL::AST::Return::Return):
+ (WebCore::WHLSL::AST::Return::value):
+ * Modules/webgpu/WHLSL/WHLSLParser.cpp:
+ (WebCore::WHLSL::Parser::parseIfStatement):
+ (WebCore::WHLSL::Parser::parseForLoop):
+ (WebCore::WHLSL::Parser::parseStatement):
+
+2019-07-10 Robin Morisset <rmoris...@apple.com>
+
[WHLSL] The recursion checker should not have quadratic complexity
https://bugs.webkit.org/show_bug.cgi?id=199688
Modified: trunk/Source/WebCore/Modules/webgpu/WHLSL/AST/WHLSLForLoop.h (247340 => 247341)
--- trunk/Source/WebCore/Modules/webgpu/WHLSL/AST/WHLSLForLoop.h 2019-07-11 01:27:04 UTC (rev 247340)
+++ trunk/Source/WebCore/Modules/webgpu/WHLSL/AST/WHLSLForLoop.h 2019-07-11 02:09:52 UTC (rev 247341)
@@ -44,7 +44,7 @@
class ForLoop : public Statement {
public:
- ForLoop(CodeLocation location, Variant<UniqueRef<Statement>, UniqueRef<_expression_>>&& initialization, Optional<UniqueRef<_expression_>>&& condition, Optional<UniqueRef<_expression_>>&& increment, UniqueRef<Statement>&& body)
+ ForLoop(CodeLocation location, Variant<UniqueRef<Statement>, UniqueRef<_expression_>>&& initialization, std::unique_ptr<_expression_>&& condition, std::unique_ptr<_expression_>&& increment, UniqueRef<Statement>&& body)
: Statement(location)
, m_initialization(WTFMove(initialization))
, m_condition(WTFMove(condition))
@@ -63,14 +63,14 @@
bool isForLoop() const override { return true; }
Variant<UniqueRef<Statement>, UniqueRef<_expression_>>& initialization() { return m_initialization; }
- _expression_* condition() { return m_condition ? &*m_condition : nullptr; }
- _expression_* increment() { return m_increment ? &*m_increment : nullptr; }
+ _expression_* condition() { return m_condition.get(); }
+ _expression_* increment() { return m_increment.get(); }
Statement& body() { return m_body; }
private:
Variant<UniqueRef<Statement>, UniqueRef<_expression_>> m_initialization;
- Optional<UniqueRef<_expression_>> m_condition;
- Optional<UniqueRef<_expression_>> m_increment;
+ std::unique_ptr<_expression_> m_condition;
+ std::unique_ptr<_expression_> m_increment;
UniqueRef<Statement> m_body;
};
Modified: trunk/Source/WebCore/Modules/webgpu/WHLSL/AST/WHLSLIfStatement.h (247340 => 247341)
--- trunk/Source/WebCore/Modules/webgpu/WHLSL/AST/WHLSLIfStatement.h 2019-07-11 01:27:04 UTC (rev 247340)
+++ trunk/Source/WebCore/Modules/webgpu/WHLSL/AST/WHLSLIfStatement.h 2019-07-11 02:09:52 UTC (rev 247341)
@@ -41,7 +41,7 @@
class IfStatement : public Statement {
public:
- IfStatement(CodeLocation location, UniqueRef<_expression_>&& conditional, UniqueRef<Statement>&& body, Optional<UniqueRef<Statement>>&& elseBody)
+ IfStatement(CodeLocation location, UniqueRef<_expression_>&& conditional, UniqueRef<Statement>&& body, std::unique_ptr<Statement>&& elseBody)
: Statement(location)
, m_conditional(WTFMove(conditional))
, m_body(WTFMove(body))
@@ -58,12 +58,12 @@
_expression_& conditional() { return m_conditional; }
Statement& body() { return m_body; }
- Statement* elseBody() { return m_elseBody ? &*m_elseBody : nullptr; }
+ Statement* elseBody() { return m_elseBody.get(); }
private:
UniqueRef<_expression_> m_conditional;
UniqueRef<Statement> m_body;
- Optional<UniqueRef<Statement>> m_elseBody;
+ std::unique_ptr<Statement> m_elseBody;
};
} // namespace AST
Modified: trunk/Source/WebCore/Modules/webgpu/WHLSL/AST/WHLSLReturn.h (247340 => 247341)
--- trunk/Source/WebCore/Modules/webgpu/WHLSL/AST/WHLSLReturn.h 2019-07-11 01:27:04 UTC (rev 247340)
+++ trunk/Source/WebCore/Modules/webgpu/WHLSL/AST/WHLSLReturn.h 2019-07-11 02:09:52 UTC (rev 247341)
@@ -41,7 +41,7 @@
class Return : public Statement {
public:
- Return(CodeLocation location, Optional<UniqueRef<_expression_>>&& value)
+ Return(CodeLocation location, std::unique_ptr<_expression_>&& value)
: Statement(location)
, m_value(WTFMove(value))
{
@@ -54,13 +54,13 @@
bool isReturn() const override { return true; }
- _expression_* value() { return m_value ? &*m_value : nullptr; }
+ _expression_* value() { return m_value.get(); }
FunctionDefinition* function() { return m_function; }
void setFunction(FunctionDefinition* functionDefinition) { m_function = functionDefinition; }
private:
- Optional<UniqueRef<_expression_>> m_value;
+ std::unique_ptr<_expression_> m_value;
FunctionDefinition* m_function { nullptr };
};
Modified: trunk/Source/WebCore/Modules/webgpu/WHLSL/WHLSLParser.cpp (247340 => 247341)
--- trunk/Source/WebCore/Modules/webgpu/WHLSL/WHLSLParser.cpp 2019-07-11 01:27:04 UTC (rev 247340)
+++ trunk/Source/WebCore/Modules/webgpu/WHLSL/WHLSLParser.cpp 2019-07-11 02:09:52 UTC (rev 247341)
@@ -1080,10 +1080,10 @@
CONSUME_TYPE(rightParenthesis, RightParenthesis);
PARSE(body, Statement);
- Optional<UniqueRef<AST::Statement>> elseBody;
+ std::unique_ptr<AST::Statement> elseBody(nullptr);
if (tryType(Token::Type::Else)) {
PARSE(parsedElseBody, Statement);
- elseBody = WTFMove(*parsedElseBody);
+ elseBody = (*parsedElseBody).moveToUniquePtr();
}
auto endOffset = m_lexer.peek().startOffset();
@@ -1150,19 +1150,19 @@
auto parseRemainder = [&](Variant<UniqueRef<AST::Statement>, UniqueRef<AST::_expression_>>&& initialization) -> Expected<AST::ForLoop, Error> {
CONSUME_TYPE(semicolon, Semicolon);
- Optional<UniqueRef<AST::_expression_>> condition = WTF::nullopt;
+ std::unique_ptr<AST::_expression_> condition(nullptr);
if (!tryType(Token::Type::Semicolon)) {
if (auto _expression_ = parseExpression())
- condition = { WTFMove(*_expression_) };
+ condition = (*_expression_).moveToUniquePtr();
else
return Unexpected<Error>(_expression_.error());
CONSUME_TYPE(secondSemicolon, Semicolon);
}
- Optional<UniqueRef<AST::_expression_>> increment = WTF::nullopt;
+ std::unique_ptr<AST::_expression_> increment(nullptr);
if (!tryType(Token::Type::RightParenthesis)) {
if (auto _expression_ = parseExpression())
- increment = { WTFMove(*_expression_) };
+ increment = (*_expression_).moveToUniquePtr();
else
return Unexpected<Error>(_expression_.error());
CONSUME_TYPE(rightParenthesis, RightParenthesis);
@@ -1309,12 +1309,12 @@
case Token::Type::Return: {
auto returnToken = m_lexer.consumeToken();
if (auto semicolon = tryType(Token::Type::Semicolon)) {
- auto returnObject = AST::Return(WTFMove(returnToken), WTF::nullopt);
+ auto returnObject = AST::Return(WTFMove(returnToken), nullptr);
return { makeUniqueRef<AST::Return>(WTFMove(returnObject)) };
}
PARSE(_expression_, _expression_);
CONSUME_TYPE(finalSemicolon, Semicolon);
- auto returnObject = AST::Return(WTFMove(returnToken), { WTFMove(*_expression_) });
+ auto returnObject = AST::Return(WTFMove(returnToken), (*_expression_).moveToUniquePtr());
return { makeUniqueRef<AST::Return>(WTFMove(returnObject)) };
}
case Token::Type::Constant: