Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(106)

Unified Diff: frog/leg/ssa/builder.dart

Issue 9699033: Introduce FieldParameterElement. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Fix typo. Created 8 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: frog/leg/ssa/builder.dart
diff --git a/frog/leg/ssa/builder.dart b/frog/leg/ssa/builder.dart
index bff34c72b9c5640db45444c9efd646e472c0e065..bd79bb89ca199480325affb71fe7667e7e7a6cfd 100644
--- a/frog/leg/ssa/builder.dart
+++ b/frog/leg/ssa/builder.dart
@@ -276,9 +276,15 @@ class LocalsHandler {
params.forEachParameter((Element element) {
HParameterValue parameter = new HParameterValue(element);
builder.add(parameter);
- // Note that for constructors [element] could be a field-element which we
- // treat as if it was a local.
directLocals[element] = parameter;
+ // If the [element] is a field-parameter (such as [:this.x:] then
+ // initialize the field element with its value.
+ // Note that in the constructor factory we treat fields as if they were
+ // locals.
ngeoffray 2012/03/15 10:06:01 It looks like you should have an if/else here: if
floitsch 2012/03/15 14:11:04 Done.
+ if (element.kind == ElementKind.FIELD_PARAMETER) {
+ FieldParameterElement fieldParameterElement = element;
+ directLocals[fieldParameterElement.fieldElement] = parameter;
+ }
});
if (closureData.thisElement !== null) {
// Once closures have been mapped to classes their instance members might
@@ -791,8 +797,14 @@ class SsaBuilder implements Visitor {
int index = 0;
FunctionParameters parameters =
nextConstructor.computeParameters(compiler);
- parameters.forEachParameter((parameter) {
- localsHandler.updateLocal(parameter, arguments[index++]);
+ parameters.forEachParameter((Element parameter) {
+ HInstruction argument = arguments[index++];
+ localsHandler.updateLocal(parameter, argument);
ngeoffray 2012/03/15 10:06:01 ditto for the if/else. The field parameter element
floitsch 2012/03/15 14:11:04 Done.
+ if (parameter.kind == ElementKind.FIELD_PARAMETER) {
+ FieldParameterElement fieldParameterElement = parameter;
+ localsHandler.updateLocal(fieldParameterElement.fieldElement,
+ argument);
+ }
});
} else {
// A field initializer.
@@ -821,6 +833,10 @@ class SsaBuilder implements Visitor {
HGraph buildFactory(ClassElement classElement,
FunctionElement functionElement) {
FunctionExpression function = functionElement.parseNode(compiler);
+ // Note that constructors (like any other static function) do not need
+ // to deal with optional arguments. It is the callers job to provide all
+ // arguments as if they were positional.
+
// The initializer list could contain closures.
openFunction(functionElement, function);

Powered by Google App Engine
This is Rietveld 408576698