/*
|
* Copyright 2016 Google Inc.
|
*
|
* Use of this source code is governed by a BSD-style license that can be
|
* found in the LICENSE file.
|
*/
|
|
#ifndef SKSL_ASTPARAMETER
|
#define SKSL_ASTPARAMETER
|
|
#include "SkSLASTPositionNode.h"
|
#include "SkSLASTType.h"
|
#include "../ir/SkSLModifiers.h"
|
|
namespace SkSL {
|
|
/**
|
* A declaration of a parameter, as part of a function declaration.
|
*/
|
struct ASTParameter : public ASTPositionNode {
|
// 'sizes' is a list of the array sizes appearing on a parameter, in source order.
|
// e.g. int x[3][1] would have sizes [3, 1].
|
ASTParameter(int offset, Modifiers modifiers, std::unique_ptr<ASTType> type,
|
StringFragment name, std::vector<int> sizes)
|
: INHERITED(offset)
|
, fModifiers(modifiers)
|
, fType(std::move(type))
|
, fName(name)
|
, fSizes(std::move(sizes)) {}
|
|
String description() const override {
|
String result = fModifiers.description() + fType->description() + " " + fName;
|
for (int size : fSizes) {
|
result += "[" + to_string(size) + "]";
|
}
|
return result;
|
}
|
|
const Modifiers fModifiers;
|
const std::unique_ptr<ASTType> fType;
|
const StringFragment fName;
|
const std::vector<int> fSizes;
|
|
typedef ASTPositionNode INHERITED;
|
};
|
|
} // namespace
|
|
#endif
|